| # 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) |