mirror of
https://github.com/bazel-contrib/rules_foreign_cc
synced 2024-12-05 14:02:22 +00:00
9a261f7993
* Add crosstool example; does not work with cmake rule yet the code is taken from Bazel test data (bazel_toolchain_test_data) * Make crosstool compilation of cmake_external + cc_binary work To build example, cd examples/cmake_crosstool bazel build //:libhello_test Changes: 1) Initially suggested in #124: put $EXT_BUILD_ROOT on path, so that relative paths can be resolved by CMake 2) Toolchain tools are references as relative paths, and they themselves refer to external repository with external/ prefix. This will not work with CMake, as CMake also perform compiler tests and the build is performed in some temp directory. We need to convert to absolute paths. I did a trick with checking of $EXT_BUILD_ROOT is defined and then using it as a prefix. 3) I had to change the visibility of the cc-compiler-k8 toolchain to public 4) For CMake crosstool file, CMAKE_C_COMPILER, CMAKE_CXX_COMPILER, CMAKE_AR need to be absolute, so in cases when they are relative and not under external directory, force paths conversion
30 lines
754 B
Python
30 lines
754 B
Python
load("@rules_foreign_cc//tools/build_defs:cmake.bzl", "cmake_external")
|
|
|
|
filegroup(
|
|
name = "srcs",
|
|
srcs = glob(["**"]),
|
|
visibility = ["//src/test/shell/bazel/testdata:__pkg__"],
|
|
)
|
|
|
|
cc_library(
|
|
name = "hello",
|
|
srcs = ["hello.cc"],
|
|
)
|
|
|
|
cmake_external(
|
|
name = "hello_cmake",
|
|
lib_source = "//static:srcs",
|
|
generate_crosstool_file = True,
|
|
static_libraries = ["libhello.a"],
|
|
out_include_dir = "include/version123",
|
|
)
|
|
|
|
# I do not make it a test, since it is a cross-compilation example,
|
|
# requires test that just checks something about output
|
|
cc_binary(
|
|
name = "libhello_test",
|
|
# includes just hello.h, include directory: "include/version123"
|
|
srcs = ["//static:hello_client.c"],
|
|
deps = [":hello_cmake"],
|
|
)
|