1 message(STATUS "Building CMake Generator for Corrosion - This may take a while") |
|
2 |
|
3 set(generator_src "${CMAKE_CURRENT_BINARY_DIR}/legacy_generator_src") |
|
4 set(generator_destination "${CMAKE_CURRENT_BINARY_DIR}/legacy_generator") |
|
5 set(generator_build_quiet "") |
|
6 |
|
7 file(MAKE_DIRECTORY "${generator_src}") |
|
8 file(COPY src DESTINATION "${generator_src}") |
|
9 if(Rust_VERSION VERSION_LESS "1.56") |
|
10 message(STATUS "Corrosion Generator: Using Compatibility lock file, due to rust version less than 1.56") |
|
11 file(COPY Compat.Cargo.lock Compat.Cargo.toml DESTINATION "${generator_src}") |
|
12 file(RENAME "${generator_src}/Compat.Cargo.lock" "${generator_src}/Cargo.lock") |
|
13 file(RENAME "${generator_src}/Compat.Cargo.toml" "${generator_src}/Cargo.toml") |
|
14 else() |
|
15 file(COPY Cargo.lock Cargo.toml DESTINATION "${generator_src}") |
|
16 endif() |
|
17 |
|
18 # Using cargo install has the advantage of caching the build in the user .cargo directory, |
|
19 # so likely the rebuild will be very cheap even after deleting the build directory. |
|
20 execute_process( |
|
21 COMMAND ${CMAKE_COMMAND} |
|
22 -E env |
|
23 # If the Generator is built at configure of a project (instead of being pre-installed) |
|
24 # We don't want environment variables like `RUSTFLAGS` affecting the Generator build. |
|
25 --unset=RUSTFLAGS |
|
26 "CARGO_BUILD_RUSTC=${RUSTC_EXECUTABLE}" |
|
27 "${CARGO_EXECUTABLE}" install |
|
28 --path "." |
|
29 --root "${generator_destination}" |
|
30 --locked |
|
31 ${_CORROSION_QUIET_OUTPUT_FLAG} |
|
32 WORKING_DIRECTORY "${generator_src}" |
|
33 RESULT_VARIABLE generator_build_failed |
|
34 ) |
|
35 if(generator_build_failed) |
|
36 message(FATAL_ERROR "Building CMake Generator for Corrosion - failed") |
|
37 else() |
|
38 message(STATUS "Building CMake Generator for Corrosion - done") |
|
39 endif() |
|
40 set(host_executable_suffix "") |
|
41 if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") |
|
42 set(host_executable_suffix ".exe") |
|
43 endif() |
|
44 |
|
45 set(_CORROSION_GENERATOR_EXE |
|
46 "${generator_destination}/bin/corrosion-generator${host_executable_suffix}" |
|
47 ) |
|
48 |
|
49 add_executable(Corrosion::Generator IMPORTED GLOBAL) |
|
50 set_property( |
|
51 TARGET Corrosion::Generator |
|
52 PROPERTY IMPORTED_LOCATION "${_CORROSION_GENERATOR_EXE}") |
|
53 |
|
54 if (CORROSION_DEV_MODE) |
|
55 # If you're developing Corrosion, you want to make sure to re-configure whenever the |
|
56 # generator changes. |
|
57 file(GLOB_RECURSE _RUST_FILES CONFIGURE_DEPENDS generator/src/*.rs) |
|
58 file(GLOB _CARGO_FILES CONFIGURE_DEPENDS generator/Cargo.*) |
|
59 set_property( |
|
60 DIRECTORY APPEND |
|
61 PROPERTY CMAKE_CONFIGURE_DEPENDS |
|
62 ${_RUST_FILES} ${_CARGO_FILES}) |
|
63 endif() |
|
64 |
|