75 lines
2.2 KiB
CMake
75 lines
2.2 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()
|
|
|
|
target_link_libraries(${TARGET} ${MODE} psemek-rs)
|
|
|
|
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 "${FILE}" "${OUT_HEADER}" "${OUT_SOURCE}")
|
|
endwhile()
|
|
endfunction()
|
|
|
|
function(psemek_glob_resources_impl MODE TARGET PATH PREFIX)
|
|
set(RESOURCES_LIST)
|
|
|
|
get_filename_component(PATH "${PATH}" ABSOLUTE)
|
|
|
|
file(GLOB_RECURSE INPUT_FILES LIST_DIRECTORIES false RELATIVE "${PATH}" "${PATH}/*")
|
|
|
|
foreach(INPUT_FILE ${INPUT_FILES})
|
|
set(RESOURCE_FILE "${PATH}/${INPUT_FILE}")
|
|
set(RESOURCE_NAME "${INPUT_FILE}")
|
|
string(REPLACE "." "_" RESOURCE_NAME "${RESOURCE_NAME}")
|
|
list(APPEND RESOURCES_LIST "${RESOURCE_FILE}" "${PREFIX}/${RESOURCE_NAME}")
|
|
endforeach()
|
|
|
|
psemek_add_resources_impl(${MODE} ${TARGET} ${RESOURCES_LIST})
|
|
endfunction()
|
|
|
|
function(psemek_add_resources)
|
|
psemek_add_resources_impl(PRIVATE ${ARGN})
|
|
endfunction()
|
|
|
|
function(psemek_add_public_resources)
|
|
psemek_add_resources_impl(PUBLIC ${ARGN})
|
|
endfunction()
|
|
|
|
function(psemek_glob_resources)
|
|
psemek_glob_resources_impl(PRIVATE ${ARGN})
|
|
endfunction()
|
|
|
|
function(psemek_glob_public_resources)
|
|
psemek_add_resources_impl(PUBLIC ${ARGN})
|
|
endfunction()
|