res_search: fix for aarch64
On linux_aarch64 `res_search` is `__res_search@GLIBC_2.17`, which is different from the x86_64 counterpart `__res_search@GLIBC_2.2.5`. Also fix tests.
This commit is contained in:
parent
a47c7abc96
commit
8d1e1c9fa6
@ -6,7 +6,6 @@ go_library(
|
|||||||
name = "cgo_lib",
|
name = "cgo_lib",
|
||||||
srcs = ["cgo.go"],
|
srcs = ["cgo.go"],
|
||||||
cgo = True,
|
cgo = True,
|
||||||
clinkopts = ["-lresolv"],
|
|
||||||
importpath = "git.sr.ht/~motiejus/bazel-zig-cc/test/cgo",
|
importpath = "git.sr.ht/~motiejus/bazel-zig-cc/test/cgo",
|
||||||
visibility = ["//visibility:private"],
|
visibility = ["//visibility:private"],
|
||||||
)
|
)
|
||||||
|
@ -1,13 +1,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
// #define _FILE_OFFSET_BITS 64
|
|
||||||
// #include <unistd.h>
|
|
||||||
// #include <fcntl.h>
|
|
||||||
// #include <stdio.h>
|
// #include <stdio.h>
|
||||||
// #include <resolv.h>
|
|
||||||
// char* hello() { return "hello, world"; }
|
// char* hello() { return "hello, world"; }
|
||||||
// void phello() { printf("%s, your lucky numbers are %p and %p\n", hello(), fcntl, res_search); }
|
// void phello() { printf("%s\n", hello()); }
|
||||||
// #cgo LDFLAGS: -lresolv
|
|
||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
22
test/glibc_hacks/BUILD
Normal file
22
test/glibc_hacks/BUILD
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
load("@bazel-zig-cc//rules:platform.bzl", "platform_binary")
|
||||||
|
|
||||||
|
cc_binary(
|
||||||
|
name = "main",
|
||||||
|
srcs = ["main.c"],
|
||||||
|
)
|
||||||
|
|
||||||
|
[
|
||||||
|
(
|
||||||
|
platform_binary(
|
||||||
|
name = "main_{}".format(name),
|
||||||
|
src = "main",
|
||||||
|
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_amd64_gnu.2.28", "//libc_aware/platform:linux_amd64_gnu.2.28"),
|
||||||
|
("linux_arm64_musl", "//libc_aware/platform:linux_arm64_musl"),
|
||||||
|
]
|
||||||
|
]
|
13
test/glibc_hacks/main.c
Normal file
13
test/glibc_hacks/main.c
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// This file tests that problematic functions (glibc-hacks) work.
|
||||||
|
// Also see https://github.com/ziglang/zig/issues/9485
|
||||||
|
|
||||||
|
#define _FILE_OFFSET_BITS 64
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <resolv.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
printf("Your lucky numbers are %p and %p\n", fcntl, res_search);
|
||||||
|
return 0;
|
||||||
|
}
|
@ -208,9 +208,12 @@ def _zig_repository_impl(repository_ctx):
|
|||||||
fcntl_hack = _glibc_hack("fcntl64", "fcntl@GLIBC_2.2.5")
|
fcntl_hack = _glibc_hack("fcntl64", "fcntl@GLIBC_2.2.5")
|
||||||
repository_ctx.file("glibc-hacks/fcntl.map", content = fcntl_hack.mapfile)
|
repository_ctx.file("glibc-hacks/fcntl.map", content = fcntl_hack.mapfile)
|
||||||
repository_ctx.file("glibc-hacks/fcntl.h", content = fcntl_hack.header)
|
repository_ctx.file("glibc-hacks/fcntl.h", content = fcntl_hack.header)
|
||||||
res_search_hack = _glibc_hack("res_search", "__res_search@GLIBC_2.2.5")
|
res_search_amd64 = _glibc_hack("res_search", "__res_search@GLIBC_2.2.5")
|
||||||
repository_ctx.file("glibc-hacks/res_search.map", content = res_search_hack.mapfile)
|
repository_ctx.file("glibc-hacks/res_search-amd64.map", content = res_search_amd64.mapfile)
|
||||||
repository_ctx.file("glibc-hacks/res_search.h", content = res_search_hack.header)
|
repository_ctx.file("glibc-hacks/res_search-amd64.h", content = res_search_amd64.header)
|
||||||
|
res_search_arm64 = _glibc_hack("res_search", "__res_search@GLIBC_2.17")
|
||||||
|
repository_ctx.file("glibc-hacks/res_search-arm64.map", content = res_search_arm64.mapfile)
|
||||||
|
repository_ctx.file("glibc-hacks/res_search-arm64.h", content = res_search_arm64.header)
|
||||||
|
|
||||||
zig_repository = repository_rule(
|
zig_repository = repository_rule(
|
||||||
attrs = {
|
attrs = {
|
||||||
|
@ -128,8 +128,8 @@ def _target_linux_gnu(gocpu, zigcpu, glibc_version):
|
|||||||
compiler_extra_includes.append("glibc-hacks/fcntl.h")
|
compiler_extra_includes.append("glibc-hacks/fcntl.h")
|
||||||
linker_version_scripts.append("glibc-hacks/fcntl.map")
|
linker_version_scripts.append("glibc-hacks/fcntl.map")
|
||||||
if glibc_version < "2.34":
|
if glibc_version < "2.34":
|
||||||
compiler_extra_includes.append("glibc-hacks/res_search.h")
|
compiler_extra_includes.append("glibc-hacks/res_search-{}.h".format(gocpu))
|
||||||
linker_version_scripts.append("glibc-hacks/res_search.map")
|
linker_version_scripts.append("glibc-hacks/res_search-{}.map".format(gocpu))
|
||||||
|
|
||||||
return struct(
|
return struct(
|
||||||
gotarget = "linux_{}_{}".format(gocpu, glibc_suffix),
|
gotarget = "linux_{}_{}".format(gocpu, glibc_suffix),
|
||||||
|
Loading…
Reference in New Issue
Block a user