xref: /aosp_15_r20/build/bazel/rules/cc/cc_object.bzl (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2021 The Android Open Source Project
2*7594170eSAndroid Build Coastguard Worker#
3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*7594170eSAndroid Build Coastguard Worker#
7*7594170eSAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
8*7594170eSAndroid Build Coastguard Worker#
9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*7594170eSAndroid Build Coastguard Worker# limitations under the License.
14*7594170eSAndroid Build Coastguard Worker
15*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo")
16*7594170eSAndroid Build Coastguard Workerload(":cc_constants.bzl", "constants")
17*7594170eSAndroid Build Coastguard Workerload(
18*7594170eSAndroid Build Coastguard Worker    ":cc_library_common.bzl",
19*7594170eSAndroid Build Coastguard Worker    "get_includes_paths",
20*7594170eSAndroid Build Coastguard Worker    "is_external_directory",
21*7594170eSAndroid Build Coastguard Worker    "parse_sdk_version",
22*7594170eSAndroid Build Coastguard Worker    "system_dynamic_deps_defaults",
23*7594170eSAndroid Build Coastguard Worker)
24*7594170eSAndroid Build Coastguard Workerload(":composed_transitions.bzl", "drop_sanitizer_transition")
25*7594170eSAndroid Build Coastguard Workerload(":stl.bzl", "stl_info_from_attr")
26*7594170eSAndroid Build Coastguard Worker
27*7594170eSAndroid Build Coastguard Worker# "cc_object" module copts, taken from build/soong/cc/object.go
28*7594170eSAndroid Build Coastguard Worker_CC_OBJECT_COPTS = ["-fno-addrsig"]
29*7594170eSAndroid Build Coastguard Worker
30*7594170eSAndroid Build Coastguard Worker# partialLd module link opts, taken from build/soong/cc/builder.go
31*7594170eSAndroid Build Coastguard Worker# https://cs.android.com/android/platform/superproject/+/master:build/soong/cc/builder.go;l=87;drc=f2be52c4dcc2e3d743318e106633e61de0ad2afd
32*7594170eSAndroid Build Coastguard Worker_CC_OBJECT_LINKOPTS = [
33*7594170eSAndroid Build Coastguard Worker    "-fuse-ld=lld",
34*7594170eSAndroid Build Coastguard Worker    "-nostdlib",
35*7594170eSAndroid Build Coastguard Worker    "-no-pie",
36*7594170eSAndroid Build Coastguard Worker    "-Wl,-r",
37*7594170eSAndroid Build Coastguard Worker]
38*7594170eSAndroid Build Coastguard Worker
39*7594170eSAndroid Build Coastguard WorkerCcObjectInfo = provider(fields = [
40*7594170eSAndroid Build Coastguard Worker    # The merged compilation outputs for this cc_object and its transitive
41*7594170eSAndroid Build Coastguard Worker    # dependencies.
42*7594170eSAndroid Build Coastguard Worker    "objects",
43*7594170eSAndroid Build Coastguard Worker])
44*7594170eSAndroid Build Coastguard Worker
45*7594170eSAndroid Build Coastguard Workerdef split_srcs_hdrs(files):
46*7594170eSAndroid Build Coastguard Worker    headers = []
47*7594170eSAndroid Build Coastguard Worker    non_headers_as = []
48*7594170eSAndroid Build Coastguard Worker    non_headers_c = []
49*7594170eSAndroid Build Coastguard Worker    for f in files:
50*7594170eSAndroid Build Coastguard Worker        if f.extension in constants.hdr_exts:
51*7594170eSAndroid Build Coastguard Worker            headers.append(f)
52*7594170eSAndroid Build Coastguard Worker        elif f.extension in constants.as_src_exts:
53*7594170eSAndroid Build Coastguard Worker            non_headers_as.append(f)
54*7594170eSAndroid Build Coastguard Worker        else:
55*7594170eSAndroid Build Coastguard Worker            non_headers_c.append(f)
56*7594170eSAndroid Build Coastguard Worker    return non_headers_c, non_headers_as, headers
57*7594170eSAndroid Build Coastguard Worker
58*7594170eSAndroid Build Coastguard Workerdef _objcopy_noaddrsig(ctx, noaddrsig_output, linking_output, cc_toolchain):
59*7594170eSAndroid Build Coastguard Worker    output_file = ctx.actions.declare_file(noaddrsig_output)
60*7594170eSAndroid Build Coastguard Worker
61*7594170eSAndroid Build Coastguard Worker    feature_configuration = cc_common.configure_features(
62*7594170eSAndroid Build Coastguard Worker        ctx = ctx,
63*7594170eSAndroid Build Coastguard Worker        cc_toolchain = cc_toolchain,
64*7594170eSAndroid Build Coastguard Worker        requested_features = ctx.features,
65*7594170eSAndroid Build Coastguard Worker        unsupported_features = ctx.disabled_features,
66*7594170eSAndroid Build Coastguard Worker    )
67*7594170eSAndroid Build Coastguard Worker
68*7594170eSAndroid Build Coastguard Worker    objcopy_path = cc_common.get_tool_for_action(
69*7594170eSAndroid Build Coastguard Worker        feature_configuration = feature_configuration,
70*7594170eSAndroid Build Coastguard Worker        action_name = "objcopy",
71*7594170eSAndroid Build Coastguard Worker    )
72*7594170eSAndroid Build Coastguard Worker    command_line = cc_common.get_memory_inefficient_command_line(
73*7594170eSAndroid Build Coastguard Worker        feature_configuration = feature_configuration,
74*7594170eSAndroid Build Coastguard Worker        action_name = "objcopy",
75*7594170eSAndroid Build Coastguard Worker        variables = cc_common.empty_variables(),
76*7594170eSAndroid Build Coastguard Worker    )
77*7594170eSAndroid Build Coastguard Worker
78*7594170eSAndroid Build Coastguard Worker    args = ctx.actions.args()
79*7594170eSAndroid Build Coastguard Worker    args.add_all(command_line)
80*7594170eSAndroid Build Coastguard Worker    args.add("--remove-section=.llvm_addrsig")
81*7594170eSAndroid Build Coastguard Worker    args.add(linking_output.executable)
82*7594170eSAndroid Build Coastguard Worker    args.add(output_file)
83*7594170eSAndroid Build Coastguard Worker
84*7594170eSAndroid Build Coastguard Worker    ctx.actions.run(
85*7594170eSAndroid Build Coastguard Worker        executable = objcopy_path,
86*7594170eSAndroid Build Coastguard Worker        arguments = [args],
87*7594170eSAndroid Build Coastguard Worker        inputs = depset(
88*7594170eSAndroid Build Coastguard Worker            direct = [linking_output.executable],
89*7594170eSAndroid Build Coastguard Worker            transitive = [
90*7594170eSAndroid Build Coastguard Worker                cc_toolchain.all_files,
91*7594170eSAndroid Build Coastguard Worker            ],
92*7594170eSAndroid Build Coastguard Worker        ),
93*7594170eSAndroid Build Coastguard Worker        outputs = [output_file],
94*7594170eSAndroid Build Coastguard Worker        mnemonic = "CppObjcopyNoAddrsig",
95*7594170eSAndroid Build Coastguard Worker    )
96*7594170eSAndroid Build Coastguard Worker
97*7594170eSAndroid Build Coastguard Worker    return output_file
98*7594170eSAndroid Build Coastguard Worker
99*7594170eSAndroid Build Coastguard Workerdef _cc_object_impl(ctx):
100*7594170eSAndroid Build Coastguard Worker    cc_toolchain = ctx.toolchains["//prebuilts/clang/host/linux-x86:nocrt_toolchain"].cc
101*7594170eSAndroid Build Coastguard Worker
102*7594170eSAndroid Build Coastguard Worker    extra_features = []
103*7594170eSAndroid Build Coastguard Worker
104*7594170eSAndroid Build Coastguard Worker    extra_disabled_features = [
105*7594170eSAndroid Build Coastguard Worker        "disable_pack_relocations",
106*7594170eSAndroid Build Coastguard Worker        "dynamic_executable",
107*7594170eSAndroid Build Coastguard Worker        "dynamic_linker",
108*7594170eSAndroid Build Coastguard Worker        "linker_flags",
109*7594170eSAndroid Build Coastguard Worker        "no_undefined_symbols",
110*7594170eSAndroid Build Coastguard Worker        "pack_dynamic_relocations",
111*7594170eSAndroid Build Coastguard Worker        "strip_debug_symbols",
112*7594170eSAndroid Build Coastguard Worker        # TODO(cparsons): Look into disabling this feature for nocrt toolchain?
113*7594170eSAndroid Build Coastguard Worker        "use_libcrt",
114*7594170eSAndroid Build Coastguard Worker    ]
115*7594170eSAndroid Build Coastguard Worker    if is_external_directory(ctx.label.package):
116*7594170eSAndroid Build Coastguard Worker        extra_disabled_features.append("non_external_compiler_flags")
117*7594170eSAndroid Build Coastguard Worker        extra_features.append("external_compiler_flags")
118*7594170eSAndroid Build Coastguard Worker    else:
119*7594170eSAndroid Build Coastguard Worker        extra_features.append("non_external_compiler_flags")
120*7594170eSAndroid Build Coastguard Worker        extra_disabled_features.append("external_compiler_flags")
121*7594170eSAndroid Build Coastguard Worker
122*7594170eSAndroid Build Coastguard Worker    apex_min_sdk_version = ctx.attr._apex_min_sdk_version[BuildSettingInfo].value
123*7594170eSAndroid Build Coastguard Worker    if ctx.attr.crt and apex_min_sdk_version:
124*7594170eSAndroid Build Coastguard Worker        extra_disabled_features.append("sdk_version_default")
125*7594170eSAndroid Build Coastguard Worker        extra_features += parse_sdk_version(apex_min_sdk_version)
126*7594170eSAndroid Build Coastguard Worker    elif ctx.attr.min_sdk_version:
127*7594170eSAndroid Build Coastguard Worker        extra_disabled_features.append("sdk_version_default")
128*7594170eSAndroid Build Coastguard Worker        extra_features += parse_sdk_version(ctx.attr.min_sdk_version)
129*7594170eSAndroid Build Coastguard Worker
130*7594170eSAndroid Build Coastguard Worker    # Disable coverage for cc object because we link cc objects below and
131*7594170eSAndroid Build Coastguard Worker    # clang will link extra lib behind the scene to support profiling if coverage
132*7594170eSAndroid Build Coastguard Worker    # is enabled, so the symbols of the extra lib will be loaded into the generated
133*7594170eSAndroid Build Coastguard Worker    # object file. When later we link a shared library that depends on more than
134*7594170eSAndroid Build Coastguard Worker    # one such cc objects it will fail due to the duplicated symbols problem.
135*7594170eSAndroid Build Coastguard Worker    extra_disabled_features.append("coverage")
136*7594170eSAndroid Build Coastguard Worker
137*7594170eSAndroid Build Coastguard Worker    feature_configuration = cc_common.configure_features(
138*7594170eSAndroid Build Coastguard Worker        ctx = ctx,
139*7594170eSAndroid Build Coastguard Worker        cc_toolchain = cc_toolchain,
140*7594170eSAndroid Build Coastguard Worker        requested_features = ctx.features + extra_features,
141*7594170eSAndroid Build Coastguard Worker        unsupported_features = ctx.disabled_features + extra_disabled_features,
142*7594170eSAndroid Build Coastguard Worker    )
143*7594170eSAndroid Build Coastguard Worker
144*7594170eSAndroid Build Coastguard Worker    compilation_contexts = []
145*7594170eSAndroid Build Coastguard Worker    deps_objects = []
146*7594170eSAndroid Build Coastguard Worker    for obj in ctx.attr.objs:
147*7594170eSAndroid Build Coastguard Worker        compilation_contexts.append(obj[CcInfo].compilation_context)
148*7594170eSAndroid Build Coastguard Worker        deps_objects.append(obj[CcObjectInfo].objects)
149*7594170eSAndroid Build Coastguard Worker    for includes_dep in ctx.attr.includes_deps:
150*7594170eSAndroid Build Coastguard Worker        compilation_contexts.append(includes_dep[CcInfo].compilation_context)
151*7594170eSAndroid Build Coastguard Worker
152*7594170eSAndroid Build Coastguard Worker    product_variables = ctx.attr._android_product_variables[platform_common.TemplateVariableInfo]
153*7594170eSAndroid Build Coastguard Worker    asflags = [ctx.expand_make_variables("asflags", flag, product_variables.variables) for flag in ctx.attr.asflags]
154*7594170eSAndroid Build Coastguard Worker
155*7594170eSAndroid Build Coastguard Worker    srcs_c, srcs_as, private_hdrs = split_srcs_hdrs(ctx.files.srcs + ctx.files.srcs_as)
156*7594170eSAndroid Build Coastguard Worker
157*7594170eSAndroid Build Coastguard Worker    (compilation_context, compilation_outputs_c) = cc_common.compile(
158*7594170eSAndroid Build Coastguard Worker        name = ctx.label.name,
159*7594170eSAndroid Build Coastguard Worker        actions = ctx.actions,
160*7594170eSAndroid Build Coastguard Worker        feature_configuration = feature_configuration,
161*7594170eSAndroid Build Coastguard Worker        cc_toolchain = cc_toolchain,
162*7594170eSAndroid Build Coastguard Worker        srcs = srcs_c,
163*7594170eSAndroid Build Coastguard Worker        includes = get_includes_paths(ctx, ctx.attr.local_includes) + get_includes_paths(ctx, ctx.attr.absolute_includes, package_relative = False),
164*7594170eSAndroid Build Coastguard Worker        public_hdrs = ctx.files.hdrs,
165*7594170eSAndroid Build Coastguard Worker        private_hdrs = private_hdrs,
166*7594170eSAndroid Build Coastguard Worker        user_compile_flags = ctx.attr.copts,
167*7594170eSAndroid Build Coastguard Worker        compilation_contexts = compilation_contexts,
168*7594170eSAndroid Build Coastguard Worker    )
169*7594170eSAndroid Build Coastguard Worker
170*7594170eSAndroid Build Coastguard Worker    (compilation_context, compilation_outputs_as) = cc_common.compile(
171*7594170eSAndroid Build Coastguard Worker        name = ctx.label.name,
172*7594170eSAndroid Build Coastguard Worker        actions = ctx.actions,
173*7594170eSAndroid Build Coastguard Worker        feature_configuration = feature_configuration,
174*7594170eSAndroid Build Coastguard Worker        cc_toolchain = cc_toolchain,
175*7594170eSAndroid Build Coastguard Worker        srcs = srcs_as,
176*7594170eSAndroid Build Coastguard Worker        includes = get_includes_paths(ctx, ctx.attr.local_includes) + get_includes_paths(ctx, ctx.attr.absolute_includes, package_relative = False),
177*7594170eSAndroid Build Coastguard Worker        public_hdrs = ctx.files.hdrs,
178*7594170eSAndroid Build Coastguard Worker        private_hdrs = private_hdrs,
179*7594170eSAndroid Build Coastguard Worker        user_compile_flags = ctx.attr.copts + asflags,
180*7594170eSAndroid Build Coastguard Worker        compilation_contexts = compilation_contexts,
181*7594170eSAndroid Build Coastguard Worker    )
182*7594170eSAndroid Build Coastguard Worker
183*7594170eSAndroid Build Coastguard Worker    # do not propagate includes
184*7594170eSAndroid Build Coastguard Worker    compilation_context = cc_common.create_compilation_context(
185*7594170eSAndroid Build Coastguard Worker        headers = compilation_context.headers,
186*7594170eSAndroid Build Coastguard Worker        defines = compilation_context.defines,
187*7594170eSAndroid Build Coastguard Worker        local_defines = compilation_context.local_defines,
188*7594170eSAndroid Build Coastguard Worker    )
189*7594170eSAndroid Build Coastguard Worker
190*7594170eSAndroid Build Coastguard Worker    objects_to_link = cc_common.merge_compilation_outputs(compilation_outputs = deps_objects + [compilation_outputs_c, compilation_outputs_as])
191*7594170eSAndroid Build Coastguard Worker
192*7594170eSAndroid Build Coastguard Worker    user_link_flags = [] + ctx.attr.linkopts
193*7594170eSAndroid Build Coastguard Worker    user_link_flags.extend(_CC_OBJECT_LINKOPTS)
194*7594170eSAndroid Build Coastguard Worker    additional_inputs = []
195*7594170eSAndroid Build Coastguard Worker
196*7594170eSAndroid Build Coastguard Worker    if ctx.attr.linker_script != None:
197*7594170eSAndroid Build Coastguard Worker        linker_script = ctx.files.linker_script[0]
198*7594170eSAndroid Build Coastguard Worker        user_link_flags.append("-Wl,-T," + linker_script.path)
199*7594170eSAndroid Build Coastguard Worker        additional_inputs.append(linker_script)
200*7594170eSAndroid Build Coastguard Worker
201*7594170eSAndroid Build Coastguard Worker    # partially link if there are multiple object files
202*7594170eSAndroid Build Coastguard Worker    if len(objects_to_link.objects) + len(objects_to_link.pic_objects) > 1:
203*7594170eSAndroid Build Coastguard Worker        linking_output = cc_common.link(
204*7594170eSAndroid Build Coastguard Worker            name = ctx.label.name + ".addrsig.o",
205*7594170eSAndroid Build Coastguard Worker            actions = ctx.actions,
206*7594170eSAndroid Build Coastguard Worker            feature_configuration = feature_configuration,
207*7594170eSAndroid Build Coastguard Worker            cc_toolchain = cc_toolchain,
208*7594170eSAndroid Build Coastguard Worker            user_link_flags = user_link_flags,
209*7594170eSAndroid Build Coastguard Worker            compilation_outputs = objects_to_link,
210*7594170eSAndroid Build Coastguard Worker            additional_inputs = additional_inputs,
211*7594170eSAndroid Build Coastguard Worker        )
212*7594170eSAndroid Build Coastguard Worker
213*7594170eSAndroid Build Coastguard Worker        noaddrsig_output = _objcopy_noaddrsig(ctx, ctx.label.name + ".o", linking_output, cc_toolchain)
214*7594170eSAndroid Build Coastguard Worker
215*7594170eSAndroid Build Coastguard Worker        files = depset([noaddrsig_output])
216*7594170eSAndroid Build Coastguard Worker    else:
217*7594170eSAndroid Build Coastguard Worker        files = depset(objects_to_link.objects + objects_to_link.pic_objects)
218*7594170eSAndroid Build Coastguard Worker
219*7594170eSAndroid Build Coastguard Worker    return [
220*7594170eSAndroid Build Coastguard Worker        DefaultInfo(files = files),
221*7594170eSAndroid Build Coastguard Worker        CcInfo(compilation_context = compilation_context),
222*7594170eSAndroid Build Coastguard Worker        CcObjectInfo(objects = objects_to_link),
223*7594170eSAndroid Build Coastguard Worker    ]
224*7594170eSAndroid Build Coastguard Worker
225*7594170eSAndroid Build Coastguard Worker_cc_object = rule(
226*7594170eSAndroid Build Coastguard Worker    implementation = _cc_object_impl,
227*7594170eSAndroid Build Coastguard Worker    cfg = drop_sanitizer_transition,
228*7594170eSAndroid Build Coastguard Worker    attrs = {
229*7594170eSAndroid Build Coastguard Worker        "srcs": attr.label_list(allow_files = constants.all_dot_exts),
230*7594170eSAndroid Build Coastguard Worker        "srcs_as": attr.label_list(allow_files = constants.all_dot_exts),
231*7594170eSAndroid Build Coastguard Worker        "hdrs": attr.label_list(allow_files = constants.hdr_dot_exts),
232*7594170eSAndroid Build Coastguard Worker        "absolute_includes": attr.string_list(),
233*7594170eSAndroid Build Coastguard Worker        "local_includes": attr.string_list(),
234*7594170eSAndroid Build Coastguard Worker        "copts": attr.string_list(),
235*7594170eSAndroid Build Coastguard Worker        "asflags": attr.string_list(),
236*7594170eSAndroid Build Coastguard Worker        "linkopts": attr.string_list(),
237*7594170eSAndroid Build Coastguard Worker        "objs": attr.label_list(
238*7594170eSAndroid Build Coastguard Worker            providers = [CcInfo, CcObjectInfo],
239*7594170eSAndroid Build Coastguard Worker        ),
240*7594170eSAndroid Build Coastguard Worker        "includes_deps": attr.label_list(providers = [CcInfo]),
241*7594170eSAndroid Build Coastguard Worker        "linker_script": attr.label(allow_single_file = True),
242*7594170eSAndroid Build Coastguard Worker        "sdk_version": attr.string(),
243*7594170eSAndroid Build Coastguard Worker        "min_sdk_version": attr.string(),
244*7594170eSAndroid Build Coastguard Worker        "crt": attr.bool(default = False),
245*7594170eSAndroid Build Coastguard Worker        "package_name": attr.string(
246*7594170eSAndroid Build Coastguard Worker            mandatory = True,
247*7594170eSAndroid Build Coastguard Worker            doc = "Just the path to the target package. Used by transitions.",
248*7594170eSAndroid Build Coastguard Worker        ),
249*7594170eSAndroid Build Coastguard Worker        "_android_product_variables": attr.label(
250*7594170eSAndroid Build Coastguard Worker            default = Label("//build/bazel/product_config:product_variables_for_attributes"),
251*7594170eSAndroid Build Coastguard Worker            providers = [platform_common.TemplateVariableInfo],
252*7594170eSAndroid Build Coastguard Worker        ),
253*7594170eSAndroid Build Coastguard Worker        "_apex_min_sdk_version": attr.label(
254*7594170eSAndroid Build Coastguard Worker            default = "//build/bazel/rules/apex:min_sdk_version",
255*7594170eSAndroid Build Coastguard Worker        ),
256*7594170eSAndroid Build Coastguard Worker        "_allowlist_function_transition": attr.label(
257*7594170eSAndroid Build Coastguard Worker            default = "@bazel_tools//tools/allowlists/function_transition_allowlist",
258*7594170eSAndroid Build Coastguard Worker        ),
259*7594170eSAndroid Build Coastguard Worker    },
260*7594170eSAndroid Build Coastguard Worker    toolchains = ["//prebuilts/clang/host/linux-x86:nocrt_toolchain"],
261*7594170eSAndroid Build Coastguard Worker    fragments = ["cpp"],
262*7594170eSAndroid Build Coastguard Worker)
263*7594170eSAndroid Build Coastguard Worker
264*7594170eSAndroid Build Coastguard Workerdef cc_object(
265*7594170eSAndroid Build Coastguard Worker        name,
266*7594170eSAndroid Build Coastguard Worker        copts = [],
267*7594170eSAndroid Build Coastguard Worker        hdrs = [],
268*7594170eSAndroid Build Coastguard Worker        asflags = [],
269*7594170eSAndroid Build Coastguard Worker        linkopts = [],
270*7594170eSAndroid Build Coastguard Worker        srcs = [],
271*7594170eSAndroid Build Coastguard Worker        srcs_as = [],
272*7594170eSAndroid Build Coastguard Worker        objs = [],
273*7594170eSAndroid Build Coastguard Worker        deps = [],
274*7594170eSAndroid Build Coastguard Worker        native_bridge_supported = False,  # TODO: not supported yet. @unused
275*7594170eSAndroid Build Coastguard Worker        stl = "",
276*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = None,
277*7594170eSAndroid Build Coastguard Worker        sdk_version = "",
278*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "",
279*7594170eSAndroid Build Coastguard Worker        **kwargs):
280*7594170eSAndroid Build Coastguard Worker    "Build macro to correspond with the cc_object Soong module."
281*7594170eSAndroid Build Coastguard Worker
282*7594170eSAndroid Build Coastguard Worker    if system_dynamic_deps == None:
283*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = system_dynamic_deps_defaults
284*7594170eSAndroid Build Coastguard Worker
285*7594170eSAndroid Build Coastguard Worker    stl_info = stl_info_from_attr(stl, False)
286*7594170eSAndroid Build Coastguard Worker    linkopts = linkopts + stl_info.linkopts
287*7594170eSAndroid Build Coastguard Worker    copts = copts + stl_info.cppflags
288*7594170eSAndroid Build Coastguard Worker
289*7594170eSAndroid Build Coastguard Worker    _cc_object(
290*7594170eSAndroid Build Coastguard Worker        name = name,
291*7594170eSAndroid Build Coastguard Worker        hdrs = hdrs,
292*7594170eSAndroid Build Coastguard Worker        asflags = asflags,
293*7594170eSAndroid Build Coastguard Worker        copts = _CC_OBJECT_COPTS + copts,
294*7594170eSAndroid Build Coastguard Worker        linkopts = linkopts,
295*7594170eSAndroid Build Coastguard Worker        # TODO(b/261996812): we shouldn't need to have both srcs and srcs_as as inputs here
296*7594170eSAndroid Build Coastguard Worker        srcs = srcs,
297*7594170eSAndroid Build Coastguard Worker        srcs_as = srcs_as,
298*7594170eSAndroid Build Coastguard Worker        objs = objs,
299*7594170eSAndroid Build Coastguard Worker        includes_deps = stl_info.static_deps + stl_info.shared_deps + system_dynamic_deps + deps,
300*7594170eSAndroid Build Coastguard Worker        sdk_version = sdk_version,
301*7594170eSAndroid Build Coastguard Worker        min_sdk_version = min_sdk_version,
302*7594170eSAndroid Build Coastguard Worker        package_name = native.package_name(),
303*7594170eSAndroid Build Coastguard Worker        **kwargs
304*7594170eSAndroid Build Coastguard Worker    )
305