Mercurial > molko
changeset 264:9bbbabb6f077
cmake: make macros simpler
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 09 Dec 2020 21:22:21 +0100 |
parents | cd5bdb995052 |
children | 11db1d425502 |
files | CMakeLists.txt cmake/MolkoDefineExecutable.cmake cmake/MolkoDefineLibrary.cmake doc/docs/cmake/MolkoDefineLibrary.md extern/libgreatest/CMakeLists.txt extern/libsqlite/CMakeLists.txt libmlk-adventure/CMakeLists.txt libmlk-adventure/adventure/actions/teleport.c libmlk-adventure/adventure/state/mainmenu.c libmlk-adventure/adventure/state/map.c libmlk-core/CMakeLists.txt libmlk-data/CMakeLists.txt libmlk-rpg/CMakeLists.txt libmlk-ui/CMakeLists.txt |
diffstat | 14 files changed, 121 insertions(+), 141 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Tue Dec 08 17:00:03 2020 +0100 +++ b/CMakeLists.txt Wed Dec 09 21:22:21 2020 +0100 @@ -16,7 +16,7 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # -cmake_minimum_required(VERSION 3.17) +cmake_minimum_required(VERSION 3.19) project(molko) set(CMAKE_C_STANDARD 11)
--- a/cmake/MolkoDefineExecutable.cmake Tue Dec 08 17:00:03 2020 +0100 +++ b/cmake/MolkoDefineExecutable.cmake Wed Dec 09 21:22:21 2020 +0100 @@ -80,17 +80,8 @@ add_executable(${EXE_TARGET} ${EXE_SOURCES} ${OUTPUTS}) target_compile_definitions(${EXE_TARGET} PRIVATE ${EXE_FLAGS}) - target_include_directories( - ${EXE_TARGET} - PRIVATE - ${CMAKE_CURRENT_BINARY_DIR} - ${EXE_INCLUDES} - ) - target_link_libraries( - ${EXE_TARGET} - PRIVATE - ${EXE_LIBRARIES} - ) + target_include_directories(${EXE_TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${EXE_INCLUDES}) + target_link_libraries(${EXE_TARGET} PRIVATE ${EXE_LIBRARIES}) if (EXE_FOLDER) set_target_properties(${EXE_TARGET} PROPERTIES FOLDER ${EXE_FOLDER})
--- a/cmake/MolkoDefineLibrary.cmake Tue Dec 08 17:00:03 2020 +0100 +++ b/cmake/MolkoDefineLibrary.cmake Wed Dec 09 21:22:21 2020 +0100 @@ -30,12 +30,9 @@ # EXTERNAL (Optional) set to true for external libraries # FOLDER (Optional) optional subfolder to organize # TYPE (Optional) type of library -# ASSETS (Optional) list of assets # LIBRARIES (Optional) libraries to link -# PRIVATE_FLAGS (Optional) C flags (without -D) -# PRIVATE_INCLUDES (Optional) local includes for the target only -# PUBLIC_FLAGS (Optional) C flags (without -D) -# PUBLIC_INCLUDES (Optional) includes to share with target dependencies +# FLAGS (Optional) C flags (without -D) +# INCLUDES (Optional) local includes for the target only # ) # ``` # @@ -52,25 +49,27 @@ # Optional argument *EXTERNAL* should be set for targets that are not # maintained here (e.g. third party libraries embedded). # -# Optional argument *PRIVATE_FLAGS*, *PUBLIC_FLAGS*, *PRIVATE_INCLUDES*, -# *PUBLIC_INCLUDES*, *LIBRARIES* may be passed to set compile flags, includes -# and libraries respectively. -# -# The arguments *ASSETS* contains a list of assets to be converted during the -# build. The file hierarchy is conserved in the `${CMAKE_CURRENT_BINARY_DIR}`. +# The optional arguments *LIBRARIES*, *FLAGS* and *INCLUDES* are passed to the +# respective CMake command [target_link_libraries][], +# [target_compile_definitions][] and [target_include_directories][] +# respectively. As such, it is necessary to specify the scope (PUBLIC, PRIVATE +# or INTERFACE) for every argument. # # If *FOLDER* option is set, it is organized into its name under the IDE if # supported. # +# [target_compile_definitions]: https://cmake.org/cmake/help/latest/command/target_compile_definitions.html +# [target_include_directories]: https://cmake.org/cmake/help/latest/command/target_include_directories.html +# [target_link_libraries]: https://cmake.org/cmake/help/latest/command/target_link_libraries.html +# -include(${CMAKE_CURRENT_LIST_DIR}/MolkoBuildAssets.cmake) include(${CMAKE_CURRENT_LIST_DIR}/MolkoSetCompilerFlags.cmake) include(${CMAKE_CURRENT_LIST_DIR}/MolkoSetBuildDirectories.cmake) function(molko_define_library) set(options EXTERNAL) set(oneValueArgs FOLDER TARGET TYPE) - set(multiValueArgs ASSETS LIBRARIES PRIVATE_FLAGS PRIVATE_INCLUDES PUBLIC_FLAGS PUBLIC_INCLUDES SOURCES TRANSLATIONS) + set(multiValueArgs ASSETS FLAGS INCLUDES LIBRARIES SOURCES TRANSLATIONS) cmake_parse_arguments(LIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) @@ -83,71 +82,47 @@ molko_build_assets("${LIB_ASSETS}" ASSETS_OUTPUTS) - if (${LIB_TYPE} MATCHES "INTERFACE") - add_library(${LIB_TARGET} INTERFACE) - target_sources( - ${LIB_TARGET} - INTERFACE - ${ASSETS_OUTPUTS} - ${LIB_SOURCES} - ${NLS_OUTPUTS} - ) - target_include_directories( - ${LIB_TARGET} - INTERFACE - ${LIB_PRIVATE_INCLUDES} - ${LIB_PUBLIC_INCLUDES} + if (LIB_TRANSLATIONS) + molko_build_translations( + TARGET ${LIB_TARGET} + TRANSLATIONS ${LIB_TRANSLATIONS} + SOURCES ${LIB_SOURCES} + OUTPUTS NLS_OUTPUTS ) - else () - if (LIB_TRANSLATIONS) - molko_build_translations( - TARGET ${LIB_TARGET} - TRANSLATIONS ${LIB_TRANSLATIONS} - SOURCES ${LIB_SOURCES} - OUTPUTS NLS_OUTPUTS - ) - endif () + endif () - add_library( - ${LIB_TARGET} - ${ASSETS_OUTPUTS} - ${LIB_SOURCES} - ${LIB_TYPE} - ${NLS_OUTPUTS} - ) + add_library( + ${LIB_TARGET} + ${LIB_TYPE} + ${ASSETS_OUTPUTS} + ${LIB_SOURCES} + ${NLS_OUTPUTS} + ) - target_include_directories( - ${LIB_TARGET} - PRIVATE - ${LIB_PRIVATE_INCLUDES} - PUBLIC - $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> - ${LIB_PUBLIC_INCLUDES} - ) - target_compile_definitions( - ${LIB_TARGET} - PRIVATE - ${LIB_PRIVATE_FLAGS} - PUBLIC - ${LIB_PUBLIC_FLAGS} - ) + if (NOT LIB_TYPE OR NOT ${LIB_TYPE} MATCHES INTERFACE) + molko_set_build_directories(${LIB_TARGET}) + target_include_directories(${LIB_TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + endif () + + if (LIB_INCLUDES) + target_include_directories(${LIB_TARGET} ${LIB_INCLUDES}) + endif () + if (LIB_FLAGS) + target_compile_definitions(${LIB_TARGET} ${LIB_FLAGS}) + endif () + if (LIB_LIBRARIES) target_link_libraries(${LIB_TARGET} ${LIB_LIBRARIES}) - set_target_properties( - ${LIB_TARGET} - PROPERTIES - PREFIX "" - IMPORT_PREFIX "" - C_EXTENSIONS Off - C_STANDARD 11 - C_STANDARD_REQUIRED On - ) + endif () - if (NOT ${LIB_EXTERNAL}) - molko_set_compiler_flags(${LIB_TARGET}) - endif () - - molko_set_build_directories(${LIB_TARGET}) - endif () + set_target_properties( + ${LIB_TARGET} + PROPERTIES + PREFIX "" + IMPORT_PREFIX "" + C_EXTENSIONS Off + C_STANDARD 11 + C_STANDARD_REQUIRED On + ) if (LIB_FOLDER) set_target_properties(${LIB_TARGET} PROPERTIES FOLDER ${LIB_FOLDER})
--- a/doc/docs/cmake/MolkoDefineLibrary.md Tue Dec 08 17:00:03 2020 +0100 +++ b/doc/docs/cmake/MolkoDefineLibrary.md Wed Dec 09 21:22:21 2020 +0100 @@ -11,12 +11,9 @@ EXTERNAL (Optional) set to true for external libraries FOLDER (Optional) optional subfolder to organize TYPE (Optional) type of library -ASSETS (Optional) list of assets LIBRARIES (Optional) libraries to link -PRIVATE_FLAGS (Optional) C flags (without -D) -PRIVATE_INCLUDES (Optional) local includes for the target only -PUBLIC_FLAGS (Optional) C flags (without -D) -PUBLIC_INCLUDES (Optional) includes to share with target dependencies +FLAGS (Optional) C flags (without -D) +INCLUDES (Optional) local includes for the target only ) ``` @@ -33,13 +30,16 @@ Optional argument *EXTERNAL* should be set for targets that are not maintained here (e.g. third party libraries embedded). -Optional argument *PRIVATE_FLAGS*, *PUBLIC_FLAGS*, *PRIVATE_INCLUDES*, -*PUBLIC_INCLUDES*, *LIBRARIES* may be passed to set compile flags, includes -and libraries respectively. - -The arguments *ASSETS* contains a list of assets to be converted during the -build. The file hierarchy is conserved in the `${CMAKE_CURRENT_BINARY_DIR}`. +The optional arguments *LIBRARIES*, *FLAGS* and *INCLUDES* are passed to the +respective CMake command [target_link_libraries][], +[target_compile_definitions][] and [target_include_directories][] +respectively. As such, it is necessary to specify the scope (PUBLIC, PRIVATE +or INTERFACE) for every argument. If *FOLDER* option is set, it is organized into its name under the IDE if supported. +[target_compile_definitions]: https://cmake.org/cmake/help/latest/command/target_compile_definitions.html +[target_include_directories]: https://cmake.org/cmake/help/latest/command/target_include_directories.html +[target_link_libraries]: https://cmake.org/cmake/help/latest/command/target_link_libraries.html +
--- a/extern/libgreatest/CMakeLists.txt Tue Dec 08 17:00:03 2020 +0100 +++ b/extern/libgreatest/CMakeLists.txt Wed Dec 09 21:22:21 2020 +0100 @@ -23,6 +23,5 @@ TYPE INTERFACE SOURCES greatest.h EXTERNAL - PUBLIC_INCLUDES - $<BUILD_INTERFACE:${libgreatest_SOURCE_DIR}> + INCLUDES INTERFACE $<BUILD_INTERFACE:${libgreatest_SOURCE_DIR}> )
--- a/extern/libsqlite/CMakeLists.txt Tue Dec 08 17:00:03 2020 +0100 +++ b/extern/libsqlite/CMakeLists.txt Wed Dec 09 21:22:21 2020 +0100 @@ -23,15 +23,17 @@ SOURCES sqlite3.c sqlite3.h EXTERNAL FOLDER extern - PUBLIC_FLAGS - SQLITE_THREADSAFE=0 - SQLITE_DEFAULT_MEMSTATUS=0 - SQLITE_DEFAULT_FOREIGN_KEYS=1 - SQLITE_OMIT_DEPRECATED - SQLITE_OMIT_LOAD_EXTENSION - $<$<CONFIG:Debug>:SQLITE_DEBUG> - $<$<CONFIG:Debug>:SQLITE_MEMDEBUG> - PUBLIC_INCLUDES - $<BUILD_INTERFACE:${libsqlite_SOURCE_DIR}> - $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> + FLAGS + PRIVATE + SQLITE_THREADSAFE=0 + SQLITE_DEFAULT_MEMSTATUS=0 + SQLITE_DEFAULT_FOREIGN_KEYS=1 + SQLITE_OMIT_DEPRECATED + SQLITE_OMIT_LOAD_EXTENSION + $<$<CONFIG:Debug>:SQLITE_DEBUG> + $<$<CONFIG:Debug>:SQLITE_MEMDEBUG> + INCLUDES + PUBLIC + $<BUILD_INTERFACE:${libsqlite_SOURCE_DIR}> + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> )
--- a/libmlk-adventure/CMakeLists.txt Tue Dec 08 17:00:03 2020 +0100 +++ b/libmlk-adventure/CMakeLists.txt Wed Dec 09 21:22:21 2020 +0100 @@ -48,12 +48,9 @@ TARGET libmlk-adventure TRANSLATIONS fr SOURCES ${SOURCES} ${PO} - LIBRARIES libmlk-core libmlk-ui libmlk-rpg libmlk-data - PRIVATE_INCLUDES - ${libadventure_SOURCE_DIR}/adventure - PUBLIC_INCLUDES - $<BUILD_INTERFACE:${libadventure_SOURCE_DIR}> - PRIVATE_FLAGS DIRECTORY="${libadventure_SOURCE_DIR}/adventure/assets" + FLAGS PRIVATE _BSD_SOURCE + LIBRARIES PUBLIC libmlk-core libmlk-ui libmlk-rpg libmlk-data + INCLUDES PUBLIC $<BUILD_INTERFACE:${libadventure_SOURCE_DIR}> ) source_group(TREE ${libadventure_SOURCE_DIR} FILES ${SOURCES})
--- a/libmlk-adventure/adventure/actions/teleport.c Tue Dec 08 17:00:03 2020 +0100 +++ b/libmlk-adventure/adventure/actions/teleport.c Wed Dec 09 21:22:21 2020 +0100 @@ -33,7 +33,8 @@ #include <rpg/map.h> -#include "molko.h" +#include <adventure/molko.h> + #include "teleport.h" struct teleport {
--- a/libmlk-adventure/adventure/state/mainmenu.c Tue Dec 08 17:00:03 2020 +0100 +++ b/libmlk-adventure/adventure/state/mainmenu.c Wed Dec 09 21:22:21 2020 +0100 @@ -37,8 +37,8 @@ #include <ui/theme.h> #include <adventure/molko.h> +#include <adventure/adventure_p.h> -#include "adventure_p.h" #include "mainmenu.h" struct self {
--- a/libmlk-adventure/adventure/state/map.c Tue Dec 08 17:00:03 2020 +0100 +++ b/libmlk-adventure/adventure/state/map.c Wed Dec 09 21:22:21 2020 +0100 @@ -34,7 +34,8 @@ #include <adventure/actions/spawner.h> #include <adventure/actions/teleport.h> -#include "molko.h" +#include <adventure/molko.h> + #include "map.h" struct self {
--- a/libmlk-core/CMakeLists.txt Tue Dec 08 17:00:03 2020 +0100 +++ b/libmlk-core/CMakeLists.txt Wed Dec 09 21:22:21 2020 +0100 @@ -115,22 +115,26 @@ ASSETS ${ASSETS} TRANSLATIONS fr LIBRARIES - ${LIBS} - $<$<BOOL:${LIBM}>:m> - libcompat - libsqlite - SDL2::SDL2 - SDL2::image - SDL2::mixer - SDL2::ttf - PRIVATE_FLAGS - BINDIR="${CMAKE_INSTALL_BINDIR}" - PREFIX="${CMAKE_INSTALL_PREFIX}" - SHAREDIR="${CMAKE_INSTALL_DATADIR}" - PUBLIC_INCLUDES - ${INCS} - $<BUILD_INTERFACE:${libmlk-core_SOURCE_DIR}> - $<BUILD_INTERFACE:${libmlk-core_BINARY_DIR}> + PUBLIC + ${LIBS} + $<$<BOOL:${LIBM}>:m> + libcompat + libsqlite + SDL2::SDL2 + SDL2::image + SDL2::mixer + SDL2::ttf + FLAGS + PRIVATE + _BSD_SOURCE + BINDIR="${CMAKE_INSTALL_BINDIR}" + PREFIX="${CMAKE_INSTALL_PREFIX}" + SHAREDIR="${CMAKE_INSTALL_DATADIR}" + INCLUDES + PUBLIC + ${INCS} + $<BUILD_INTERFACE:${libmlk-core_SOURCE_DIR}> + $<BUILD_INTERFACE:${libmlk-core_BINARY_DIR}> ) source_group(TREE ${libmlk-core_SOURCE_DIR} FILES ${SOURCES})
--- a/libmlk-data/CMakeLists.txt Tue Dec 08 17:00:03 2020 +0100 +++ b/libmlk-data/CMakeLists.txt Wed Dec 09 21:22:21 2020 +0100 @@ -99,4 +99,8 @@ TILESETS ${TILESETS} ) -add_library(libmlk-data INTERFACE ${directories} ${objects}) +molko_define_library( + TARGET libmlk-data + TYPE INTERFACE + SOURCES ${directories} ${objects} +)
--- a/libmlk-rpg/CMakeLists.txt Tue Dec 08 17:00:03 2020 +0100 +++ b/libmlk-rpg/CMakeLists.txt Wed Dec 09 21:22:21 2020 +0100 @@ -82,10 +82,15 @@ TRANSLATIONS fr SOURCES ${SOURCES} ${PO} LIBRARIES - libmlk-core - libmlk-ui - PUBLIC_INCLUDES - $<BUILD_INTERFACE:${libmlk-rpg_SOURCE_DIR}> + PUBLIC + libmlk-core + libmlk-ui + FLAGS + PRIVATE + _BSD_SOURCE + INCLUDES + PUBLIC + $<BUILD_INTERFACE:${libmlk-rpg_SOURCE_DIR}> ) source_group(TREE ${libmlk-rpg_SOURCE_DIR} FILES ${SOURCES})
--- a/libmlk-ui/CMakeLists.txt Tue Dec 08 17:00:03 2020 +0100 +++ b/libmlk-ui/CMakeLists.txt Wed Dec 09 21:22:21 2020 +0100 @@ -59,8 +59,9 @@ ASSETS ${ASSETS} LIBRARIES libmlk-core - PUBLIC_INCLUDES - $<BUILD_INTERFACE:${libmlk-ui_SOURCE_DIR}> + INCLUDES + PUBLIC + $<BUILD_INTERFACE:${libmlk-ui_SOURCE_DIR}> ) source_group(TREE ${libmlk-ui_SOURCE_DIR} FILES ${SOURCES})