blob: c11510bc84fc2f166b3e166d39f957fac23db541 [file] [log] [blame]
# Additional interop for things like macros and inlined functions.
add_library(rust_wrapper STATIC rust_wrapper.c)
target_link_libraries(rust_wrapper crypto)
# Generate architecture-specific wrappers.
set(WRAPPER_TARGET ${CMAKE_BINARY_DIR}/rust/bssl-sys/src/wrapper_${RUST_BINDINGS}.rs)
set(COMMAND ${BINDGEN_EXECUTABLE} wrapper.h
-o ${WRAPPER_TARGET}
--no-derive-default
--enable-function-attribute-detection
--use-core
--default-macro-constant-type=signed
--rustified-enum=point_conversion_form_t
# These regexes need to accept both / and \ to handle Windows file
# path differences, due a bindgen issue. See
# https://crbug.com/boringssl/595. Ideally, we would write [/\\],
# but there are many layers of escaping here. First, CMake
# interprets backslashes. Then CMake generates a Ninja or Make file.
# That, in turn, launches passes inputs to the shell on POSIX, and
# does something else on Windows.
#
# It is unlikely that every layer here has sufficiently well-defined
# escaping and correctly handled the next layer's escaping. On top
# of that, we'd likely need to detect Windows vs POSIX hosts and
# change the input. Instead, just use [[:punct:]] which is more
# permissive than necessary, but we only need to exclude unwanted
# libc heaaders.
#
# If bindgen ever supports some file-based config (see
# https://github.com/rust-lang/rust-bindgen/issues/2508), we can
# switch to that.
--allowlist-file=".*[[:punct:]]include[[:punct:]]openssl[[:punct:]].*\\.h"
--allowlist-file=".*[[:punct:]]rust_wrapper\\.h"
-- # these are LLVM arg passthroughs
-I../../include
# https://doc.rust-lang.org/nightly/rustc/platform-support.html
--target=${RUST_BINDINGS})
add_custom_target(
bindgen_rust_${RUST_BINDINGS}
ALL
${COMMAND}
BYPRODUCTS ${WRAPPER_TARGET}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
# move files into build directory
configure_file("src/lib.rs" "src/lib.rs")
if(NOT BUILD_SHARED_LIBS)
configure_file("build.rs" "build.rs" COPYONLY)
endif()
configure_file("Cargo.toml" "Cargo.toml" COPYONLY)