Skip to content

Commit 60421be

Browse files
committed
Generated a better mod template
1 parent db94e1c commit 60421be

4 files changed

Lines changed: 69 additions & 7 deletions

File tree

workspace/template/.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
build/
22
output/*
3-
!output/models
4-
!output/manifest.json
53
.DS_Store

workspace/template/CMakeLists.txt

Lines changed: 64 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ project(ModTemplate)
44
find_package(Python3 REQUIRED COMPONENTS Interpreter)
55

66
set(PARENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../..)
7+
set(LOCAL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include)
78

89
set(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

1919
file(GLOB_RECURSE SRC_FILES CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c")
20+
list(FILTER SRC_FILES EXCLUDE REGEX ".*.inc.c")
2021

2122
set(BUILD_GEN ${CMAKE_CURRENT_SOURCE_DIR}/output/build.gen)
2223
get_filename_component(OUTPUT_DIR ${BUILD_GEN} DIRECTORY)
2324
file(MAKE_DIRECTORY ${OUTPUT_DIR})
2425

2526
set(INTERMEDIATE_OUTPUTS "")
27+
set(COPY_OUTPUTS "")
2628
set(DIST_OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/output/dist)
2729

30+
# Generate preprocessed source file (Leaves sources in output/dist)
2831
foreach(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})
4548
endforeach()
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+
47107
string(REPLACE ";" "\n" FORMATTED_FILE_LIST "${INTERMEDIATE_OUTPUTS}")
48108
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/output/" "" FORMATTED_FILE_LIST "${FORMATTED_FILE_LIST}")
49109
file(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})

workspace/template/include/mod.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,8 @@
1111

1212
extern void* ScriptGetFunction(const char* module, const char* function);
1313

14-
#define CALL_FUNC(mod, func, ...) ((func##Func)ScriptGetFunction(mod, func##Symbol))(__VA_ARGS__)
14+
#define CALL_FUNC(mod, func, ...) ((func##Func)ScriptGetFunction(mod, func##Symbol))(__VA_ARGS__)
15+
16+
// STD-Replacements
17+
#define malloc(size) GameEngine_Malloc(size)
18+
#define free(ptr) GameEngine_Free(ptr)

0 commit comments

Comments
 (0)