51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
|
# Copyright (c) 2024 The Chromium Embedded Framework Authors. All rights
|
||
|
# reserved. Use of this source code is governed by a BSD-style license that
|
||
|
# can be found in the LICENSE file.
|
||
|
|
||
|
load("//bazel/win:cc_env.bzl", "collect_compilation_env", "use_cpp_toolchain")
|
||
|
|
||
|
def _compile_rc_impl(ctx):
|
||
|
rc_file = ctx.file.rc_file
|
||
|
output = ctx.outputs.out
|
||
|
|
||
|
inputs = [rc_file] + ctx.files.srcs
|
||
|
includes = ["/i{}/{}".format(ctx.label.package, i) for i in ctx.attr.includes]
|
||
|
|
||
|
# Grab all include paths/files required for the run
|
||
|
for dep in ctx.attr.deps:
|
||
|
comp_ctx = dep[CcInfo].compilation_context
|
||
|
|
||
|
includes += ["/i{}".format(i) for i in comp_ctx.quote_includes.to_list()]
|
||
|
includes += ["/i{}".format(i) for i in comp_ctx.system_includes.to_list()]
|
||
|
inputs += comp_ctx.headers.to_list()
|
||
|
|
||
|
ctx.actions.run(
|
||
|
executable = ctx.executable._tool,
|
||
|
inputs = inputs,
|
||
|
outputs = [output],
|
||
|
env = collect_compilation_env(ctx),
|
||
|
arguments = includes + ["/fo", output.path, rc_file.path],
|
||
|
mnemonic = "CompileRC"
|
||
|
)
|
||
|
|
||
|
return DefaultInfo(files = depset([output]))
|
||
|
|
||
|
compile_rc = rule(
|
||
|
implementation = _compile_rc_impl,
|
||
|
attrs = {
|
||
|
"rc_file": attr.label(allow_single_file = [".rc"]),
|
||
|
"srcs": attr.label_list(allow_files = True),
|
||
|
"deps": attr.label_list(providers = [CcInfo]),
|
||
|
"includes": attr.string_list(),
|
||
|
"out": attr.output(),
|
||
|
"_cc_toolchain": attr.label(default = Label("@bazel_tools//tools/cpp:current_cc_toolchain")),
|
||
|
"_tool": attr.label(
|
||
|
default = "@winsdk//:rc_pybin",
|
||
|
executable = True,
|
||
|
cfg = "exec"
|
||
|
)
|
||
|
},
|
||
|
fragments = ["cpp"],
|
||
|
toolchains = use_cpp_toolchain(),
|
||
|
)
|