annotate cmake/MolkoBuildAssets.cmake @ 277:1d10983fc0d7

cmake: cleanup
author David Demelier <markand@malikania.fr>
date Sun, 13 Dec 2020 11:25:11 +0100
parents 97f55f6b9593
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()