diff options
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/llvm/7/clang/default.nix')
-rw-r--r-- | nixpkgs/pkgs/development/compilers/llvm/7/clang/default.nix | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/nixpkgs/pkgs/development/compilers/llvm/7/clang/default.nix b/nixpkgs/pkgs/development/compilers/llvm/7/clang/default.nix index 4ab13441e36f..e1b031ad352b 100644 --- a/nixpkgs/pkgs/development/compilers/llvm/7/clang/default.nix +++ b/nixpkgs/pkgs/development/compilers/llvm/7/clang/default.nix @@ -1,4 +1,5 @@ -{ lib, stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python3, lld +{ lib, stdenv, llvm_meta, fetch, cmake, libxml2, libllvm, version, clang-tools-extra_src, python3 +, buildLlvmTools , fixDarwinDylibNames , enableManpages ? false , enablePolly ? false # TODO: get this info from llvm (passthru?) @@ -23,17 +24,21 @@ let ++ lib.optional enableManpages python3.pkgs.sphinx ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames; - buildInputs = [ libxml2 llvm lld ]; + buildInputs = [ libxml2 libllvm ]; cmakeFlags = [ "-DCMAKE_CXX_FLAGS=-std=c++11" "-DLLVM_ENABLE_RTTI=ON" + "-DLLVM_CONFIG_PATH=${libllvm.dev}/bin/llvm-config${lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) "-native"}" ] ++ lib.optionals enableManpages [ "-DCLANG_INCLUDE_DOCS=ON" "-DLLVM_ENABLE_SPHINX=ON" "-DSPHINX_OUTPUT_MAN=ON" "-DSPHINX_OUTPUT_HTML=OFF" "-DSPHINX_WARNINGS_AS_ERRORS=OFF" + ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + "-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen" + "-DCLANG_TABLEGEN=${buildLlvmTools.libclang.dev}/bin/clang-tblgen" ] ++ lib.optionals enablePolly [ "-DWITH_POLLY=ON" "-DLINK_POLLY_INTO_TOOLS=ON" @@ -43,6 +48,10 @@ let ./purity.patch # make clang -xhip use $PATH to find executables ./HIP-use-PATH-7.patch + # Backport for the `--unwindlib=[libgcc|compiler-rt]` flag, which is + # needed for our bootstrapping to not interfere with C. + ./unwindlib.patch + ./gnu-install-dirs.patch ]; postPatch = '' @@ -59,12 +68,12 @@ let --replace "NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB" FALSE ''; - outputs = [ "out" "lib" "python" ]; + outputs = [ "out" "lib" "dev" "python" ]; # Clang expects to find LLVMgold in its own prefix postInstall = '' - if [ -e ${llvm}/lib/LLVMgold.so ]; then - ln -sv ${llvm}/lib/LLVMgold.so $out/lib + if [ -e ${libllvm.lib}/lib/LLVMgold.so ]; then + ln -sv ${libllvm.lib}/lib/LLVMgold.so $lib/lib fi ln -sv $out/bin/clang $out/bin/cpp @@ -81,18 +90,30 @@ let fi mv $out/share/clang/*.py $python/share/clang rm $out/bin/c-index-test + + mkdir -p $dev/bin + cp bin/clang-tblgen $dev/bin ''; passthru = { isClang = true; - inherit llvm; + inherit libllvm; }; - meta = { - description = "A c, c++, objective-c, and objective-c++ frontend for the llvm compiler"; - homepage = "https://llvm.org/"; - license = lib.licenses.ncsa; - platforms = lib.platforms.all; + meta = llvm_meta // { + homepage = "https://clang.llvm.org/"; + description = "A C language family frontend for LLVM"; + longDescription = '' + The Clang project provides a language front-end and tooling + infrastructure for languages in the C language family (C, C++, Objective + C/C++, OpenCL, CUDA, and RenderScript) for the LLVM project. + It aims to deliver amazingly fast compiles, extremely useful error and + warning messages and to provide a platform for building great source + level tools. The Clang Static Analyzer and clang-tidy are tools that + automatically find bugs in your code, and are great examples of the sort + of tools that can be built using the Clang frontend as a library to + parse C/C++ code. + ''; }; } // lib.optionalAttrs enableManpages { pname = "clang-manpages"; @@ -111,6 +132,8 @@ let doCheck = false; - meta.description = "man page for Clang ${version}"; + meta = llvm_meta // { + description = "man page for Clang ${version}"; + }; }); in self |