blob: 43441b04022c0a0993864be87efbf23d01a3f654 [file] [log] [blame] [edit]
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENSE.rst or https://cmake.org/licensing for details.
include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
if(NOT "${CMAKE_GENERATOR}" MATCHES "^Ninja")
message(FATAL_ERROR "Rust language not supported by \"${CMAKE_GENERATOR}\" generator")
endif()
set(CMAKE_Rust_COMPILER_INIT "rustc")
set(CMAKE_Rust_COMPILER_HINTS "$ENV{HOME}/.cargo/bin")
_cmake_find_compiler(Rust)
get_filename_component(RUSTC_REAL "${CMAKE_Rust_COMPILER}" REALPATH)
get_filename_component(RUSTC_FILENAME "${RUSTC_REAL}" NAME)
# When rustup is used for installing rust, rustc will just be a symlink to rustup. In such cases,
# we need to query rustup for underlying rustc path.
if(RUSTC_FILENAME STREQUAL "rustup")
get_filename_component(RUSTC_DIR "${CMAKE_Rust_COMPILER}" DIRECTORY)
set(RUSTUP_PATH "${RUSTC_DIR}/rustup")
# Fix RUSTUP_HOME in ctest.
if(RUSTC_FILENAME STREQUAL "rustup" AND NOT "$ENV{CTEST_REAL_HOME}" STREQUAL "" AND "$ENV{RUSTUP_HOME}" STREQUAL "")
set(ENV{RUSTUP_HOME} "$ENV{CTEST_REAL_HOME}/.rustup")
endif()
execute_process(
COMMAND ${RUSTUP_PATH} which rustc
OUTPUT_VARIABLE REAL_RUSTC
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if("${REAL_RUSTC}" STREQUAL "")
message(FATAL_ERROR "Failed to find path to real rustc")
endif()
set_property(CACHE CMAKE_Rust_COMPILER PROPERTY VALUE "${REAL_RUSTC}")
endif()
if(CMAKE_Rust_COMPILER)
set(CMAKE_Rust_COMPILER_WORKS TRUE)
endif()
configure_file(
"${CMAKE_ROOT}/Modules/CMakeRustCompiler.cmake.in"
"${CMAKE_PLATFORM_INFO_DIR}/CMakeRustCompiler.cmake"
@ONLY)