[MacPorts] #47776: ld64 @2 Add wrapper script to select compatible linker

MacPorts noreply at macports.org
Tue May 19 21:44:12 PDT 2015


#47776: ld64 @2 Add wrapper script to select compatible linker
------------------------------+--------------------------------
 Reporter:  steve+macports@…  |      Owner:  macports-tickets@…
     Type:  enhancement       |     Status:  new
 Priority:  Normal            |  Milestone:
Component:  ports             |    Version:  2.3.3
 Keywords:                    |       Port:  ld64
------------------------------+--------------------------------
 ==== Introduction ====

 It could be useful to add a wrapper script to switch between ld64 versions
 depending on the supplied arguments.

 In particular, ld64-127 or ld64-97 are required for ppc but in general it
 is preferable to use a more recent version.

 Since ld64 already supports multiple architectures, it isn't especially
 subversive to wrap it in a script that extends that support to legacy
 architectures.

 I'm attaching a script that calls ld-97 for ppc on 10.4 and earlier,
 ld-127 for ppc on 10.5 and ld-latest otherwise.  It inserts the list of
 supported ppc architectures on stderr when called as ld -v.

 I haven't integrated the script with MacPorts yet, but I imagine it is
 possible to add as an additional subport and/or variant of ld64, with
 dependencies on existing subports.

 ==== Analysis ====

 This isn't such a big deal for gcc since each architecture has a separate
 toolchain, into which the correct ld can be symlinked.

 There are also mechanisms in clang for choosing which ld will be used:

 1. Create a separate toolchain in a similar way to what gcc does, eg under
 /usr/local/powerpc-apple-darwin10-llvm-3.6. If ld exists in the same
 directory as clang, it will be found.
 2. Use COMPILER_PATH or -B to specify a path to search for ld.
 3. Call clang -target powerpc-apple-macosx10.4 instead of clang -arch ppc
 -mmacosx-version-min=10.4 and symlink powerpc-apple-macosx10.4-ld to
 ld-97.

 Unfortunately none of these solutions works seamlessly when you want to
 build a universal binary - in each case it would be necessary to build a
 ppc binary separately and then call lipo yourself instead of letting clang
 do it for you (the -B and -target options cannot be set per-arch with
 -Xarch_ppc etc).

 One possible workaround for universal builds is to choose the linker based
 on the minimum supported version, rather than the supported archs - ie to
 support 10.4+ use ld-97, for 10.5+ use ld-127 etc.  This approach is
 compatible with COMPILER_PATH or -B, it's just necessary to create a
 directory for each linker version so it can be symlinked as simply ld.

-- 
Ticket URL: <https://trac.macports.org/ticket/47776>
MacPorts <https://www.macports.org/>
Ports system for OS X


More information about the macports-tickets mailing list