aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platforms/os/BUILD5
-rw-r--r--platforms/os_arch/BUILD.bazel16
-rw-r--r--rules/cc_object.bzl54
3 files changed, 67 insertions, 8 deletions
diff --git a/platforms/os/BUILD b/platforms/os/BUILD
index 62dc3e04..d20d6959 100644
--- a/platforms/os/BUILD
+++ b/platforms/os/BUILD
@@ -32,6 +32,11 @@ alias(
actual = "@platforms//os:linux",
)
+alias(
+ name = "linux_musl",
+ actual = "@platforms//os:linux",
+)
+
constraint_value(
name = "linux_bionic",
constraint_setting = "@platforms//os:os",
diff --git a/platforms/os_arch/BUILD.bazel b/platforms/os_arch/BUILD.bazel
index 5d821c6f..1323450f 100644
--- a/platforms/os_arch/BUILD.bazel
+++ b/platforms/os_arch/BUILD.bazel
@@ -71,6 +71,22 @@ config_setting(
)
config_setting(
+ name = "linux_musl_x86",
+ constraint_values = [
+ "//build/bazel/platforms/arch:x86",
+ "//build/bazel/platforms/os:linux_musl",
+ ],
+)
+
+config_setting(
+ name = "linux_musl_x86_64",
+ constraint_values = [
+ "//build/bazel/platforms/arch:x86_64",
+ "//build/bazel/platforms/os:linux_musl",
+ ],
+)
+
+config_setting(
name = "windows_x86",
constraint_values = [
"//build/bazel/platforms/arch:x86",
diff --git a/rules/cc_object.bzl b/rules/cc_object.bzl
index 3dd216cf..763cb671 100644
--- a/rules/cc_object.bzl
+++ b/rules/cc_object.bzl
@@ -1,6 +1,8 @@
load("@rules_cc//cc:find_cc_toolchain.bzl", "find_cpp_toolchain")
+load(":cc_library_common.bzl", "system_dynamic_deps_defaults")
load(":cc_library_static.bzl", "get_includes_paths")
load(":cc_constants.bzl", "constants")
+load(":stl.bzl", "static_stl_deps")
# "cc_object" module copts, taken from build/soong/cc/object.go
_CC_OBJECT_COPTS = ["-fno-addrsig"]
@@ -22,13 +24,16 @@ CcObjectInfo = provider(fields = [
def split_srcs_hdrs(files):
headers = []
- non_headers = []
+ non_headers_as = []
+ non_headers_c = []
for f in files:
if f.extension in constants.hdr_exts:
headers += [f]
+ elif f.extension in constants.as_src_exts:
+ non_headers_as += [f]
else:
- non_headers += [f]
- return non_headers, headers
+ non_headers_c += [f]
+ return non_headers_c, non_headers_as, headers
def _cc_object_impl(ctx):
cc_toolchain = find_cpp_toolchain(ctx)
@@ -45,18 +50,33 @@ def _cc_object_impl(ctx):
for obj in ctx.attr.deps:
compilation_contexts.append(obj[CcInfo].compilation_context)
deps_objects.append(obj[CcObjectInfo].objects)
+ for includes_dep in ctx.attr.includes_deps:
+ compilation_contexts.append(includes_dep[CcInfo].compilation_context)
product_variables = ctx.attr._android_product_variables[platform_common.TemplateVariableInfo]
asflags = [ctx.expand_make_variables("asflags", flag, product_variables.variables) for flag in ctx.attr.asflags]
- srcs, private_hdrs = split_srcs_hdrs(ctx.files.srcs)
+ srcs_c, srcs_as, private_hdrs = split_srcs_hdrs(ctx.files.srcs)
- (compilation_context, compilation_outputs) = cc_common.compile(
+ (compilation_context, compilation_outputs_c) = cc_common.compile(
name = ctx.label.name,
actions = ctx.actions,
feature_configuration = feature_configuration,
cc_toolchain = cc_toolchain,
- srcs = srcs,
+ srcs = srcs_c,
+ includes = get_includes_paths(ctx, ctx.attr.local_includes) + get_includes_paths(ctx, ctx.attr.absolute_includes, package_relative = False),
+ public_hdrs = ctx.files.hdrs,
+ private_hdrs = private_hdrs,
+ user_compile_flags = ctx.attr.copts,
+ compilation_contexts = compilation_contexts,
+ )
+
+ (compilation_context, compilation_outputs_as) = cc_common.compile(
+ name = ctx.label.name,
+ actions = ctx.actions,
+ feature_configuration = feature_configuration,
+ cc_toolchain = cc_toolchain,
+ srcs = srcs_as,
includes = get_includes_paths(ctx, ctx.attr.local_includes) + get_includes_paths(ctx, ctx.attr.absolute_includes, package_relative = False),
public_hdrs = ctx.files.hdrs,
private_hdrs = private_hdrs,
@@ -71,7 +91,16 @@ def _cc_object_impl(ctx):
local_defines = compilation_context.local_defines,
)
- objects_to_link = cc_common.merge_compilation_outputs(compilation_outputs = deps_objects + [compilation_outputs])
+ objects_to_link = cc_common.merge_compilation_outputs(compilation_outputs = deps_objects + [compilation_outputs_c, compilation_outputs_as])
+
+ user_link_flags = []
+ user_link_flags.extend(_CC_OBJECT_LINKOPTS)
+ additional_inputs = []
+
+ if not ctx.attr.linker_script == None:
+ linker_script = ctx.files.linker_script[0]
+ user_link_flags.append("-Wl,-T," + linker_script.path)
+ additional_inputs.append(linker_script)
# partially link if there are multiple object files
if len(objects_to_link.objects) + len(objects_to_link.pic_objects) > 1:
@@ -80,8 +109,9 @@ def _cc_object_impl(ctx):
actions = ctx.actions,
feature_configuration = feature_configuration,
cc_toolchain = cc_toolchain,
- user_link_flags = _CC_OBJECT_LINKOPTS,
+ user_link_flags = user_link_flags,
compilation_outputs = objects_to_link,
+ additional_inputs = additional_inputs,
)
files = depset([linking_output.executable])
else:
@@ -103,6 +133,8 @@ _cc_object = rule(
"copts": attr.string_list(),
"asflags": attr.string_list(),
"deps": attr.label_list(providers = [CcInfo, CcObjectInfo]),
+ "includes_deps": attr.label_list(providers = [CcInfo]),
+ "linker_script": attr.label(allow_single_file = True),
"_cc_toolchain": attr.label(
default = Label("@local_config_cc//:toolchain"),
providers = [cc_common.CcToolchainInfo],
@@ -125,9 +157,14 @@ def cc_object(
srcs_as = [],
deps = [],
native_bridge_supported = False, # TODO: not supported yet.
+ stl = "",
+ system_dynamic_deps = None,
**kwargs):
"Build macro to correspond with the cc_object Soong module."
+ if system_dynamic_deps == None:
+ system_dynamic_deps = system_dynamic_deps_defaults
+
_cc_object(
name = name,
hdrs = hdrs,
@@ -135,5 +172,6 @@ def cc_object(
copts = _CC_OBJECT_COPTS + copts,
srcs = srcs + srcs_as,
deps = deps,
+ includes_deps = static_stl_deps(stl) + system_dynamic_deps,
**kwargs
)