Commit ac682e36 authored by Matthew Bauer's avatar Matthew Bauer
Browse files

cctools: bump to latest commit

Lots of our patches are no longer needed. This simplifies things a
bunch. In addition, it now includes man pages.
parent cff6108b
Loading
Loading
Loading
Loading
+0 −98
Original line number Diff line number Diff line
diff --git a/cctools/ld64/src/ld/parsers/textstub_dylib_file.cpp b/cctools/ld64/src/ld/parsers/textstub_dylib_file.cpp
index 09c0e12..ac6b085 100644
--- a/cctools/ld64/src/ld/parsers/textstub_dylib_file.cpp
+++ b/cctools/ld64/src/ld/parsers/textstub_dylib_file.cpp
@@ -187,6 +187,7 @@ struct DynamicLibrary {
 	ld::File::ObjcConstraint _objcConstraint;
 	Options::Platform _platform;
 	std::vector<Token> _allowedClients;
+	std::vector<Token> _allowableClients;
 	std::vector<Token> _reexportedLibraries;
 	std::vector<Token> _symbols;
 	std::vector<Token> _classes;
@@ -246,6 +247,14 @@ class TBDFile {
 		});
 	}
 
+	void parseAllowableClients(DynamicLibrary& lib) {
+		if ( !hasOptionalToken("allowable-clients") )
+			return;
+		parseFlowSequence([&](Token name) {
+			lib._allowableClients.emplace_back(name);
+		});
+	}
+
 	void parseReexportedDylibs(DynamicLibrary& lib) {
 		if ( !hasOptionalToken("re-exports") )
 			return;
@@ -306,6 +315,21 @@ class TBDFile {
 		return false;
 	}
 
+	void skipUUIDs(DynamicLibrary& lib) {
+		expectToken("uuids");
+		while ( true ) {
+			auto token = next();
+			if ( token == "]" )
+				break;
+		}
+	}
+
+	void skipParentUmbrella(DynamicLibrary& lib) {
+		if (!hasOptionalToken("parent-umbrella"))
+			return;
+		next();
+	}
+
 	void parsePlatform(DynamicLibrary& lib) {
 		expectToken("platform");
 
@@ -410,6 +434,7 @@ class TBDFile {
 			}
 
 			parseAllowedClients(lib);
+			parseAllowableClients(lib);
 			parseReexportedDylibs(lib);
 			parseSymbols(lib);
 			if ( !hasOptionalToken("-") )
@@ -455,17 +480,21 @@ class TBDFile {
 			return result.front();
 	}
 
-	void parseDocument(DynamicLibrary& lib, std::string &requestedArchName) {
+	void parseDocument(DynamicLibrary& lib, std::string &requestedArchName, bool isTbdV2) {
 		auto selectedArchName = parseAndSelectArchitecture(requestedArchName);
 		if (selectedArchName.empty())
 			throwf("invalid arch");
 
+		if(isTbdV2)
+			skipUUIDs(lib);
 		parsePlatform(lib);
 		parseInstallName(lib);
 		parseCurrentVersion(lib);
 		parseCompatibilityVersion(lib);
 		parseSwiftVersion(lib);
 		parseObjCConstraint(lib);
+		if(isTbdV2)
+			skipParentUmbrella(lib);
 		parseExportsBlock(lib, selectedArchName);
 	}
 
@@ -476,7 +505,8 @@ public:
 		_tokenizer.reset();
 		DynamicLibrary lib;
 		expectToken("---");
-		parseDocument(lib, requestedArchName);
+		auto isTbdV2 = hasOptionalToken("!tapi-tbd-v2");
+		parseDocument(lib, requestedArchName, isTbdV2);
 		expectToken("...");
 		return lib;
 	}
@@ -486,6 +516,7 @@ public:
 		auto token = next();
 		if ( token != "---" )
 			return false;
+		hasOptionalToken("!tapi-tbd-v2");
 		return !parseAndSelectArchitecture(requestedArchName).empty();
 	}
 
+11 −37
Original line number Diff line number Diff line
{ stdenv, fetchFromGitHub, autoconf, automake, libtool_2, autoreconfHook
{ stdenv, fetchFromGitHub, autoconf, automake, libtool, autoreconfHook
, libcxxabi, libuuid, llvm
, libobjc ? null, maloader ? null
, enableDumpNormalizedLibArgs ? false
}:

let

  # We need to use an old version of cctools-port to support linking TBD files
  # in the iOS SDK. Note that this only provides support for SDK versions up to
  # 10.x. For 11.0 and higher we will need to upgrade to a newer cctools than the
  # default version here, which can support the new TBD format via Apple's
  # libtapi.
  useOld = stdenv.targetPlatform.isiOS;

  # The targetPrefix prepended to binary names to allow multiple binuntils on the
  # PATH to both be usable.
  targetPrefix = stdenv.lib.optionalString
@@ -23,51 +15,31 @@ in
# Non-Darwin alternatives
assert (!stdenv.hostPlatform.isDarwin) -> maloader != null;

assert enableDumpNormalizedLibArgs -> (!useOld);

let
  baseParams = rec {
    name = "${targetPrefix}cctools-port-${version}";
    version = if useOld then "886" else "895";
    version = "895";

    src = fetchFromGitHub (if enableDumpNormalizedLibArgs then {
      owner  = "tpoechtrager";
      repo   = "cctools-port";
      # master with https://github.com/tpoechtrager/cctools-port/pull/34
      rev    = "8395d4b2c3350356e2fb02f5e04f4f463c7388df";
      sha256 = "10vbf1cfzx02q8chc77s84fp2kydjpx2y682mr6mrbb7sq5rwh8f";
    } else if useOld then {
    src = fetchFromGitHub {
      owner  = "tpoechtrager";
      repo   = "cctools-port";
      rev    = "02f0b8ecd87a3951653d838a321ae744815e21a5";
      sha256 = "0bzyabzr5dvbxglr74d0kbrk2ij5x7s5qcamqi1v546q1had1wz1";
    } else {
      owner  = "tpoechtrager";
      repo   = "cctools-port";
      rev    = "2e569d765440b8cd6414a695637617521aa2375b"; # From branch 895-ld64-274.2
      sha256 = "0l45mvyags56jfi24rawms8j2ihbc45mq7v13pkrrwppghqrdn52";
    });
      rev    = "07619027f8311fa61b4a549c75994b88739a82d8";
      sha256 = "12g94hhz5v5bmy2w0zb6fb4bjlmn992gygc60h9nai15kshj2spi";
    };

    outputs = [ "out" "dev" ];

    nativeBuildInputs = [
      autoconf automake libtool_2
    ] ++ stdenv.lib.optionals useOld [
      autoreconfHook
      autoconf automake libtool autoreconfHook
    ];
    buildInputs = [ libuuid ] ++
      stdenv.lib.optionals stdenv.isDarwin [ llvm libcxxabi libobjc ];

    patches = [
      ./ld-rpath-nonfinal.patch ./ld-ignore-rpath-link.patch
    ] ++ stdenv.lib.optionals useOld [
      # See https://github.com/tpoechtrager/cctools-port/issues/24. Remove when that's fixed.
      ./undo-unknown-triple.patch
      ./ld-tbd-v2.patch
      ./support-ios.patch
    ];

    __propagatedImpureHostDeps = stdenv.lib.optionals (!useOld) [
    __propagatedImpureHostDeps = [
      # As far as I can tell, otool from cctools is the only thing that depends on these two, and we should fix them
      "/usr/lib/libobjc.A.dylib"
      "/usr/lib/libobjc.dylib"
@@ -78,7 +50,9 @@ let
    # TODO(@Ericson2314): Always pass "--target" and always targetPrefix.
    configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (stdenv.targetPlatform != stdenv.hostPlatform) "target";

    postPatch = ''
    postPatch = stdenv.lib.optionalString stdenv.hostPlatform.isDarwin ''
      substituteInPlace cctools/Makefile.am --replace libobjc2 ""
    '' + ''
      sed -i -e 's/addStandardLibraryDirectories = true/addStandardLibraryDirectories = false/' cctools/ld64/src/ld/Options.cpp

      # FIXME: there are far more absolute path references that I don't want to fix right now
+0 −13
Original line number Diff line number Diff line
diff --git a/cctools/configure.ac b/cctools/configure.ac
index 56e8f24..0b4b3ff 100644
--- a/cctools/configure.ac
+++ b/cctools/configure.ac
@@ -39,7 +39,7 @@ EXTRACXXFLAGS=""
 WARNINGS=""
 
 case $host_os in
-  darwin* )
+  darwin* | ios*)
     isdarwin=yes
     AM_CONDITIONAL([ISDARWIN], [true])
   ;;
+0 −17
Original line number Diff line number Diff line
diff --git a/cctools/as/driver.c b/cctools/as/driver.c
index b06d085..c03397a 100644
--- a/cctools/as/driver.c
+++ b/cctools/as/driver.c
@@ -363,12 +363,6 @@ char **envp)
 	    /* Add -c or clang will run ld(1). */
 	    new_argv[j] = "-c";
 	    j++;
-	    /* cctools-port start */
-	    new_argv[j] = "-target";
-	    j++;
-	    new_argv[j] = "unknown-apple-darwin";
-	    j++;
-	    /* cctools-port end */
 	    new_argv[j] = NULL;
 	    if(execute(new_argv, verbose))
 		exit(0);
+0 −5
Original line number Diff line number Diff line
@@ -6467,11 +6467,6 @@ with pkgs;
    name = "clang-wrapper-with-reexport-hack";
    bintools = darwin.binutils.override {
      useMacosReexportHack = true;
      bintools = darwin.binutils.bintools.override {
        cctools = darwin.cctools.override {
          enableDumpNormalizedLibArgs = true;
        };
      };
    };
  };