Mercurial > malikania
annotate cmake/function/MalikaniaDefineExecutable.cmake @ 182:3107ce017c3a
Misc: switch back to SDL
Qt Quick and QML was an exciting experiment but it's definitely not enough
flexible and easy to use for game development.
Using SDL2 will let us focusing on our own drawing functions without any kind of
overhead.
While here, start massive cleanup.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 19 Oct 2018 20:18:19 +0200 |
parents | 3e3040d085b5 |
children | 387f6b0a5420 |
rev | line source |
---|---|
49
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 # |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 # MalikaniaDefineExecutable.cmake -- CMake build system for malikania |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 # |
158
4b292c20124c
Misc: update copyrights
David Demelier <markand@malikania.fr>
parents:
141
diff
changeset
|
4 # Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> |
49
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 # |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 # Permission to use, copy, modify, and/or distribute this software for any |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 # purpose with or without fee is hereby granted, provided that the above |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 # copyright notice and this permission notice appear in all copies. |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 # |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 # |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 # |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 # malikania_define_executable |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 # --------------------------- |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 # |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 # malikania_define_executable( |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 # TARGET The target name |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 # SOURCES The list of sources |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 # FLAGS (Optional) List of flags |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 # INCLUDES (Optional) List of include directories |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 # LIBRARIES (Optional) List of libraries |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 # ) |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 # |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 # Create an executable. Be sure to quote SOURCES, if not only the first file will be passed. |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 # If you need flags, just pass them without -D or /D, this is automatically done for you. |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 # |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 include(CMakeParseArguments) |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
182
3107ce017c3a
Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
165
diff
changeset
|
37 include(${CMAKE_CURRENT_LIST_DIR}/MalikaniaBuildAssets.cmake) |
54
0edaba9986ba
CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents:
50
diff
changeset
|
38 include(${CMAKE_CURRENT_LIST_DIR}/MalikaniaVeraCheck.cmake) |
0edaba9986ba
CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents:
50
diff
changeset
|
39 |
49
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 function(malikania_define_executable) |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 set(singleArgs TARGET) |
182
3107ce017c3a
Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
165
diff
changeset
|
42 set(multiArgs ASSETS SOURCES FLAGS INCLUDES LIBRARIES) |
49
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 cmake_parse_arguments(EXE "" "${singleArgs}" "${multiArgs}" ${ARGN}) |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 if (NOT EXE_TARGET) |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 message(FATAL_ERROR "Missing TARGET parameter") |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 endif () |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 if (NOT EXE_SOURCES) |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 message(FATAL_ERROR "Missing SOURCES parameter") |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 endif () |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 |
182
3107ce017c3a
Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
165
diff
changeset
|
53 malikania_build_assets("${EXE_ASSETS}" assets) |
3107ce017c3a
Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
165
diff
changeset
|
54 |
3107ce017c3a
Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
165
diff
changeset
|
55 add_executable(${EXE_TARGET} ${EXE_SOURCES} ${EXE_ASSETS} ${assets}) |
49
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 target_link_libraries(${EXE_TARGET} ${EXE_LIBRARIES}) |
141
2cce1729b6da
CMake: enable assets for executable
David Demelier <markand@malikania.fr>
parents:
111
diff
changeset
|
57 target_include_directories( |
2cce1729b6da
CMake: enable assets for executable
David Demelier <markand@malikania.fr>
parents:
111
diff
changeset
|
58 ${EXE_TARGET} |
2cce1729b6da
CMake: enable assets for executable
David Demelier <markand@malikania.fr>
parents:
111
diff
changeset
|
59 PRIVATE |
182
3107ce017c3a
Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
165
diff
changeset
|
60 ${CMAKE_CURRENT_BINARY_DIR}/assets |
141
2cce1729b6da
CMake: enable assets for executable
David Demelier <markand@malikania.fr>
parents:
111
diff
changeset
|
61 ${EXE_INCLUDES} |
2cce1729b6da
CMake: enable assets for executable
David Demelier <markand@malikania.fr>
parents:
111
diff
changeset
|
62 ) |
49
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 target_compile_definitions(${EXE_TARGET} PRIVATE ${EXE_FLAGS}) |
50
697bf85e8e19
CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents:
49
diff
changeset
|
64 set_target_properties( |
697bf85e8e19
CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents:
49
diff
changeset
|
65 ${EXE_TARGET} |
697bf85e8e19
CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents:
49
diff
changeset
|
66 PROPERTIES |
111
8963c68f023c
CMake: output everything in bin, closes #691
David Demelier <markand@malikania.fr>
parents:
110
diff
changeset
|
67 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin |
50
697bf85e8e19
CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents:
49
diff
changeset
|
68 ) |
697bf85e8e19
CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents:
49
diff
changeset
|
69 foreach (c ${CMAKE_CONFIGURATION_TYPES}) |
111
8963c68f023c
CMake: output everything in bin, closes #691
David Demelier <markand@malikania.fr>
parents:
110
diff
changeset
|
70 string(TOUPPER ${c} cu) |
50
697bf85e8e19
CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents:
49
diff
changeset
|
71 set_target_properties( |
697bf85e8e19
CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents:
49
diff
changeset
|
72 ${EXE_TARGET} |
697bf85e8e19
CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents:
49
diff
changeset
|
73 PROPERTIES |
111
8963c68f023c
CMake: output everything in bin, closes #691
David Demelier <markand@malikania.fr>
parents:
110
diff
changeset
|
74 RUNTIME_OUTPUT_DIRECTORY_${cu} ${CMAKE_BINARY_DIR}/bin/${c} |
50
697bf85e8e19
CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents:
49
diff
changeset
|
75 ) |
697bf85e8e19
CMake: move executables into fakeroot/bin
David Demelier <markand@malikania.fr>
parents:
49
diff
changeset
|
76 endforeach() |
54
0edaba9986ba
CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents:
50
diff
changeset
|
77 |
68
0a1e3bb3c629
CMake: quote sources in malikania_vera_check to pass the whole list
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
78 malikania_vera_check(${EXE_TARGET} "${EXE_SOURCES}") |
49
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 endfunction() |