llvmPackages_rocm: compile as one derivation

This is the supported way rocm is tested.
It makes packaging in nix a *lot* easier (see the code size).

An important change is the dontLink detection in the clang/clang++
wrapper script: When compiling with --cuda-device-only,
the linker must not be set, otherwise e.g. the blender kernels fail to
compile.

+290 -285
+4 -7
pkgs/development/compilers/hip/default.nix
··· 1 { stdenv 2 , binutils-unwrapped 3 , clang 4 - , clang-unwrapped 5 , cmake 6 - , compiler-rt 7 , fetchFromGitHub 8 , fetchpatch 9 , file ··· 11 , libglvnd 12 , libX11 13 , libxml2 14 - , lld 15 , llvm 16 , makeWrapper 17 , numactl ··· 63 -e 's,^\($HIP_COMPILER=\).*$,\1"clang";,' \ 64 -e 's,^\($HIP_RUNTIME=\).*$,\1"ROCclr";,' \ 65 -e 's,^\([[:space:]]*$HSA_PATH=\).*$,\1"${rocm-runtime}";,'g \ 66 - -e 's,^\([[:space:]]*\)$HIP_CLANG_INCLUDE_PATH = abs_path("$HIP_CLANG_PATH/../lib/clang/$HIP_CLANG_VERSION/include");,\1$HIP_CLANG_INCLUDE_PATH = "${clang-unwrapped}/lib/clang/$HIP_CLANG_VERSION/include";,' \ 67 -e 's,^\([[:space:]]*$HIPCXXFLAGS .= " -isystem \\"$HIP_CLANG_INCLUDE_PATH/..\\"\)";,\1 -isystem ${rocm-runtime}/include";,' \ 68 -e 's,`file,`${file}/bin/file,g' \ 69 -e 's,`readelf,`${binutils-unwrapped}/bin/readelf,' \ 70 -e 's, ar , ${binutils-unwrapped}/bin/ar ,g' \ ··· 115 buildInputs = [ libxml2 numactl libglvnd libX11 ]; 116 propagatedBuildInputs = [ 117 clang 118 - compiler-rt 119 - lld 120 llvm 121 rocm-comgr 122 rocm-device-libs ··· 139 ]; 140 141 postInstall = '' 142 - wrapProgram $out/bin/hipcc --set HIP_PATH $out --set HSA_PATH ${rocm-runtime} --set HIP_CLANG_PATH ${clang}/bin --prefix PATH : ${lld}/bin --set NIX_CC_WRAPPER_TARGET_HOST_${stdenv.cc.suffixSalt} 1 --prefix NIX_LDFLAGS ' ' -L${compiler-rt}/lib --prefix NIX_LDFLAGS_FOR_TARGET ' ' -L${compiler-rt}/lib --add-flags "-nogpuinc" 143 wrapProgram $out/bin/hipconfig --set HIP_PATH $out --set HSA_PATH ${rocm-runtime} --set HIP_CLANG_PATH ${clang}/bin 144 ''; 145
··· 1 { stdenv 2 , binutils-unwrapped 3 , clang 4 , cmake 5 , fetchFromGitHub 6 , fetchpatch 7 , file ··· 9 , libglvnd 10 , libX11 11 , libxml2 12 , llvm 13 , makeWrapper 14 , numactl ··· 60 -e 's,^\($HIP_COMPILER=\).*$,\1"clang";,' \ 61 -e 's,^\($HIP_RUNTIME=\).*$,\1"ROCclr";,' \ 62 -e 's,^\([[:space:]]*$HSA_PATH=\).*$,\1"${rocm-runtime}";,'g \ 63 + -e 's,^\([[:space:]]*\)$HIP_CLANG_INCLUDE_PATH = abs_path("$HIP_CLANG_PATH/../lib/clang/$HIP_CLANG_VERSION/include");,\1$HIP_CLANG_INCLUDE_PATH = "${llvm}/lib/clang/$HIP_CLANG_VERSION/include";,' \ 64 -e 's,^\([[:space:]]*$HIPCXXFLAGS .= " -isystem \\"$HIP_CLANG_INCLUDE_PATH/..\\"\)";,\1 -isystem ${rocm-runtime}/include";,' \ 65 + -e 's,$HIP_CLANG_PATH/../lib/clang/$HIP_CLANG_VERSION,$HIP_CLANG_PATH/../resource-root,g' \ 66 -e 's,`file,`${file}/bin/file,g' \ 67 -e 's,`readelf,`${binutils-unwrapped}/bin/readelf,' \ 68 -e 's, ar , ${binutils-unwrapped}/bin/ar ,g' \ ··· 113 buildInputs = [ libxml2 numactl libglvnd libX11 ]; 114 propagatedBuildInputs = [ 115 clang 116 llvm 117 rocm-comgr 118 rocm-device-libs ··· 135 ]; 136 137 postInstall = '' 138 + patchShebangs $out/bin 139 + wrapProgram $out/bin/hipcc --set HIP_PATH $out --set HSA_PATH ${rocm-runtime} --set HIP_CLANG_PATH ${clang}/bin --prefix PATH : ${llvm}/bin --set ROCM_PATH $out 140 wrapProgram $out/bin/hipconfig --set HIP_PATH $out --set HSA_PATH ${rocm-runtime} --set HIP_CLANG_PATH ${clang}/bin 141 ''; 142
-72
pkgs/development/compilers/llvm/rocm/clang.nix
··· 1 - { stdenv 2 - , lib 3 - , fetchFromGitHub 4 - , cmake 5 - , python3 6 - , llvm 7 - , clang-tools-extra_src ? null 8 - , lld 9 - 10 - , version 11 - , src 12 - }: 13 - 14 - stdenv.mkDerivation rec { 15 - inherit version src; 16 - 17 - pname = "clang"; 18 - 19 - nativeBuildInputs = [ cmake python3 ]; 20 - 21 - buildInputs = [ llvm ]; 22 - 23 - hardeningDisable = [ "all" ]; 24 - 25 - cmakeFlags = [ 26 - "-DLLVM_CMAKE_PATH=${llvm}/lib/cmake/llvm" 27 - "-DLLVM_MAIN_SRC_DIR=${llvm.src}" 28 - "-DCLANG_SOURCE_DIR=${src}" 29 - "-DLLVM_ENABLE_RTTI=ON" 30 - ]; 31 - 32 - VCSVersion = '' 33 - #undef LLVM_REVISION 34 - #undef LLVM_REPOSITORY 35 - #undef CLANG_REVISION 36 - #undef CLANG_REPOSITORY 37 - ''; 38 - 39 - postUnpack = lib.optionalString (!(isNull clang-tools-extra_src)) '' 40 - ln -s ${clang-tools-extra_src} $sourceRoot/tools/extra 41 - ''; 42 - 43 - # Rather than let cmake extract version information from LLVM or 44 - # clang source control repositories, we generate the wanted 45 - # `VCSVersion.inc` file ourselves and remove it from the 46 - # depencencies of the `clangBasic` target. 47 - preConfigure = '' 48 - sed 's/ ''${version_inc}//' -i lib/Basic/CMakeLists.txt 49 - sed 's|sys::path::parent_path(BundlerExecutable)|StringRef("${llvm}/bin")|' -i tools/clang-offload-bundler/ClangOffloadBundler.cpp 50 - sed 's|\([[:space:]]*std::string Linker = \)getToolChain().GetProgramPath(getShortName())|\1"${lld}/bin/ld.lld"|' -i lib/Driver/ToolChains/AMDGPU.cpp 51 - substituteInPlace lib/Driver/ToolChains/AMDGPU.h --replace ld.lld ${lld}/bin/ld.lld 52 - sed 's|configure_file(AST/gen_ast_dump_json_test.py ''${LLVM_TOOLS_BINARY_DIR}/gen_ast_dump_json_test.py COPYONLY)||' -i test/CMakeLists.txt 53 - ''; 54 - 55 - postConfigure = '' 56 - mkdir -p lib/Basic 57 - echo "$VCSVersion" > lib/Basic/VCSVersion.inc 58 - ''; 59 - 60 - passthru = { 61 - isClang = true; 62 - inherit llvm; 63 - }; 64 - 65 - meta = with lib; { 66 - description = "ROCm fork of the clang C/C++/Objective-C/Objective-C++ LLVM compiler frontend"; 67 - homepage = "https://llvm.org/"; 68 - license = with licenses; [ ncsa ]; 69 - maintainers = with maintainers; [ acowley lovesegfault ]; 70 - platforms = platforms.linux; 71 - }; 72 - }
···
-64
pkgs/development/compilers/llvm/rocm/compiler-rt/default.nix
··· 1 - { stdenv, lib, version, src, cmake, python3, llvm, libcxxabi, fetchpatch }: 2 - stdenv.mkDerivation rec { 3 - pname = "compiler-rt"; 4 - inherit version src; 5 - 6 - nativeBuildInputs = [ cmake python3 llvm ]; 7 - 8 - NIX_CFLAGS_COMPILE = [ 9 - "-DSCUDO_DEFAULT_OPTIONS=DeleteSizeMismatch=0:DeallocationTypeMismatch=0" 10 - ]; 11 - 12 - cmakeFlags = [ 13 - "-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON" 14 - "-DCMAKE_C_COMPILER_TARGET=${stdenv.hostPlatform.config}" 15 - "-DCMAKE_ASM_COMPILER_TARGET=${stdenv.hostPlatform.config}" 16 - "-DCOMPILER_RT_BUILD_SANITIZERS=OFF" 17 - "-DCOMPILER_RT_BUILD_XRAY=OFF" 18 - "-DCOMPILER_RT_BUILD_LIBFUZZER=OFF" 19 - "-DCOMPILER_RT_BUILD_PROFILE=OFF" 20 - "-DCMAKE_C_COMPILER_WORKS=ON" 21 - "-DCMAKE_CXX_COMPILER_WORKS=ON" 22 - "-DCOMPILER_RT_BAREMETAL_BUILD=ON" 23 - "-DCMAKE_SIZEOF_VOID_P=${toString (stdenv.hostPlatform.parsed.cpu.bits / 8)}" 24 - "-DCOMPILER_RT_BUILD_BUILTINS=ON" 25 - "-DCMAKE_C_FLAGS=-nodefaultlibs" 26 - #https://stackoverflow.com/questions/53633705/cmake-the-c-compiler-is-not-able-to-compile-a-simple-test-program 27 - "-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY" 28 - ]; 29 - 30 - outputs = [ "out" "dev" ]; 31 - 32 - prePatch = '' 33 - cd compiler-rt 34 - ''; 35 - 36 - # TSAN requires XPC on Darwin, which we have no public/free source files for. We can depend on the Apple frameworks 37 - # to get it, but they're unfree. Since LLVM is rather central to the stdenv, we patch out TSAN support so that Hydra 38 - # can build this. If we didn't do it, basically the entire nixpkgs on Darwin would have an unfree dependency and we'd 39 - # get no binary cache for the entire platform. If you really find yourself wanting the TSAN, make this controllable by 40 - # a flag and turn the flag off during the stdenv build. 41 - postPatch = lib.optionalString (!stdenv.isDarwin) '' 42 - substituteInPlace cmake/builtin-config-ix.cmake \ 43 - --replace 'set(X86 i386)' 'set(X86 i386 i486 i586 i686)' 44 - ''; 45 - 46 - # Hack around weird upsream RPATH bug 47 - postInstall = '' 48 - ln -s "$out/lib"/*/* "$out/lib" 49 - ln -s $out/lib/*/clang_rt.crtbegin-*.o $out/lib/crtbegin.o 50 - ln -s $out/lib/*/clang_rt.crtend-*.o $out/lib/crtend.o 51 - ln -s $out/lib/*/clang_rt.crtbegin_shared-*.o $out/lib/crtbeginS.o 52 - ln -s $out/lib/*/clang_rt.crtend_shared-*.o $out/lib/crtendS.o 53 - ''; 54 - 55 - enableParallelBuilding = true; 56 - 57 - meta = with lib; { 58 - description = "ROCm fork of the LLVM Compiler runtime libraries"; 59 - homepage = "https://github.com/RadeonOpenCompute/llvm-project"; 60 - license = licenses.ncsa; 61 - maintainers = with maintainers; [ acowley lovesegfault ]; 62 - platforms = platforms.linux; 63 - }; 64 - }
···
+14 -21
pkgs/development/compilers/llvm/rocm/default.nix
··· 10 }; 11 in rec { 12 clang = wrapCCWith rec { 13 - cc = clang-unwrapped; 14 extraBuildCommands = '' 15 clang_version=`${cc}/bin/clang -v 2>&1 | grep "clang version " | grep -E -o "[0-9.-]+"` 16 rsrc="$out/resource-root" 17 mkdir "$rsrc" 18 ln -s "${cc}/lib/clang/$clang_version/include" "$rsrc" 19 - ln -s "${compiler-rt}/lib" "$rsrc/lib" 20 echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags 21 echo "--gcc-toolchain=${stdenv.cc.cc}" >> $out/nix-support/cc-cflags 22 - echo "-Wno-unused-command-line-argument" >> $out/nix-support/cc-cflags 23 rm $out/nix-support/add-hardening.sh 24 touch $out/nix-support/add-hardening.sh 25 ''; 26 }; 27 28 clangNoCompilerRt = wrapCCWith rec { 29 - cc = clang-unwrapped; 30 extraBuildCommands = '' 31 clang_version=`${cc}/bin/clang -v 2>&1 | grep "clang version " | grep -E -o "[0-9.-]+"` 32 rsrc="$out/resource-root" ··· 34 ln -s "${cc}/lib/clang/$clang_version/include" "$rsrc" 35 echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags 36 echo "--gcc-toolchain=${stdenv.cc.cc}" >> $out/nix-support/cc-cflags 37 - echo "-Wno-unused-command-line-argument" >> $out/nix-support/cc-cflags 38 rm $out/nix-support/add-hardening.sh 39 touch $out/nix-support/add-hardening.sh 40 ''; 41 }; 42 43 - clang-unwrapped = callPackage ./clang.nix { 44 - inherit lld llvm version; 45 - src = "${src}/clang"; 46 - }; 47 - 48 - compiler-rt = callPackage ./compiler-rt { 49 - inherit version llvm; 50 - inherit src; 51 - stdenv = overrideCC stdenv clangNoCompilerRt; 52 - }; 53 - 54 - lld = callPackage ./lld.nix { 55 - inherit llvm src version; 56 - }; 57 - 58 - llvm = callPackage ./llvm { 59 inherit src version; 60 }; 61 }
··· 10 }; 11 in rec { 12 clang = wrapCCWith rec { 13 + cc = llvm; 14 extraBuildCommands = '' 15 clang_version=`${cc}/bin/clang -v 2>&1 | grep "clang version " | grep -E -o "[0-9.-]+"` 16 rsrc="$out/resource-root" 17 mkdir "$rsrc" 18 ln -s "${cc}/lib/clang/$clang_version/include" "$rsrc" 19 + ln -s "${cc}/lib/clang/$clang_version/lib" "$rsrc/lib" 20 echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags 21 echo "--gcc-toolchain=${stdenv.cc.cc}" >> $out/nix-support/cc-cflags 22 rm $out/nix-support/add-hardening.sh 23 touch $out/nix-support/add-hardening.sh 24 + # GPU compilation uses builtin lld 25 + substituteInPlace $out/bin/clang \ 26 + --replace '-MM) dontLink=1 ;;' $'-MM | --cuda-device-only) dontLink=1 ;;\n--cuda-host-only | --cuda-compile-host-device) dontLink=0 ;;' 27 + substituteInPlace $out/bin/clang++ \ 28 + --replace '-MM) dontLink=1 ;;' $'-MM | --cuda-device-only) dontLink=1 ;;\n--cuda-host-only | --cuda-compile-host-device) dontLink=0 ;;' 29 ''; 30 }; 31 32 clangNoCompilerRt = wrapCCWith rec { 33 + cc = llvm; 34 extraBuildCommands = '' 35 clang_version=`${cc}/bin/clang -v 2>&1 | grep "clang version " | grep -E -o "[0-9.-]+"` 36 rsrc="$out/resource-root" ··· 38 ln -s "${cc}/lib/clang/$clang_version/include" "$rsrc" 39 echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags 40 echo "--gcc-toolchain=${stdenv.cc.cc}" >> $out/nix-support/cc-cflags 41 rm $out/nix-support/add-hardening.sh 42 touch $out/nix-support/add-hardening.sh 43 + # GPU compilation uses builtin lld 44 + substituteInPlace $out/bin/clang \ 45 + --replace '-MM) dontLink=1 ;;' $'-MM | --cuda-device-only) dontLink=1 ;;\n--cuda-host-only | --cuda-compile-host-device) dontLink=0 ;;' 46 + substituteInPlace $out/bin/clang++ \ 47 + --replace '-MM) dontLink=1 ;;' $'-MM | --cuda-device-only) dontLink=1 ;;\n--cuda-host-only | --cuda-compile-host-device) dontLink=0 ;;' 48 ''; 49 }; 50 51 + llvm = callPackage ./llvm.nix { 52 inherit src version; 53 }; 54 }
+23
pkgs/development/compilers/llvm/rocm/install-symlinks.patch
···
··· 1 + diff --git a/llvm/cmake/modules/LLVMInstallSymlink.cmake b/llvm/cmake/modules/LLVMInstallSymlink.cmake 2 + index b5c35f706cb7..ac25e40b1436 100644 3 + --- a/cmake/modules/LLVMInstallSymlink.cmake 4 + +++ b/cmake/modules/LLVMInstallSymlink.cmake 5 + @@ -4,11 +4,16 @@ 6 + 7 + include(GNUInstallDirs) 8 + 9 + +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../../../cmake/Modules" ${CMAKE_MODULE_PATH}) 10 + +include(ExtendPath) 11 + + 12 + function(install_symlink name target outdir) 13 + set(DESTDIR $ENV{DESTDIR}) 14 + - set(bindir "${DESTDIR}${CMAKE_INSTALL_PREFIX}/${outdir}") 15 + + message(STATUS "Creating ${name} at ${bindir} (${CMAKE_MODULE_PATH})") 16 + + extend_path(prefixed_outdir "${CMAKE_INSTALL_PREFIX}" "${outdir}") 17 + + set(bindir "${DESTDIR}${prefixed_outdir}") 18 + 19 + - message(STATUS "Creating ${name}") 20 + + message(STATUS "Creating ${name} at ${bindir}") 21 + 22 + execute_process( 23 + COMMAND "${CMAKE_COMMAND}" -E create_symlink "${target}" "${name}"
-43
pkgs/development/compilers/llvm/rocm/lld.nix
··· 1 - { stdenv 2 - , lib 3 - , cmake 4 - , libxml2 5 - , llvm 6 - , ninja 7 - 8 - , version 9 - , src 10 - }: 11 - 12 - stdenv.mkDerivation rec { 13 - inherit version src; 14 - 15 - sourceRoot = "${src.name}/lld"; 16 - 17 - pname = "lld"; 18 - 19 - nativeBuildInputs = [ cmake ninja ]; 20 - 21 - buildInputs = [ libxml2 llvm ]; 22 - 23 - outputs = [ "out" "dev" ]; 24 - 25 - cmakeFlags = [ "-DLLVM_MAIN_SRC_DIR=${src}/llvm" ]; 26 - 27 - postInstall = '' 28 - moveToOutput include "$dev" 29 - moveToOutput lib "$dev" 30 - 31 - # Fix lld binary path for CMake. 32 - substituteInPlace "$dev/lib/cmake/lld/LLDTargets-release.cmake" \ 33 - --replace "\''${_IMPORT_PREFIX}/bin/lld" "$out/bin/lld" 34 - ''; 35 - 36 - meta = with lib; { 37 - description = "ROCm fork of the LLVM Linker"; 38 - homepage = "https://github.com/RadeonOpenCompute/llvm-project"; 39 - license = licenses.ncsa; 40 - maintainers = with maintainers; [ acowley lovesegfault ]; 41 - platforms = platforms.linux; 42 - }; 43 - }
···
+12 -43
pkgs/development/compilers/llvm/rocm/llvm/default.nix pkgs/development/compilers/llvm/rocm/llvm.nix
··· 1 { stdenv 2 , lib 3 , fetchFromGitHub 4 , writeScript 5 , cmake ··· 12 , zlib 13 , debugVersion ? false 14 , enableManpages ? false 15 - , enableSharedLibraries ? false 16 17 , version 18 , src ··· 30 31 sourceRoot = "${src.name}/llvm"; 32 33 - outputs = [ "out" "python" ] 34 - ++ lib.optional enableSharedLibraries "lib"; 35 - 36 nativeBuildInputs = [ cmake ninja python3 ]; 37 38 - buildInputs = [ libxml2 libffi ]; 39 40 propagatedBuildInputs = [ ncurses zlib ]; 41 42 cmakeFlags = with stdenv; [ 43 "-DCMAKE_BUILD_TYPE=${if debugVersion then "Debug" else "Release"}" 44 "-DLLVM_INSTALL_UTILS=ON" # Needed by rustc 45 - "-DLLVM_BUILD_TESTS=OFF" 46 - "-DLLVM_ENABLE_FFI=ON" 47 - "-DLLVM_ENABLE_RTTI=ON" 48 - "-DLLVM_ENABLE_DUMP=ON" 49 "-DLLVM_TARGETS_TO_BUILD=AMDGPU;${llvmNativeTarget}" 50 ] 51 - ++ 52 - lib.optional 53 - enableSharedLibraries 54 - "-DLLVM_LINK_LLVM_DYLIB=ON" 55 ++ lib.optionals enableManpages [ 56 "-DLLVM_BINUTILS_INCDIR=${libbfd.dev}/include" 57 "-DLLVM_BUILD_DOCS=ON" ··· 61 "-DSPHINX_WARNINGS_AS_ERRORS=OFF" 62 ]; 63 64 postPatch = '' 65 patchShebangs lib/OffloadArch/make_generated_offload_arch_h.sh 66 - '' + lib.optionalString enableSharedLibraries '' 67 - substitute '${./outputs.patch}' ./outputs.patch --subst-var lib 68 - patch -p1 < ./outputs.patch 69 ''; 70 71 - # hacky fix: created binaries need to be run before installation 72 - preBuild = '' 73 - mkdir -p $out/ 74 - ln -sv $PWD/lib $out 75 - ''; 76 - 77 - postBuild = '' 78 - rm -fR $out 79 - ''; 80 - 81 - preCheck = '' 82 - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}$PWD/lib 83 - ''; 84 - 85 - postInstall = '' 86 - moveToOutput share/opt-viewer "$python" 87 - '' 88 - + lib.optionalString enableSharedLibraries '' 89 - moveToOutput "lib/libLLVM-*" "$lib" 90 - moveToOutput "lib/libLLVM${stdenv.hostPlatform.extensions.sharedLibrary}" "$lib" 91 - substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \ 92 - --replace "\''${_IMPORT_PREFIX}/lib/libLLVM-" "$lib/lib/libLLVM-" 93 - ''; 94 - 95 - passthru.src = src; 96 - 97 updateScript = writeScript "update.sh" '' 98 #!/usr/bin/env nix-shell 99 #!nix-shell -i bash -p curl jq common-updater-scripts nix-prefetch-github ··· 111 fi 112 ''; 113 114 meta = with lib; { 115 description = "ROCm fork of the LLVM compiler infrastructure"; 116 homepage = "https://github.com/RadeonOpenCompute/llvm-project"; 117 license = with licenses; [ ncsa ]; 118 - maintainers = with maintainers; [ acowley lovesegfault ]; 119 platforms = platforms.linux; 120 }; 121 }
··· 1 { stdenv 2 , lib 3 + , fetchgit 4 , fetchFromGitHub 5 , writeScript 6 , cmake ··· 13 , zlib 14 , debugVersion ? false 15 , enableManpages ? false 16 17 , version 18 , src ··· 30 31 sourceRoot = "${src.name}/llvm"; 32 33 nativeBuildInputs = [ cmake ninja python3 ]; 34 35 + buildInputs = [ libxml2 ]; 36 37 propagatedBuildInputs = [ ncurses zlib ]; 38 39 cmakeFlags = with stdenv; [ 40 "-DCMAKE_BUILD_TYPE=${if debugVersion then "Debug" else "Release"}" 41 "-DLLVM_INSTALL_UTILS=ON" # Needed by rustc 42 "-DLLVM_TARGETS_TO_BUILD=AMDGPU;${llvmNativeTarget}" 43 + "-DLLVM_ENABLE_PROJECTS=clang;lld;compiler-rt" 44 ] 45 ++ lib.optionals enableManpages [ 46 "-DLLVM_BINUTILS_INCDIR=${libbfd.dev}/include" 47 "-DLLVM_BUILD_DOCS=ON" ··· 51 "-DSPHINX_WARNINGS_AS_ERRORS=OFF" 52 ]; 53 54 + patches = [ 55 + ./install-symlinks.patch 56 + ]; 57 + 58 postPatch = '' 59 patchShebangs lib/OffloadArch/make_generated_offload_arch_h.sh 60 + substituteInPlace ../clang/cmake/modules/CMakeLists.txt \ 61 + --replace 'FILES_MATCHING' 'NO_SOURCE_PERMISSIONS FILES_MATCHING' 62 ''; 63 64 updateScript = writeScript "update.sh" '' 65 #!/usr/bin/env nix-shell 66 #!nix-shell -i bash -p curl jq common-updater-scripts nix-prefetch-github ··· 78 fi 79 ''; 80 81 + passthru.isClang = true; 82 + 83 meta = with lib; { 84 description = "ROCm fork of the LLVM compiler infrastructure"; 85 homepage = "https://github.com/RadeonOpenCompute/llvm-project"; 86 license = with licenses; [ ncsa ]; 87 + maintainers = with maintainers; [ acowley lovesegfault Flakebi ]; 88 platforms = platforms.linux; 89 }; 90 }
-16
pkgs/development/compilers/llvm/rocm/llvm/outputs.patch
··· 1 - diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp 2 - index 94d426b..37f7794 100644 3 - --- a/tools/llvm-config/llvm-config.cpp 4 - +++ b/tools/llvm-config/llvm-config.cpp 5 - @@ -333,6 +333,11 @@ int main(int argc, char **argv) { 6 - ActiveIncludeOption = "-I" + ActiveIncludeDir; 7 - } 8 - 9 - + /// Nix-specific multiple-output handling: override ActiveLibDir 10 - + if (!IsInDevelopmentTree) { 11 - + ActiveLibDir = std::string("@lib@") + "/lib" + LLVM_LIBDIR_SUFFIX; 12 - + } 13 - + 14 - /// We only use `shared library` mode in cases where the static library form 15 - /// of the components provided are not available; note however that this is 16 - /// skipped if we're run from within the build dir. However, once installed,
···
+224
pkgs/development/libraries/rocm-comgr/cmake.patch
···
··· 1 + diff --git a/CMakeLists.txt b/CMakeLists.txt 2 + index eac270a..27610ec 100644 3 + --- a/CMakeLists.txt 4 + +++ b/CMakeLists.txt 5 + @@ -53,10 +53,6 @@ set(SOURCES 6 + 7 + if(COMGR_BUILD_SHARED_LIBS) 8 + add_library(amd_comgr SHARED ${SOURCES}) 9 + - # Windows doesn't have a strip utility, so CMAKE_STRIP won't be set. 10 + - if((CMAKE_BUILD_TYPE STREQUAL "Release") AND NOT ("${CMAKE_STRIP}" STREQUAL "")) 11 + - add_custom_command(TARGET amd_comgr POST_BUILD COMMAND ${CMAKE_STRIP} $<TARGET_FILE:amd_comgr>) 12 + - endif() 13 + else() 14 + add_library(amd_comgr STATIC ${SOURCES}) 15 + endif() 16 + @@ -141,8 +137,8 @@ if (UNIX) 17 + list(APPEND AMD_COMGR_PUBLIC_LINKER_OPTIONS -pthread) 18 + if (NOT APPLE AND COMGR_BUILD_SHARED_LIBS) 19 + configure_file( 20 + - ${CMAKE_CURRENT_SOURCE_DIR}/src/exportmap.in 21 + - ${CMAKE_CURRENT_BINARY_DIR}/src/exportmap @ONLY) 22 + + src/exportmap.in 23 + + src/exportmap @ONLY) 24 + list(APPEND AMD_COMGR_PRIVATE_LINKER_OPTIONS 25 + "-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/src/exportmap") 26 + # When building a shared library with -fsanitize=address we can't be 27 + @@ -154,6 +150,9 @@ if (UNIX) 28 + -Wl,--no-undefined) 29 + endif() 30 + endif() 31 + + 32 + + # Strip in release build 33 + + set_target_properties(amd_comgr PROPERTIES LINK_FLAGS_RELEASE -s) 34 + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") 35 + list(APPEND AMD_COMGR_PRIVATE_COMPILE_OPTIONS 36 + "/wd4244" #[[Suppress 'argument' : conversion from 'type1' to 'type2', possible loss of data]] 37 + @@ -169,10 +168,6 @@ endif() 38 + # the shared header. 39 + list(APPEND AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS AMD_COMGR_EXPORT) 40 + 41 + -configure_file( 42 + - ${CMAKE_CURRENT_SOURCE_DIR}/include/amd_comgr.h.in 43 + - ${CMAKE_CURRENT_BINARY_DIR}/include/amd_comgr.h @ONLY) 44 + - 45 + include(bc2h) 46 + include(opencl_pch) 47 + include(DeviceLibs) 48 + @@ -203,8 +198,11 @@ target_compile_definitions(amd_comgr 49 + PRIVATE "${AMD_COMGR_PRIVATE_COMPILE_DEFINITIONS}") 50 + target_include_directories(amd_comgr 51 + PUBLIC 52 + - $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include> 53 + - $<INSTALL_INTERFACE:include>) 54 + + $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>) 55 + + 56 + +configure_file( 57 + + include/amd_comgr.h.in 58 + + include/amd_comgr.h @ONLY) 59 + 60 + set(AMD_COMGR_CONFIG_NAME amd_comgr-config.cmake) 61 + set(AMD_COMGR_TARGETS_NAME amd_comgr-targets.cmake) 62 + @@ -220,29 +218,30 @@ if (NOT COMGR_BUILD_SHARED_LIBS) 63 + endif() 64 + 65 + set(AMD_COMGR_TARGETS_PATH 66 + - "${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}") 67 + -set(AMD_COMGR_VERSION_PATH 68 + - "${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_VERSION_NAME}") 69 + -export(TARGETS amd_comgr 70 + - FILE "${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}") 71 + + "${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}") 72 + configure_file("cmake/${AMD_COMGR_CONFIG_NAME}.in" 73 + - "${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_CONFIG_NAME}" 74 + + ${AMD_COMGR_CONFIG_NAME} 75 + @ONLY) 76 + -write_basic_package_version_file("${AMD_COMGR_VERSION_PATH}" 77 + +write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_VERSION_NAME}" 78 + VERSION "${amd_comgr_VERSION}" 79 + COMPATIBILITY SameMajorVersion) 80 + 81 + install(TARGETS amd_comgr 82 + EXPORT amd_comgr_export 83 + - COMPONENT amd-comgr 84 + - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 85 + - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 86 + - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) 87 + + COMPONENT amd-comgr) 88 + +install(EXPORT amd_comgr_export 89 + + DESTINATION "${AMD_COMGR_PACKAGE_PREFIX}" 90 + + FILE "${AMD_COMGR_TARGETS_NAME}") 91 + 92 + install(FILES 93 + "${CMAKE_CURRENT_BINARY_DIR}/include/amd_comgr.h" 94 + COMPONENT amd-comgr 95 + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 96 + +install(FILES 97 + + "${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_CONFIG_NAME}" 98 + + "${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_VERSION_NAME}" 99 + + COMPONENT amd-comgr 100 + + DESTINATION ${AMD_COMGR_PACKAGE_PREFIX}) 101 + 102 + install(FILES 103 + "README.md" 104 + @@ -251,37 +250,6 @@ install(FILES 105 + COMPONENT amd-comgr 106 + DESTINATION ${CMAKE_INSTALL_DATADIR}/amd_comgr) 107 + 108 + -# Generate the install-tree package. 109 + -set(AMD_COMGR_PREFIX_CODE " 110 + -# Derive absolute install prefix from config file path. 111 + -get_filename_component(AMD_COMGR_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)") 112 + -string(REGEX REPLACE "/" ";" count "${AMD_COMGR_PACKAGE_PREFIX}") 113 + -foreach(p ${count}) 114 + - set(AMD_COMGR_PREFIX_CODE "${AMD_COMGR_PREFIX_CODE} 115 + -get_filename_component(AMD_COMGR_PREFIX \"\${AMD_COMGR_PREFIX}\" PATH)") 116 + -endforeach() 117 + - 118 + -if (NOT COMGR_BUILD_SHARED_LIBS) 119 + - string(APPEND AMD_COMGR_PREFIX_CODE "\ninclude(CMakeFindDependencyMacro)\n") 120 + - string(APPEND AMD_COMGR_PREFIX_CODE "find_dependency(Clang REQUIRED)\n") 121 + - string(APPEND AMD_COMGR_PREFIX_CODE "find_dependency(LLD REQUIRED)\n") 122 + -endif() 123 + - 124 + -set(AMD_COMGR_TARGETS_PATH "\${AMD_COMGR_PREFIX}/${AMD_COMGR_PACKAGE_PREFIX}/${AMD_COMGR_TARGETS_NAME}") 125 + -configure_file("cmake/${AMD_COMGR_CONFIG_NAME}.in" 126 + - "${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_CONFIG_NAME}.install" 127 + - @ONLY) 128 + -install(FILES 129 + - "${CMAKE_CURRENT_BINARY_DIR}/${AMD_COMGR_CONFIG_NAME}.install" 130 + - DESTINATION "${AMD_COMGR_PACKAGE_PREFIX}" 131 + - RENAME "${AMD_COMGR_CONFIG_NAME}") 132 + -install(EXPORT amd_comgr_export 133 + - DESTINATION "${AMD_COMGR_PACKAGE_PREFIX}" 134 + - FILE "${AMD_COMGR_TARGETS_NAME}") 135 + -install(FILES 136 + - "${AMD_COMGR_VERSION_PATH}" 137 + - DESTINATION "${AMD_COMGR_PACKAGE_PREFIX}") 138 + - 139 + set(CLANG_LIBS 140 + clangFrontendTool) 141 + 142 + diff --git a/cmake/bc2h.cmake b/cmake/bc2h.cmake 143 + index 146fe2b..9134985 100644 144 + --- a/cmake/bc2h.cmake 145 + +++ b/cmake/bc2h.cmake 146 + @@ -1,40 +1,41 @@ 147 + -file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/bc2h.c 148 + -"#include <stdio.h>\n" 149 + -"int main(int argc, char **argv){\n" 150 + -" FILE *ifp, *ofp;\n" 151 + -" int c, i, l;\n" 152 + -" if (argc != 4) return 1;\n" 153 + -" ifp = fopen(argv[1], \"rb\");\n" 154 + -" if (!ifp) return 1;\n" 155 + -" i = fseek(ifp, 0, SEEK_END);\n" 156 + -" if (i < 0) return 1;\n" 157 + -" l = ftell(ifp);\n" 158 + -" if (l < 0) return 1;\n" 159 + -" i = fseek(ifp, 0, SEEK_SET);\n" 160 + -" if (i < 0) return 1;\n" 161 + -" ofp = fopen(argv[2], \"wb+\");\n" 162 + -" if (!ofp) return 1;\n" 163 + -" fprintf(ofp, \"#define %s_size %d\\n\\n\"\n" 164 + -" \"#if defined __GNUC__\\n\"\n" 165 + -" \"__attribute__((aligned (4096)))\\n\"\n" 166 + -" \"#elif defined _MSC_VER\\n\"\n" 167 + -" \"__declspec(align(4096))\\n\"\n" 168 + -" \"#endif\\n\"\n" 169 + -" \"static const unsigned char %s[%s_size+1] = {\",\n" 170 + -" argv[3], l,\n" 171 + -" argv[3], argv[3]);\n" 172 + -" i = 0;\n" 173 + -" while ((c = getc(ifp)) != EOF) {\n" 174 + -" if (0 == (i&7)) fprintf(ofp, \"\\n \");\n" 175 + -" fprintf(ofp, \" 0x%02x,\", c);\n" 176 + -" ++i;\n" 177 + -" }\n" 178 + -" fprintf(ofp, \" 0x00\\n};\\n\\n\");\n" 179 + -" fclose(ifp);\n" 180 + -" fclose(ofp);\n" 181 + -" return 0;\n" 182 + -"}\n" 183 + -) 184 + +file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/bc2h.c 185 + + CONTENT 186 + +"#include <stdio.h> 187 + +int main(int argc, char **argv){ 188 + + FILE *ifp, *ofp; 189 + + int c, i, l; 190 + + if (argc != 4) return 1; 191 + + ifp = fopen(argv[1], \"rb\"); 192 + + if (!ifp) return 1; 193 + + i = fseek(ifp, 0, SEEK_END); 194 + + if (i < 0) return 1; 195 + + l = ftell(ifp); 196 + + if (l < 0) return 1; 197 + + i = fseek(ifp, 0, SEEK_SET); 198 + + if (i < 0) return 1; 199 + + ofp = fopen(argv[2], \"wb+\"); 200 + + if (!ofp) return 1; 201 + + fprintf(ofp, \"#define %s_size %d\\n\\n\" 202 + + \"#if defined __GNUC__\\n\" 203 + + \"__attribute__((aligned (4096)))\\n\" 204 + + \"#elif defined _MSC_VER\\n\" 205 + + \"__declspec(align(4096))\\n\" 206 + + \"#endif\\n\" 207 + + \"static const unsigned char %s[%s_size+1] = {\", 208 + + argv[3], l, 209 + + argv[3], argv[3]); 210 + + i = 0; 211 + + while ((c = getc(ifp)) != EOF) { 212 + + if (0 == (i&7)) fprintf(ofp, \"\\n \"); 213 + + fprintf(ofp, \" 0x%02x,\", c); 214 + + ++i; 215 + + } 216 + + fprintf(ofp, \" 0x00\\n};\\n\\n\"); 217 + + fclose(ifp); 218 + + fclose(ofp); 219 + + return 0; 220 + +} 221 + +") 222 + 223 + add_executable(bc2h ${CMAKE_CURRENT_BINARY_DIR}/bc2h.c) 224 + if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+5 -4
pkgs/development/libraries/rocm-comgr/default.nix
··· 1 - { lib, stdenv, fetchFromGitHub, writeScript, cmake, clang, rocm-device-libs, lld, llvm }: 2 3 stdenv.mkDerivation rec { 4 pname = "rocm-comgr"; ··· 15 16 nativeBuildInputs = [ cmake ]; 17 18 - buildInputs = [ clang rocm-device-libs lld llvm ]; 19 20 cmakeFlags = [ 21 - "-DCLANG=${clang}/bin/clang" 22 "-DCMAKE_BUILD_TYPE=Release" 23 "-DCMAKE_C_COMPILER=${clang}/bin/clang" 24 "-DCMAKE_CXX_COMPILER=${clang}/bin/clang++" 25 "-DCMAKE_PREFIX_PATH=${llvm}/lib/cmake/llvm" 26 - "-DLLD_INCLUDE_DIRS=${lld.src}/include" 27 "-DLLVM_TARGETS_TO_BUILD=\"AMDGPU;X86\"" 28 ]; 29 30 passthru.updateScript = writeScript "update.sh" '' 31 #!/usr/bin/env nix-shell
··· 1 + { lib, stdenv, fetchFromGitHub, writeScript, cmake, clang, rocm-device-libs, llvm }: 2 3 stdenv.mkDerivation rec { 4 pname = "rocm-comgr"; ··· 15 16 nativeBuildInputs = [ cmake ]; 17 18 + buildInputs = [ clang rocm-device-libs llvm ]; 19 20 cmakeFlags = [ 21 "-DCMAKE_BUILD_TYPE=Release" 22 "-DCMAKE_C_COMPILER=${clang}/bin/clang" 23 "-DCMAKE_CXX_COMPILER=${clang}/bin/clang++" 24 "-DCMAKE_PREFIX_PATH=${llvm}/lib/cmake/llvm" 25 + "-DLLD_INCLUDE_DIRS=${llvm}/include" 26 "-DLLVM_TARGETS_TO_BUILD=\"AMDGPU;X86\"" 27 ]; 28 + 29 + patches = [ ./cmake.patch ]; 30 31 passthru.updateScript = writeScript "update.sh" '' 32 #!/usr/bin/env nix-shell
+2 -4
pkgs/development/libraries/rocm-device-libs/default.nix
··· 3 , writeScript 4 , cmake 5 , clang 6 - , clang-unwrapped 7 - , lld 8 , llvm 9 }: 10 ··· 21 22 nativeBuildInputs = [ cmake ]; 23 24 - buildInputs = [ clang lld llvm ]; 25 26 cmakeFlags = [ 27 - "-DCMAKE_PREFIX_PATH=${llvm}/lib/cmake/llvm;${clang-unwrapped}/lib/cmake/clang" 28 "-DLLVM_TARGETS_TO_BUILD='AMDGPU;X86'" 29 "-DCLANG=${clang}/bin/clang" 30 ];
··· 3 , writeScript 4 , cmake 5 , clang 6 , llvm 7 }: 8 ··· 19 20 nativeBuildInputs = [ cmake ]; 21 22 + buildInputs = [ clang llvm ]; 23 24 cmakeFlags = [ 25 + "-DCMAKE_PREFIX_PATH=${llvm}/lib/cmake/llvm;${llvm}/lib/cmake/clang" 26 "-DLLVM_TARGETS_TO_BUILD='AMDGPU;X86'" 27 "-DCLANG=${clang}/bin/clang" 28 ];
-4
pkgs/development/libraries/rocm-opencl-runtime/default.nix
··· 6 , cmake 7 , rocm-cmake 8 , clang 9 - , clang-unwrapped 10 , glew 11 , libglvnd 12 , libX11 13 - , lld 14 , llvm 15 , mesa 16 , numactl ··· 37 38 buildInputs = [ 39 clang 40 - clang-unwrapped 41 glew 42 libglvnd 43 libX11 44 - lld 45 llvm 46 mesa 47 numactl
··· 6 , cmake 7 , rocm-cmake 8 , clang 9 , glew 10 , libglvnd 11 , libX11 12 , llvm 13 , mesa 14 , numactl ··· 35 36 buildInputs = [ 37 clang 38 glew 39 libglvnd 40 libX11 41 llvm 42 mesa 43 numactl
+1 -2
pkgs/development/libraries/rocm-runtime/default.nix
··· 3 , fetchFromGitHub 4 , writeScript 5 , addOpenGLRunpath 6 - , clang-unwrapped 7 , cmake 8 , xxd 9 , elfutils ··· 27 28 nativeBuildInputs = [ cmake xxd ]; 29 30 - buildInputs = [ clang-unwrapped elfutils llvm numactl ]; 31 32 cmakeFlags = [ 33 "-DBITCODE_DIR=${rocm-device-libs}/amdgcn/bitcode"
··· 3 , fetchFromGitHub 4 , writeScript 5 , addOpenGLRunpath 6 , cmake 7 , xxd 8 , elfutils ··· 26 27 nativeBuildInputs = [ cmake xxd ]; 28 29 + buildInputs = [ elfutils llvm numactl ]; 30 31 cmakeFlags = [ 32 "-DBITCODE_DIR=${rocm-device-libs}/amdgcn/bitcode"
+5 -5
pkgs/top-level/all-packages.nix
··· 14132 rocclr = callPackage ../development/libraries/rocclr { }; 14133 14134 hip = callPackage ../development/compilers/hip { 14135 - inherit (llvmPackages_rocm) clang clang-unwrapped compiler-rt lld llvm; 14136 }; 14137 14138 rocm-cmake = callPackage ../development/tools/build-managers/rocm-cmake { }; 14139 14140 rocm-comgr = callPackage ../development/libraries/rocm-comgr { 14141 - inherit (llvmPackages_rocm) clang lld llvm; 14142 }; 14143 14144 rocm-device-libs = callPackage ../development/libraries/rocm-device-libs { 14145 - inherit (llvmPackages_rocm) clang clang-unwrapped lld llvm; 14146 }; 14147 14148 rocm-opencl-icd = callPackage ../development/libraries/rocm-opencl-icd { }; 14149 14150 rocm-opencl-runtime = callPackage ../development/libraries/rocm-opencl-runtime { 14151 - inherit (llvmPackages_rocm) clang clang-unwrapped lld llvm; 14152 }; 14153 14154 rocm-runtime = callPackage ../development/libraries/rocm-runtime { 14155 - inherit (llvmPackages_rocm) clang-unwrapped llvm; 14156 }; 14157 14158 rocm-smi = python3Packages.callPackage ../tools/system/rocm-smi { };
··· 14132 rocclr = callPackage ../development/libraries/rocclr { }; 14133 14134 hip = callPackage ../development/compilers/hip { 14135 + inherit (llvmPackages_rocm) clang llvm; 14136 }; 14137 14138 rocm-cmake = callPackage ../development/tools/build-managers/rocm-cmake { }; 14139 14140 rocm-comgr = callPackage ../development/libraries/rocm-comgr { 14141 + inherit (llvmPackages_rocm) clang llvm; 14142 }; 14143 14144 rocm-device-libs = callPackage ../development/libraries/rocm-device-libs { 14145 + inherit (llvmPackages_rocm) clang llvm; 14146 }; 14147 14148 rocm-opencl-icd = callPackage ../development/libraries/rocm-opencl-icd { }; 14149 14150 rocm-opencl-runtime = callPackage ../development/libraries/rocm-opencl-runtime { 14151 + inherit (llvmPackages_rocm) clang llvm; 14152 }; 14153 14154 rocm-runtime = callPackage ../development/libraries/rocm-runtime { 14155 + inherit (llvmPackages_rocm) llvm; 14156 }; 14157 14158 rocm-smi = python3Packages.callPackage ../tools/system/rocm-smi { };