message(STATUS "Building CMake Generator for Corrosion - This may take a while")
set(generator_src "${CMAKE_CURRENT_BINARY_DIR}/legacy_generator_src")
set(generator_destination "${CMAKE_CURRENT_BINARY_DIR}/legacy_generator")
set(generator_build_quiet "")
file(MAKE_DIRECTORY "${generator_src}")
file(COPY src DESTINATION "${generator_src}")
if(Rust_VERSION VERSION_LESS "1.56")
message(STATUS "Corrosion Generator: Using Compatibility lock file, due to rust version less than 1.56")
file(COPY Compat.Cargo.lock Compat.Cargo.toml DESTINATION "${generator_src}")
file(RENAME "${generator_src}/Compat.Cargo.lock" "${generator_src}/Cargo.lock")
file(RENAME "${generator_src}/Compat.Cargo.toml" "${generator_src}/Cargo.toml")
else()
file(COPY Cargo.lock Cargo.toml DESTINATION "${generator_src}")
endif()
# Using cargo install has the advantage of caching the build in the user .cargo directory,
# so likely the rebuild will be very cheap even after deleting the build directory.
execute_process(
COMMAND ${CMAKE_COMMAND}
-E env
# If the Generator is built at configure of a project (instead of being pre-installed)
# We don't want environment variables like `RUSTFLAGS` affecting the Generator build.
--unset=RUSTFLAGS
"CARGO_BUILD_RUSTC=${RUSTC_EXECUTABLE}"
"${CARGO_EXECUTABLE}" install
--path "."
--root "${generator_destination}"
--locked
${_CORROSION_QUIET_OUTPUT_FLAG}
WORKING_DIRECTORY "${generator_src}"
RESULT_VARIABLE generator_build_failed
)
if(generator_build_failed)
message(FATAL_ERROR "Building CMake Generator for Corrosion - failed")
else()
message(STATUS "Building CMake Generator for Corrosion - done")
endif()
set(host_executable_suffix "")
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
set(host_executable_suffix ".exe")
endif()
set(_CORROSION_GENERATOR_EXE
"${generator_destination}/bin/corrosion-generator${host_executable_suffix}"
)
add_executable(Corrosion::Generator IMPORTED GLOBAL)
set_property(
TARGET Corrosion::Generator
PROPERTY IMPORTED_LOCATION "${_CORROSION_GENERATOR_EXE}")
if (CORROSION_DEV_MODE)
# If you're developing Corrosion, you want to make sure to re-configure whenever the
# generator changes.
file(GLOB_RECURSE _RUST_FILES CONFIGURE_DEPENDS generator/src/*.rs)
file(GLOB _CARGO_FILES CONFIGURE_DEPENDS generator/Cargo.*)
set_property(
DIRECTORY APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS
${_RUST_FILES} ${_CARGO_FILES})
endif()