|
1 | 1 | cmake_minimum_required(VERSION 3.2)
|
2 | 2 |
|
3 |
| -option (BUILD_QT "Make a Qt Demo" OFF) |
4 |
| -option (BUILD_IMGUI "Make an imgui demo" ON) |
5 |
| -option (BUILD_IMGUI_APP "Make the test app" ON) |
| 3 | +message(STATUS " CMakeLists: Zep") |
6 | 4 |
|
7 |
| -option (ZEP_FEATURE_CPP_FILE_SYSTEM "Default File system enabled" ON) |
| 5 | +# Global Options |
| 6 | +option(BUILD_QT "Make Qt Library" OFF) |
| 7 | +option(BUILD_IMGUI "Make Imgui Library" ON) |
| 8 | +option(BUILD_DEMOS "Make the demo app" ON) |
| 9 | +option(BUILD_TESTS "Make the tests" ON) |
| 10 | +option(ZEP_FEATURE_CPP_FILE_SYSTEM "Default File system enabled" ON) |
8 | 11 |
|
9 |
| -set (CMAKE_CXX_STANDARD 14) |
10 |
| -set (CMAKE_CXX_STANDARD_REQUIRED ON) |
| 12 | +# Global Settings |
| 13 | +set(CMAKE_CXX_STANDARD 14) |
| 14 | +set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 15 | +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) |
| 16 | +set_property(GLOBAL PROPERTY USE_FOLDERS ON) |
11 | 17 |
|
12 |
| -set (CMAKE_EXPORT_COMPILE_COMMANDS ON) |
13 |
| - |
14 |
| -PROJECT (ZepDemo) |
15 |
| - |
16 |
| -IF (ZEP_FEATURE_CPP_FILE_SYSTEM) |
17 |
| -ADD_DEFINITIONS(-DZEP_FEATURE_CPP_FILE_SYSTEM) |
18 |
| -ENDIF() |
| 18 | +if (CMAKE_BUILD_TYPE MATCHES Coverage) |
| 19 | + set(CMAKE_BUILD_TYPE "Debug") |
| 20 | + set(PROJECT_COVERAGE ON) |
| 21 | +endif() |
19 | 22 |
|
20 |
| -ADD_DEFINITIONS(-DZEP_USE_SDL) |
| 23 | +set(CMAKE_DEBUG_POSTFIX "-debug") |
21 | 24 |
|
22 |
| -MESSAGE(STATUS " CMakeLists: Zep") |
| 25 | +project(Zep |
| 26 | + LANGUAGES CXX C |
| 27 | + VERSION 0.5.0 |
| 28 | +) |
23 | 29 |
|
24 |
| -SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) |
| 30 | +# Used Packages |
| 31 | +include(GNUInstallDirs) |
| 32 | +include(CMakePackageConfigHelpers) |
25 | 33 |
|
26 |
| -if (CMAKE_BUILD_TYPE MATCHES Coverage) |
27 |
| - set (CMAKE_BUILD_TYPE "Debug") |
28 |
| - set (PROJECT_COVERAGE ON) |
| 34 | +# Can I remove these now? |
| 35 | +if (ZEP_FEATURE_CPP_FILE_SYSTEM) |
| 36 | +add_definitions(-DZEP_FEATURE_CPP_FILE_SYSTEM) |
29 | 37 | endif()
|
| 38 | +add_definitions(-DZEP_USE_SDL) |
30 | 39 |
|
31 |
| -# global needed variables |
32 |
| -SET (APPLICATION_NAME "Zep") |
33 |
| -SET (APPLICATION_VERSION_MAJOR "0") |
34 |
| -SET (APPLICATION_VERSION_MINOR "1") |
35 |
| -SET (APPLICATION_VERSION_PATCH "0") |
36 |
| -SET (APPLICATION_VERSION "${APPLICATION_VERSION_MAJOR}.${APPLICATION_VERSION_MINOR}.${APPLICATION_VERSION_PATCH}") |
37 |
| - |
38 |
| -if (BUILD_QT) |
39 |
| -SET(CMAKE_AUTORCC ON) |
40 |
| -SET(CMAKE_PREFIX_PATH $ENV{QT_INSTALL_LOCATION}) |
41 |
| -FIND_PACKAGE(Qt5 COMPONENTS Core Widgets Gui REQUIRED) |
42 |
| -SET_PROPERTY(GLOBAL PROPERTY AUTOMOC_FOLDER Automoc) |
43 |
| -SET_PROPERTY(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER Automoc) |
44 |
| -endif() |
| 40 | +# config_app.h checks |
| 41 | +# This makes a config_shared.h file which can be included for system settings |
| 42 | +# Must be after setting up the platforms |
| 43 | +set (ZEP_ROOT ${CMAKE_CURRENT_LIST_DIR}) |
| 44 | +set (M3RDPARTY_DIR ${CMAKE_CURRENT_LIST_DIR}/m3rdparty) |
45 | 45 |
|
46 |
| -# Third party sources |
47 |
| -SET(M3RDPARTY_INCLUDE "") |
| 46 | +configure_file(${ZEP_ROOT}/cmake/config_app.h.cmake ${CMAKE_BINARY_DIR}/config_app.h) |
48 | 47 |
|
49 | 48 | # Set all compiler flags
|
50 |
| -INCLUDE(cmake/all.cmake) |
| 49 | +include(cmake/all.cmake) |
51 | 50 |
|
52 | 51 | # Functions for file copying
|
53 |
| -INCLUDE(m3rdparty/cmake/copy_files.cmake) |
| 52 | +include(m3rdparty/cmake/copy_files.cmake) |
54 | 53 |
|
55 |
| -# config_app.h checks |
56 |
| -# This makes a config_shared.h file which can be included for system settings |
57 |
| -# Must be after setting up the platforms |
58 |
| -SET (ZEP_ROOT ${CMAKE_CURRENT_LIST_DIR}) |
59 |
| -CONFIGURE_FILE(${CMAKE_CURRENT_LIST_DIR}/cmake/config_app.h.cmake ${CMAKE_BINARY_DIR}/config_app.h) |
60 |
| - |
61 |
| -INCLUDE(m3rdparty/list.cmake) |
62 |
| -INCLUDE(src/list.cmake) |
63 |
| - |
64 |
| -# Create the library - No depenencies on anything else in this file |
65 |
| -ADD_LIBRARY(Zep STATIC ${ZEP_SOURCE} ${ZEP_INCLUDE}) |
66 |
| -TARGET_INCLUDE_DIRECTORIES(Zep |
67 |
| -PRIVATE |
68 |
| - src/mcommon |
69 |
| - src |
70 |
| - ${SRC_INCLUDE} |
71 |
| - ${CMAKE_BINARY_DIR} |
72 |
| -PUBLIC |
73 |
| - include |
74 |
| - ) |
75 |
| - |
76 |
| -# Create the ImGUI zep library to help with building imgui apps |
77 |
| -IF (BUILD_IMGUI) |
78 |
| -ADD_LIBRARY(ZepImGui STATIC ${ZEP_SOURCE_IMGUI}) |
79 |
| -TARGET_INCLUDE_DIRECTORIES(ZepImGui |
80 |
| - PRIVATE |
81 |
| - ${ZEP_INCLUDE_IMGUI} |
82 |
| - ${M3RDPARTY_DIR}/imgui |
83 |
| - PUBLIC include) |
84 |
| - |
85 |
| -# Build the zep demo |
86 |
| -IF (BUILD_IMGUI_APP) |
87 |
| -IF(WIN32) |
88 |
| -# Let windows know that the app is DPI Aware |
89 |
| -SET(MANIFEST_SOURCE dpiawarescaling.manifest) |
90 |
| -ENDIF() |
91 |
| -ADD_EXECUTABLE (${PROJECT_NAME} WIN32 |
92 |
| - demo_imgui/main.cpp |
93 |
| - ${MANIFEST_SOURCE} |
94 |
| - ${IMGUI_SOURCE} |
95 |
| - ${M3RDPARTY_DIR}/tfd/tinyfiledialogs.c |
96 |
| - ) # Win32 ignored on non-windows |
97 |
| - |
98 |
| -TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} |
99 |
| - PRIVATE |
100 |
| - ${CMAKE_BINARY_DIR} |
101 |
| - ${M3RDPARTY_DIR} |
102 |
| - ${M3RDPARTY_DIR}/sdl/include |
103 |
| - ${M3RDPARTY_DIR}/tclap/include |
104 |
| - ${M3RDPARTY_DIR}/imgui |
105 |
| - ${M3RDPARTY_DIR}/tfd |
106 |
| - ${M3RDPARTY_DIR}/imgui/examples/libs/gl3w) |
107 |
| -copy_existing_files(${PROJECT_NAME} m3rdparty/imgui/misc/fonts/ProggyClean.ttf ${CMAKE_CURRENT_BINARY_DIR}/$(Configuration) ) |
108 |
| -TARGET_LINK_LIBRARIES (${PROJECT_NAME} |
109 |
| -PRIVATE |
110 |
| - ZepImGui |
111 |
| - Zep |
112 |
| - ${PLATFORM_LINKLIBS} |
113 |
| - ${SDL_LINKLIBS}) |
114 |
| -ADD_DEPENDENCIES(${PROJECT_NAME} sdl2 ZepImGui Zep) |
| 54 | +# The main library |
| 55 | +include(src/CMakeLists.txt) |
| 56 | + |
| 57 | +include (tests/CMakeLists.txt) |
| 58 | + |
| 59 | +# Demos require example interpreter and other 3rdparty |
| 60 | +IF (BUILD_DEMOS) |
| 61 | +include(${M3RDPARTY_DIR}/list.cmake) |
| 62 | +include(demo_imgui/CMakeLists.txt) |
| 63 | +include(demo_qt/CMakeLists.txt) |
115 | 64 | ENDIF()
|
116 |
| -ENDIF() # IMGUI |
117 |
| - |
118 |
| -# Create the Qt version of the app |
119 |
| -IF (BUILD_QT) |
120 |
| -ADD_LIBRARY(ZepQt STATIC ${ZEP_SOURCE_QT}) |
121 |
| -SET(CMAKE_AUTOMOC ON) |
122 |
| -SET(RESOURCE_FOLDER "" ) |
123 |
| -SET(RESOURCE_FILES "") |
124 |
| -INCLUDE(demo_qt/list.cmake) |
125 |
| - |
126 |
| -TARGET_INCLUDE_DIRECTORIES(ZepQt |
127 |
| -PRIVATE |
128 |
| - ${ZEP_INCLUDE_QT} |
129 |
| - ${M3RDPARTY_DIR} |
130 |
| -PUBLIC |
131 |
| - include) |
132 |
| - |
133 |
| -ADD_EXECUTABLE (${PROJECT_NAME}-qt WIN32 ${DEMO_SOURCE_QT} ${RESOURCE_FILES}) # Win32 ignored on non-windows |
134 |
| -TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME}-qt |
135 |
| -PRIVATE |
136 |
| - ${ZEP_INCLUDE_QT} |
137 |
| - ${CMAKE_BINARY_DIR}) |
138 |
| -TARGET_LINK_LIBRARIES(${PROJECT_NAME}-qt PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets ZepQt Zep ${PLATFORM_LINKLIBS}) |
139 |
| -TARGET_COMPILE_OPTIONS(${PROJECT_NAME}-qt PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/W3>) # Workaround Qt + MSVC 19 compile issue in release build. |
140 |
| -ADD_DEPENDENCIES(${PROJECT_NAME} sdl2 ZepQt) |
141 |
| -if(WIN32) |
142 |
| -MESSAGE(STATUS "Copying required Qt libraries and binaries to output directory....") |
143 |
| -# Run winddeployqt if it can be found, to ensure installed dependencies |
144 |
| -find_program(WINDEPLOYQT_EXECUTABLE NAMES windeployqt HINTS ${QTDIR} ENV QTDIR PATH_SUFFIXES bin) |
145 |
| -add_custom_command(TARGET ${PROJECT_NAME}-qt POST_BUILD |
146 |
| -COMMAND ${WINDEPLOYQT_EXECUTABLE} $<TARGET_FILE:${PROJECT_NAME}-qt>) |
147 |
| -ENDIF() # Win32 |
148 |
| -ENDIF() # Build QT |
149 |
| - |
150 |
| -# Unit tests |
151 |
| -# Require SDL/IMgui build to work |
152 |
| -# Need to build app to build tests |
153 |
| -IF (BUILD_IMGUI_APP) |
154 |
| -SET(CMAKE_AUTOMOC OFF) |
155 |
| -INCLUDE(tests/list.cmake) |
156 |
| -enable_testing() |
157 |
| -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_HAS_TR1_TUPLE=0") |
158 |
| -SET (TEST_SOURCES |
159 |
| - ${M3RDPARTY_DIR}/googletest/googletest/src/gtest-all.cc |
160 |
| - ${TEST_SOURCES} |
| 65 | + |
| 66 | +# Make the CMake bits that ensure find_package does the right thing |
| 67 | +install(EXPORT zep-targets |
| 68 | + FILE zep-targets.cmake |
| 69 | + NAMESPACE Zep:: |
| 70 | + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zep |
161 | 71 | )
|
162 |
| -ADD_EXECUTABLE (unittests ${TEST_SOURCES} ) |
163 |
| -ADD_DEPENDENCIES(unittests sdl2 ZepImGui Zep) |
164 |
| -TARGET_LINK_LIBRARIES (unittests PRIVATE ZepImGui Zep ${PLATFORM_LINKLIBS} ${CMAKE_THREAD_LIBS_INIT}) |
165 |
| -add_test(unittests unittests) |
166 |
| -TARGET_INCLUDE_DIRECTORIES(unittests PRIVATE |
167 |
| - ${M3RDPARTY_DIR}/googletest/googletest/include |
168 |
| - ${M3RDPARTY_DIR}/googletest/googletest |
169 |
| - ${M3RDPARTY_DIR}/googletest/googlemock/include |
170 |
| - ${M3RDPARTY_DIR}/googletest/googlemock |
171 |
| - ${CMAKE_BINARY_DIR} |
| 72 | + |
| 73 | +configure_package_config_file( |
| 74 | + ${ZEP_ROOT}/cmake/zep-config.cmake.in |
| 75 | + ${CMAKE_BINARY_DIR}/cmake/zep-config.cmake |
| 76 | + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zep |
172 | 77 | )
|
173 |
| -ENDIF() |
174 | 78 |
|
175 |
| -SOURCE_GROUP (Zep\\common REGULAR_EXPRESSION "src/mcommon/.*") |
176 |
| -SOURCE_GROUP (Zep\\common REGULAR_EXPRESSION "include/zep/mcommon/.*") |
177 |
| -SOURCE_GROUP (Zep REGULAR_EXPRESSION "src/.*") |
178 |
| -SOURCE_GROUP (Zep\\include REGULAR_EXPRESSION "include/zep/.*") |
179 |
| -SOURCE_GROUP (Zep FILES ${DEMO_SOURCE_IMGUI}) |
180 |
| -SOURCE_GROUP (Zep FILES ${DEMO_SOURCE_QT}) |
| 79 | +write_basic_package_version_file( |
| 80 | + ${CMAKE_BINARY_DIR}/cmake/zep-config-version.cmake |
| 81 | + VERSION 1.0 |
| 82 | + COMPATIBILITY AnyNewerVersion |
| 83 | +) |
| 84 | + |
| 85 | +install( |
| 86 | + FILES |
| 87 | + ${CMAKE_BINARY_DIR}/cmake/zep-config.cmake |
| 88 | + ${CMAKE_BINARY_DIR}/cmake/zep-config-version.cmake |
| 89 | + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/zep |
| 90 | +) |
181 | 91 |
|
182 |
| -SOURCE_GROUP(qt\\AutoMoc FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_automoc.cpp ) |
183 |
| -SOURCE_GROUP(qt\\AutoMoc REGULAR_EXPRESSION "(mocs_*|qrc_.*|QtAwesome.*)" ) |
0 commit comments