diff options
Diffstat (limited to 'pkgs/os-specific/darwin/apple-sdk-12.3/libSystem.nix')
-rw-r--r-- | pkgs/os-specific/darwin/apple-sdk-12.3/libSystem.nix | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/pkgs/os-specific/darwin/apple-sdk-12.3/libSystem.nix b/pkgs/os-specific/darwin/apple-sdk-12.3/libSystem.nix new file mode 100644 index 0000000000000..5d57038a46573 --- /dev/null +++ b/pkgs/os-specific/darwin/apple-sdk-12.3/libSystem.nix @@ -0,0 +1,96 @@ +{ + stdenvNoCC, + buildPackages, + darwin-stubs, +}: + +stdenvNoCC.mkDerivation { + pname = "libSystem"; + inherit (darwin-stubs) version; + + nativeBuildInputs = [ buildPackages.darwin.rewrite-tbd ]; + + csu = [ + "bundle1.o" + "crt0.o" + "crt1.10.5.o" + "crt1.10.6.o" + "crt1.o" + "dylib1.10.5.o" + "dylib1.o" + "gcrt1.o" + "lazydylib1.o" + ]; + + buildCommand = + '' + mkdir -p $out/{include,lib/swift} + '' + # Copy each directory in ${darwin-stubs}/usr/include into $out/include + + '' + for dir in $(ls -d ${darwin-stubs}/usr/include/*/); do + cp -dr $dir $out/include + done + '' + # Copy each header and modulemap file in ${darwin-stubs}/usr/include into $out/include + + '' + cp -d \ + ${darwin-stubs}/usr/include/*.h \ + ${darwin-stubs}/usr/include/*.modulemap \ + $out/include + '' + # Remove curses.h, ncurses.h, ncurses_dll.h, and unctrl.h which conflict with ncurses. + # Then, remove the module map for ncurses. + # NOTE: The sed expression expects the module map to use consistent indentation across + # releases. If this changes, the sed expression will need to be updated. + # + # For example, right now we assume that there is one leading space before the + # "explicit" keyword and that the closing brace is on its own line (also with one + # leading space). + + '' + rm $out/include/{curses,ncurses,ncurses_dll,unctrl}.h + sed -i -e '/^ explicit module ncurses {/,/^ }$/d' $out/include/module.modulemap + '' + + '' + rm $out/include/tk*.h $out/include/tcl*.h + + cp -dr \ + ${darwin-stubs}/usr/lib/libSystem.* \ + ${darwin-stubs}/usr/lib/system \ + $out/lib + + # Extra libraries + for name in c dbm dl info m mx poll proc pthread rpcsvc util gcc_s.1 resolv; do + cp -d \ + ${darwin-stubs}/usr/lib/lib$name.tbd \ + ${darwin-stubs}/usr/lib/lib$name.*.tbd \ + $out/lib + done + + for name in os Dispatch; do + cp -dr \ + ${darwin-stubs}/usr/lib/swift/$name.swiftmodule \ + ${darwin-stubs}/usr/lib/swift/libswift$name.tbd \ + $out/lib/swift + done + + for f in $csu; do + from=${darwin-stubs}/usr/lib/$f + if [ -e "$from" ]; then + cp -d $from $out/lib + else + echo "Csu file '$from' doesn't exist: skipping" + fi + done + + chmod u+w -R $out/lib + find $out -name '*.tbd' -type f | while read tbd; do + rewrite-tbd \ + -c /usr/lib/libsystem.dylib:$out/lib/libsystem.dylib \ + -p /usr/lib/system/:$out/lib/system/ \ + -p /usr/lib/swift/:$out/lib/swift/ \ + -r ${builtins.storeDir} \ + "$tbd" + done + ''; +} |