psemek/tools/resource/CMakeLists.txt

48 lines
1.4 KiB
CMake

psemek_add_build_tool(psemek-resource-compiler FALSE compiler.cpp)
function(psemek_add_resources_impl MODE TARGET)
if(PSEMEK_PACKAGE_MODE)
if(NOT (TARGET ${TARGET}))
return()
endif()
endif()
get_target_property(OUT_DIR ${TARGET} BINARY_DIR)
get_target_property(INPUT_DIR ${TARGET} SOURCE_DIR)
target_include_directories(${TARGET} ${MODE} "${OUT_DIR}/resource/include")
while(ARGN)
list(GET ARGN 0 FILE)
list(GET ARGN 1 NAME)
list(REMOVE_AT ARGN 0 1)
get_filename_component(NAME_PREFIX ${NAME} DIRECTORY)
file(MAKE_DIRECTORY "${OUT_DIR}/resource/include/${NAME_PREFIX}")
file(MAKE_DIRECTORY "${OUT_DIR}/resource/source/${NAME_PREFIX}")
set(OUT_HEADER "${OUT_DIR}/resource/include/${NAME}.hpp")
set(OUT_SOURCE "${OUT_DIR}/resource/source/${NAME}.cpp")
set(_DEPEND_TARGET psemek-resource-compiler)
if(PSEMEK_PACKAGE_MODE AND (NOT PSEMEK_PACKAGE_HOST))
set(_DEPEND_TARGET)
endif()
add_custom_command(OUTPUT "${OUT_HEADER}" "${OUT_SOURCE}"
COMMAND psemek-resource-compiler "${FILE}" ${NAME} "${OUT_HEADER}" "${OUT_SOURCE}"
DEPENDS psemek-resource-compiler "${FILE}"
WORKING_DIRECTORY "${INPUT_DIR}")
target_sources(${TARGET} PRIVATE "${OUT_HEADER}" "${OUT_SOURCE}")
endwhile()
endfunction()
function(psemek_add_resources)
psemek_add_resources_impl(PRIVATE ${ARGN})
endfunction()
function(psemek_add_public_resources)
psemek_add_resources_impl(PUBLIC ${ARGN})
endfunction()