@@ -4,10 +4,10 @@ project(ModTemplate)
44find_package (Python3 REQUIRED COMPONENTS Interpreter )
55
66set (PARENT_DIR ${CMAKE_CURRENT_SOURCE_DIR } /../..)
7+ set (LOCAL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR } /include)
78
89set (INCLUDE_DIRS
9- ${CMAKE_CURRENT_SOURCE_DIR } /src
10- ${CMAKE_CURRENT_SOURCE_DIR } /include
10+ ${LOCAL_INCLUDE_DIRS}
1111 ${PARENT_DIR}
1212 ${PARENT_DIR} /include
1313 ${PARENT_DIR} /src
@@ -17,14 +17,17 @@ set(INCLUDE_DIRS
1717)
1818
1919file (GLOB_RECURSE SRC_FILES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR } /src/*.c" )
20+ list (FILTER SRC_FILES EXCLUDE REGEX ".*.inc.c" )
2021
2122set (BUILD_GEN ${CMAKE_CURRENT_SOURCE_DIR } /output/build.gen)
2223get_filename_component (OUTPUT_DIR ${BUILD_GEN} DIRECTORY )
2324file (MAKE_DIRECTORY ${OUTPUT_DIR} )
2425
2526set (INTERMEDIATE_OUTPUTS "" )
27+ set (COPY_OUTPUTS "" )
2628set (DIST_OUTPUT ${CMAKE_CURRENT_SOURCE_DIR } /output/dist)
2729
30+ # Generate preprocessed source file (Leaves sources in output/dist)
2831foreach (SOURCE_FILE ${SRC_FILES} )
2932 file (RELATIVE_PATH RELATIVE_FILE ${CMAKE_CURRENT_SOURCE_DIR } /src ${SOURCE_FILE} )
3033 set (OUTPUT_FILE ${DIST_OUTPUT} /${RELATIVE_FILE} )
@@ -35,7 +38,7 @@ foreach(SOURCE_FILE ${SRC_FILES})
3538 COMMAND ${CMAKE_COMMAND } -E make_directory ${INTERMEDIATE_DIR}
3639 COMMAND Python3::Interpreter ${PARENT_DIR} /tools/merge.py
3740 --out ${OUTPUT_FILE}
38- --includes ${INCLUDE_DIRS}
41+ --includes ${INCLUDE_DIRS}
3942 --src ${SOURCE_FILE}
4043 DEPENDS ${SOURCE_FILE} ${PARENT_DIR} /tools/merge.py
4144 VERBATIM
@@ -44,8 +47,65 @@ foreach(SOURCE_FILE ${SRC_FILES})
4447 list (APPEND INTERMEDIATE_OUTPUTS ${OUTPUT_FILE} )
4548endforeach ()
4649
50+ # Copy headers into output folder
51+ foreach (INCLUDE_DIR ${LOCAL_INCLUDE_DIRS} )
52+ file (GLOB_RECURSE HEADER_FILES CONFIGURE_DEPENDS "${INCLUDE_DIR} /*.h" )
53+ foreach (HEADER_FILE ${HEADER_FILES} )
54+ file (RELATIVE_PATH RELATIVE_HEADER ${INCLUDE_DIR} ${HEADER_FILE} )
55+
56+ set (OUTPUT_HEADER ${OUTPUT_DIR} /include/${RELATIVE_HEADER} )
57+
58+ get_filename_component (HEADER_OUTPUT_DIR ${OUTPUT_HEADER} DIRECTORY )
59+
60+ add_custom_command (
61+ OUTPUT ${OUTPUT_HEADER}
62+ COMMAND ${CMAKE_COMMAND } -E make_directory ${HEADER_OUTPUT_DIR}
63+ COMMAND ${CMAKE_COMMAND } -E copy_if_different ${HEADER_FILE} ${OUTPUT_HEADER}
64+ DEPENDS ${HEADER_FILE}
65+ VERBATIM
66+ )
67+
68+ list (APPEND COPY_OUTPUTS ${OUTPUT_HEADER} )
69+ endforeach ()
70+ endforeach ()
71+
72+ # Copy assets into output folder
73+ file (GLOB_RECURSE ASSET_FILES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR } /assets/*" )
74+ foreach (ASSET_FILE ${ASSET_FILES} )
75+ file (RELATIVE_PATH RELATIVE_ASSET ${CMAKE_CURRENT_SOURCE_DIR } /assets ${ASSET_FILE} )
76+
77+ set (OUTPUT_ASSET ${OUTPUT_DIR} /${RELATIVE_ASSET} )
78+
79+ get_filename_component (ASSET_OUTPUT_DIR ${OUTPUT_ASSET} DIRECTORY )
80+
81+ add_custom_command (
82+ OUTPUT ${OUTPUT_ASSET}
83+ COMMAND ${CMAKE_COMMAND } -E make_directory ${ASSET_OUTPUT_DIR}
84+ COMMAND ${CMAKE_COMMAND } -E copy_if_different ${ASSET_FILE} ${OUTPUT_ASSET}
85+ DEPENDS ${ASSET_FILE}
86+ VERBATIM
87+ )
88+
89+ list (APPEND COPY_OUTPUTS ${OUTPUT_ASSET} )
90+ endforeach ()
91+
92+ # Copy manifest into output folder
93+ set (MANIFEST_FILE ${CMAKE_CURRENT_SOURCE_DIR } /manifest.json)
94+
95+ set (OUTPUT_MANIFEST ${OUTPUT_DIR} /manifest.json)
96+
97+ get_filename_component (MANIFEST_OUTPUT_DIR ${OUTPUT_MANIFEST} DIRECTORY )
98+ add_custom_command (
99+ OUTPUT ${OUTPUT_MANIFEST}
100+ COMMAND ${CMAKE_COMMAND } -E make_directory ${MANIFEST_OUTPUT_DIR}
101+ COMMAND ${CMAKE_COMMAND } -E copy_if_different ${MANIFEST_FILE} ${OUTPUT_MANIFEST}
102+ DEPENDS ${MANIFEST_FILE}
103+ VERBATIM
104+ )
105+ list (APPEND COPY_OUTPUTS ${OUTPUT_MANIFEST} )
106+
47107string (REPLACE ";" "\n " FORMATTED_FILE_LIST "${INTERMEDIATE_OUTPUTS} " )
48108string (REPLACE "${CMAKE_CURRENT_SOURCE_DIR } /output/" "" FORMATTED_FILE_LIST "${FORMATTED_FILE_LIST} " )
49109file (WRITE ${BUILD_GEN} "${FORMATTED_FILE_LIST} \n " )
50110
51- add_custom_target (generate_packaged_mod ALL DEPENDS ${INTERMEDIATE_OUTPUTS} )
111+ add_custom_target (generate_packaged_mod ALL DEPENDS ${INTERMEDIATE_OUTPUTS} ${COPY_OUTPUTS} )
0 commit comments