From 148688572f0acad7ce25927a0c27e6e8073097e4 Mon Sep 17 00:00:00 2001 From: neodiX42 Date: Fri, 19 May 2023 02:24:24 -0500 Subject: [PATCH] Fix static linking of libcxx on macOS, more portable tonlibjson (#694) * upgrade nix to 22.11 * add static libcxx * fix darwin dylib names * make sure static libs are inside dylib * apply patches only for darwin * apply patches only for darwin * apply patches only for darwin * test builds * test builds 2, remove dependency corefoundation * test builds 3, update flake.lock * test builds 4 * test builds 5, dontAddStaticConfigureFlags only for darwin * test builds 6, put back CoreFoundation flag * improve testing --- .github/workflows/ton-aarch64-linux.yml | 1 + .github/workflows/ton-aarch64-macos.yml | 1 + .github/workflows/ton-x86-64-linux.yml | 1 + .github/workflows/ton-x86-64-macos.yml | 1 + flake.lock | 44 +++++++++++++++++-------- flake.nix | 25 ++++++++++---- 6 files changed, 54 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ton-aarch64-linux.yml b/.github/workflows/ton-aarch64-linux.yml index 83ad8694..ac0d68a5 100644 --- a/.github/workflows/ton-aarch64-linux.yml +++ b/.github/workflows/ton-aarch64-linux.yml @@ -36,6 +36,7 @@ jobs: - name: Simple binaries test run: | + sudo mv /nix/store /nix/store2 artifacts/validator-engine -V artifacts/lite-client -V artifacts/fift -V diff --git a/.github/workflows/ton-aarch64-macos.yml b/.github/workflows/ton-aarch64-macos.yml index 855ffa6c..8ef4b2b2 100644 --- a/.github/workflows/ton-aarch64-macos.yml +++ b/.github/workflows/ton-aarch64-macos.yml @@ -33,6 +33,7 @@ jobs: - name: Simple binaries test run: | + sudo mv /nix/store /nix/store2 artifacts/validator-engine -V artifacts/lite-client -V artifacts/fift -V diff --git a/.github/workflows/ton-x86-64-linux.yml b/.github/workflows/ton-x86-64-linux.yml index 0af0051b..7043d054 100644 --- a/.github/workflows/ton-x86-64-linux.yml +++ b/.github/workflows/ton-x86-64-linux.yml @@ -35,6 +35,7 @@ jobs: - name: Simple binaries test run: | + sudo mv /nix/store /nix/store2 artifacts/validator-engine -V artifacts/lite-client -V artifacts/fift -V diff --git a/.github/workflows/ton-x86-64-macos.yml b/.github/workflows/ton-x86-64-macos.yml index 9d490997..8175a366 100644 --- a/.github/workflows/ton-x86-64-macos.yml +++ b/.github/workflows/ton-x86-64-macos.yml @@ -31,6 +31,7 @@ jobs: - name: Simple binaries test run: | + sudo mv /nix/store /nix/store2 artifacts/validator-engine -V artifacts/lite-client -V artifacts/fift -V diff --git a/flake.lock b/flake.lock index 9a8b67eb..ca44d4c0 100644 --- a/flake.lock +++ b/flake.lock @@ -3,11 +3,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", "owner": "edolstra", "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", "type": "github" }, "original": { @@ -17,12 +17,15 @@ } }, "flake-utils": { + "inputs": { + "systems": "systems" + }, "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", + "lastModified": 1681202837, + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", "owner": "numtide", "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", "type": "github" }, "original": { @@ -33,11 +36,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1659445012, - "narHash": "sha256-n8/7npmp3hLbPSTRHPW8EPO8qh9vJ10RgkRM3Ve4vfc=", + "lastModified": 1682600000, + "narHash": "sha256-ha4BehR1dh8EnXSoE1m/wyyYVvHI9txjW4w5/oxsW5Y=", "owner": "nixos", "repo": "nixpkgs", - "rev": "a9f66ae640146ac16b6e33d2359e9171b27b0993", + "rev": "50fc86b75d2744e1ab3837ef74b53f103a9b55a0", "type": "github" }, "original": { @@ -49,11 +52,11 @@ }, "nixpkgs-trunk": { "locked": { - "lastModified": 1659597264, - "narHash": "sha256-aI/r4XEZwMJnuDjIMnSiDm34vVXP6TPaWgqPIF/65SI=", + "lastModified": 1683098912, + "narHash": "sha256-bFHOixPoHZ5y44FvFgpEuZV0UYTQPNDZK/XqeUi1Lbs=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2b22614150a727a8aeedc10395dbd2ff6430841b", + "rev": "abc97d3572dec126eba9fec358eb2f359a944683", "type": "github" }, "original": { @@ -69,8 +72,23 @@ "nixpkgs-stable": "nixpkgs-stable", "nixpkgs-trunk": "nixpkgs-trunk" } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", "version": 7 -} +} \ No newline at end of file diff --git a/flake.nix b/flake.nix index d3fca85c..36849ddf 100644 --- a/flake.nix +++ b/flake.nix @@ -31,12 +31,16 @@ openssl_1_1 zlib libmicrohttpd - ] else - [ + ] else [ (openssl_1_1.override { static = true; }).dev (zlib.override { shared = false; }).dev - pkgsStatic.libmicrohttpd.dev - ] ++ optional staticGlibc glibc.static; + ] + ++ optionals (!stdenv.isDarwin) [ pkgsStatic.libmicrohttpd.dev ] + ++ optionals stdenv.isDarwin [ (libiconv.override { enableStatic = true; enableShared = false; }) ] + ++ optionals stdenv.isDarwin (forEach [ libmicrohttpd.dev gmp.dev nettle.dev (gnutls.override { withP11-kit = false; }).dev libtasn1.dev libidn2.dev libunistring.dev gettext ] (x: x.overrideAttrs(oldAttrs: rec { configureFlags = (oldAttrs.configureFlags or []) ++ [ "--enable-static" "--disable-shared" ]; dontDisableStatic = true; }))) + ++ optionals staticGlibc [ glibc.static ]; + + dontAddStaticConfigureFlags = stdenv.isDarwin; cmakeFlags = [ "-DTON_USE_ABSEIL=OFF" "-DNIX=ON" ] ++ optionals staticMusl [ "-DCMAKE_CROSSCOMPILING=OFF" # pkgsStatic sets cross @@ -47,6 +51,7 @@ LDFLAGS = optional staticExternalDeps (concatStringsSep " " [ (optionalString stdenv.cc.isGNU "-static-libgcc") + (optionalString stdenv.isDarwin "-framework CoreFoundation") "-static-libstdc++" ]); @@ -57,6 +62,14 @@ moveToOutput bin "$bin" ''; + preFixup = optionalString stdenv.isDarwin '' + for fn in "$bin"/bin/* "$out"/lib/*.dylib; do + echo Fixing libc++ in "$fn" + install_name_tool -change "$(otool -L "$fn" | grep libc++.1 | cut -d' ' -f1 | xargs)" libc++.1.dylib "$fn" + install_name_tool -change "$(otool -L "$fn" | grep libc++abi.1 | cut -d' ' -f1 | xargs)" libc++abi.dylib "$fn" + done + ''; + outputs = [ "bin" "out" ]; }; hostPkgs = system: @@ -131,10 +144,10 @@ }; ton-staticbin-dylib = host.symlinkJoin { name = "ton"; - paths = [ ton-static.bin ton-normal.out ]; + paths = [ ton-static.bin ton-static.out ]; }; }; devShells.default = host.mkShell { inputsFrom = [ packages.ton-normal ]; }; }))); -} +} \ No newline at end of file