Files
termOS/Runtime/rust/CMakeLists.txt
T
2026-04-21 00:09:30 +04:00

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)