mirror of
https://github.com/Kitware/CMake.git
synced 2026-06-24 08:47:59 +00:00
51 lines
1.7 KiB
CMake
51 lines
1.7 KiB
CMake
# 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)|(Unix Makefiles)")
|
|
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
|
|
RESULT_VARIABLE _rust_result
|
|
)
|
|
|
|
if(NOT _rust_result EQUAL 0 OR "${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)
|