summary refs log tree commit diff
path: root/pkgs/os-specific/bsd/netbsd/default.nix
diff options
context:
space:
mode:
authorRyan Burns <rtburns@protonmail.com>2021-09-22 17:42:12 -0700
committerRyan Burns <rtburns@protonmail.com>2021-09-22 17:42:12 -0700
commit9eb591df1096bc070fa3ac0e2439b6f66e4a7ec5 (patch)
tree14a396c968559bea1ede9e97d329fd3850c1649d /pkgs/os-specific/bsd/netbsd/default.nix
parentd43df749ac4779cdb3f53146c8c1ef66b4f33e33 (diff)
downloadnixpkgs-9eb591df1096bc070fa3ac0e2439b6f66e4a7ec5.tar
nixpkgs-9eb591df1096bc070fa3ac0e2439b6f66e4a7ec5.tar.gz
nixpkgs-9eb591df1096bc070fa3ac0e2439b6f66e4a7ec5.tar.bz2
nixpkgs-9eb591df1096bc070fa3ac0e2439b6f66e4a7ec5.tar.lz
nixpkgs-9eb591df1096bc070fa3ac0e2439b6f66e4a7ec5.tar.xz
nixpkgs-9eb591df1096bc070fa3ac0e2439b6f66e4a7ec5.tar.zst
nixpkgs-9eb591df1096bc070fa3ac0e2439b6f66e4a7ec5.zip
netbsd.compat: fix libs by using cctools strip as objcopy
Reverts d43df749ac4779cdb3f53146c8c1ef66b4f33e33

NetBSD makefiles strip local symbols from libs using `OBJCOPY?=objcopy`,
which is missing on macOS. GNU objcopy appears to succeed but produces
broken .a libs which do not link into dependers.

(As this issue does not fail the netbsd.compat build,
downstream netbsd.install is added to passthru.tests.)

Since `OBJCOPY` is only used for stripping, we can:
* skip stripping with the hacky `OBJCOPY=echo`
* use cctools strip, which is invoked in the same way

The latter is obviously preferable if it works.
Indeed, locals are stripped, although it doesn't affect size much.
Comparison:

`OBJCOPY=echo`:
```
$ du -b result/lib/*.a
347784	result/lib/libnbcompat.a
357120	result/lib/libnbcompat_p.a
```

`OBJCOPY=${cctools}/bin/strip`:
```
$ du -b result/lib/*.a
347008	result/lib/libnbcompat.a
357120	result/lib/libnbcompat_p.a
```
Diffstat (limited to 'pkgs/os-specific/bsd/netbsd/default.nix')
-rw-r--r--pkgs/os-specific/bsd/netbsd/default.nix8
1 files changed, 6 insertions, 2 deletions
diff --git a/pkgs/os-specific/bsd/netbsd/default.nix b/pkgs/os-specific/bsd/netbsd/default.nix
index 130bce8ad46..8f24d28409f 100644
--- a/pkgs/os-specific/bsd/netbsd/default.nix
+++ b/pkgs/os-specific/bsd/netbsd/default.nix
@@ -188,8 +188,6 @@ in lib.makeScopeWithSplicing
       bsdSetupHook netbsdSetupHook
       makeMinimal
       rsync
-    ] ++ lib.optionals stdenv.buildPlatform.isDarwin [
-      buildPackages.binutils
     ];
 
     buildInputs = with self; commonDeps;
@@ -204,9 +202,15 @@ in lib.makeScopeWithSplicing
       "TSORT=cat"
       # Can't process man pages yet
       "MKSHARE=no"
+    ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+      # GNU objcopy produces broken .a libs which won't link into dependers.
+      # Makefiles only invoke `$OBJCOPY -x/-X`, so cctools strip works here.
+      "OBJCOPY=${buildPackages.darwin.cctools}/bin/strip"
     ];
     RENAME = "-D";
 
+    passthru.tests = { netbsd-install = self.install; };
+
     patches = [
       ./compat-cxx-safe-header.patch
       ./compat-dont-configure-twice.patch