1 { lib, stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python3, lld
3 , enableManpages ? false
7 self = stdenv.mkDerivation ({
11 src = fetch "clang" "12sm91qx2m79cvj75a9aazf2x8xybjbd593dv6v7rxficpq8i0ha";
12 inherit clang-tools-extra_src;
18 unpackFile ${clang-tools-extra_src}
19 mv clang-tools-extra-* $sourceRoot/tools/extra
22 nativeBuildInputs = [ cmake python3 lld ]
23 ++ lib.optional enableManpages python3.pkgs.sphinx
24 ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
26 buildInputs = [ libxml2 llvm ];
29 "-DCMAKE_CXX_FLAGS=-std=c++14"
30 "-DCLANGD_BUILD_XPC=OFF"
31 ] ++ lib.optionals enableManpages [
32 "-DCLANG_INCLUDE_DOCS=ON"
33 "-DLLVM_ENABLE_SPHINX=ON"
34 "-DSPHINX_OUTPUT_MAN=ON"
35 "-DSPHINX_OUTPUT_HTML=OFF"
36 "-DSPHINX_WARNINGS_AS_ERRORS=OFF"
41 # https://reviews.llvm.org/D51899
45 sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' \
46 -e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' \
47 lib/Driver/ToolChains/*.cpp
49 # Patch for standalone doc building
50 sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt
51 '' + lib.optionalString stdenv.hostPlatform.isMusl ''
52 sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/ToolChains/*.cpp
53 '' + lib.optionalString stdenv.hostPlatform.isDarwin ''
54 substituteInPlace tools/extra/clangd/CMakeLists.txt \
55 --replace "NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB" FALSE
58 outputs = [ "out" "lib" "python" ];
60 # Clang expects to find LLVMgold in its own prefix
62 if [ -e ${llvm}/lib/LLVMgold.so ]; then
63 ln -sv ${llvm}/lib/LLVMgold.so $out/lib
66 ln -sv $out/bin/clang $out/bin/cpp
68 # Move libclang to 'lib' output
69 moveToOutput "lib/libclang.*" "$lib"
70 moveToOutput "lib/libclang-cpp.*" "$lib"
71 substituteInPlace $out/lib/cmake/clang/ClangTargets-release.cmake \
72 --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
73 --replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
75 mkdir -p $python/bin $python/share/clang/
76 mv $out/bin/{git-clang-format,scan-view} $python/bin
77 if [ -e $out/bin/set-xcode-analyzer ]; then
78 mv $out/bin/set-xcode-analyzer $python/bin
80 mv $out/share/clang/*.py $python/share/clang
81 rm $out/bin/c-index-test
90 description = "A c, c++, objective-c, and objective-c++ frontend for the llvm compiler";
91 homepage = "https://llvm.org/";
92 license = lib.licenses.ncsa;
93 platforms = lib.platforms.all;
95 } // lib.optionalAttrs enableManpages {
96 pname = "clang-manpages";
103 mkdir -p $out/share/man/man1
104 # Manually install clang manpage
105 cp docs/man/*.1 $out/share/man/man1/
112 meta.description = "man page for Clang ${version}";