1

implement fcntl64 hack

glibc overrides fcntl with a macro to fcntl64; implement some trickery
to bring back fcntl on older toolchain.
This commit is contained in:
Motiejus Jakštys 2021-07-28 23:42:28 +03:00
parent 14cb54fbd4
commit 5bf03915be
2 changed files with 35 additions and 3 deletions

View File

@ -8,3 +8,5 @@ zig_build_macro(
absolute_path = {absolute_path}, absolute_path = {absolute_path},
zig_include_root = {zig_include_root}, zig_include_root = {zig_include_root},
) )
exports_files(["glibc-hacks/fcntl.map", "glibc-hacks/fcntl.h"])

View File

@ -18,6 +18,16 @@ DEFAULT_INCLUDE_DIRECTORIES = [
"libcxxabi/include", "libcxxabi/include",
] ]
# https://github.com/ziglang/zig/issues/5882#issuecomment-888250676
# only required for glibc 2.27 or lower.
_fcntl_map = """
GLIBC_2.2.5 {
fcntl;
};
"""
_fcntl_h = """asm (".symver fcntl64, fcntl@GLIBC_2.2.5");\n"""
# https://github.com/ziglang/zig/blob/0cfa39304b18c6a04689bd789f5dc4d035ec43b0/src/main.zig#L2962-L2966 # https://github.com/ziglang/zig/blob/0cfa39304b18c6a04689bd789f5dc4d035ec43b0/src/main.zig#L2962-L2966
TARGET_CONFIGS_LISTOFLISTS = [[ TARGET_CONFIGS_LISTOFLISTS = [[
struct( struct(
@ -50,6 +60,8 @@ TARGET_CONFIGS_LISTOFLISTS = [[
"libc/include/{}-linux-gnu".format(zigcpu), "libc/include/{}-linux-gnu".format(zigcpu),
"libc/include/{}-linux-any".format(zigcpu), "libc/include/{}-linux-any".format(zigcpu),
], ],
linker_version_script = "glibc-hacks/fcntl.map",
compiler_extra_include = "glibc-hacks/fcntl.h",
linkopts = ["-lc++", "-lc++abi"], linkopts = ["-lc++", "-lc++abi"],
copts = [], copts = [],
bazel_target_cpu = "k8", bazel_target_cpu = "k8",
@ -163,6 +175,15 @@ def _zig_repository_impl(repository_ctx):
ZIG_TOOL_WRAPPER.format(zig = str(repository_ctx.path("zig")), zig_tool = zig_tool), ZIG_TOOL_WRAPPER.format(zig = str(repository_ctx.path("zig")), zig_tool = zig_tool),
) )
repository_ctx.file(
"glibc-hacks/fcntl.map",
content = _fcntl_map,
)
repository_ctx.file(
"glibc-hacks/fcntl.h",
content = _fcntl_h,
)
repository_ctx.template( repository_ctx.template(
"BUILD.bazel", "BUILD.bazel",
Label("//toolchain:BUILD.sdk.bazel"), Label("//toolchain:BUILD.sdk.bazel"),
@ -217,16 +238,25 @@ def zig_build_macro(absolute_path, zig_include_root):
tool_path = ZIG_TOOL_PATH.format(zig_tool = path) tool_path = ZIG_TOOL_PATH.format(zig_tool = path)
absolute_tool_paths[name] = "%s/%s" % (absolute_path, tool_path) absolute_tool_paths[name] = "%s/%s" % (absolute_path, tool_path)
linkopts = target_config.linkopts
copts = target_config.copts
compiler_extra_include = getattr(target_config, "compiler_extra_include", None)
linker_version_script = getattr(target_config, "linker_version_script", None)
if linker_version_script:
linkopts = linkopts + ["-Wl,--version-script,%s/%s" % (absolute_path, linker_version_script)]
if compiler_extra_include:
copts = copts + ["-include", "%s/%s" % (absolute_path, compiler_extra_include)]
zig_cc_toolchain_config( zig_cc_toolchain_config(
name = zigtarget + "_cc_toolchain_config", name = zigtarget + "_cc_toolchain_config",
target = zigtarget, target = zigtarget,
target_suffix = getattr(target_config, "target_suffix", ""), target_suffix = getattr(target_config, "target_suffix", ""),
tool_paths = absolute_tool_paths, tool_paths = absolute_tool_paths,
cxx_builtin_include_directories = cxx_builtin_include_directories, cxx_builtin_include_directories = cxx_builtin_include_directories,
copts = target_config.copts, copts = copts,
linkopts = target_config.linkopts, linkopts = linkopts,
target_cpu = target_config.bazel_target_cpu,
target_system_name = "unknown", target_system_name = "unknown",
target_cpu = getattr(target_config, "bazel_target_cpu", None),
target_libc = "unknown", target_libc = "unknown",
compiler = "clang", compiler = "clang",
abi_version = "unknown", abi_version = "unknown",