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)