mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-11-11 15:27:20 +03:00
xcbuild: assorted fixes and cleanups
This is in preparation for the LLVM 4 upgrade (which gets more strict about e.g., return false in xcbuild itself) and also for using xcbuild more extensively in the Darwin stdenv bootstrap process, which is why I killed the unnecessary gcc dependency in the toolchain. llvm-cov pretends to be gcov anyway, so we're fine.
This commit is contained in:
parent
5561abd556
commit
3263d02626
@ -42,6 +42,7 @@ let
|
|||||||
passthru = {
|
passthru = {
|
||||||
lib = self; # compatibility with gcc, so that `stdenv.cc.cc.lib` works on both
|
lib = self; # compatibility with gcc, so that `stdenv.cc.cc.lib` works on both
|
||||||
isClang = true;
|
isClang = true;
|
||||||
|
inherit llvm;
|
||||||
} // stdenv.lib.optionalAttrs stdenv.isLinux {
|
} // stdenv.lib.optionalAttrs stdenv.isLinux {
|
||||||
inherit gcc;
|
inherit gcc;
|
||||||
};
|
};
|
||||||
|
@ -53,6 +53,7 @@ let
|
|||||||
passthru = {
|
passthru = {
|
||||||
lib = self; # compatibility with gcc, so that `stdenv.cc.cc.lib` works on both
|
lib = self; # compatibility with gcc, so that `stdenv.cc.cc.lib` works on both
|
||||||
isClang = true;
|
isClang = true;
|
||||||
|
inherit llvm;
|
||||||
} // stdenv.lib.optionalAttrs stdenv.isLinux {
|
} // stdenv.lib.optionalAttrs stdenv.isLinux {
|
||||||
inherit gcc;
|
inherit gcc;
|
||||||
};
|
};
|
||||||
|
@ -42,6 +42,7 @@ let
|
|||||||
passthru = {
|
passthru = {
|
||||||
lib = self; # compatibility with gcc, so that `stdenv.cc.cc.lib` works on both
|
lib = self; # compatibility with gcc, so that `stdenv.cc.cc.lib` works on both
|
||||||
isClang = true;
|
isClang = true;
|
||||||
|
inherit llvm;
|
||||||
} // stdenv.lib.optionalAttrs stdenv.isLinux {
|
} // stdenv.lib.optionalAttrs stdenv.isLinux {
|
||||||
inherit gcc;
|
inherit gcc;
|
||||||
};
|
};
|
||||||
|
@ -53,6 +53,7 @@ let
|
|||||||
passthru = {
|
passthru = {
|
||||||
lib = self; # compatibility with gcc, so that `stdenv.cc.cc.lib` works on both
|
lib = self; # compatibility with gcc, so that `stdenv.cc.cc.lib` works on both
|
||||||
isClang = true;
|
isClang = true;
|
||||||
|
inherit llvm;
|
||||||
} // stdenv.lib.optionalAttrs stdenv.isLinux {
|
} // stdenv.lib.optionalAttrs stdenv.isLinux {
|
||||||
inherit gcc;
|
inherit gcc;
|
||||||
};
|
};
|
||||||
|
@ -31,6 +31,9 @@ in stdenv.mkDerivation rec {
|
|||||||
cp -r --no-preserve=all ${linenoise} ThirdParty/linenoise
|
cp -r --no-preserve=all ${linenoise} ThirdParty/linenoise
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
# See https://github.com/facebook/xcbuild/issues/238 and remove once that's in
|
||||||
|
patches = [ ./return-false.patch ];
|
||||||
|
|
||||||
# Avoid a glibc >= 2.25 deprecation warning that gets fatal via -Werror.
|
# Avoid a glibc >= 2.25 deprecation warning that gets fatal via -Werror.
|
||||||
postPatch = stdenv.lib.optionalString (!stdenv.isDarwin) ''
|
postPatch = stdenv.lib.optionalString (!stdenv.isDarwin) ''
|
||||||
sed 1i'#include <sys/sysmacros.h>' \
|
sed 1i'#include <sys/sysmacros.h>' \
|
||||||
|
13
pkgs/development/tools/xcbuild/return-false.patch
Normal file
13
pkgs/development/tools/xcbuild/return-false.patch
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
diff --git a/Libraries/dependency/Tools/dependency-info-tool.cpp b/Libraries/dependency/Tools/dependency-info-tool.cpp
|
||||||
|
index 006f53c7..d469f068 100644
|
||||||
|
--- a/Libraries/dependency/Tools/dependency-info-tool.cpp
|
||||||
|
+++ b/Libraries/dependency/Tools/dependency-info-tool.cpp
|
||||||
|
@@ -271,7 +271,7 @@ main(int argc, char **argv)
|
||||||
|
*/
|
||||||
|
std::vector<uint8_t> makefileContents = std::vector<uint8_t>(contents.begin(), contents.end());
|
||||||
|
if (!filesystem.write(makefileContents, *options.output())) {
|
||||||
|
- return false;
|
||||||
|
+ return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
@ -1,4 +1,4 @@
|
|||||||
{stdenv, writeText, toolchainName, xcbuild
|
{stdenv, writeText, toolchainName, xcbuild, fetchurl
|
||||||
, llvm, cctools, gcc, bootstrap_cmds, binutils
|
, llvm, cctools, gcc, bootstrap_cmds, binutils
|
||||||
, yacc, flex, m4, unifdef, gperf, indent, ctags, makeWrapper}:
|
, yacc, flex, m4, unifdef, gperf, indent, ctags, makeWrapper}:
|
||||||
|
|
||||||
@ -8,15 +8,20 @@ let
|
|||||||
Identifier = toolchainName;
|
Identifier = toolchainName;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# We could pull this out of developer_cmds but it adds an annoying loop if we want to bootstrap and
|
||||||
|
# this is just a tiny script so I'm not going to bother
|
||||||
|
mkdep-darwin-src = fetchurl {
|
||||||
|
url = "https://opensource.apple.com/source/developer_cmds/developer_cmds-63/mkdep/mkdep.sh";
|
||||||
|
sha256 = "0n4wpqfslfjs5zbys5yri8pfi2awyhlmknsf6laa5jzqbzq9x541";
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
in
|
in
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "nixpkgs.xctoolchain";
|
name = "nixpkgs.xctoolchain";
|
||||||
buildInputs = [ xcbuild makeWrapper ];
|
buildInputs = [ xcbuild makeWrapper ];
|
||||||
|
|
||||||
propagatedBuildInputs = [ llvm gcc yacc flex m4 unifdef gperf indent ]
|
## cctools should build on Linux but it doesn't currently
|
||||||
++ stdenv.lib.optionals stdenv.isDarwin [ cctools bootstrap_cmds binutils ];
|
|
||||||
## cctools should build on Linux but it doesn't currentl
|
|
||||||
|
|
||||||
buildCommand = ''
|
buildCommand = ''
|
||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
@ -58,8 +63,6 @@ stdenv.mkDerivation {
|
|||||||
ln -s ${unifdef}/bin/unifdefall
|
ln -s ${unifdef}/bin/unifdefall
|
||||||
|
|
||||||
ln -s ${gperf}/bin/gperf
|
ln -s ${gperf}/bin/gperf
|
||||||
ln -s ${gcc}/bin/gcov
|
|
||||||
ln -s ${gcc}/bin/mkdep
|
|
||||||
ln -s ${indent}/bin/indent
|
ln -s ${indent}/bin/indent
|
||||||
ln -s ${ctags}/bin/ctags
|
ln -s ${ctags}/bin/ctags
|
||||||
'' + stdenv.lib.optionalString stdenv.isDarwin ''
|
'' + stdenv.lib.optionalString stdenv.isDarwin ''
|
||||||
@ -86,7 +89,15 @@ stdenv.mkDerivation {
|
|||||||
ln -s ${cctools}/bin/pagestuff
|
ln -s ${cctools}/bin/pagestuff
|
||||||
ln -s ${cctools}/bin/ranlib
|
ln -s ${cctools}/bin/ranlib
|
||||||
ln -s ${cctools}/bin/redo_prebinding
|
ln -s ${cctools}/bin/redo_prebinding
|
||||||
'';
|
'' +
|
||||||
|
# No point including the entire gcc closure if we don't already have it
|
||||||
|
(if stdenv.cc.isClang then ''
|
||||||
|
ln -s ${stdenv.cc.cc.llvm}/bin/llvm-cov gcov
|
||||||
|
ln -s ${mkdep-darwin-src} mkdep
|
||||||
|
'' else ''
|
||||||
|
ln -s ${gcc}/bin/gcov
|
||||||
|
ln -s ${gcc}/bin/mkdep
|
||||||
|
'');
|
||||||
}
|
}
|
||||||
|
|
||||||
# other commands in /bin/
|
# other commands in /bin/
|
||||||
|
@ -50,10 +50,10 @@ stdenv.mkDerivation {
|
|||||||
ln -s ${xcbuild}/Library/Xcode/Specifications $out/Library/Xcode/Specifications
|
ln -s ${xcbuild}/Library/Xcode/Specifications $out/Library/Xcode/Specifications
|
||||||
|
|
||||||
mkdir -p $out/Platforms/
|
mkdir -p $out/Platforms/
|
||||||
ln -s ${platform} $out/Platforms/
|
ln -s ${platform} $out/Platforms/nixpkgs.platform
|
||||||
|
|
||||||
mkdir -p $out/Toolchains/
|
mkdir -p $out/Toolchains/
|
||||||
ln -s ${toolchain} $out/Toolchains/
|
ln -s ${toolchain} $out/Toolchains/nixpkgs.xctoolahin
|
||||||
|
|
||||||
wrapProgram $out/bin/xcodebuild \
|
wrapProgram $out/bin/xcodebuild \
|
||||||
--add-flags "-xcconfig ${xcconfig}" \
|
--add-flags "-xcconfig ${xcconfig}" \
|
||||||
|
Loading…
Reference in New Issue
Block a user