Merge pull request #321509 from Mic92/zerotierone-darwin

zerotierone: fix darwin build
This commit is contained in:
Jonas Chevalier 2024-06-25 17:35:12 +02:00 committed by GitHub
commit 860772f499
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 78 additions and 7 deletions

View File

@ -0,0 +1,32 @@
From f71d88a15f537cbc5ea80ad2922c013553a5caab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
Date: Fri, 21 Jun 2024 14:43:03 +0200
Subject: [PATCH 2/2] darwin: disable link-time optimization
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
It's not yet clear to me, but in our build we somehow mix objects with
and without flto.
Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
---
make-mac.mk | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/make-mac.mk b/make-mac.mk
index 7af200ad..b388c05a 100644
--- a/make-mac.mk
+++ b/make-mac.mk
@@ -84,7 +84,7 @@ ifeq ($(ZT_DEBUG),1)
node/Salsa20.o node/SHA512.o node/C25519.o node/Poly1305.o: CFLAGS = -Wall -O2 -g $(INCLUDES) $(DEFS)
else
CFLAGS?=-Ofast -fstack-protector-strong
- CFLAGS+=$(ARCH_FLAGS) -Wall -flto -fPIE -mmacosx-version-min=$(MACOS_VERSION_MIN) -DNDEBUG -Wno-unused-private-field $(INCLUDES) $(DEFS)
+ CFLAGS+=$(ARCH_FLAGS) -Wall -fPIE -mmacosx-version-min=$(MACOS_VERSION_MIN) -DNDEBUG -Wno-unused-private-field $(INCLUDES) $(DEFS)
STRIP=strip
EXTRA_CARGO_FLAGS=--release
RUST_VARIANT=release
--
2.44.1

View File

@ -10,6 +10,9 @@
, ronn , ronn
, rustc , rustc
, zlib , zlib
, libiconv
, darwin
, fetchpatch
}: }:
let let
@ -33,8 +36,17 @@ in stdenv.mkDerivation {
"rustfsm-0.1.0" = "sha256-q7J9QgN67iuoNhQC8SDVzUkjCNRXGiNCkE8OsQc5+oI="; "rustfsm-0.1.0" = "sha256-q7J9QgN67iuoNhQC8SDVzUkjCNRXGiNCkE8OsQc5+oI=";
}; };
}; };
patches = [
# https://github.com/zerotier/ZeroTierOne/pull/2314
(fetchpatch {
url = "https://github.com/zerotier/ZeroTierOne/commit/f9c6ee0181acb1b77605d9a4e4106ac79aaacca3.patch";
hash = "sha256-zw7KmaxiCH99Y0wQtOQM4u0ruxiePhvv/birxMQioJU=";
})
./0001-darwin-disable-link-time-optimization.patch
];
postPatch = "cp ${./Cargo.lock} Cargo.lock"; postPatch = "cp ${./Cargo.lock} Cargo.lock";
preConfigure = '' preConfigure = ''
cmp ./Cargo.lock ./rustybits/Cargo.lock || { cmp ./Cargo.lock ./rustybits/Cargo.lock || {
echo 1>&2 "Please make sure that the derivation's Cargo.lock is identical to ./rustybits/Cargo.lock!" echo 1>&2 "Please make sure that the derivation's Cargo.lock is identical to ./rustybits/Cargo.lock!"
@ -57,10 +69,15 @@ in stdenv.mkDerivation {
cargo cargo
rustc rustc
]; ];
buildInputs = [ buildInputs = [
lzo lzo
openssl openssl
zlib zlib
] ++ lib.optionals stdenv.isDarwin [
libiconv
darwin.apple_sdk.frameworks.SystemConfiguration
darwin.apple_sdk.frameworks.CoreServices
]; ];
enableParallelBuilding = true; enableParallelBuilding = true;
@ -68,10 +85,25 @@ in stdenv.mkDerivation {
# Ensure Rust compiles for the right target # Ensure Rust compiles for the right target
env.CARGO_BUILD_TARGET = stdenv.hostPlatform.rust.rustcTarget; env.CARGO_BUILD_TARGET = stdenv.hostPlatform.rust.rustcTarget;
# Cargo won't compile to target/release but to target/<RUST_TARGET>/release when a target is preBuild = if stdenv.isDarwin then ''
# explicitly defined. The build-system however expects target/release. Hence we just symlink from makeFlagsArray+=("ARCH_FLAGS=") # disable multi-arch build
# the latter to the former. if ! grep -q MACOS_VERSION_MIN=10.13 make-mac.mk; then
preBuild = '' echo "You may need to update MACOSX_DEPLOYMENT_TARGET to match the value in make-mac.mk"
exit 1
fi
(cd rustybits && MACOSX_DEPLOYMENT_TARGET=10.13 cargo build -p zeroidc --release)
cp \
./rustybits/target/${stdenv.hostPlatform.rust.rustcTarget}/release/libzeroidc.a \
./rustybits/target
# zerotier uses the "FORCE" target as a phony target to force rebuilds.
# We don't want to rebuild libzeroidc.a as we build want to build this library ourself for a single architecture
touch FORCE
'' else ''
# Cargo won't compile to target/release but to target/<RUST_TARGET>/release when a target is
# explicitly defined. The build-system however expects target/release. Hence we just symlink from
# the latter to the former.
mkdir -p rustybits/target/release mkdir -p rustybits/target/release
ln -rs \ ln -rs \
./rustybits/target/${stdenv.hostPlatform.rust.rustcTarget}/release/libzeroidc.a \ ./rustybits/target/${stdenv.hostPlatform.rust.rustcTarget}/release/libzeroidc.a \
@ -87,7 +119,11 @@ in stdenv.mkDerivation {
runHook postCheck runHook postCheck
''; '';
installFlags = [ "DESTDIR=$$out/upstream" ]; installFlags = [
# only linux has an install target, we borrow this for macOS as well
"-f" "make-linux.mk"
"DESTDIR=$$out/upstream"
];
postInstall = '' postInstall = ''
mv $out/upstream/usr/sbin $out/bin mv $out/upstream/usr/sbin $out/bin
@ -106,7 +142,10 @@ in stdenv.mkDerivation {
description = "Create flat virtual Ethernet networks of almost unlimited size"; description = "Create flat virtual Ethernet networks of almost unlimited size";
homepage = "https://www.zerotier.com"; homepage = "https://www.zerotier.com";
license = licenses.bsl11; license = licenses.bsl11;
maintainers = with maintainers; [ sjmackenzie zimbatm ehmry obadz danielfullmer ]; maintainers = with maintainers; [
platforms = platforms.linux; sjmackenzie zimbatm ehmry obadz danielfullmer
mic92 # also can test darwin
];
platforms = platforms.unix;
}; };
} }