feature_configuration = cc_common.configure_features(
ctx = ctx,
cc_toolchain = cc_toolchain,
requested_features = ctx.features,
unsupported_features = ctx.disabled_features,
)
deps_compilation_contexts = [dep[CcInfo].compilation_context for dep in ctx.attr.deps]
# does it respect the toolchains built_in_include_directories?
(compilation_context, compilation_outputs) = cc_common.compile(
actions = ctx.actions,
feature_configuration = feature_configuration,
cc_toolchain = cc_toolchain,
srcs = ctx.files.srcs,
public_hdrs = ctx.files.hdrs,
private_hdrs = ctx.files.private_hdrs,
quote_includes = ctx.attr.includes,
local_defines = ctx.attr.defines,
user_compile_flags = ctx.attr.copts,
compilation_contexts = deps_compilation_contexts,
)
cc_info = CcInfo(
compilation_context = compilation_context,
)
transitive = [dep[DefaultInfo].files for dep in ctx.attr.deps]
output_files = depset(
compilation_outputs.pic_objects + compilation_outputs.objects,
transitive = transitive,
)
file_set_produced = DefaultInfo(files = output_files)
return file_set_produced, cc_info
"hdrs": attr.label_list(allow_files = [".h", ".hh"]),
"private_hdrs": attr.label_list(allow_files = [".h", ".hh"]),
"includes": attr.string_list(),
"defines": attr.string_list(),
"copts": attr.string_list(),
# required to access certain cc_common methods
fragments = ["cpp"],
)
# [new] BUILD
load("rules_cc_object.bzl", "cc_object")
cc_object(
name = "dependency",
srcs = [
"dependency.cc"
],
hdrs = [
"dependency.hh",
],
)
cc_object(
name = "test",
srcs = [
"main.cc"
],
deps = [
":dependency", # we extract headers from dependencies
],
)
cc_binary(
name = "main",
deps = [
":test", # cc_binary only expects headers in deps
],
srcs = [
":test", # but we also have .o files to act as sources
],
)