Unverified Commit 860772f4 authored by Jonas Chevalier's avatar Jonas Chevalier Committed by GitHub
Browse files

Merge pull request #321509 from Mic92/zerotierone-darwin

zerotierone: fix darwin build
parents 3f82fdec 37976f9c
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
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
+46 −7
Original line number Diff line number Diff line
@@ -10,6 +10,9 @@
, ronn
, rustc
, zlib
, libiconv
, darwin
, fetchpatch
}:

let
@@ -33,8 +36,17 @@ in stdenv.mkDerivation {
      "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";


  preConfigure = ''
    cmp ./Cargo.lock ./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
    rustc
  ];

  buildInputs = [
    lzo
    openssl
    zlib
  ] ++ lib.optionals stdenv.isDarwin [
    libiconv
    darwin.apple_sdk.frameworks.SystemConfiguration
    darwin.apple_sdk.frameworks.CoreServices
  ];

  enableParallelBuilding = true;
@@ -68,10 +85,25 @@ in stdenv.mkDerivation {
  # Ensure Rust compiles for the right target
  env.CARGO_BUILD_TARGET = stdenv.hostPlatform.rust.rustcTarget;

  preBuild = if stdenv.isDarwin then ''
    makeFlagsArray+=("ARCH_FLAGS=") # disable multi-arch build
    if ! grep -q MACOS_VERSION_MIN=10.13 make-mac.mk; then
      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.
  preBuild = ''
    mkdir -p rustybits/target/release
    ln -rs \
      ./rustybits/target/${stdenv.hostPlatform.rust.rustcTarget}/release/libzeroidc.a \
@@ -87,7 +119,11 @@ in stdenv.mkDerivation {
    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 = ''
    mv $out/upstream/usr/sbin $out/bin
@@ -106,7 +142,10 @@ in stdenv.mkDerivation {
    description = "Create flat virtual Ethernet networks of almost unlimited size";
    homepage = "https://www.zerotier.com";
    license = licenses.bsl11;
    maintainers = with maintainers; [ sjmackenzie zimbatm ehmry obadz danielfullmer ];
    platforms = platforms.linux;
    maintainers = with maintainers; [
      sjmackenzie zimbatm ehmry obadz danielfullmer
      mic92 # also can test darwin
    ];
    platforms = platforms.unix;
  };
}