diff options
Diffstat (limited to 'pkgs/development/compilers/llvm/common')
3 files changed, 87 insertions, 1 deletions
diff --git a/pkgs/development/compilers/llvm/common/clang-tools/default.nix b/pkgs/development/compilers/llvm/common/clang-tools/default.nix new file mode 100644 index 0000000000000..7ecf0c5c431de --- /dev/null +++ b/pkgs/development/compilers/llvm/common/clang-tools/default.nix @@ -0,0 +1,59 @@ +{ + lib, + stdenv, + clang-unwrapped, + clang, + libcxxClang, + llvm_meta, + # enableLibcxx will use the c++ headers from clang instead of gcc. + # This shouldn't have any effect on platforms that use clang as the default compiler already. + enableLibcxx ? false, +}: + +stdenv.mkDerivation { + unwrapped = clang-unwrapped; + + pname = "clang-tools"; + version = lib.getVersion clang-unwrapped; + dontUnpack = true; + clang = if enableLibcxx then libcxxClang else clang; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + + for tool in $unwrapped/bin/clang-*; do + tool=$(basename "$tool") + + # Compilers have their own derivation, no need to include them here: + if [[ $tool == "clang-cl" || $tool == "clang-cpp" ]]; then + continue + fi + + # Clang's derivation produces a lot of binaries, but the tools we are + # interested in follow the `clang-something` naming convention - except + # for clang-$version (e.g. clang-13), which is the compiler again: + if [[ ! $tool =~ ^clang\-[a-zA-Z_\-]+$ ]]; then + continue + fi + + ln -s $out/bin/clangd $out/bin/$tool + done + + if [[ -z "$(ls -A $out/bin)" ]]; then + echo "Found no binaries - maybe their location or naming convention changed?" + exit 1 + fi + + substituteAll ${./wrapper} $out/bin/clangd + chmod +x $out/bin/clangd + + runHook postInstall + ''; + + meta = llvm_meta // { + description = "Standalone command line tools for C++ development"; + maintainers = with lib.maintainers; [ patryk27 ]; + }; +} diff --git a/pkgs/development/compilers/llvm/common/clang-tools/wrapper b/pkgs/development/compilers/llvm/common/clang-tools/wrapper new file mode 100755 index 0000000000000..1008023fdc0d1 --- /dev/null +++ b/pkgs/development/compilers/llvm/common/clang-tools/wrapper @@ -0,0 +1,27 @@ +#!/bin/sh + +buildcpath() { + local path after + while (( $# )); do + case $1 in + -isystem) + shift + path=$path${path:+':'}$1 + ;; + -idirafter) + shift + after=$after${after:+':'}$1 + ;; + esac + shift + done + echo $path${after:+':'}$after +} + +export CPATH=${CPATH}${CPATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \ + $(<@clang@/nix-support/libc-cflags)):@clang@/resource-root/include +export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}${CPLUS_INCLUDE_PATH:+':'}$(buildcpath ${NIX_CFLAGS_COMPILE} \ + $(<@clang@/nix-support/libcxx-cxxflags) \ + $(<@clang@/nix-support/libc-cflags)):@clang@/resource-root/include + +exec -a "$0" @unwrapped@/bin/$(basename $0) "$@" diff --git a/pkgs/development/compilers/llvm/common/clang/default.nix b/pkgs/development/compilers/llvm/common/clang/default.nix index e597ec4d604b1..dc175e085f0b6 100644 --- a/pkgs/development/compilers/llvm/common/clang/default.nix +++ b/pkgs/development/compilers/llvm/common/clang/default.nix @@ -198,7 +198,7 @@ let ''; }) // (lib.optionalAttrs (lib.versionAtLeast release_version "15") { - env = lib.optionalAttrs (stdenv.buildPlatform != stdenv.hostPlatform) { + env = lib.optionalAttrs (stdenv.buildPlatform != stdenv.hostPlatform && !stdenv.hostPlatform.useLLVM) { # The following warning is triggered with (at least) gcc >= # 12, but appears to occur only for cross compiles. NIX_CFLAGS_COMPILE = "-Wno-maybe-uninitialized"; |