diff --git a/pkgs/by-name/ad/adaptivecpp/package.nix b/pkgs/by-name/ad/adaptivecpp/package.nix index 5fce15bd8372e6..fe112a6ffa8622 100644 --- a/pkgs/by-name/ad/adaptivecpp/package.nix +++ b/pkgs/by-name/ad/adaptivecpp/package.nix @@ -82,45 +82,77 @@ stdenv.mkDerivation (finalAttrs: { # adaptivecpp makes use of clangs internal headers. Its cmake does not successfully discover them automatically on nixos, so we supply the path manually cmakeFlags = [ - "-DCLANG_INCLUDE_PATH=${llvmPackages.libclang.dev}/include" + (lib.cmakeFeature "CLANG_INCLUDE_PATH" "${llvmPackages.libclang.dev}/include") (lib.cmakeBool "WITH_CPU_BACKEND" ompSupport) (lib.cmakeBool "WITH_CUDA_BACKEND" cudaSupport) (lib.cmakeBool "WITH_ROCM_BACKEND" rocmSupport) (lib.cmakeBool "WITH_OPENCL_BACKEND" openclSupport) ] ++ lib.optionals rocmSupport [ - "-DHIPCC_COMPILER=${finalAttrs.rocmMerged}/bin/hipcc" - "-DROCM_PATH=${finalAttrs.rocmMerged}" + (lib.cmakeFeature "HIPCC_COMPILER" "${finalAttrs.rocmMerged}/bin/hipcc") + (lib.cmakeFeature "ROCM_PATH" "${finalAttrs.rocmMerged}") ]; # this hardening option breaks rocm builds hardeningDisable = [ "zerocallusedregs" ]; passthru = { - # For tests - inherit (finalAttrs) nativeBuildInputs buildInputs; - tests = + # Loosely based on the AdaptiveCpp GitHub CI: https://github.com/AdaptiveCpp/AdaptiveCpp/blob/develop/.github/workflows/linux.yml + # This may be overkill, especially as this won't be run on GPU on the CI let - runner = callPackage ./tests.nix { }; + runner = targets: enablePstlTests: callPackage ./tests.nix { inherit enablePstlTests; }; run = - cmd: + runner: cmd: mask: runCommand cmd { } '' # the test runner wants to write to $HOME/.acpp, so we need to have it point to a real directory mkdir home export HOME=`pwd`/home - ${runner}/bin/${cmd} && touch $out + ACPP_VISIBILITY_MASK="${mask}" ${runner}/bin/${cmd} && touch $out ''; + runSycl = runner: mask: run runner "sycl_tests" mask; + runPstl = runner: mask: run runner "pstl_tests" mask; + runner-omp = runner "omp" false; + runner-sscp = runner "generic" true; in { - inherit runner; - sycl = run "sycl_tests"; - rt = run "rt_tests"; - deviceCompilation = run "device_compilation_tests"; - dump = run "dump_tests"; - platformApi = run "platform_api"; - }; + inherit runner-omp runner-sscp; + sycl-omp = runSycl runner-omp "omp"; + sycl-sscp = runSycl runner-sscp "omp"; + pstl-sscp = runPstl runner-sscp "omp"; + } + // lib.optionalAttrs rocmSupport ( + let + runner-rocm = runner "hip:gfx906" false; + runner-rocm-integrated-multipass = runner "omp;hip:gfx906" false; + runner-rocm-explicit-multipass = runner "omp;hip.explicit-multipass:gfx906;cuda:sm_61" false; + in + { + inherit runner-rocm runner-rocm-integrated-multipass runner-rocm-explicit-multipass; + sycl-rocm = runSycl runner-rocm "omp;hip"; + sycl-rocm-imp = runSycl runner-rocm-integrated-multipass "omp;hip"; + sycl-rocm-emp = runSycl runner-rocm-explicit-multipass "omp;hip"; + sycl-rocm-sscp = runSycl runner-sscp "omp;hip"; + pstl-rocm-sscp = runPstl runner-sscp "omp;hip"; + } + ) + // lib.optionalAttrs cudaSupport ( + let + runner-cuda = runner "cuda:sm_60" false; + runner-cuda-integrated-multipass = runner "omp;cuda_61" true; + runner-cuda-explicit-multipass = runner "omp;cuda.explicit-multipass:sm_61;hip:gfx906" false; + in + { + inherit runner-cuda runner-cuda-integrated-multipass runner-cuda-explicit-multipass; + sycl-cuda = runSycl runner-cuda "omp;cuda"; + sycl-cuda-imp = runSycl runner-cuda-integrated-multipass "omp;cuda"; + sycl-cuda-emp = runSycl runner-cuda-explicit-multipass "omp;cuda"; + sycl-cuda-sscp = runSycl runner-sscp "omp;cuda"; + pstl-cuda-imp = runPstl runner-cuda-integrated-multipass "omp;cuda"; + pstl-cuda-sscp = runPstl runner-sscp "omp;cuda"; + } + ); updateScript = nix-update-script { }; }; diff --git a/pkgs/by-name/ad/adaptivecpp/tests.nix b/pkgs/by-name/ad/adaptivecpp/tests.nix index c8a6afac8e759b..ff2052670de1a2 100644 --- a/pkgs/by-name/ad/adaptivecpp/tests.nix +++ b/pkgs/by-name/ad/adaptivecpp/tests.nix @@ -8,24 +8,32 @@ # The bulk of work in acpp focuses on the generic target, so we want to test that first and foremost. # Not setting an explicit target makes it default to the generic target. targets ? null, + enablePstlTests ? false, + tbb, + cmake, + boost, }: stdenv.mkDerivation (finalAttrs: { pname = "${adaptivecpp.pname}-tests"; inherit (adaptivecpp) version src - nativeBuildInputs - buildInputs + # nativeBuildInputs + # buildInputs ; + nativeBuildInputs = [ cmake tbb ]; + buildInputs = [ boost ]; + sourceRoot = "${adaptivecpp.src.name}/tests"; cmakeFlags = [ - "-DAdaptiveCpp_DIR=${adaptivecpp}/lib/cmake/AdaptiveCpp" + (lib.cmakeFeature "AdaptiveCpp_DIR" "${adaptivecpp}/lib/cmake/AdaptiveCpp") + (lib.cmakeBool "WITH_PSTL_TESTS" enablePstlTests) ] ++ lib.optionals (targets != null) [ - "-DACCP_TARGETS=\"${targets}\"" + (lib.cmakeFeature "DACCP_TARGETS" "${targets}") ]; doCheck = false; @@ -37,9 +45,7 @@ stdenv.mkDerivation (finalAttrs: { install -Dm755 device_compilation_tests -t $out/bin/ install -Dm755 dump_test/dump_test -t $out/bin/ install -Dm755 platform_api/platform_api -t $out/bin/ + '' + lib.optionalString enablePstlTests '' + install -Dm755 pstl_tests -t $out/bin/ ''; - - # currently fails to build - # see https://logs.ofborg.org/?key=nixos/nixpkgs.360893&attempt_id=3b1feb45-0b7d-4cf1-8e38-917afcc12c67 - meta.broken = stdenv.isDarwin; }) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 931cbd08c703b6..2ff17d3f94297c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5750,6 +5750,7 @@ with pkgs; semeru-bin = semeru-bin-21; semeru-jre-bin = semeru-jre-bin-21; + adaptivecppWithCuda = adaptivecpp.override { cudaSupport = true; }; adaptivecppWithRocm = adaptivecpp.override { rocmSupport = true; }; adoptopenjdk-icedtea-web = callPackage ../development/compilers/adoptopenjdk-icedtea-web {