Skip to content

Commit

Permalink
adaptivecpp: refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
blenderfreaky committed Jan 12, 2025
1 parent 0e81ae0 commit 88445bc
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 24 deletions.
64 changes: 48 additions & 16 deletions pkgs/by-name/ad/adaptivecpp/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 { };
};
Expand Down
22 changes: 14 additions & 8 deletions pkgs/by-name/ad/adaptivecpp/tests.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
})
1 change: 1 addition & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit 88445bc

Please sign in to comment.