|
|
|
@ -1,15 +1,23 @@ |
|
|
|
|
{ lib, stdenv, llvm_meta, src, cmake, python3, fixDarwinDylibNames, version |
|
|
|
|
, libcxxabi |
|
|
|
|
, enableShared ? !stdenv.hostPlatform.isStatic |
|
|
|
|
|
|
|
|
|
# If isCxxHeaders is true, the resulting package would only include the headers. |
|
|
|
|
# Use this to break the circular dependency between libcxx and libcxxabi. |
|
|
|
|
# |
|
|
|
|
# Some context: |
|
|
|
|
# https://reviews.llvm.org/rG1687f2bbe2e2aaa092f942d4a97d41fad43eedfb |
|
|
|
|
, isCxxHeaders ? false |
|
|
|
|
}: |
|
|
|
|
|
|
|
|
|
stdenv.mkDerivation rec { |
|
|
|
|
pname = "libcxx"; |
|
|
|
|
pname = if isCxxHeaders then "cxx-headers" else "libcxx"; |
|
|
|
|
inherit version; |
|
|
|
|
|
|
|
|
|
inherit src; |
|
|
|
|
sourceRoot = "source/${pname}"; |
|
|
|
|
sourceRoot = "source/libcxx"; |
|
|
|
|
|
|
|
|
|
outputs = [ "out" "dev" ]; |
|
|
|
|
outputs = [ "out" ] ++ lib.optional (!isCxxHeaders) "dev"; |
|
|
|
|
|
|
|
|
|
patches = [ |
|
|
|
|
./gnu-install-dirs.patch |
|
|
|
@ -24,15 +32,29 @@ stdenv.mkDerivation rec { |
|
|
|
|
nativeBuildInputs = [ cmake python3 ] |
|
|
|
|
++ lib.optional stdenv.isDarwin fixDarwinDylibNames; |
|
|
|
|
|
|
|
|
|
cmakeFlags = [ |
|
|
|
|
] ++ lib.optional (stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isWasi) "-DLIBCXX_HAS_MUSL_LIBC=1" |
|
|
|
|
buildInputs = lib.optional (!isCxxHeaders) [ libcxxabi ]; |
|
|
|
|
|
|
|
|
|
cmakeFlags = [ "-DLIBCXX_CXX_ABI=libcxxabi" ] |
|
|
|
|
++ lib.optional (stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isWasi) "-DLIBCXX_HAS_MUSL_LIBC=1" |
|
|
|
|
++ lib.optional (stdenv.hostPlatform.useLLVM or false) "-DLIBCXX_USE_COMPILER_RT=ON" |
|
|
|
|
++ lib.optional stdenv.hostPlatform.isWasm [ |
|
|
|
|
++ lib.optionals stdenv.hostPlatform.isWasm [ |
|
|
|
|
"-DLIBCXX_ENABLE_THREADS=OFF" |
|
|
|
|
"-DLIBCXX_ENABLE_FILESYSTEM=OFF" |
|
|
|
|
"-DLIBCXX_ENABLE_EXCEPTIONS=OFF" |
|
|
|
|
] ++ lib.optional (!enableShared) "-DLIBCXX_ENABLE_SHARED=OFF"; |
|
|
|
|
|
|
|
|
|
buildFlags = lib.optional isCxxHeaders "generate-cxx-headers"; |
|
|
|
|
installTargets = lib.optional isCxxHeaders "install-cxx-headers"; |
|
|
|
|
|
|
|
|
|
# At this point, cxxabi headers would be installed in the dev output, which |
|
|
|
|
# prevents moveToOutput from doing its job later in the build process. |
|
|
|
|
postInstall = lib.optionalString (!isCxxHeaders) '' |
|
|
|
|
mv "$dev/include/c++/v1/"* "$out/include/c++/v1/" |
|
|
|
|
pushd "$dev" |
|
|
|
|
rmdir -p include/c++/v1 |
|
|
|
|
popd |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
passthru = { |
|
|
|
|
isLLVM = true; |
|
|
|
|
}; |
|
|
|
@ -45,9 +67,6 @@ stdenv.mkDerivation rec { |
|
|
|
|
C++14 and above. |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
# https://github.com/NixOS/nixpkgs/pull/133217#issuecomment-895742807 |
|
|
|
|
broken = stdenv.isDarwin; |
|
|
|
|
|
|
|
|
|
# "All of the code in libc++ is dual licensed under the MIT license and the |
|
|
|
|
# UIUC License (a BSD-like license)": |
|
|
|
|
license = with lib.licenses; [ mit ncsa ]; |
|
|
|
|