mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Prepare for supporting cross compilation.
PiperOrigin-RevId: 346496532
This commit is contained in:
+2
-1
@@ -11,7 +11,8 @@ go_library(
|
||||
"futex_linux.go",
|
||||
"io.go",
|
||||
"packet_window_allocator.go",
|
||||
"packet_window_mmap.go",
|
||||
"packet_window_mmap_amd64.go",
|
||||
"packet_window_mmap_arm64.go",
|
||||
],
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
// Copyright 2020 The gVisor Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// +build arm64
|
||||
|
||||
package flipcall
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
)
|
||||
|
||||
// Return a memory mapping of the pwd in memory that can be shared outside the sandbox.
|
||||
func packetWindowMmap(pwd PacketWindowDescriptor) (uintptr, syscall.Errno) {
|
||||
m, _, err := syscall.RawSyscall6(syscall.SYS_MMAP, 0, uintptr(pwd.Length), syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_SHARED, uintptr(pwd.FD), uintptr(pwd.Offset))
|
||||
return m, err
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
load("//tools:defs.bzl", "go_library")
|
||||
load("//tools:defs.bzl", "arch_genrule", "go_library")
|
||||
load("//tools/go_generics:defs.bzl", "go_template", "go_template_instance")
|
||||
|
||||
package(licenses = ["notice"])
|
||||
@@ -39,19 +39,19 @@ go_template_instance(
|
||||
template = ":defs_arm64",
|
||||
)
|
||||
|
||||
genrule(
|
||||
arch_genrule(
|
||||
name = "entry_impl_amd64",
|
||||
srcs = ["entry_amd64.s"],
|
||||
outs = ["entry_impl_amd64.s"],
|
||||
cmd = "(echo -e '// build +amd64\\n' && $(location //pkg/sentry/platform/ring0/gen_offsets) && cat $(SRCS)) > $@",
|
||||
cmd = "(echo -e '// build +amd64\\n' && QEMU $(location //pkg/sentry/platform/ring0/gen_offsets) && cat $(location entry_amd64.s)) > $@",
|
||||
tools = ["//pkg/sentry/platform/ring0/gen_offsets"],
|
||||
)
|
||||
|
||||
genrule(
|
||||
arch_genrule(
|
||||
name = "entry_impl_arm64",
|
||||
srcs = ["entry_arm64.s"],
|
||||
outs = ["entry_impl_arm64.s"],
|
||||
cmd = "(echo -e '// build +arm64\\n' && $(location //pkg/sentry/platform/ring0/gen_offsets) && cat $(SRCS)) > $@",
|
||||
cmd = "(echo -e '// build +arm64\\n' && QEMU $(location //pkg/sentry/platform/ring0/gen_offsets) && cat $(location entry_arm64.s)) > $@",
|
||||
tools = ["//pkg/sentry/platform/ring0/gen_offsets"],
|
||||
)
|
||||
|
||||
|
||||
@@ -24,6 +24,9 @@ go_binary(
|
||||
"defs_impl_arm64.go",
|
||||
"main.go",
|
||||
],
|
||||
# Use the libc malloc to avoid any extra dependencies. This is required to
|
||||
# pass the sentry deps test.
|
||||
system_malloc = True,
|
||||
visibility = [
|
||||
"//pkg/sentry/platform/kvm:__pkg__",
|
||||
"//pkg/sentry/platform/ring0:__pkg__",
|
||||
|
||||
@@ -58,3 +58,21 @@ bzl_library(
|
||||
srcs = ["defs.bzl"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "linux_arm64_cross",
|
||||
values = {
|
||||
"cpu": "aarch64",
|
||||
"host_cpu": "k8",
|
||||
},
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
config_setting(
|
||||
name = "linux_amd64_cross",
|
||||
values = {
|
||||
"cpu": "k8",
|
||||
"host_cpu": "aarch64",
|
||||
},
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
@@ -39,3 +39,44 @@ def default_net_util():
|
||||
|
||||
def coreutil():
|
||||
return [] # Nothing needed.
|
||||
|
||||
def select_native_vs_cross(native = [], amd64 = [], arm64 = [], cross = []):
|
||||
values = {
|
||||
"//tools/bazeldefs:linux_arm64_cross": arm64 + cross,
|
||||
"//tools/bazeldefs:linux_amd64_cross": amd64 + cross,
|
||||
"//conditions:default": native,
|
||||
}
|
||||
return select(values)
|
||||
|
||||
def arch_genrule(name, srcs, outs, cmd, tools):
|
||||
"""Runs a gen command on the target architecture.
|
||||
|
||||
If the target architecture isn't match the host architecture, it will build
|
||||
a command for the target architecture and run it via qemu.
|
||||
|
||||
The native genrule runs the command on the host architecture.
|
||||
|
||||
Args:
|
||||
name: name of generated target.
|
||||
srcs: A list of inputs for this rule.
|
||||
cmd: The command to run. It has to contain " QEMU " before executed binaries.
|
||||
outs: A list of files generated by this rule.
|
||||
tools: A list of tool dependencies for this rule.
|
||||
"""
|
||||
qemu_arm64 = "qemu-aarch64-static"
|
||||
qemu_amd64 = "qemu-x86_64-static"
|
||||
srcs = select_native_vs_cross(
|
||||
cross = srcs + tools,
|
||||
native = srcs,
|
||||
)
|
||||
tools = select_native_vs_cross(
|
||||
cross = [],
|
||||
native = tools,
|
||||
)
|
||||
cmd = select_native_vs_cross(
|
||||
arm64 = cmd.replace("QEMU", qemu_arm64),
|
||||
amd64 = cmd.replace("QEMU", qemu_amd64),
|
||||
native = cmd.replace("QEMU", ""),
|
||||
cross = "",
|
||||
)
|
||||
native.genrule(name = name, srcs = srcs, outs = outs, cmd = cmd, tools = tools)
|
||||
|
||||
@@ -28,7 +28,7 @@ def go_proto_library(name, **kwargs):
|
||||
def go_grpc_and_proto_libraries(name, **kwargs):
|
||||
_go_proto_or_grpc_library(_go_grpc_library, name, **kwargs)
|
||||
|
||||
def go_binary(name, static = False, pure = False, x_defs = None, **kwargs):
|
||||
def go_binary(name, static = False, pure = False, x_defs = None, system_malloc = False, **kwargs):
|
||||
"""Build a go binary.
|
||||
|
||||
Args:
|
||||
@@ -52,7 +52,7 @@ def go_importpath(target):
|
||||
"""Returns the importpath for the target."""
|
||||
return target[GoLibrary].importpath
|
||||
|
||||
def go_library(name, **kwargs):
|
||||
def go_library(name, arch_deps = [], **kwargs):
|
||||
_go_library(
|
||||
name = name,
|
||||
importpath = "gvisor.dev/gvisor/" + native.package_name(),
|
||||
|
||||
+3
-1
@@ -8,7 +8,7 @@ change for Google-internal and bazel-compatible rules.
|
||||
load("//tools/go_stateify:defs.bzl", "go_stateify")
|
||||
load("//tools/go_marshal:defs.bzl", "go_marshal", "marshal_deps", "marshal_test_deps")
|
||||
load("//tools/nogo:defs.bzl", "nogo_test")
|
||||
load("//tools/bazeldefs:defs.bzl", _build_test = "build_test", _bzl_library = "bzl_library", _coreutil = "coreutil", _default_installer = "default_installer", _default_net_util = "default_net_util", _more_shards = "more_shards", _most_shards = "most_shards", _proto_library = "proto_library", _rbe_platform = "rbe_platform", _rbe_toolchain = "rbe_toolchain", _select_arch = "select_arch", _select_system = "select_system", _short_path = "short_path")
|
||||
load("//tools/bazeldefs:defs.bzl", _arch_genrule = "arch_genrule", _build_test = "build_test", _bzl_library = "bzl_library", _coreutil = "coreutil", _default_installer = "default_installer", _default_net_util = "default_net_util", _more_shards = "more_shards", _most_shards = "most_shards", _proto_library = "proto_library", _rbe_platform = "rbe_platform", _rbe_toolchain = "rbe_toolchain", _select_arch = "select_arch", _select_system = "select_system", _short_path = "short_path")
|
||||
load("//tools/bazeldefs:cc.bzl", _cc_binary = "cc_binary", _cc_flags_supplier = "cc_flags_supplier", _cc_grpc_library = "cc_grpc_library", _cc_library = "cc_library", _cc_proto_library = "cc_proto_library", _cc_test = "cc_test", _cc_toolchain = "cc_toolchain", _gbenchmark = "gbenchmark", _grpcpp = "grpcpp", _gtest = "gtest", _vdso_linker_option = "vdso_linker_option")
|
||||
load("//tools/bazeldefs:go.bzl", _gazelle = "gazelle", _go_binary = "go_binary", _go_embed_data = "go_embed_data", _go_grpc_and_proto_libraries = "go_grpc_and_proto_libraries", _go_library = "go_library", _go_path = "go_path", _go_proto_library = "go_proto_library", _go_test = "go_test", _select_goarch = "select_goarch", _select_goos = "select_goos")
|
||||
load("//tools/bazeldefs:pkg.bzl", _pkg_deb = "pkg_deb", _pkg_tar = "pkg_tar")
|
||||
@@ -16,6 +16,7 @@ load("//tools/bazeldefs:platforms.bzl", _default_platform = "default_platform",
|
||||
load("//tools/bazeldefs:tags.bzl", "go_suffixes")
|
||||
|
||||
# Core rules.
|
||||
arch_genrule = _arch_genrule
|
||||
build_test = _build_test
|
||||
bzl_library = _bzl_library
|
||||
default_installer = _default_installer
|
||||
@@ -184,6 +185,7 @@ def go_library(name, srcs, deps = [], imports = [], stateify = True, marshal = F
|
||||
name + suffix + "_state_autogen.go"
|
||||
for suffix in state_sets.keys()
|
||||
]
|
||||
|
||||
if "//pkg/state" not in all_deps:
|
||||
all_deps = all_deps + ["//pkg/state"]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user