annotate cmake/function/MalikaniaDefineLibrary.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 # MalikaniaDefineLibrary.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: 121
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_library
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_library(
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 sources
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
26 # ASSETS (Optional) Additional assets files
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 # FLAGS (Optional) List of flags
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 # PRIVATE_INCLUDES (Optional) List of includes only for building the library
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 # PUBLIC_INCLUDES (Optional) List of public includes to share with the library users
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 # LIBRARIES (Optional) List of libraries to link against
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 # )
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 # Create a shared library. Follow the same specification as malikania_define_executable.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 # However, additional PRIVATE_INCLUDES and PUBLIC_INCLUDES are available.
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 include(CMakeParseArguments)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
39 include(${CMAKE_CURRENT_LIST_DIR}/MalikaniaBuildAssets.cmake)
54
0edaba9986ba CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
40 include(${CMAKE_CURRENT_LIST_DIR}/MalikaniaVeraCheck.cmake)
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 function(malikania_define_library)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 set(singleArgs TARGET)
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
44 set(multiArgs ASSETS SOURCES FLAGS PRIVATE_INCLUDES PUBLIC_INCLUDES LIBRARIES)
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 set(mandatory TARGET SOURCES)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
46
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 cmake_parse_arguments(LIB "" "${singleArgs}" "${multiArgs}" ${ARGN})
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 if (NOT LIB_TARGET)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 message(FATAL_ERROR "Missing TARGET 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 if (NOT LIB_SOURCES)
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 message(FATAL_ERROR "Missing SOURCES parameter")
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 endif ()
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
55
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
56 # Enable assets for libraries.
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
57 malikania_build_assets("${LIB_ASSETS}" assets)
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
58
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 # Create the shared library.
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
60 add_library(${LIB_TARGET} SHARED ${LIB_SOURCES} ${assets} ${LIB_ASSETS})
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 target_link_libraries(${LIB_TARGET} ${LIB_LIBRARIES})
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 target_include_directories(
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 ${LIB_TARGET}
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 PRIVATE
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents: 165
diff changeset
65 ${CMAKE_CURRENT_BINARY_DIR}/assets
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 ${LIB_PRIVATE_INCLUDES}
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 PUBLIC
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 ${CMAKE_CURRENT_SOURCE_DIR}
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 ${LIB_PUBLIC_INCLUDES}
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 )
121
48f7e7277ab6 CMake: set CMake variables in libraries
David Demelier <markand@malikania.fr>
parents: 111
diff changeset
71 target_compile_definitions(
48f7e7277ab6 CMake: set CMake variables in libraries
David Demelier <markand@malikania.fr>
parents: 111
diff changeset
72 ${LIB_TARGET}
48f7e7277ab6 CMake: set CMake variables in libraries
David Demelier <markand@malikania.fr>
parents: 111
diff changeset
73 PRIVATE ${LIB_FLAGS}
48f7e7277ab6 CMake: set CMake variables in libraries
David Demelier <markand@malikania.fr>
parents: 111
diff changeset
74 CMAKE_CURRENT_BINARY_DIR="${CMAKE_CURRENT_BINARY_DIR}"
48f7e7277ab6 CMake: set CMake variables in libraries
David Demelier <markand@malikania.fr>
parents: 111
diff changeset
75 CMAKE_CURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
48f7e7277ab6 CMake: set CMake variables in libraries
David Demelier <markand@malikania.fr>
parents: 111
diff changeset
76 )
54
0edaba9986ba CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents: 49
diff changeset
77
60
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
78 #
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
79 # Move the library into fakeroot/bin/ directory for Windows and other
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
80 # DLL platforms so executables can be ran directly.
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
81 #
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
82 set_target_properties(
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
83 ${LIB_TARGET}
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
84 PROPERTIES
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
85 PREFIX ""
111
8963c68f023c CMake: output everything in bin, closes #691
David Demelier <markand@malikania.fr>
parents: 110
diff changeset
86 RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
60
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
87 )
111
8963c68f023c CMake: output everything in bin, closes #691
David Demelier <markand@malikania.fr>
parents: 110
diff changeset
88 foreach (c ${CMAKE_CONFIGURATION_TYPES})
8963c68f023c CMake: output everything in bin, closes #691
David Demelier <markand@malikania.fr>
parents: 110
diff changeset
89 string(TOUPPER ${c} cu)
60
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
90 set_target_properties(
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
91 ${LIB_TARGET}
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
92 PROPERTIES
111
8963c68f023c CMake: output everything in bin, closes #691
David Demelier <markand@malikania.fr>
parents: 110
diff changeset
93 RUNTIME_OUTPUT_DIRECTORY_${cu} ${CMAKE_BINARY_DIR}/bin/${c}
60
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
94 )
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
95 endforeach ()
c6d410648367 CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents: 54
diff changeset
96
68
0a1e3bb3c629 CMake: quote sources in malikania_vera_check to pass the whole list
David Demelier <markand@malikania.fr>
parents: 60
diff changeset
97 malikania_vera_check(${LIB_TARGET} "${LIB_SOURCES}")
49
2804ae55c70f CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 endfunction()