Skip to content

Commit

Permalink
s390x enablement WIP (kubevirt#3357)
Browse files Browse the repository at this point in the history
* s390x enablement

Signed-off-by: cfilleke <[email protected]>

* should resolve remaining merge conflicts

Signed-off-by: cfilleke <[email protected]>

* correct prev commit to resolve merge conflicts

Signed-off-by: cfilleke <[email protected]>

* to resolve generate-verify issue

Signed-off-by: cfilleke <[email protected]>

* provide registry container for s390x, vddk datasource stub fix and util data type fix

Signed-off-by: cfilleke <[email protected]>

* get the linter to fix things

Signed-off-by: cfilleke <[email protected]>

* fix linter issue

Signed-off-by: cfilleke <[email protected]>

---------

Signed-off-by: cfilleke <[email protected]>
Signed-off-by: cfillekes <[email protected]>
  • Loading branch information
cfilleke authored and universal-itengineer committed Oct 29, 2024
1 parent 0ee9782 commit 7c6b06a
Show file tree
Hide file tree
Showing 23 changed files with 313 additions and 5 deletions.
7 changes: 3 additions & 4 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,9 @@ build:s390x --platforms=@io_bazel_rules_go//go/toolchain:linux_s390x_cgo --incom
run:s390x --platforms=@io_bazel_rules_go//go/toolchain:linux_s390x_cgo --incompatible_use_cc_configure_from_rules_cc
test:s390x --platforms=@io_bazel_rules_go//go/toolchain:linux_s390x_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

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
8 changes: 8 additions & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,14 @@ container_pull(
tag = "2.8",
)

container_pull(
name = "registry-s390x",
digest = "sha256:7e1926b82e5b862a633b83acf8f456e1619be720aff346e1b634db2f843082b7",
registry = "quay.io",
repository = "libpod/registry",
tag = "2.8",
)

http_file(
name = "vcenter-govc-tar",
downloaded_file_path = "govc.tar.gz",
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,4 +1,5 @@
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",
)
1 change: 1 addition & 0 deletions cmd/cdi-apiserver/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ load(
container_image(
name = "cdi-apiserver-image",
architecture = select({
"@io_bazel_rules_go//go/platform:linux_s390x": "s390x",
"@io_bazel_rules_go//go/platform:linux_arm64": "arm64",
"//conditions:default": "amd64",
}),
Expand Down
1 change: 1 addition & 0 deletions cmd/cdi-cloner/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ go_test(
container_image(
name = "cdi-cloner-image",
architecture = select({
"@io_bazel_rules_go//go/platform:linux_s390x": "s390x",
"@io_bazel_rules_go//go/platform:linux_arm64": "arm64",
"//conditions:default": "amd64",
}),
Expand Down
1 change: 1 addition & 0 deletions cmd/cdi-controller/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ load(
container_image(
name = "cdi-controller-image",
architecture = select({
"@io_bazel_rules_go//go/platform:linux_s390x": "s390x",
"@io_bazel_rules_go//go/platform:linux_arm64": "arm64",
"//conditions:default": "amd64",
}),
Expand Down
5 changes: 5 additions & 0 deletions cmd/cdi-importer/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ load(
container_image(
name = "cdi-importer-image",
architecture = select({
"@io_bazel_rules_go//go/platform:linux_s390x": "s390x",
"@io_bazel_rules_go//go/platform:linux_arm64": "arm64",
"//conditions:default": "amd64",
}),
Expand All @@ -58,6 +59,10 @@ container_image(
container_image(
name = "importer_base",
tars = select({
"@io_bazel_rules_go//go/platform:linux_s390x": [
"//rpm:cdi_importer_base_s390x",
"//:ca_anchors_tar",
],
"@io_bazel_rules_go//go/platform:linux_arm64": [
"//rpm:cdi_importer_base_aarch64",
"//:ca_anchors_tar",
Expand Down
1 change: 1 addition & 0 deletions cmd/cdi-operator/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ load(
container_image(
name = "cdi-operator-image",
architecture = select({
"@io_bazel_rules_go//go/platform:linux_s390x": "s390x",
"@io_bazel_rules_go//go/platform:linux_arm64": "arm64",
"//conditions:default": "amd64",
}),
Expand Down
1 change: 1 addition & 0 deletions cmd/cdi-uploadproxy/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ load(
container_image(
name = "cdi-uploadproxy-image",
architecture = select({
"@io_bazel_rules_go//go/platform:linux_s390x": "s390x",
"@io_bazel_rules_go//go/platform:linux_arm64": "arm64",
"//conditions:default": "amd64",
}),
Expand Down
4 changes: 4 additions & 0 deletions cmd/cdi-uploadserver/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ load(
container_image(
name = "cdi-uploadserver-image",
architecture = select({
"@io_bazel_rules_go//go/platform:linux_s390x": "s390x",
"@io_bazel_rules_go//go/platform:linux_arm64": "arm64",
"//conditions:default": "amd64",
}),
Expand All @@ -47,6 +48,9 @@ container_image(
container_image(
name = "uploadserver_base",
tars = select({
"@io_bazel_rules_go//go/platform:linux_s390x": [
"//rpm:cdi_uploadserver_base_s390x",
],
"@io_bazel_rules_go//go/platform:linux_arm64": [
"//rpm:cdi_uploadserver_base_aarch64",
],
Expand Down
1 change: 1 addition & 0 deletions hack/build/rpm-deps.sh
Original file line number Diff line number Diff line change
Expand Up @@ -234,3 +234,4 @@ bazel run \
bazel run \
--config=s390x \
//:bazeldnf -- prune

2 changes: 1 addition & 1 deletion hack/build/run-linters.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ MONITORING_LINTER_VERSION="${MONITORING_LINTER_VERSION:-e2be790}"
go install "github.com/golangci/golangci-lint/cmd/golangci-lint@${GOLANGCI_VERSION}"
go install "github.com/kubevirt/monitoring/monitoringlinter/cmd/monitoringlinter@${MONITORING_LINTER_VERSION}"

golangci-lint run ./... "$@"
golangci-lint run ./... "$@"
monitoringlinter ./...
4 changes: 4 additions & 0 deletions pkg/importer/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ go_library(
"util.go",
"vddk-datasource_amd64.go",
"vddk-datasource_arm64.go",
"vddk-datasource_s390x.go",
],
importpath = "kubevirt.io/containerized-data-importer/pkg/importer",
visibility = ["//visibility:public"],
Expand Down Expand Up @@ -62,6 +63,9 @@ go_library(
"@io_bazel_rules_go//go/platform:arm64": [
"//vendor/k8s.io/api/core/v1:go_default_library",
],
"@io_bazel_rules_go//go/platform:s390x": [
"//vendor/k8s.io/api/core/v1:go_default_library",
],
"//conditions:default": [],
}),
)
Expand Down
52 changes: 52 additions & 0 deletions pkg/importer/vddk-datasource_s390x.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
//go:build s390x
// +build s390x

package importer

import (
"errors"
"net/url"

v1 "k8s.io/api/core/v1"


"kubevirt.io/containerized-data-importer/pkg/common"
)

// VDDKDataSource is the data provider for vddk.
type VDDKDataSource struct {
}

func (V VDDKDataSource) Info() (ProcessingPhase, error) {
panic("not support")
}

func (V VDDKDataSource) Transfer(path string) (ProcessingPhase, error) {
panic("not support")
}

func (V VDDKDataSource) TransferFile(fileName string) (ProcessingPhase, error) {
panic("not support")
}

func (V VDDKDataSource) GetURL() *url.URL {
panic("not support")
}

func (V VDDKDataSource) GetTerminationMessage() *common.TerminationMessage {
panic("not support")
}

func (V VDDKDataSource) Close() error {
panic("not support")
}

func (V VDDKDataSource) IsDeltaCopy() bool {
return false
}

func NewVDDKDataSource(endpoint string, accessKey string, secKey string, thumbprint string, uuid string, backingFile string, currentCheckpoint string, previousCheckpoint string, finalCheckpoint string, volumeMode v1.PersistentVolumeMode) (*VDDKDataSource, error) {
return nil, errors.New("the s390x architecture does not support VDDK")
}

var _ DataSourceInterface = &VDDKDataSource{}
4 changes: 4 additions & 0 deletions tools/cdi-func-test-bad-webserver/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@ load("@io_bazel_rules_docker//container:container.bzl", "container_image")
container_image(
name = "cdi-func-test-bad-webserver-image-base",
architecture = select({
"@io_bazel_rules_go//go/platform:linux_s390x": "s390x",
"@io_bazel_rules_go//go/platform:linux_arm64": "arm64",
"//conditions:default": "amd64",
}),
tars = select({
"@io_bazel_rules_go//go/platform:linux_s390x": [
"//rpm:testimage_s390x",
],
"@io_bazel_rules_go//go/platform:linux_arm64": [
"//rpm:testimage_aarch64",
],
Expand Down
Loading

0 comments on commit 7c6b06a

Please sign in to comment.