diff --git a/pkgs/by-name/ez/eztrace/0001-otf2-backend-cross.patch b/pkgs/by-name/ez/eztrace/0001-otf2-backend-cross.patch new file mode 100644 index 000000000000..4b4dfc058204 --- /dev/null +++ b/pkgs/by-name/ez/eztrace/0001-otf2-backend-cross.patch @@ -0,0 +1,27 @@ +diff --git a/cmake_modules/FindOTF2.cmake b/cmake_modules/FindOTF2.cmake +index 2853f92a..af1f3225 100644 +--- a/cmake_modules/FindOTF2.cmake ++++ b/cmake_modules/FindOTF2.cmake +@@ -15,11 +15,11 @@ IF(NOT OTF2_CONFIG OR NOT EXISTS ${OTF2_CONFIG}) + ELSE() + message(STATUS "OTF2 installation found. (using ${OTF2_CONFIG})") + +- execute_process(COMMAND ${OTF2_CONFIG} "--cppflags" OUTPUT_VARIABLE OTF2_INCLUDE_PATH) ++ execute_process(COMMAND ${OTF2_CONFIG} "--cppflags" "--target" "backend" OUTPUT_VARIABLE OTF2_INCLUDE_PATH) + STRING(REPLACE "\n" "" OTF2_INCLUDE_PATH ${OTF2_INCLUDE_PATH}) + STRING(REPLACE "-I" "" OTF2_INCLUDE_PATH ${OTF2_INCLUDE_PATH}) + +- execute_process(COMMAND ${OTF2_CONFIG} "--ldflags" OUTPUT_VARIABLE _LINK_LD_ARGS) ++ execute_process(COMMAND ${OTF2_CONFIG} "--ldflags" "--target" "backend" OUTPUT_VARIABLE _LINK_LD_ARGS) + STRING( REPLACE " " ";" _LINK_LD_ARGS ${_LINK_LD_ARGS} ) + FOREACH( _ARG ${_LINK_LD_ARGS} ) + IF(${_ARG} MATCHES "^-L") +@@ -29,7 +29,7 @@ ELSE() + ENDIF(${_ARG} MATCHES "^-L") + ENDFOREACH(_ARG) + +- execute_process(COMMAND ${OTF2_CONFIG} "--libs" OUTPUT_VARIABLE _LINK_LD_ARGS) ++ execute_process(COMMAND ${OTF2_CONFIG} "--libs" "--target" "backend" OUTPUT_VARIABLE _LINK_LD_ARGS) + STRING( REPLACE " " ";" _LINK_LD_ARGS ${_LINK_LD_ARGS} ) + FOREACH( _ARG ${_LINK_LD_ARGS} ) + IF(${_ARG} MATCHES "^-l") diff --git a/pkgs/by-name/ez/eztrace/0002-absolute-cmake-install-paths.patch b/pkgs/by-name/ez/eztrace/0002-absolute-cmake-install-paths.patch new file mode 100644 index 000000000000..67e3ec25b71b --- /dev/null +++ b/pkgs/by-name/ez/eztrace/0002-absolute-cmake-install-paths.patch @@ -0,0 +1,23 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index b36a8a94..74c6de2e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -195,8 +195,16 @@ set(EZTRACE_LIB_DIR ${CMAKE_INSTALL_FULL_LIBDIR}) + #set(__PPTRACE_BINARY_TYPE "PPTRACE_BINARY_TYPE_BFD") + #set(abs_top_builddir ${CMAKE_BINARY_DIR}) + +-set(INSTALL_INCLUDEDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") +-set(INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") ++if(IS_ABSOLUTE ${CMAKE_INSTALL_INCLUDEDIR}) ++ set(INSTALL_INCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}") ++else() ++ set(INSTALL_INCLUDEDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") ++endif() ++if(IS_ABSOLUTE ${CMAKE_INSTALL_LIBDIR}) ++ set(INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}") ++else() ++ set(INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") ++endif() + set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig") + + # Subdirectory diff --git a/pkgs/by-name/ez/eztrace/package.nix b/pkgs/by-name/ez/eztrace/package.nix index 8a5b3dbeb91c..a55d917bfde2 100644 --- a/pkgs/by-name/ez/eztrace/package.nix +++ b/pkgs/by-name/ez/eztrace/package.nix @@ -2,43 +2,98 @@ lib, stdenv, fetchFromGitLab, + cmake, gfortran, libelf, libiberty, - zlib, - # Once https://gitlab.com/eztrace/eztrace/-/issues/41 - # is released we can switch to latest binutils. - libbfd_2_38, - libopcodes_2_38, - autoreconfHook, + libbfd, + libopcodes, + otf2, + versionCheckHook, }: -stdenv.mkDerivation rec { - pname = "EZTrace"; - version = "1.1-11"; +stdenv.mkDerivation (finalAttrs: { + pname = "eztrace"; + version = "2.1.1"; + + outputs = [ + "out" + "dev" + "lib" + "man" + ]; src = fetchFromGitLab { owner = "eztrace"; repo = "eztrace"; - rev = "eztrace-${version}"; - hash = "sha256-A6HMr4ib5Ka1lTbbTQOdq3kIdCoN/CwAKRdXdv9wpfU="; + tag = "${finalAttrs.version}"; + hash = "sha256-ccW4YjEf++tkdIJLze2x8B/SWbBBXnYt8UV9OH8+KGU="; }; - nativeBuildInputs = [ - gfortran - autoreconfHook + # Possibly upstream these patches. + patches = [ + ./0001-otf2-backend-cross.patch # To fix cross. + ./0002-absolute-cmake-install-paths.patch # To fix generated .pc file ]; + + postPatch = '' + substituteInPlace src/eztrace-lib/eztrace_otf2.c \ + --replace-fail "/bin/rm" "rm" + substituteInPlace cmake_modules/FindOTF2.cmake \ + --replace-fail "find_program(OTF2_CONFIG otf2-config REQUIRED)" \ + "find_program(OTF2_CONFIG "${lib.getExe' otf2 "otf2-config"}" REQUIRED)" \ + --replace-fail "find_program(OTF2_PRINT otf2-print REQUIRED)" \ + "find_program(OTF2_PRINT "${lib.getExe' otf2 "otf2-print"}" REQUIRED)" + # 2.1.1 incorrectly reports 2.1.0. TODO: Remove after next release + substituteInPlace CMakeLists.txt \ + --replace-fail "2.1.0" "${finalAttrs.version}" + patchShebangs test + ''; + + strictDeps = true; + + cmakeFlags = [ + (lib.cmakeBool "EZTRACE_ENABLE_MEMORY" true) + # This test is somewhat flaky and fails once per several rebuilds. + (lib.cmakeFeature "CMAKE_CTEST_ARGUMENTS" "--exclude-regex;memory_tests") + ]; + + nativeBuildInputs = [ + cmake + gfortran + ]; + buildInputs = [ libelf libiberty - zlib - libbfd_2_38 - libopcodes_2_38 + libbfd + libopcodes + otf2 ]; - meta = with lib; { + doCheck = true; + nativeCheckInputs = [ + otf2 # `otf2-print` needed by compiler_instrumentation_tests,pthread_tests,posixio_tests + ]; + + postInstall = '' + moveToOutput bin/eztrace_create_plugin "$dev" + ''; + + doInstallCheck = true; + nativeInstallCheckInputs = [ versionCheckHook ]; + + meta = { description = "Tool that aims at generating automatically execution trace from HPC programs"; - license = licenses.cecill-b; - maintainers = [ ]; + homepage = "https://eztrace.gitlab.io/eztrace/index.html"; + downloadPage = "https://gitlab.com/eztrace/eztrace/"; + license = lib.licenses.cecill-b; + maintainers = [ lib.maintainers.xokdvium ]; + mainProgram = "eztrace"; + badPlatforms = [ + # Undefined symbols for architecture x86_64: + # > "___cyg_profile_func_enter", referenced from: + lib.systems.inspect.patterns.isDarwin + ]; }; -} +}) diff --git a/pkgs/by-name/ot/otf2/package.nix b/pkgs/by-name/ot/otf2/package.nix index 385501c529f5..12593de5b110 100644 --- a/pkgs/by-name/ot/otf2/package.nix +++ b/pkgs/by-name/ot/otf2/package.nix @@ -2,6 +2,8 @@ lib, stdenv, fetchurl, + buildPackages, + which, versionCheckHook, }: @@ -9,18 +11,48 @@ stdenv.mkDerivation (finalAttrs: { pname = "otf2"; version = "3.1.1"; + outputs = [ + "out" + "lib" + "doc" + ]; + src = fetchurl { url = "http://perftools.pages.jsc.fz-juelich.de/cicd/otf2/tags/otf2-${finalAttrs.version}/otf2-${finalAttrs.version}.tar.gz"; hash = "sha256-Wk4BOlGsTteU/jXFW3AM1yA0b9p/M+yEx2uGpfuICm4="; }; - configureFlags = [ - "--enable-backend-test-runs" + postPatch = '' + substituteInPlace build-config/common/platforms/platform-backend-user-provided \ + --replace-fail 'CC=' 'CC=${stdenv.cc.targetPrefix}cc' \ + --replace-fail 'CXX=' 'CXX=${stdenv.cc.targetPrefix}c++' + substituteInPlace build-config/common/platforms/platform-frontend-user-provided \ + --replace-fail 'CC_FOR_BUILD=' 'CC_FOR_BUILD=${buildPackages.stdenv.cc.targetPrefix}cc' \ + --replace-fail 'CXX_FOR_BUILD=' 'CXX_FOR_BUILD=${buildPackages.stdenv.cc.targetPrefix}c++' + ''; + + strictDeps = true; + depsBuildBuild = [ buildPackages.stdenv.cc ]; + + configureFlags = + [ + (lib.enableFeature finalAttrs.finalPackage.doCheck "backend-test-runs") + (lib.withFeature true "custom-compilers") + ] + ++ lib.optionals (!lib.systems.equals stdenv.buildPlatform stdenv.hostPlatform) [ + "ac_scorep_cross_compiling=yes" + ]; + + nativeBuildInputs = [ + which # used in configure script ]; + enableParallelBuilding = true; + nativeInstallCheckInputs = [ versionCheckHook ]; doCheck = true; + enableParallelChecking = true; doInstallCheck = true; versionCheckProgram = [ "${placeholder "out"}/bin/otf2-config" ];