33 lines
1.3 KiB
CMake
33 lines
1.3 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(rustApps NONE)
|
|
|
|
function(add_rust_app NAME)
|
|
set(RUST_TARGET "x86_64-termos")
|
|
set(RUST_TARGET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/target")
|
|
set(RUST_ELF_FILE "${RUST_TARGET_DIR}/${RUST_TARGET}/release/${NAME}")
|
|
|
|
set(STARTUP_VOLUME_DIR "${CMAKE_BINARY_DIR}/StartupVolume/System/CoreServices")
|
|
set(FINAL_HOT_PATH "${STARTUP_VOLUME_DIR}/${NAME}")
|
|
set(STRIPPED_ELF "${CMAKE_CURRENT_BINARY_DIR}/${NAME}.stripped")
|
|
set(ELF2HOT_DIR "${CMAKE_SOURCE_DIR}/tools/elf2hot")
|
|
|
|
file(MAKE_DIRECTORY "${STARTUP_VOLUME_DIR}")
|
|
|
|
add_custom_target(${NAME} ALL
|
|
COMMAND ${CMAKE_COMMAND} -E env
|
|
"CARGO_TARGET_DIR=${RUST_TARGET_DIR}"
|
|
cargo build --package ${NAME} --release --target ${RUST_TARGET}
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E env
|
|
"PATH=/usr/local/opt/llvm/bin:/opt/homebrew/opt/llvm/bin:$ENV{PATH}"
|
|
llvm-objcopy --strip-all ${RUST_ELF_FILE} ${STRIPPED_ELF}
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E chdir ${ELF2HOT_DIR} cargo run --release --quiet -- ${STRIPPED_ELF} ${FINAL_HOT_PATH}
|
|
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
COMMENT "Building, stripping and packing ${NAME} to initramfs..."
|
|
VERBATIM
|
|
)
|
|
endfunction()
|
|
|
|
add_rust_app(rtest) |