bazel_7: fix protobuf test on darwin

This commit is contained in:
Guillaume Maudoux 2023-12-14 13:11:19 +01:00
parent a30a2c9f40
commit 459e800b04
3 changed files with 52 additions and 53 deletions

View File

@ -40,8 +40,6 @@ let
export LD='${darwin.cctools}/bin/ld'
export LIBTOOL='${darwin.cctools}/bin/libtool'
export CC='${stdenv.cc}/bin/clang'
export BAZEL_LINKLIBS='-lstdc++:-lm'
export BAZEL_LINKOPTS='-x:c++'
# XXX: hack for macosX, this flags disable bazel usage of xcode
# See: https://github.com/bazelbuild/bazel/issues/4231
@ -67,33 +65,25 @@ let
inherit workspaceDir;
bazelPkg = bazel;
bazelScript = ''
set -x
env | grep c..abi
${bazel}/bin/bazel build //... \
--enable_bzlmod \
--verbose_failures \
--repository_cache=${mergedDistDir} \
--action_env=NIX_DEBUG=1 \
--announce_rc \
--curses=no \
'' + lib.optionalString (stdenv.isDarwin) ''
--repo_env=BAZEL_LINKLIBS \
--repo_env=BAZEL_LINKOPTS \
--cxxopt=-x --cxxopt=c++ \
--host_cxxopt=-x --host_cxxopt=c++ \
--action_env=NIX_CFLAGS_COMPILE \
--action_env=NIX_LDFLAGS \
'' + lib.optionalString (stdenv.cc.isClang && stdenv ? cc.libcxx.cxxabi.libName) ''
--linkopt=-Wl,-l${stdenv.cc.libcxx.cxxabi.libName} \
--linkopt=-L${stdenv.cc.libcxx.cxxabi}/lib \
--host_linkopt=-Wl,-l${stdenv.cc.libcxx.cxxabi.libName} \
--host_linkopt=-L${stdenv.cc.libcxx.cxxabi}/lib \
'' + lib.optionalString (stdenv.isDarwin && Foundation != null) ''
--linkopt=-Wl,-F${Foundation}/Library/Frameworks \
--linkopt=-L${darwin.libobjc}/lib \
'' + ''
'';
#'' + lib.optionalString (stdenv.isDarwin) ''
# --repo_env=BAZEL_LINKLIBS='-lstdc++:-lm' \
#'' + lib.optionalString (stdenv.isDarwin) ''
# --cxxopt=-x --cxxopt=c++ --host_cxxopt=-x --host_cxxopt=c++ \
# --linkopt=-Wl,-lstdc++ --host_linkopt=-Wl,-lstdc++ \
};
in testBazel

View File

@ -1,24 +1,25 @@
{ bazel
, Foundation
, bazelTest
, callPackage
, darwin
, distDir
, extraBazelArgs ? ""
, fetchFromGitHub
, fetchurl
, stdenv
, darwin
, extraBazelArgs ? ""
, lib
, openjdk8
, jdk11_headless
, runLocal
, runtimeShell
, writeScript
, writeText
, distDir
, Foundation
, callPackage
, lib
, libtool
, lndir
, openjdk8
, repoCache
, runLocal
, runtimeShell
, stdenv
, symlinkJoin
, tree
, writeScript
, writeText
}:
# This test uses bzlmod because I could not make it work without it.
@ -35,7 +36,7 @@ let
# [nix-shell]$ cp MODULE.bazel.lock $HERE/protobuf-test.MODULE.bazel.lock
lockfile = ./protobuf-test.MODULE.bazel.lock;
protocbufRepoCache = callPackage ./bazel-repository-cache.nix {
protobufRepoCache = callPackage ./bazel-repository-cache.nix {
# We are somewhat lucky that bazel's own lockfile works for our tests.
# Use extraDeps if the tests need things that are not in that lockfile.
# But most test dependencies are bazel's builtin deps, so that at least aligns.
@ -46,6 +47,11 @@ let
null == builtins.match ".*(macos|osx|linux|win|android|maven).*" name;
};
mergedRepoCache = symlinkJoin {
name = "mergedDistDir";
paths = [ protobufRepoCache distDir ];
};
MODULE = writeText "MODULE.bazel" ''
bazel_dep(name = "rules_proto", version = "5.3.0-21.7")
bazel_dep(name = "protobuf", version = "21.7")
@ -137,29 +143,26 @@ let
];
bazelScript = ''
# Augment bundled repository_cache with our extra paths
mkdir -p $PWD/.repository_cache/content_addressable
${lndir}/bin/lndir ${repoCache}/content_addressable \
$PWD/.repository_cache/content_addressable
${lndir}/bin/lndir ${protocbufRepoCache}/content_addressable \
$PWD/.repository_cache/content_addressable
tree $PWD/.repository_cache
${bazel}/bin/bazel \
build \
--repository_cache=$PWD/.repository_cache \
--repository_cache=${mergedRepoCache} \
${extraBazelArgs} \
--enable_bzlmod \
--verbose_failures \
//... \
'' + lib.optionalString (lib.strings.versionOlder bazel.version "5.0.0") ''
--host_javabase='@local_jdk//:jdk' \
--java_toolchain='@bazel_tools//tools/jdk:toolchain_hostjdk8' \
--javabase='@local_jdk//:jdk' \
--host_javabase='@local_jdk//:jdk' \
--java_toolchain='@bazel_tools//tools/jdk:toolchain_hostjdk8' \
--javabase='@local_jdk//:jdk' \
'' + lib.optionalString (stdenv.isDarwin) ''
--cxxopt=-x --cxxopt=c++ --host_cxxopt=-x --host_cxxopt=c++ \
--linkopt=-stdlib=libc++ --host_linkopt=-stdlib=libc++ \
--cxxopt=-x --cxxopt=c++ --host_cxxopt=-x --host_cxxopt=c++ \
'' + lib.optionalString (stdenv.cc.isClang && stdenv ? cc.libcxx.cxxabi.libName) ''
--linkopt=-Wl,-l${stdenv.cc.libcxx.cxxabi.libName} \
--linkopt=-L${stdenv.cc.libcxx.cxxabi}/lib \
--host_linkopt=-Wl,-l${stdenv.cc.libcxx.cxxabi.libName} \
--host_linkopt=-L${stdenv.cc.libcxx.cxxabi}/lib \
'' + ''
'';
};

View File

@ -126,26 +126,32 @@ let
hash = "sha256-DaPKp7Sn5uvfZRjdDx6grot3g3B7trqCyL0TRIdwg98=";
};
callBazelTests = args:
callBazelTests = bazel:
let
callBazelTest = newScope {
inherit runLocal bazelTest bazel-examples;
inherit Foundation;
bazel = bazel_self;
inherit bazel;
distDir = testsDistDir;
extraBazelArgs = "";
repoCache = testsRepoCache;
};
in
recurseIntoAttrs (
(lib.optionalAttrs (!isDarwin) {
# `extracted` doesnt work on darwin
shebang = callBazelTest ../shebang-test.nix (args // { inherit extracted; });
shebang = callBazelTest ../shebang-test.nix {
inherit extracted;
extraBazelArgs = "--noenable_bzlmod";
};
}) // {
bashTools = callBazelTest ../bash-tools-test.nix args;
cpp = callBazelTest ./cpp-test.nix args;
java = callBazelTest ../java-test.nix args;
pythonBinPath = callBazelTest ../python-bin-path-test.nix args;
protobuf = callBazelTest ./protobuf-test.nix (args // { repoCache = testsRepoCache; });
bashTools = callBazelTest ../bash-tools-test.nix { };
cpp = callBazelTest ./cpp-test.nix { };
java = callBazelTest ../java-test.nix {
extraBazelArgs = "--noenable_bzlmod";
};
pythonBinPath = callBazelTest ../python-bin-path-test.nix { };
protobuf = callBazelTest ./protobuf-test.nix { };
}
);
@ -156,8 +162,8 @@ recurseIntoAttrs {
distDir = testsDistDir;
testsRepoCache = testsRepoCache;
vanilla = callBazelTests { };
withNixHacks = callBazelTests { bazel = bazelWithNixHacks; };
vanilla = callBazelTests bazel_self;
withNixHacks = callBazelTests bazelWithNixHacks;
# add some downstream packages using buildBazelPackage
downstream = recurseIntoAttrs ({