commit:     70384d5c6846998d8cb6bcc2ddfcf0830c13c6fa
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 21 09:45:17 2024 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sun Jan 21 09:45:17 2024 +0000
URL:        https://gitweb.gentoo.org/repo/proj/prefix.git/commit/?id=70384d5c

sys-devel/binutils-config: more macOS linker tweaks

This time tested with native linkers on platforms which are seen during
stage2 bootstraps:

Darwin 23 with dyld-1022.1
Darwin 17 with ld64-409.12
Darwin  9 with ld64-85.2.1

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 ...5.1-r8.ebuild => binutils-config-5.1-r9.ebuild} |  0
 sys-devel/binutils-config/files/ldwrapper.c        | 27 +++++++++++++++++-----
 2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/sys-devel/binutils-config/binutils-config-5.1-r8.ebuild 
b/sys-devel/binutils-config/binutils-config-5.1-r9.ebuild
similarity index 100%
rename from sys-devel/binutils-config/binutils-config-5.1-r8.ebuild
rename to sys-devel/binutils-config/binutils-config-5.1-r9.ebuild

diff --git a/sys-devel/binutils-config/files/ldwrapper.c 
b/sys-devel/binutils-config/files/ldwrapper.c
index c9fe7e4bb3..00d4a69f73 100644
--- a/sys-devel/binutils-config/files/ldwrapper.c
+++ b/sys-devel/binutils-config/files/ldwrapper.c
@@ -392,18 +392,28 @@ main(int argc, char *argv[])
 
                /* call the linker to figure out what options we can use :(
                 * some Developer Tools ld64 versions:
-                * 12.0:   609      Big Sur, requirement for sdk_version
+                * Xcode   ld64   dyld
+                * 3.1.1:  85.2.1        Leopard 10.5, sdk_version unknown,
+                *                                     need macosx_version_min
+                * 8.2.1:  274.2         xtools-2.2.4, sdk_version plus
+                *                                     macosx_version_min
+                * 10.0:   409.12        High Sierra 10.13 like above
+                * 12.0:   609           Big Sur 11, sdk_version only
                 * 13.0:   711
                 * 13.3.1: 762
                 * 14.0:   819.6
                 * 14.2:   820.1
                 * 14.3.1: 857.1
-                * 15.0:   907      Sanoma, platform_version argument
-                * all to be found from the PROJECT:ld64-650.9 bit from 1st line
+                * 15.0:   907   1022.1  Sanoma 23, platform_version iso 
sdk_version
+                * all to be found from the PROJECT:ld64-650.9 or
+                * PROJECT:dyld-1022.1 bit from the first line
                 * NOTE: e.g. my Sanoma mac with CommandLineTools has 650.9
                 *       which is not a version from any Developer Tools ?!?
                 * Currently we need to distinguish XCode 15 according to
                 * bug #910277, so we look for 907 and old targets before 12 */
+#define LD64_3_1    8500
+#define LD64_8_2   27400
+#define LD64_10_0  40900
 #define LD64_12_0  60900
 #define LD64_15_0  90700
                snprintf(target, sizeof(target), "%s -v 2>&1", ld);
@@ -412,8 +422,11 @@ main(int argc, char *argv[])
                        char *proj;
                        long  comp;
                        if (fgets(target, sizeof(target), ld64out) != 0 &&
-                               (proj = strstr(target, "PROJECT:ld64-")) != 
NULL)
+                               ((proj = strstr(target, "PROJECT:ld64-")) != 
NULL ||
+                                (proj = strstr(target, "PROJECT:dyld-")) != 
NULL))
                        {
+                               /* we don't distinguish between ld64 and dyld 
here, for
+                                * now it seems the numbers line up for our 
logic */
                                proj += sizeof("PROJECT:ld64-") - 1;
                                comp  = strtol(proj, &proj, 10);
                                /* we currently have no need to parse 
fractions, the
@@ -446,10 +459,12 @@ main(int argc, char *argv[])
                        newargv[j++] = "macos";
                        newargv[j++] = darwin_dt;
                        newargv[j++] = "0.0";
-               } else if (ld64ver >= LD64_12_0) {
+               } else if (ld64ver >= LD64_8_2) {
                        newargv[j++] = "-sdk_version";
                        newargv[j++] = darwin_dt;
-               } else {
+               }
+
+               if (ld64ver < LD64_12_0) {
                        newargv[j++] = "-macosx_version_min";
                        newargv[j++] = darwin_dt;
                }

Reply via email to