Mercurial > molko
annotate cmake/MolkoBuildAssets.cmake @ 300:3638b39ef2bf
examples: fix with new game_push function
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 11 Apr 2021 17:43:57 +0200 |
parents | 97f55f6b9593 |
children |
rev | line source |
---|---|
118
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 # |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 # MolkoBuildAssets.cmake -- CMake build system for molko |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 # |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 # Copyright (c) 2020 David Demelier <markand@malikania.fr> |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 # |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 # Permission to use, copy, modify, and/or distribute this software for any |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 # purpose with or without fee is hereby granted, provided that the above |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 # copyright notice and this permission notice appear in all copies. |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 # |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 # |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
243
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
19 # |
245
97f55f6b9593
doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
20 # # molko_build_assets |
243
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
21 # |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
22 # Generate custom commands to convert assets into C header files using mlk-bcc. |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
23 # The argument output will be set to contain every generated output so that the |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
24 # caller can set them as source input and be generated before the target itself. |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
25 # |
245
97f55f6b9593
doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
26 # ## Synopsis: |
243
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
27 # |
245
97f55f6b9593
doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
28 # ```cmake |
97f55f6b9593
doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
29 # molko_build_assets(assets outputs) |
97f55f6b9593
doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
30 # ``` |
97f55f6b9593
doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
31 # |
97f55f6b9593
doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
32 # ## Example |
97f55f6b9593
doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
33 # |
97f55f6b9593
doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
34 # ```cmake |
243
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
35 # molko_build_assets(image.png outputs) |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
36 # add_executable(main main.c ${outputs}) |
245
97f55f6b9593
doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
37 # ``` |
243
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
38 # |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
39 # Do not forget to add the CMake current binary directory |
245
97f55f6b9593
doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents:
243
diff
changeset
|
40 # `${CMAKE_CURRENT_BINARY_DIR}` through the include flags of the given target. |
243
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
41 # |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
42 # Each file is generated using the exact same file hierarchy as the input so |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
43 # an input of foo/bar/baz.png will be generated as foo/bar/baz.h in the binary |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
44 # directory. The exported symbol use the pattern <last-directory>_<basename> so |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
45 # in the above example, the file variable would be "bar_baz" |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
46 # |
71b3b7036de7
misc: lot of cleanups,
David Demelier <markand@malikania.fr>
parents:
223
diff
changeset
|
47 |
118
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 macro(molko_build_assets assets outputs) |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 set(${outputs}) |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 foreach (a ${assets}) |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 file(RELATIVE_PATH basename ${CMAKE_CURRENT_SOURCE_DIR} ${a}) |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 string(REGEX REPLACE "\\..*$" ".h" output ${basename}) |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 set(output ${CMAKE_CURRENT_BINARY_DIR}/${output}) |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 get_filename_component(outputdir ${output} DIRECTORY) |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 get_filename_component(name ${basename} NAME_WE) |
134
197374e9f0b2
cmake: prefix assets with their directory
David Demelier <markand@malikania.fr>
parents:
118
diff
changeset
|
57 get_filename_component(category ${outputdir} NAME) |
171
d841cff1017c
molko-bcc: allow -0 to NULL-terminate arrays
David Demelier <markand@malikania.fr>
parents:
170
diff
changeset
|
58 get_filename_Component(extension ${a} EXT) |
118
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 file(MAKE_DIRECTORY ${outputdir}) |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 |
171
d841cff1017c
molko-bcc: allow -0 to NULL-terminate arrays
David Demelier <markand@malikania.fr>
parents:
170
diff
changeset
|
61 # For "text" files, we create a C array null-terminated. |
d841cff1017c
molko-bcc: allow -0 to NULL-terminate arrays
David Demelier <markand@malikania.fr>
parents:
170
diff
changeset
|
62 if (${extension} MATCHES "\\.(txt|sql)") |
d841cff1017c
molko-bcc: allow -0 to NULL-terminate arrays
David Demelier <markand@malikania.fr>
parents:
170
diff
changeset
|
63 set(arg0 -0) |
d841cff1017c
molko-bcc: allow -0 to NULL-terminate arrays
David Demelier <markand@malikania.fr>
parents:
170
diff
changeset
|
64 else () |
d841cff1017c
molko-bcc: allow -0 to NULL-terminate arrays
David Demelier <markand@malikania.fr>
parents:
170
diff
changeset
|
65 unset(arg0) |
d841cff1017c
molko-bcc: allow -0 to NULL-terminate arrays
David Demelier <markand@malikania.fr>
parents:
170
diff
changeset
|
66 endif () |
d841cff1017c
molko-bcc: allow -0 to NULL-terminate arrays
David Demelier <markand@malikania.fr>
parents:
170
diff
changeset
|
67 |
118
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 add_custom_command( |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 OUTPUT ${output} |
223
560303066120
tools: sync latest bcc
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
70 COMMAND $<TARGET_FILE:mlk-bcc> ${arg0} -csu ${a} ${category}-${name} > ${output} |
170
e60a13969acb
cmake: fix rebuild when assets change
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
71 DEPENDS |
e60a13969acb
cmake: fix rebuild when assets change
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
72 ${a} |
223
560303066120
tools: sync latest bcc
David Demelier <markand@malikania.fr>
parents:
215
diff
changeset
|
73 $<TARGET_FILE:mlk-bcc> |
215
64f24b482722
rpg: implement tilesets separately, closes #2515 @4h
David Demelier <markand@malikania.fr>
parents:
171
diff
changeset
|
74 COMMENT "Generate header file from ${basename}" |
118
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 ) |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 list(APPEND ${outputs} ${output}) |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 endforeach () |
3411daa26432
cmake: create macros for building assets, continue #2487 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 endmacro() |