mirror of
https://github.com/bazel-contrib/rules_foreign_cc
synced 2024-11-25 17:31:25 +00:00
c51480261c
* Extract shell fragments into a toolchain Construct script in framework.bzl using special notation for calling shell fragments, defining and referencing environment variables; have the script converted from this special notation into a real script (see README.md notes.) The special notation is used to keep script construction in code still readable. Tools scripts (cmake, ninja) were also converted. * Fix reference to environment variables in examples .. and reference it correctly $$var_name$$ so it is replaced further * Review comments: documentation, explicitly mark functions from toolchain - mark functions from shell toolchain as ##funname##, so that they can not be mixed with usual shell functions * Fix operating system name for windows in toolchain file * Additional env vars for windows * Correct cmake tool build * Do not build ninja on Windows * When run on Windows under msys, find utility from Window could "leak"... into the script. Use heuristics to use /usr/bin/find if it exists. Also, use pwd -W to get Windows-styled paths (for cmake)
51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
""" Rule for building CMake from sources. """
|
|
|
|
load("@rules_foreign_cc//tools/build_defs:detect_root.bzl", "detect_root")
|
|
load("@rules_foreign_cc//tools/build_defs:shell_script_helper.bzl", "convert_shell_script")
|
|
|
|
def _cmake_tool(ctx):
|
|
root = detect_root(ctx.attr.cmake_srcs)
|
|
|
|
cmake = ctx.actions.declare_directory("cmake")
|
|
script = [
|
|
"export BUILD_DIR=##pwd##",
|
|
"export BUILD_TMPDIR=##tmpdir##",
|
|
"##copy_dir_contents_to_dir## ./{} $BUILD_TMPDIR".format(root),
|
|
"##mkdirs## " + cmake.path,
|
|
"cd $$BUILD_TMPDIR$$",
|
|
"./bootstrap --prefix=install",
|
|
"make install",
|
|
"##copy_dir_contents_to_dir## ./install $BUILD_DIR/" + cmake.path,
|
|
"cd $$BUILD_DIR$$",
|
|
]
|
|
|
|
script_text = convert_shell_script(ctx, script)
|
|
|
|
ctx.actions.run_shell(
|
|
mnemonic = "BootstrapCMake",
|
|
inputs = ctx.attr.cmake_srcs.files,
|
|
outputs = [cmake],
|
|
tools = [],
|
|
use_default_shell_env = True,
|
|
command = script_text,
|
|
execution_requirements = {"block-network": ""},
|
|
)
|
|
|
|
return [DefaultInfo(files = depset([cmake]))]
|
|
|
|
""" Rule for building CMake. Invokes bootstrap script and make install.
|
|
Attributes:
|
|
cmake_srcs - target with the CMake sources
|
|
"""
|
|
cmake_tool = rule(
|
|
attrs = {
|
|
"cmake_srcs": attr.label(mandatory = True),
|
|
},
|
|
fragments = ["cpp"],
|
|
output_to_genfiles = True,
|
|
implementation = _cmake_tool,
|
|
toolchains = [
|
|
"@rules_foreign_cc//tools/build_defs/shell_toolchain/toolchains:shell_commands",
|
|
],
|
|
)
|