aboutsummaryrefslogtreecommitdiff
path: root/cmake/Modules/GenerateBootableIso.cmake
blob: 39a0ebd41385bfee321f34731c8b810a10751f29 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
include_guard(GLOBAL)

function(target_generate_bootable_iso TARGET)
    find_package("grub-mkrescue")

    set(MODULES_DIR "${PROJECT_SOURCE_DIR}/arch/${CMAKE_SYSTEM_PROCESSOR}/support/modules")
    set(COPY_MODULES_COMMAND)
    if(EXISTS "${MODULES_DIR}")
        set(COPY_MODULES_COMMAND
            COMMAND "${CMAKE_COMMAND}" -E copy_directory "${MODULES_DIR}" "$<TARGET_FILE_DIR:${TARGET}>/isofs/modules"
        )
    endif()

    file(GENERATE
        OUTPUT "$<TARGET_FILE_DIR:${TARGET}>/isofs/boot/grub/grub.cfg"
        INPUT "${PROJECT_SOURCE_DIR}/arch/${CMAKE_SYSTEM_PROCESSOR}/support/grub.cfg.in"
    )

    add_custom_command(TARGET "${TARGET}"
        POST_BUILD
        COMMAND "${CMAKE_COMMAND}" -E make_directory "$<TARGET_FILE_DIR:${TARGET}>/isofs"
        ${COPY_MODULES_COMMAND}
        COMMAND "${GRUB_MKRESCUE_EXE}"
        "-o"
        "$<TARGET_FILE_DIR:${TARGET}>/${TARGET}.iso"
        "$<TARGET_FILE_DIR:${TARGET}>/isofs"
        "$<TARGET_FILE:${TARGET}>"
        "2>/dev/null"
        BYPRODUCTS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIGURATION>/${TARGET}.iso"
        COMMENT "Creating bootable ISO image"
    )
    
endfunction()