From 33bb3f2fa2dec3dbffe3cd560bf3732d017d799a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Sat, 6 Apr 2024 14:20:57 +0300 Subject: [PATCH 1/2] chore(nix): refactor, fix library packages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bit of a cleanup to make it more readable and also fix building of libraries. Moving the actual build to `default.nix` makes `flake.nix` more readable. Signed-off-by: Jakub Sokołowski --- ci/Jenkinsfile.nix-flake | 4 ++-- default.nix | 33 +++++++++++++++++++++++++++++++++ flake.nix | 30 ++++++++++++++++++++++-------- 3 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 default.nix diff --git a/ci/Jenkinsfile.nix-flake b/ci/Jenkinsfile.nix-flake index cb5f8fa9c..9c7c99429 100644 --- a/ci/Jenkinsfile.nix-flake +++ b/ci/Jenkinsfile.nix-flake @@ -47,13 +47,13 @@ pipeline { steps { script { sh("""#!/usr/bin/env bash ${nix._sourceProfileInline()} - nix build --print-out-paths .#library + nix build --print-out-paths .#dynamic-library """) } } } stage('Check') { steps { - sh 'ldd ./result/bin/c' + sh 'ldd ./result/bin/libgowaku.a' } } } diff --git a/default.nix b/default.nix new file mode 100644 index 000000000..00a01af8c --- /dev/null +++ b/default.nix @@ -0,0 +1,33 @@ +{ + pkgs ? import { }, + self ? ./., + subPkgs ? "cmd/waku", + ldflags ? [], + output ? null, + commit ? builtins.substring 0 7 (self.rev or "dirty"), + version ? builtins.readFile ./VERSION, +}: + +pkgs.buildGo120Module { + name = "go-waku"; + src = self; + + subPackages = subPkgs; + tags = ["gowaku_no_rln"]; + ldflags = [ + "-X github.com/waku-org/go-waku/waku/v2/node.GitCommit=${commit}" + "-X github.com/waku-org/go-waku/waku/v2/node.Version=${version}" + ] ++ ldflags; + doCheck = false; + + # Otherwise library would be just called bin/c. + postInstall = if builtins.isString output then '' + mv $out/bin/* $out/bin/${output} + '' else ""; + + # FIXME: This needs to be manually changed when updating modules. + vendorHash = "sha256-pNkh5ZJEhC/X/SoqfWcm3w7W1EGOT3m2dzePM/XuA9w="; + + # Fix for 'nix run' trying to execute 'go-waku'. + meta = { mainProgram = "waku"; }; +} diff --git a/flake.nix b/flake.nix index dd3ce7884..b7d4afe51 100644 --- a/flake.nix +++ b/flake.nix @@ -34,17 +34,31 @@ meta = { mainProgram = "waku"; }; }; in rec { - packages = forAllSystems (system: { - node = buildPackage system ["cmd/waku"]; - library = buildPackage system ["library/c"]; + packages = forAllSystems (system: let + pkgs = pkgsFor.${system}; + buildPackage = pkgs.callPackage ./default.nix; + in rec { + default = node; + node = buildPackage { + inherit self; + subPkgs = ["cmd/waku"]; + }; + static-library = buildPackage { + inherit self; + subPkgs = ["library/c"]; + ldflags = ["-buildmode=c-archive"]; + output = "libgowaku.a"; + }; + dynamic-library = buildPackage { + inherit self; + subPkgs = ["library/c"]; + ldflags = ["-buildmode=c-shared"]; + output = "libgowaku.a"; + }; }); - defaultPackage = forAllSystems (system: - buildPackage system ["cmd/waku"] - ); - devShells = forAllSystems (system: let - pkgs = nixpkgsFor.${system}; + pkgs = pkgsFor.${system}; inherit (pkgs) lib stdenv mkShell; in { default = mkShell { From 81b0b92239563b274168031e3b546aedc0f68fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Mon, 15 Apr 2024 18:36:20 +0300 Subject: [PATCH 2/2] attempt to fix dynamic library build error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ``` /nix/store/mzrw2zphz9xx9s3qq8x5zpf18isp0jga-go-1.20.3/share/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1 /nix/store/ybw485608d7f1yv1v071j2052q64mvla-binutils-2.40/bin/ld: /build/go-link-2631521468/go.o: relocation R_X86_64_TPOFF32 against `runtime.tlsg' can not be used when making a shared object; recompile with -fPIC /nix/store/ybw485608d7f1yv1v071j2052q64mvla-binutils-2.40/bin/ld: failed to set dynamic section sizes: bad value collect2: error: ld returned 1 exit status ``` Signed-off-by: Jakub Sokołowski --- default.nix | 3 +++ flake.nix | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/default.nix b/default.nix index 00a01af8c..978c5da05 100644 --- a/default.nix +++ b/default.nix @@ -3,6 +3,7 @@ self ? ./., subPkgs ? "cmd/waku", ldflags ? [], + cgoLdflags ? "", output ? null, commit ? builtins.substring 0 7 (self.rev or "dirty"), version ? builtins.readFile ./VERSION, @@ -18,6 +19,8 @@ pkgs.buildGo120Module { "-X github.com/waku-org/go-waku/waku/v2/node.GitCommit=${commit}" "-X github.com/waku-org/go-waku/waku/v2/node.Version=${version}" ] ++ ldflags; + CGO_LDFLAGS = cgoLdflags; + GOGCCFLAGS = "-fPIC"; doCheck = false; # Otherwise library would be just called bin/c. diff --git a/flake.nix b/flake.nix index b7d4afe51..35a7cd6cb 100644 --- a/flake.nix +++ b/flake.nix @@ -53,7 +53,8 @@ inherit self; subPkgs = ["library/c"]; ldflags = ["-buildmode=c-shared"]; - output = "libgowaku.a"; + cgoLdflags = "-Wl,-Bsymbolic,-soname,libgowaku.so.0"; + output = "libgowaku.so"; }; });