All Projects → bazelbuild → Rules_foreign_cc

bazelbuild / Rules_foreign_cc

Licence: apache-2.0
Build rules for interfacing with "foreign" (non-Bazel) build systems (CMake, configure-make, GNU Make, boost, ninja)

Projects that are alternatives of or similar to Rules foreign cc

Squzy
Squzy - is a high-performance open-source monitoring, incident and alert system written in Golang with Bazel and love.
Stars: ✭ 359 (-14.11%)
Mutual labels:  bazel
Ifopt
An Eigen-based, light-weight C++ Interface to Nonlinear Programming Solvers (Ipopt, Snopt)
Stars: ✭ 372 (-11%)
Mutual labels:  cmake
Cnl
A Compositional Numeric Library for C++
Stars: ✭ 397 (-5.02%)
Mutual labels:  cmake
Units
A compile-time enabled Modern C++ library that provides compile-time dimensional analysis and unit/quantity manipulation.
Stars: ✭ 365 (-12.68%)
Mutual labels:  cmake
Cget
C++ package retrieval
Stars: ✭ 370 (-11.48%)
Mutual labels:  cmake
Cmakeconverter
This project aims to facilitate the conversion of Visual Studio to CMake projects.
Stars: ✭ 387 (-7.42%)
Mutual labels:  cmake
Angular Bazel Example
MOVED to the bazel nodejs monorepo 👉
Stars: ✭ 354 (-15.31%)
Mutual labels:  bazel
Innoextract
A tool to unpack installers created by Inno Setup
Stars: ✭ 407 (-2.63%)
Mutual labels:  cmake
Ark
ARK is a lightweight, agility, elastic, distributed plugin framework written in C++,make it easier and faster to create your own application service.
Stars: ✭ 370 (-11.48%)
Mutual labels:  cmake
Kicad Packages3d
Official KiCad 3D model libraries for rendering and MCAD integration
Stars: ✭ 392 (-6.22%)
Mutual labels:  cmake
Tulsi
An Xcode Project Generator For Bazel
Stars: ✭ 365 (-12.68%)
Mutual labels:  bazel
Cmake Templates
Some CMake Templates (examples). Qt, Boost, OpenCV, C++11, etc 一些栗子
Stars: ✭ 368 (-11.96%)
Mutual labels:  cmake
Downloadproject
CMake module for downloading an external project's source at configure time
Stars: ✭ 388 (-7.18%)
Mutual labels:  cmake
Cmakepp
An Enhancement Suite for the CMake Build System
Stars: ✭ 365 (-12.68%)
Mutual labels:  cmake
Opencv Mingw Build
👀 MinGW 32bit and 64bit version of OpenCV compiled on Windows. Including OpenCV 3.3.1, 3.4.1, 3.4.1-x64, 3.4.5, 3.4.6, 3.4.7, 3.4.8-x64, 3.4.9, 4.0.0-alpha-x64, 4.0.0-rc-x64, 4.0.1-x64, 4.1.0, 4.1.0-x64, 4.1.1-x64, 4.5.0-with-contrib
Stars: ✭ 401 (-4.07%)
Mutual labels:  cmake
Awesome Cmake
A curated list of awesome CMake resources, scripts, modules and examples.
Stars: ✭ 3,970 (+849.76%)
Mutual labels:  cmake
Cmake Conan
CMake wrapper for conan C and C++ package manager
Stars: ✭ 374 (-10.53%)
Mutual labels:  cmake
Examples
Examples for Bazel
Stars: ✭ 412 (-1.44%)
Mutual labels:  bazel
Ros 21 tutorials
《古月 · ROS入门21讲》课件&源码
Stars: ✭ 405 (-3.11%)
Mutual labels:  cmake
Mumble
Mumble is an open-source, low-latency, high quality voice chat software.
Stars: ✭ 4,418 (+956.94%)
Mutual labels:  cmake

rules_foreign_cc

Build status

Rules for building C/C++ projects using foreign build systems inside Bazel projects.

This is not an officially supported Google product (meaning, support and/or new releases may be limited.)

Documentation

Documentation for all rules and providers are available here

Bazel versions compatibility

Works with Bazel after 3.4.0 without any flags.

Note that the rules may be compatible with older versions of Bazel but support may break in future changes as these older versions are not tested.

News

For more generalized updates, please see NEWS.md or checkout the release notes of current or previous releases

Building CMake projects

  • Build libraries/binaries with CMake from sources using cmake_external rule
  • Use cmake_external targets in cc_library, cc_binary targets as dependency
  • Bazel cc_toolchain parameters are used inside cmake_external build
  • See full list of cmake_external arguments below 'example'
  • cmake_external is defined in ./tools/build_defs
  • Works on Ubuntu, Mac OS and Windows(* see special notes below in Windows section) operating systems

Example: (Please see full examples in ./examples)

The example for Windows is below, in the section 'Usage on Windows'.

  • In WORKSPACE.bazel, we use a http_archive to download tarballs with the libraries we use.
  • In BUILD.bazel, we instantiate a cmake_external rule which behaves similarly to a cc_library, which can then be used in a C++ rule (cc_binary in this case).

In WORKSPACE.bazel, put

workspace(name = "rules_foreign_cc_usage_example")

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

# Rule repository, note that it's recommended to use a pinned commit to a released version of the rules
http_archive(
   name = "rules_foreign_cc",
   sha256 = "c2cdcf55ffaf49366725639e45dedd449b8c3fe22b54e31625eb80ce3a240f1e",
   strip_prefix = "rules_foreign_cc-0.1.0",
   url = "https://github.com/bazelbuild/rules_foreign_cc/archive/0.1.0.zip",
)

load("@rules_foreign_cc//foreign_cc:repositories.bzl", "rules_foreign_cc_dependencies")

# This sets up some common toolchains for building targets. For more details, please see
# https://github.com/bazelbuild/rules_foreign_cc/tree/main/docs#rules_foreign_cc_dependencies
rules_foreign_cc_dependencies()

_ALL_CONTENT = """\
filegroup(
    name = "all_srcs",
    srcs = glob(["**"]),
    visibility = ["//visibility:public],
)
"""

# pcre source code repository
http_archive(
    name = "pcre",
    build_file_content = _ALL_CONTENT,
    strip_prefix = "pcre-8.43",
    urls = [
        "https://mirror.bazel.build/ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz",
        "https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz",
    ],
    sha256 = "0b8e7465dc5e98c757cc3650a20a7843ee4c3edf50aaf60bb33fd879690d2c73",
)

And in the BUILD.bazel file, put:

load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")

cmake(
    name = "pcre",
    cache_entries = {
        "CMAKE_C_FLAGS": "-fPIC",
    },
    lib_source = "@pcre//:all_srcs",
    out_static_libs = ["libpcre.a"],
)

then build as usual:

bazel build //:pcre

Usage on Windows

When using on Windows, you should start Bazel in MSYS2 shell, as the shell script inside cmake_external assumes this. Also, you should explicitly specify make commands and option to generate CMake crosstool file.

The default generator for CMake will be detected automatically, or you can specify it explicitly.

The tested generators: Visual Studio 15, Ninja and NMake. The extension .lib is assumed for the static libraries by default.

Example usage (see full example in ./examples/cmake_hello_world_lib): Example assumes that MS Visual Studio and Ninja are installed on the host machine, and Ninja bin directory is added to PATH.

cmake(
    # expect to find ./lib/hello.lib as the result of the build
    name = "hello",
    # This option can be omitted
    generate_args = [
        "-G \"Visual Studio 15 2017\"",
        "-A Win64",
    ],
    lib_source = ":srcs",
)

cmake(
    name = "hello_ninja",
    # expect to find ./lib/hello.lib as the result of the build
    lib_name = "hello",
    # explicitly specify the generator
    generate_args = ["-GNinja"],
    lib_source = ":srcs",
)

cmake(
    name = "hello_nmake",
    # explicitly specify the generator
    generate_args = ["-G \"NMake Makefiles\""],
    lib_source = ":srcs",
    # expect to find ./lib/hello.lib as the result of the build
    out_static_libs = ["hello.lib"],
)

Design document

External C/C++ libraries rules

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].