sparrow-kata-full/apps/system/rust.cmake
Sam Leffler f33b5b4a9e rust.cmake: add comment pointing to CAmkES setting of --tls-model
Change-Id: I5b2674ef86b9a5c35f441666a9d3ec55cd591f7e
GitOrigin-RevId: 32312f93e053ea0579cb6d98e9fc991ba325ddb2
2022-10-06 18:57:25 +00:00

69 lines
2.4 KiB
CMake

#
# Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
#
# SPDX-License-Identifier: BSD-2-Clause
#
cmake_minimum_required(VERSION 3.8.2)
include_guard(GLOBAL)
# Force TLS-model to be compatible with CAmkES usage (see
# tools/seL4/camkes-tool/helpers/environment_flags.cmake).
# NB: we cannot use CARGO_OPTIONS, cargo will strip it out
set(RUSTFLAGS "-Z tls-model=local-exec" CACHE INTERNAL "rustc env flags")
set(CARGO_OPTIONS
-Z unstable-options
-Z avoid-dev-deps
CACHE INTERNAL "cargo cmd line arguments")
# add_library but for rust libraries. Invokes cargo in the SOURCE_DIR that is provided,
# all build output is placed in BUILD_DIR or CMAKE_CURRENT_BINARY_DIR if BUILD_DIR isn't provided.
# lib_name: Name of library that is created
# SOURCE_DIR: source directory of cargo project
# BUILD_DIR: directory for cargo build output
# LIB_FILENAME: filename of library created by cargo
# DEPENDS: And target or file dependencies that need to be run before cargo
function(RustAddLibrary lib_name)
cmake_parse_arguments(PARSE_ARGV 1 RUST "" "SOURCE_DIR;BUILD_DIR;LIB_FILENAME" "DEPENDS")
if(NOT "${RUST_UNPARSED_ARGUMENTS}" STREQUAL "")
message(FATAL_ERROR "Unknown arguments to RustAddLibrary ${RUST_UNPARSED_ARGUMENTS}")
endif()
if("${RUST_SOURCE_DIR}" STREQUAL "")
message(FATAL_ERROR "SOURCE_DIR must be set for RustAddLibrary")
endif()
if("${RUST_LIB_FILENAME}" STREQUAL "")
message(FATAL_ERROR "LIB_FILENAME must be set for RustAddLibrary")
endif()
if("${RUST_BUILD_DIR}" STREQUAL "")
set(RUST_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR})
endif()
if("${RELEASE}")
set(CARGO_RELEASE "--release")
endif()
add_custom_target(
${lib_name}_custom
BYPRODUCTS
${RUST_BUILD_DIR}/${RUST_LIB_FILENAME}
${USES_TERMINAL_DEBUG}
DEPENDS ${RUST_DEPENDS}
WORKING_DIRECTORY ${RUST_SOURCE_DIR}
COMMAND
${CMAKE_COMMAND} -E env RUSTFLAGS=${RUSTFLAGS}
cargo "+$ENV{KATA_RUST_VERSION}" build
--target ${RUST_TARGET}
${CARGO_OPTIONS} ${CARGO_RELEASE}
--target-dir ${RUST_BUILD_DIR}
--out-dir ${RUST_BUILD_DIR}
)
add_library(${lib_name} STATIC IMPORTED GLOBAL)
set_property(
TARGET ${lib_name}
PROPERTY IMPORTED_LOCATION "${RUST_BUILD_DIR}/${RUST_LIB_FILENAME}"
)
add_dependencies(${lib_name} ${lib_name}_custom)
endfunction()