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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()