diff --git a/CMakeLists.txt b/CMakeLists.txt index c20920562..393117411 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,11 @@ cmake_minimum_required(VERSION 3.10) project(gdk VERSION 0.77.7 LANGUAGES C CXX) +# Keep the absolute checkout path out of compiled output. +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang") + add_compile_options("-ffile-prefix-map=${CMAKE_SOURCE_DIR}=.") +endif() + set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/cmake/includes/helpers.cmake b/cmake/includes/helpers.cmake index c73ec4356..e5be62821 100644 --- a/cmake/includes/helpers.cmake +++ b/cmake/includes/helpers.cmake @@ -63,7 +63,7 @@ macro(create_gdkrust_target) # cmake_path(GET OPENSSL_INCLUDE_DIR ROOT_DIRECTORY OPENSSL_ROOT_DIR) set(OPENSSL_ROOT_DIR ${CMAKE_PREFIX_PATH}) add_custom_target(cargo-cmd - COMMAND ${_buildTool} "${CMAKE_BUILD_TYPE}" "${_rustTriple}" "${ANDROID_TOOLCHAIN_ROOT}" ${CMAKE_AR} ${OPENSSL_INCLUDE_DIR} ${OPENSSL_CRYPTO_LIBRARY} ${_gdkRustSrcDir} ${_gdkRustBuildDir} ${_gdkRustLibArtifact} "${CMAKE_OSX_DEPLOYMENT_TARGET}" + COMMAND ${_buildTool} "${CMAKE_BUILD_TYPE}" "${_rustTriple}" "${ANDROID_TOOLCHAIN_ROOT}" ${CMAKE_AR} ${OPENSSL_INCLUDE_DIR} ${OPENSSL_CRYPTO_LIBRARY} ${_gdkRustSrcDir} ${_gdkRustBuildDir} ${_gdkRustLibArtifact} "${CMAKE_OSX_DEPLOYMENT_TARGET}" "${CMAKE_SOURCE_DIR}" VERBATIM BYPRODUCTS ${_gdkRustLibArtifact} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} diff --git a/tools/buildgdk_rust.sh b/tools/buildgdk_rust.sh index 517beb38e..345457b63 100755 --- a/tools/buildgdk_rust.sh +++ b/tools/buildgdk_rust.sh @@ -11,6 +11,7 @@ SOURCE_DIR="$1"; shift OUTPUT_DIR="$1"; shift ARTIFACT="$1"; shift export MACOSX_DEPLOYMENT_TARGET=$1; shift +GDK_ROOT="$1"; shift export CC_i686_linux_android=i686-linux-android23-clang export CARGO_TARGET_I686_LINUX_ANDROID_LINKER=${CC_i686_linux_android} @@ -22,6 +23,12 @@ export CC_aarch64_linux_android=aarch64-linux-android23-clang export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=${CC_aarch64_linux_android} export AR=${ARCHIVER} +# rustc flags this script must contribute. +GDK_RUSTC_FLAGS=() +if [ -n "${GDK_ROOT}" ]; then + GDK_RUSTC_FLAGS+=("--remap-path-prefix=${GDK_ROOT}=.") +fi + export CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse @@ -36,6 +43,7 @@ ARTIFACT_PATH_HINT=${OUTPUT_DIR} CARGO_ARGS=() CARGO_ARGS+=("--manifest-path=${SOURCE_DIR}/Cargo.toml") CARGO_ARGS+=("--target-dir=${OUTPUT_DIR}") +CARGO_ARGS+=("--locked") if [ "$BUILDTYPE" == "Release" ]; then CARGO_ARGS+=("--release") @@ -91,7 +99,7 @@ fi if [[ ${TRIPLE} == *"android"* ]];then export PATH=${PATH}:${ANDROID_TOOLCHAIN_ROOT}/bin - export RUSTFLAGS="-L${SOURCE_DIR}/libgcc" + GDK_RUSTC_FLAGS+=("-L${SOURCE_DIR}/libgcc") elif [[ ${TRIPLE} == "aarch64-apple-ios" ]]; then LD_ARCH="-arch arm64 -platform_version ios ${MACOSX_DEPLOYMENT_TARGET} ${MACOSX_DEPLOYMENT_TARGET}" elif [[ ${TRIPLE} == "x86_64-apple-ios" ]]; then @@ -104,6 +112,25 @@ elif [[ ${TRIPLE} == "x86_64-apple-darwin" ]]; then LD_ARCH="-arch x86_64 -platform_version macos ${MACOSX_DEPLOYMENT_TARGET} ${MACOSX_DEPLOYMENT_TARGET}" fi +# Cargo uses CARGO_ENCODED_RUSTFLAGS instead of RUSTFLAGS when the encoded +# variable is set, even when it is empty. Append to the source Cargo will use. +if [ ${#GDK_RUSTC_FLAGS[@]} -gt 0 ]; then + if [ -n "${CARGO_ENCODED_RUSTFLAGS+set}" ]; then + _gdk_us=$'\x1f' + for _gdk_flag in "${GDK_RUSTC_FLAGS[@]}"; do + CARGO_ENCODED_RUSTFLAGS="${CARGO_ENCODED_RUSTFLAGS:+${CARGO_ENCODED_RUSTFLAGS}${_gdk_us}}${_gdk_flag}" + done + export CARGO_ENCODED_RUSTFLAGS + unset _gdk_us _gdk_flag + else + for _gdk_flag in "${GDK_RUSTC_FLAGS[@]}"; do + RUSTFLAGS="${RUSTFLAGS:+${RUSTFLAGS} }${_gdk_flag}" + done + export RUSTFLAGS + unset _gdk_flag + fi +fi + # behaving correctly when no-op oldT=$(date +%s)