Mercurial > malikania
annotate cmake/function/MalikaniaDefineLibrary.cmake @ 76:858621081b95
Happy new year!
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 01 Jan 2017 13:35:37 +0100 |
parents | 0a1e3bb3c629 |
children | 119bcc5a727e |
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 # |
76 | 4 # Copyright (c) 2013-2017 Malikania Authors |
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 |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 # ASSETS (Optional) Additional assets files |
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 |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
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) |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 set(multiArgs ASSETS SOURCES FLAGS PRIVATE_INCLUDES PUBLIC_INCLUDES LIBRARIES) |
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 |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 # Enable assets for libraries. |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 malikania_build_assets("${LIB_ASSETS}" assets) |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 # Create the shared library. |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 add_library(${LIB_TARGET} SHARED ${LIB_SOURCES} ${assets}) |
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 |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 ${CMAKE_CURRENT_BINARY_DIR}/assets |
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 ) |
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 target_compile_definitions(${LIB_TARGET} PRIVATE ${LIB_FLAGS}) |
54
0edaba9986ba
CMake: add vera++, closes 602
David Demelier <markand@malikania.fr>
parents:
49
diff
changeset
|
72 |
60
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
73 # |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
74 # 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
|
75 # DLL platforms so executables can be ran directly. |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
76 # |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
77 set_target_properties( |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
78 ${LIB_TARGET} |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
79 PROPERTIES |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
80 PREFIX "" |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
81 RUNTIME_OUTPUT_DIRECTORY ${WITH_FAKEROOT_DIR}/bin |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
82 ) |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
83 foreach (cfg ${CMAKE_CONFIGURATION_TYPES}) |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
84 string(TOUPPER ${cfg} cfg) |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
85 set_target_properties( |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
86 ${LIB_TARGET} |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
87 PROPERTIES |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
88 RUNTIME_OUTPUT_DIRECTORY_${cfg} ${WITH_FAKEROOT_DIR}/bin |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
89 ) |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
90 endforeach () |
c6d410648367
CMake: use fakeroot/bin for DLL
David Demelier <markand@malikania.fr>
parents:
54
diff
changeset
|
91 |
68
0a1e3bb3c629
CMake: quote sources in malikania_vera_check to pass the whole list
David Demelier <markand@malikania.fr>
parents:
60
diff
changeset
|
92 malikania_vera_check(${LIB_TARGET} "${LIB_SOURCES}") |
49
2804ae55c70f
CMake: big cleanup, closes #598
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 endfunction() |