Skip to content

Commit

Permalink
s390x: Enable cross-compiling
Browse files Browse the repository at this point in the history
Enable cross-compiling s390x on x86_64 by using the cross-compile image.

Signed-off-by: Jan Schintag <[email protected]>
  • Loading branch information
jschintag committed Jun 18, 2024
1 parent 4a3aba6 commit b623f27
Show file tree
Hide file tree
Showing 6 changed files with 199 additions and 1 deletion.
4 changes: 4 additions & 0 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ build:crossbuild-aarch64 --incompatible_enable_cc_toolchain_resolution --platfor
run:crossbuild-aarch64 --incompatible_enable_cc_toolchain_resolution --platforms=//bazel/platforms:aarch64-none-linux-gnu --platforms=@io_bazel_rules_go//go/toolchain:linux_arm64_cgo
test:crossbuild-aarch64 --platforms=@io_bazel_rules_go//go/toolchain:linux_arm64_cgo --host_javabase=@local_jdk//:jdk

build:crossbuild-s390x --incompatible_enable_cc_toolchain_resolution --platforms=//bazel/platforms:s390x-none-linux-gnu --platforms=@io_bazel_rules_go//go/toolchain:linux_s390x_cgo
run:crossbuild-s390x --incompatible_enable_cc_toolchain_resolution --platforms=//bazel/platforms:s390x-none-linux-gnu --platforms=@io_bazel_rules_go//go/toolchain:linux_s390x_cgo
test:crossbuild-s390x --platforms=@io_bazel_rules_go//go/toolchain:linux_s390x_cgo --host_javabase=@local_jdk//:jdk

build --define gotags=selinux

# let our unit tests produce our own junit reports
Expand Down
2 changes: 1 addition & 1 deletion automation/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ function ensure_gh_cli_installed() {
gh config set prompt disabled
}

export BUILD_ARCH=aarch64,x86_64
export BUILD_ARCH=s390x,aarch64,x86_64
export KUBEVIRT_RELEASE=true

function build_release_artifacts() {
Expand Down
8 changes: 8 additions & 0 deletions bazel/platforms/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ platform(
],
)

platform(
name = "s390x-none-linux-gnu",
constraint_values = [
"@platforms//cpu:s390x",
"@platforms//os:linux",
],
)

platform(
name = "x86_64-none-linux-gnu",
constraint_values = [
Expand Down
41 changes: 41 additions & 0 deletions bazel/toolchain/s390x-none-linux-gnu/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package(default_visibility = ["//visibility:public"])

load(":cc_toolchain_config.bzl", "cc_toolchain_config")

filegroup(name = "empty")

cc_toolchain_config(name = "s390x_toolchain_config")

cc_toolchain(
name = "s390x_toolchain",
all_files = ":empty",
compiler_files = ":empty",
dwp_files = ":empty",
linker_files = ":empty",
objcopy_files = ":empty",
strip_files = ":empty",
toolchain_config = ":s390x_toolchain_config",
toolchain_identifier = "s390x-toolchain",
)

cc_toolchain_suite(
name = "gcc_toolchain",
tags = ["manual"],
toolchains = {
"s390x": ":s390x_toolchain",
},
)

toolchain(
name = "s390x_linux_toolchain",
exec_compatible_with = [
"@platforms//os:linux",
"@platforms//cpu:x86_64",
],
target_compatible_with = [
"@platforms//os:linux",
"@platforms//cpu:s390x",
],
toolchain = ":s390x_toolchain",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
144 changes: 144 additions & 0 deletions bazel/toolchain/s390x-none-linux-gnu/cc_toolchain_config.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
load(
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
"feature",
"flag_group",
"flag_set",
"tool_path",
)

all_link_actions = [
ACTION_NAMES.cpp_link_executable,
ACTION_NAMES.cpp_link_dynamic_library,
ACTION_NAMES.cpp_link_nodeps_dynamic_library,
]

all_compile_actions = [
ACTION_NAMES.assemble,
ACTION_NAMES.c_compile,
ACTION_NAMES.clif_match,
ACTION_NAMES.cpp_compile,
ACTION_NAMES.cpp_header_parsing,
ACTION_NAMES.cpp_module_codegen,
ACTION_NAMES.cpp_module_compile,
ACTION_NAMES.linkstamp_compile,
ACTION_NAMES.lto_backend,
ACTION_NAMES.preprocess_assemble,
]

def _impl(ctx):
tool_paths = [
tool_path(
name = "ar",
path = "/usr/bin/s390x-linux-gnu-ar",
),
tool_path(
name = "cpp",
path = "/usr/bin/s390x-linux-gnu-cpp",
),
tool_path(
name = "gcc",
path = "/usr/bin/s390x-linux-gnu-gcc",
),
tool_path(
name = "gcov",
path = "/usr/bin/s390x-linux-gnu-gcov",
),
tool_path(
name = "ld",
path = "/usr/bin/s390x-linux-gnu-ld",
),
tool_path(
name = "nm",
path = "/usr/bin/s390x-linux-gnu-nm",
),
tool_path(
name = "objdump",
path = "/usr/bin/s390x-linux-gnu-objdump",
),
tool_path(
name = "strip",
path = "/usr/bin/s390x-linux-gnu-strip",
),
]

# Update the value of __TOOLCHAIN_SYSROOT__ every time the list
# of cxx_builtin_include_directories has been modified.
#
# This is needed to make bazel realize that the updated toolchain
# is different from the previous one and handle caching correctly.
#
# https://github.com/kubevirt/kubevirt/pull/8404#issuecomment-1275096374
default_compiler_flags = feature(
name = "default_compiler_flags",
enabled = True,
flag_sets = [
flag_set(
actions = all_compile_actions,
flag_groups = [
flag_group(
flags = [
"-no-canonical-prefixes",
"-fno-canonical-system-headers",
"-Wno-builtin-macro-redefined",
"-D__DATE__=\"redacted\"",
"-D__TIMESTAMP__=\"redacted\"",
"-D__TIME__=\"redacted\"",
"-D__TOOLCHAIN_SYSROOT__=\"centos-stream-9\"",
"-nostdinc",
"-I/usr/s390x-linux-gnu/sys-root/usr/include",
"-I/usr/lib/gcc/s390x-linux-gnu/12/include",
"-I/usr/lib/gcc/s390x-linux-gnu/12/include-fixed",
],
),
],
),
],
)

default_linker_flags = feature(
name = "default_linker_flags",
enabled = True,
flag_sets = [
flag_set(
actions = all_link_actions,
flag_groups = ([
flag_group(
flags = [
"",
],
),
]),
),
],
)

features = [
default_compiler_flags,
default_linker_flags,
]

return cc_common.create_cc_toolchain_config_info(
ctx = ctx,
cxx_builtin_include_directories = [
"/usr/s390x-linux-gnu/sys-root/usr/include",
"/usr/lib/gcc/s390x-linux-gnu/12/include",
"/usr/lib/gcc/s390x-linux-gnu/12/include-fixed",
],
features = features,
toolchain_identifier = "s390x-toolchain",
host_system_name = "local",
target_system_name = "unknown",
target_cpu = "unknown",
target_libc = "unknown",
compiler = "unknown",
abi_version = "unknown",
abi_libc_version = "unknown",
tool_paths = tool_paths,
)

cc_toolchain_config = rule(
implementation = _impl,
attrs = {},
provides = [CcToolchainConfigInfo],
)
1 change: 1 addition & 0 deletions bazel/toolchain/toolchain.bzl
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
def register_all_toolchains():
native.register_toolchains(
"//bazel/toolchain/s390x-none-linux-gnu:s390x_linux_toolchain",
"//bazel/toolchain/aarch64-none-linux-gnu:aarch64_linux_toolchain",
"//bazel/toolchain/x86_64-none-linux-gnu:x86_64_linux_toolchain",
)

0 comments on commit b623f27

Please sign in to comment.