[!WARNING] Building
rs_bindings_from_ccfrom source is experimental. Further support is coming soon.
Linux-specific setup:
# Choice of compiler is optional. export CC=/path/to/clang export CXX=/path/to/clang++ # We must use `lld` linker via clang. It must be in the PATH. export PATH="$PATH:/dir/containing/lld" export RUSTFLAGS="$RUSTFLAGS -Clinker=/path/to/clang" export RUSTFLAGS="$RUSTFLAGS -Clink-arg=-fuse-ld=lld" # If you want to use a sysroot. # SYSROOT_FLAG=--sysroot=$SYSROOT # export CXXFLAGS="$CXXFLAGS $SYSROOT_FLAG" # export RUSTFLAGS="$RUSTFLAGS -Clink-arg=$SYSROOT_FLAG"
MacOS-specific setup:
export CC=clang export CXX=clang++ export RUSTFLAGS="$RUSTFLAGS -Clinker=clang" export RUSTFLAGS="$RUSTFLAGS -Clink-arg=-fuse-ld=lld" # Point to the Xcode sysroot. export CXXFLAGS="$CXXFLAGS -isysroot $(xcrun --show-sdk-path)" export RUSTFLAGS="$RUSTFLAGS -Clink-arg=-isysroot -Clink-arg=$(xcrun --show-sdk-path)"
Windows-specific setup:
# We use clang compiler (clang-cl); MSVC may work too but is unsupported. export CC=clang-cl export CXX=clang-cl # We must use lld to link, which is spelt lld-link. So user-specified linker # flags must be in MSVC format. export RUSTFLAGS="$RUSTFLAGS -Clinker=/path/to/lld-link" # LLVM was built with Zlib support. Point Crubit to the same library. export CXXFLAGS="$CXXFLAGS /I/path/to/zlib" export RUSTFLAGS="$RUSTFLAGS -Clink-arg=/LIBPATH:/path/to/zlib" # Avoid deprecation warnings. export CXXFLAGS="$CXXFLAGS /D_CRT_SECURE_NO_DEPRECATE" # If LLVM (-DCMAKE_MSVC_RUNTIME_LIBRARY) and Abseil (-DABSL_MSVC_STATIC_RUNTIME) # are built against static CRT, then Rust needs to match, or vice-versa. # export RUSTFLAGS="$RUSTFLAGS -Ctarget-feature=+crt-static"
Run the build step via cargo:
# Paths for Crubit's cargo to use. ## This path contains clang/ and llvm/ dirs with their respective headers. export CLANG_INCLUDE_PATH=/path/to/llvm/and/clang/headers ## This path contains libLLVM*.a and libclang*.a. export CLANG_LIB_STATIC_PATH=/path/to/llvm/and/clang/libs ## This path contains absl/ dir with all the includes. export ABSL_INCLUDE_PATH=/path/to/absl/include/dir ## This path contains libabsl_* export ABSL_LIB_STATIC_PATH=/path/to/absl/libs ## This path contains google/protobuf/ dir with all the includes. export PROTOBUF_INCLUDE_PATH=/path/to/protobuf/include/dir ## This path contains libprotobuf.a export PROTOBUF_LIB_STATIC_PATH=/path/to/protobuf/libs cargo build --bin rs_bindings_from_cc
apt install clang lld bazel git clone git@github.com:google/crubit.git cd crubit bazel build --linkopt=-fuse-ld=/usr/bin/ld.lld //rs_bindings_from_cc:rs_bindings_from_cc_impl
git clone https://github.com/llvm/llvm-project cd llvm-project CC=clang CXX=clang++ cmake -S llvm -B build -DLLVM_ENABLE_PROJECTS='clang' -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install cmake --build build -j # wait... cmake --install build cd ../crubit LLVM_INSTALL_PATH=../llvm-project/install bazel build //rs_bindings_from_cc:rs_bindings_from_cc_impl