diff --git a/.bazelrc b/.bazelrc index 117762c5..e10f79bb 100644 --- a/.bazelrc +++ b/.bazelrc @@ -18,8 +18,8 @@ build --workspace_status_command=$(pwd)/workspace_status.sh # To update these lines, execute # `bazel run @rules_bazel_integration_test//tools:update_deleted_packages` # docs: https://bazel.build/reference/command-line-reference#flag--deleted_packages -build --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/canonical-name-module,e2e/workspace/canonical-name-module/other,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/import-names-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-cmake-library,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/third_party/arocc,e2e/workspace/third_party/translate-c,e2e/workspace/toolchain-glibc-version,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/mirrors,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles -query --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/canonical-name-module,e2e/workspace/canonical-name-module/other,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/import-names-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-cmake-library,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/third_party/arocc,e2e/workspace/third_party/translate-c,e2e/workspace/toolchain-glibc-version,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/mirrors,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles +build --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/canonical-name-module,e2e/workspace/canonical-name-module/other,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/import-names-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-include-transitive,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-cmake-library,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/third_party/arocc,e2e/workspace/third_party/translate-c,e2e/workspace/toolchain-glibc-version,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/mirrors,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles +query --deleted_packages=e2e/workspace,e2e/workspace/bazel_builtin,e2e/workspace/c-sources,e2e/workspace/canonical-name-module,e2e/workspace/canonical-name-module/other,e2e/workspace/cc-dependencies,e2e/workspace/cc-dependencies/shared-library,e2e/workspace/cc-dependencies/static-library,e2e/workspace/cc-dependencies/static-library-cdeps,e2e/workspace/configure-mode,e2e/workspace/configure-target,e2e/workspace/configure-threaded,e2e/workspace/configure-use_cc_common_link,e2e/workspace/configure-use_cc_common_link/shared-library,e2e/workspace/configure-use_cc_common_link/static-library,e2e/workspace/configure-version,e2e/workspace/data-dependencies,e2e/workspace/embed-file,e2e/workspace/env-attr,e2e/workspace/import-name-attr,e2e/workspace/import-names-attr,e2e/workspace/include-dependencies,e2e/workspace/include-dependencies/zig-include,e2e/workspace/include-dependencies/zig-include-define,e2e/workspace/include-dependencies/zig-include-isystem,e2e/workspace/include-dependencies/zig-include-transitive,e2e/workspace/include-dependencies/zig-std-include,e2e/workspace/link-dependencies,e2e/workspace/link-dependencies/shared-library,e2e/workspace/link-dependencies/static-library,e2e/workspace/linker-script,e2e/workspace/linkopts-attr,e2e/workspace/location-expansion,e2e/workspace/multiple-sources-and-packages-test,e2e/workspace/multiple-sources-binary,e2e/workspace/root-module-from-single-dependency,e2e/workspace/runfiles-library,e2e/workspace/runfiles-library/dependency,e2e/workspace/runfiles-library/dependency/transitive-dependency,e2e/workspace/simple-binary,e2e/workspace/simple-cmake-library,e2e/workspace/simple-library,e2e/workspace/simple-shared-library,e2e/workspace/simple-test,e2e/workspace/test-runner-attr,e2e/workspace/third_party/arocc,e2e/workspace/third_party/translate-c,e2e/workspace/toolchain-glibc-version,e2e/workspace/transitive-zig-modules-binary,e2e/workspace/transitive-zig-modules-binary/hello-world,e2e/workspace/transitive-zig-modules-binary/hello-world/data,e2e/workspace/transitive-zig-modules-binary/hello-world/data/hello,e2e/workspace/transitive-zig-modules-binary/hello-world/data/world,e2e/workspace/transitive-zig-modules-binary/hello-world/io,e2e/workspace/translate-c/transitive-cc-library-zig-binary,e2e/workspace/zig-docs,e2e/workspace/zig-header,e2e/workspace/zig-module-binary,e2e/workspace/zig-module-binary/data,e2e/workspace/zig-module-binary/io,zig/tests/integration_tests/minimal,zig/tests/integration_tests/mirrors,zig/tests/integration_tests/workspace,zig/tests/integration_tests/workspace/custom_interpreter,zig/tests/integration_tests/workspace/env-attr,zig/tests/integration_tests/workspace/runfiles # Load any settings specific to the current user. # Place settings that should affect the integration tests into `.bazelrc.ic.user`. diff --git a/e2e/workspace/cc-dependencies/static-library-cdeps/BUILD.bazel b/e2e/workspace/cc-dependencies/static-library-cdeps/BUILD.bazel index ecf490d1..c7bb8b70 100644 --- a/e2e/workspace/cc-dependencies/static-library-cdeps/BUILD.bazel +++ b/e2e/workspace/cc-dependencies/static-library-cdeps/BUILD.bazel @@ -29,5 +29,10 @@ cc_test( name = "mul-test", size = "small", srcs = ["mul-test.c"], + # fails on macOS, see //cc-dependencies/static-library:add-test + target_compatible_with = select({ + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], + }), deps = [":mul-small"], ) diff --git a/e2e/workspace/cc-dependencies/static-library/BUILD.bazel b/e2e/workspace/cc-dependencies/static-library/BUILD.bazel index 57d48ef9..5a51e446 100644 --- a/e2e/workspace/cc-dependencies/static-library/BUILD.bazel +++ b/e2e/workspace/cc-dependencies/static-library/BUILD.bazel @@ -17,6 +17,12 @@ cc_test( name = "add-test", size = "small", srcs = ["add-test.c"], + # fails on MacOS with, see https://github.com/hermeticbuild/rules_zig/actions/runs/29501161934/job/87632738367?pr=673#step:3:145 + # ld: 64-bit mach-o member 'libadd_zcu.o' not 8-byte aligned in 'bazel-out/darwin_arm64-fastbuild-ST-8e42560474ff/bin/cc-dependencies/static-library/libadd.a' + target_compatible_with = select({ + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], + }), deps = [":add-small"], ) @@ -43,5 +49,10 @@ cc_test( name = "mul-test", size = "small", srcs = ["mul-test.c"], + # See add-test above. + target_compatible_with = select({ + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], + }), deps = [":mul-small"], ) diff --git a/e2e/workspace/configure-use_cc_common_link/shared-library/BUILD.bazel b/e2e/workspace/configure-use_cc_common_link/shared-library/BUILD.bazel index 98cc07a5..5ef9c4cf 100644 --- a/e2e/workspace/configure-use_cc_common_link/shared-library/BUILD.bazel +++ b/e2e/workspace/configure-use_cc_common_link/shared-library/BUILD.bazel @@ -37,6 +37,10 @@ zig_configure_binary( # https://github.com/ziglang/zig/issues/25069 "@zig_toolchains//:0.15.2": ["@platforms//:incompatible"], "//conditions:default": [], + }) + select({ + # fails on macOS, see //cc-dependencies/static-library:add-test + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], }), use_cc_common_link = 1, ) @@ -81,6 +85,10 @@ zig_configure( # https://github.com/ziglang/zig/issues/25069 "@zig_toolchains//:0.15.2": ["@platforms//:incompatible"], "//conditions:default": [], + }) + select({ + # fails on macOS, see //cc-dependencies/static-library:add-test + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], }), use_cc_common_link = 1, ) @@ -105,6 +113,10 @@ zig_configure_test( # https://github.com/ziglang/zig/issues/25069 "@zig_toolchains//:0.15.2": ["@platforms//:incompatible"], "//conditions:default": [], + }) + select({ + # fails on macOS, see //cc-dependencies/static-library:add-test + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], }), use_cc_common_link = 1, ) @@ -126,6 +138,10 @@ zig_configure( # https://github.com/ziglang/zig/issues/25069 "@zig_toolchains//:0.15.2": ["@platforms//:incompatible"], "//conditions:default": [], + }) + select({ + # fails on macOS, see //cc-dependencies/static-library:add-test + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], }), use_cc_common_link = 1, ) diff --git a/e2e/workspace/configure-use_cc_common_link/static-library/BUILD.bazel b/e2e/workspace/configure-use_cc_common_link/static-library/BUILD.bazel index b3ed3309..fccf478d 100644 --- a/e2e/workspace/configure-use_cc_common_link/static-library/BUILD.bazel +++ b/e2e/workspace/configure-use_cc_common_link/static-library/BUILD.bazel @@ -24,6 +24,10 @@ zig_configure_binary( # https://github.com/ziglang/zig/issues/25069 "@zig_toolchains//:0.15.2": ["@platforms//:incompatible"], "//conditions:default": [], + }) + select({ + # fails on macOS, see //cc-dependencies/static-library:add-test + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], }), use_cc_common_link = 1, ) @@ -62,6 +66,10 @@ zig_configure( # https://github.com/ziglang/zig/issues/25069 "@zig_toolchains//:0.15.2": ["@platforms//:incompatible"], "//conditions:default": [], + }) + select({ + # fails on macOS, see //cc-dependencies/static-library:add-test + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], }), use_cc_common_link = 1, ) @@ -83,6 +91,10 @@ zig_configure_test( # https://github.com/ziglang/zig/issues/25069 "@zig_toolchains//:0.15.2": ["@platforms//:incompatible"], "//conditions:default": [], + }) + select({ + # fails on macOS, see //cc-dependencies/static-library:add-test + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], }), use_cc_common_link = 1, ) diff --git a/e2e/workspace/include-dependencies/zig-include-transitive/BUILD.bazel b/e2e/workspace/include-dependencies/zig-include-transitive/BUILD.bazel new file mode 100644 index 00000000..86e87d6e --- /dev/null +++ b/e2e/workspace/include-dependencies/zig-include-transitive/BUILD.bazel @@ -0,0 +1,44 @@ +load("@bazel_skylib//rules:build_test.bzl", "build_test") +load("@bazel_skylib//rules:diff_test.bzl", "diff_test") +load("@rules_cc//cc:defs.bzl", "cc_library") +load("@rules_zig//zig:defs.bzl", "zig_binary", "zig_library") + +cc_library( + name = "header", + hdrs = ["header.h"], + includes = ["."], +) + +zig_library( + name = "cimport", + main = "cimport.zig", + deps = [":header"], +) + +zig_binary( + name = "binary", + main = "main.zig", + deps = [":cimport"], +) + +build_test( + name = "build", + size = "small", + targets = [ + ":binary", + ], +) + +genrule( + name = "output", + outs = ["output.actual"], + cmd = "$(execpath :binary) > $(OUTS)", + tools = [":binary"], +) + +diff_test( + name = "output_test", + size = "small", + file1 = ":output.expected", + file2 = ":output.actual", +) diff --git a/e2e/workspace/include-dependencies/zig-include-transitive/cimport.zig b/e2e/workspace/include-dependencies/zig-include-transitive/cimport.zig new file mode 100644 index 00000000..ff292a2e --- /dev/null +++ b/e2e/workspace/include-dependencies/zig-include-transitive/cimport.zig @@ -0,0 +1,5 @@ +const c = @cImport({ + @cInclude("header.h"); +}); + +pub const three: u8 = c.THREE; diff --git a/e2e/workspace/include-dependencies/zig-include-transitive/header.h b/e2e/workspace/include-dependencies/zig-include-transitive/header.h new file mode 100644 index 00000000..77685b4f --- /dev/null +++ b/e2e/workspace/include-dependencies/zig-include-transitive/header.h @@ -0,0 +1 @@ +#define THREE 3 diff --git a/e2e/workspace/include-dependencies/zig-include-transitive/main.zig b/e2e/workspace/include-dependencies/zig-include-transitive/main.zig new file mode 100644 index 00000000..bea2367c --- /dev/null +++ b/e2e/workspace/include-dependencies/zig-include-transitive/main.zig @@ -0,0 +1,23 @@ +const builtin = @import("builtin"); +const std = @import("std"); +const cimport = @import("cimport"); + +const is_zig_0_16_or_later = builtin.zig_version.major == 0 and builtin.zig_version.minor >= 16; + +pub const main = if (is_zig_0_16_or_later) main_016 else main_pre_016; + +fn main_pre_016() !void { + var buffer: [512]u8 = undefined; + var writer = std.fs.File.stdout().writer(&buffer); + const stdout = &writer.interface; + try stdout.print("{d}\n", .{cimport.three}); + try stdout.flush(); +} + +fn main_016(init: std.process.Init) !void { + var buffer: [512]u8 = undefined; + var writer = std.Io.File.stdout().writer(init.io, &buffer); + const stdout = &writer.interface; + try stdout.print("{d}\n", .{cimport.three}); + try stdout.flush(); +} diff --git a/e2e/workspace/include-dependencies/zig-include-transitive/output.expected b/e2e/workspace/include-dependencies/zig-include-transitive/output.expected new file mode 100644 index 00000000..00750edc --- /dev/null +++ b/e2e/workspace/include-dependencies/zig-include-transitive/output.expected @@ -0,0 +1 @@ +3 diff --git a/e2e/workspace/linkopts-attr/BUILD.bazel b/e2e/workspace/linkopts-attr/BUILD.bazel index 918010b5..ad807e27 100644 --- a/e2e/workspace/linkopts-attr/BUILD.bazel +++ b/e2e/workspace/linkopts-attr/BUILD.bazel @@ -31,6 +31,10 @@ zig_configure_binary( # https://github.com/ziglang/zig/issues/25069 "@zig_toolchains//:0.15.2": ["@platforms//:incompatible"], "//conditions:default": [], + }) + select({ + # fails on macOS, see //cc-dependencies/static-library:add-test + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], }), use_cc_common_link = 1, ) @@ -44,6 +48,10 @@ zig_configure( # https://github.com/ziglang/zig/issues/25069 "@zig_toolchains//:0.15.2": ["@platforms//:incompatible"], "//conditions:default": [], + }) + select({ + # fails on macOS, see //cc-dependencies/static-library:add-test + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], }), use_cc_common_link = 1, ) @@ -57,6 +65,10 @@ zig_configure_test( # https://github.com/ziglang/zig/issues/25069 "@zig_toolchains//:0.15.2": ["@platforms//:incompatible"], "//conditions:default": [], + }) + select({ + # fails on macOS, see //cc-dependencies/static-library:add-test + "@platforms//os:macos": ["@platforms//:incompatible"], + "//conditions:default": [], }), use_cc_common_link = 1, ) diff --git a/zig/private/common/cdeps.bzl b/zig/private/common/cdeps.bzl index 6569ed90..e784b628 100644 --- a/zig/private/common/cdeps.bzl +++ b/zig/private/common/cdeps.bzl @@ -2,27 +2,61 @@ load("@bazel_skylib//lib:paths.bzl", "paths") -def zig_cdeps_copts(*, compilation_context, args, transitive_inputs): - """Computes arguments and inputs from a CcInfo.compilation_context. +def zig_cdeps_copts(compilation_context): + """Renders CcInfo.compilation_context as Zig flags. + + Zig requires C dependency flags to be set within the consuming module's + command-line section, i.e. before its `-M` flag. Therefore, C dependency + flags cannot be accumulated across the entire compiler invocation and + emitted globally. + + This function is intended to be called from an `Args.add_all(..., map_each = + ...)` callback. It flattens `CompilationContext` `depset`s via `to_list`, + which [Bazel performance guidelines][1] warn against. + + This is safe, because `Args.add_all` does not materialize the argument list, + but stores it for [lazy expansion][2]. Full expansion only occurs [during + execution][3] (see [`StarlarkCustomCommandLine`][4] [`preprocess`][5]). + + Action key calculation does [invoke][6] the `map_each` callback (and thus + this `to_list`) for [fingerprinting][7], including at analysis time for + shared-action [conflict checking][8]. But it does not flatten the module + depset; it walks the structure with [per-subtree digest memoization][9]. The + `CompilationContext` `depset`s this `to_list` flattens are separately cached + on their `NestedSet` behind a [GC-evictable weak reference][10], so they are + recomputed only under memory pressure. + + [1]: https://bazel.build/rules/performance#avoid-depset-to-list + [2]: https://github.com/bazelbuild/bazel/blob/7bfc0881726bbdd6394f210f6132c6973f5532bb/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java#L448-L463 + [3]: https://github.com/bazelbuild/bazel/blob/7bfc0881726bbdd6394f210f6132c6973f5532bb/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java#L366-L379 + [4]: https://github.com/bazelbuild/bazel/blob/7bfc0881726bbdd6394f210f6132c6973f5532bb/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java#L92-L104 + [5]: https://github.com/bazelbuild/bazel/blob/7bfc0881726bbdd6394f210f6132c6973f5532bb/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java#L328-L350 + [6]: https://github.com/bazelbuild/bazel/blob/7bfc0881726bbdd6394f210f6132c6973f5532bb/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java#L398-L408 + [7]: https://github.com/bazelbuild/bazel/blob/7bfc0881726bbdd6394f210f6132c6973f5532bb/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java#L544-L559 + [8]: https://github.com/bazelbuild/bazel/blob/7bfc0881726bbdd6394f210f6132c6973f5532bb/src/main/java/com/google/devtools/build/lib/actions/Actions.java#L76-L93 + [9]: https://github.com/bazelbuild/bazel/blob/7bfc0881726bbdd6394f210f6132c6973f5532bb/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetFingerprintCache.java#L99-L116 + [10]: https://github.com/bazelbuild/bazel/blob/7bfc0881726bbdd6394f210f6132c6973f5532bb/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java#L153-L160 Args: - compilation_context: cc_common.CompilationContext instance. - args: Args; mutable, Append compiler options to this collection. - transitive_inputs: List; mutable, Append inputs to this collection. + compilation_context: `CompilationContext`. + + Returns: + list of string, Zig compiler flags. """ - args.add_all(compilation_context.defines, format_each = "-D%s") - args.add_all(compilation_context.includes, format_each = "-I%s") + copts = [] + copts.extend(["-D%s" % define for define in compilation_context.defines.to_list()]) + copts.extend(["-I%s" % include for include in compilation_context.includes.to_list()]) # Note, Zig does not support `-iquote` as of Zig 0.12.0 - # args.add_all(compilation_context.quote_includes, format_each = "-iquote%s") - args.add_all(compilation_context.quote_includes, format_each = "-I%s") - args.add_all(compilation_context.system_includes, before_each = "-isystem") + copts.extend(["-I%s" % include for include in compilation_context.quote_includes.to_list()]) + for include in compilation_context.system_includes.to_list(): + copts.extend(["-isystem", include]) if hasattr(compilation_context, "external_includes"): # Added in Bazel 7, see https://github.com/bazelbuild/bazel/commit/a6ef0b341a8ffe8ab27e5ace79d8eaae158c422b - args.add_all(compilation_context.external_includes, before_each = "-isystem") - args.add_all(compilation_context.framework_includes, format_each = "-F%s") - - transitive_inputs.append(compilation_context.headers) + for include in compilation_context.external_includes.to_list(): + copts.extend(["-isystem", include]) + copts.extend(["-F%s" % include for include in compilation_context.framework_includes.to_list()]) + return copts def zig_cdeps_linker_inputs(*, linking_context, solib_parents, os, inputs, args, data): """Compiler arguments and inputs from a CcInfo.linking_context. diff --git a/zig/private/common/zig_build.bzl b/zig/private/common/zig_build.bzl index b322d5bc..0b618779 100644 --- a/zig/private/common/zig_build.bzl +++ b/zig/private/common/zig_build.bzl @@ -12,7 +12,7 @@ load( "bazel_builtin_module", BAZEL_BUILTIN_ATTRS = "ATTRS", ) -load("//zig/private/common:cdeps.bzl", "zig_cdeps_copts", "zig_cdeps_linker_inputs") +load("//zig/private/common:cdeps.bzl", "zig_cdeps_linker_inputs") load("//zig/private/common:csrcs.bzl", "zig_csrcs") load("//zig/private/common:data.bzl", "zig_collect_data", "zig_create_runfiles") load("//zig/private/common:escape_label.bzl", "escape_label") @@ -458,13 +458,6 @@ def zig_build_impl(ctx, *, kind): transitive_inputs.append(c_module.transitive_inputs) if root_module.cc_info: - # Add headers to the sandbox for cImport and associated copts. - zig_cdeps_copts( - compilation_context = root_module.cc_info.compilation_context, - args = args, - transitive_inputs = transitive_inputs, - ) - cdeps_inputs = [] if use_cc_common_link == False: # Add all cdeps linker inputs to the sandbox and zig args. diff --git a/zig/private/providers/zig_module_info.bzl b/zig/private/providers/zig_module_info.bzl index 416d064c..db9510a5 100644 --- a/zig/private/providers/zig_module_info.bzl +++ b/zig/private/providers/zig_module_info.bzl @@ -2,6 +2,7 @@ load("@rules_cc//cc/common:cc_common.bzl", "cc_common") load("//zig/private:cc_helper.bzl", "need_translate_c") +load("//zig/private/common:cdeps.bzl", "zig_cdeps_copts") DOC = """\ Information about a Zig module. @@ -27,7 +28,7 @@ ZigModuleInfo = provider( doc = DOC, ) -def _zig_module_context(name, canonical_name, main, deps, cdeps, zigopts, import_names): +def _zig_module_context(name, canonical_name, main, deps, cdeps, compilation_context, zigopts, import_names): mappings = [ struct(name = import_names.get(dep.canonical_name, dep.name), canonical_name = dep.canonical_name) for dep in deps @@ -39,7 +40,8 @@ def _zig_module_context(name, canonical_name, main, deps, cdeps, zigopts, import name = name, canonical_name = canonical_name, main = main.path, - zigopts = zigopts, + compilation_context = compilation_context, + zigopts = tuple(zigopts), dependency_mappings = tuple(mappings), ) @@ -65,7 +67,10 @@ def zig_module_info(*, name, canonical_name, main, srcs = [], extra_srcs = [], d cc_infos = cdeps + [dep.cc_info for dep in deps if dep.cc_info] cc_info = cc_common.merge_cc_infos(direct_cc_infos = cc_infos) - module_context = _zig_module_context(name, canonical_name, main, deps, cdeps, zigopts, import_names) + direct_compilation_context = cc_common.merge_cc_infos(direct_cc_infos = cdeps).compilation_context + cc_headers = [direct_compilation_context.headers] + + module_context = _zig_module_context(name, canonical_name, main, deps, cdeps, direct_compilation_context, zigopts, import_names) module = ZigModuleInfo( name = name, @@ -73,7 +78,7 @@ def zig_module_info(*, name, canonical_name, main, srcs = [], extra_srcs = [], d module_context = module_context, cc_info = cc_info, transitive_module_contexts = depset(direct = [dep.module_context for dep in deps], transitive = [dep.transitive_module_contexts for dep in deps], order = "postorder"), - transitive_inputs = depset(direct = [main] + srcs + extra_srcs, transitive = [dep.transitive_inputs for dep in deps], order = "preorder"), + transitive_inputs = depset(direct = [main] + srcs + extra_srcs, transitive = [dep.transitive_inputs for dep in deps] + cc_headers, order = "preorder"), ) return module @@ -83,6 +88,7 @@ def _render_per_module_args(module): for mapping in module.dependency_mappings: args.extend(["--dep", "{}={}".format(mapping.name, mapping.canonical_name)]) + args.extend(zig_cdeps_copts(module.compilation_context)) args.extend(module.zigopts) args.append("-M{name}={src}".format(name = module.canonical_name, src = module.main)) @@ -99,9 +105,9 @@ def zig_module_specifications(*, root_module, args, c_module = None): """ # The first module is the main module. - args.add_all(_render_per_module_args(root_module.module_context)) + args.add_all([root_module.module_context], map_each = _render_per_module_args) args.add_all(root_module.transitive_module_contexts, map_each = _render_per_module_args) if c_module: - args.add_all(_render_per_module_args(c_module.module_context)) + args.add_all([c_module.module_context], map_each = _render_per_module_args) args.add_all(c_module.transitive_module_contexts, map_each = _render_per_module_args) diff --git a/zig/tests/module_info_test.bzl b/zig/tests/module_info_test.bzl index 700f1f6e..e28a8bb7 100644 --- a/zig/tests/module_info_test.bzl +++ b/zig/tests/module_info_test.bzl @@ -30,6 +30,19 @@ def _bazel_builtin_mod_flags(ctx, label): def _bazel_builtin_dep(label): return "'bazel_builtin={}'".format(_bazel_builtin_canonical_name(label)) +def _expected_cdeps_copts(compilation_context): + copts = [] + copts.extend(["-D{}".format(d) for d in compilation_context.defines.to_list()]) + copts.extend(["-I{}".format(i) for i in compilation_context.includes.to_list()]) + copts.extend(["-I{}".format(i) for i in compilation_context.quote_includes.to_list()]) + for i in compilation_context.system_includes.to_list(): + copts.extend(["-isystem", i]) + if hasattr(compilation_context, "external_includes"): + for i in compilation_context.external_includes.to_list(): + copts.extend(["-isystem", i]) + copts.extend(["-F{}".format(i) for i in compilation_context.framework_includes.to_list()]) + return copts + def _write_simple_module_expected_specs_args_impl(ctx): mod = ctx.attr.mod[ZigModuleInfo] @@ -297,6 +310,7 @@ def _write_simple_module_with_global_c_expected_specs_args_impl(ctx): expected.extend(["--dep", bazel_builtins["data_global_c"].dep]) expected.extend(["--dep", "'c=c'"]) + expected.extend(_expected_cdeps_copts(mods["data_global_c"].module_context.compilation_context)) expected.extend(["'-M{name}={src}'".format( name = mods["data_global_c"].canonical_name, src = mods["data_global_c"].module_context.main,