diff --git a/overlay.nix b/overlay.nix index 6d2af14b..adc9f4d2 100644 --- a/overlay.nix +++ b/overlay.nix @@ -8,6 +8,9 @@ let bscPkgs = { amd-uprof = prev.callPackage ./pkgs/amd-uprof/default.nix { }; + aoccUnwrapped = callPackage ./pkgs/aocc/unwrapped.nix { }; + aocc = callPackage ./pkgs/aocc/default.nix { }; + stdenvAocc = final.overrideCC final.stdenv final.aocc; bench6 = callPackage ./pkgs/bench6/default.nix { }; bigotes = callPackage ./pkgs/bigotes/default.nix { }; clangOmpss2 = callPackage ./pkgs/llvm-ompss2/default.nix { }; diff --git a/pkgs/aocc/default.nix b/pkgs/aocc/default.nix new file mode 100644 index 00000000..bfb8d773 --- /dev/null +++ b/pkgs/aocc/default.nix @@ -0,0 +1,16 @@ +{ wrapCCWith +, aoccUnwrapped +}: + +let + cc = aoccUnwrapped; +in wrapCCWith { + inherit cc; + + extraBuildCommands = '' + echo "-isystem ${cc}/include" >> $out/nix-support/cc-cflags + + wrap aocc $wrapper $ccPath/clang + wrap aocc++ $wrapper $ccPath/clang++ + ''; +} diff --git a/pkgs/aocc/unwrapped.nix b/pkgs/aocc/unwrapped.nix new file mode 100644 index 00000000..6ca462db --- /dev/null +++ b/pkgs/aocc/unwrapped.nix @@ -0,0 +1,51 @@ +{ lib +, fetchurl +, stdenv +, autoPatchelfHook +, rocmPackages +, zlib +, libffi +, elfutils +}: + +let + # in newer nixpkgs the runtime is hsakmt + rocmRuntime = + if rocmPackages ? hsakmt then + rocmPackages.hsakmt + else + rocmPackages.rocm-runtime; +in +stdenv.mkDerivation { + pname = "aocc-compiler"; + version = "5.0.0"; + + src = fetchurl { + url = "https://download.amd.com/developer/eula/aocc/aocc-5-0/aocc-compiler-5.0.0.tar"; + sha256 = "sha256-lm+sLSx1np3m6WnBCtp6ezBsET9/HgfqN2gp7IY4Dao="; + }; + + nativeBuildInputs = [ autoPatchelfHook ]; + buildInputs = [ + elfutils + zlib + rocmRuntime + stdenv.cc.cc.lib + ]; + phases = [ "unpackPhase" "installPhase" "fixupPhase" ]; + dontStrip = true; + + installPhase = '' + mkdir -p $out + cp -a . $out/ + + ln -s ${lib.getLib libffi}/lib/libffi.so $out/lib/libffi.so.6 + ''; + + passthru = { + inherit rocmRuntime; + isClang = true; # Needed for wrapCCWith + }; + + meta.mainProgram = "clang"; +}