[zig ld] --gc-sections workaround + tests
`zig cc` emits `--gc-sections` for the linker, which is incompatbile with what CGo thinks about linking. This commit adds a workaround: it will add `--no-gc-sections` to the linking step if the command is not specified (falling back to the default behavior of gcc/clang). Related: https://github.com/golang/go/issues/52690
This commit is contained in:
52
test/cgo/BUILD
Normal file
52
test/cgo/BUILD
Normal file
@@ -0,0 +1,52 @@
|
||||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
||||
load("//rules:rules_go.bzl", "go_binary")
|
||||
load("@bazel-zig-cc//rules:platform.bzl", "platform_binary", "platform_test")
|
||||
|
||||
go_library(
|
||||
name = "cgo_lib",
|
||||
srcs = ["cgo.go"],
|
||||
cgo = True,
|
||||
importpath = "git.sr.ht/~motiejus/bazel-zig-cc/test/cgo",
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
go_test(
|
||||
name = "cgo_test",
|
||||
srcs = ["cgo_test.go"],
|
||||
embed = [":cgo_lib"],
|
||||
)
|
||||
|
||||
go_binary(
|
||||
name = "cgo",
|
||||
embed = [":cgo_lib"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
[
|
||||
platform_binary(
|
||||
name = "cgo_{}".format(name),
|
||||
src = "cgo",
|
||||
platform = platform,
|
||||
)
|
||||
for name, platform in [
|
||||
("linux_amd64_musl", "//libc_aware/platform:linux_amd64_musl"),
|
||||
("linux_amd64_gnu.2.19", "//libc_aware/platform:linux_amd64_gnu.2.19"),
|
||||
("linux_arm64_musl", "//libc_aware/platform:linux_arm64_musl"),
|
||||
("linux_arm64_gnu.2.28", "//libc_aware/platform:linux_arm64_gnu.2.28"),
|
||||
("darwin_amd64", "//platform:darwin_amd64"),
|
||||
]
|
||||
]
|
||||
|
||||
[
|
||||
platform_test(
|
||||
name = "cgo_test_{}".format(name),
|
||||
src = "cgo_test",
|
||||
platform = platform,
|
||||
)
|
||||
for name, platform in [
|
||||
("linux_amd64_musl", "//libc_aware/platform:linux_amd64_musl"),
|
||||
("linux_amd64_gnu.2.19", "//libc_aware/platform:linux_amd64_gnu.2.19"),
|
||||
("linux_arm64_musl", "//libc_aware/platform:linux_arm64_musl"),
|
||||
("linux_arm64_gnu.2.28", "//libc_aware/platform:linux_arm64_gnu.2.28"),
|
||||
]
|
||||
]
|
||||
Reference in New Issue
Block a user