Skip to content

Commit 6009aa1

Browse files
committed
Move over to vcpkg
- Faster builds - Easier management of 3rdparty packages - Huge time saving for maintenance tasks - Simpler CMake files
1 parent fbc0e3e commit 6009aa1

26 files changed

+297
-178
lines changed

.travis.yml

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,17 @@ language: cpp
22

33
before_script:
44
# Make mutils first and install it
5+
- cd ..
56
- git clone https://github.com/cmaughan/MUtils
67
- cd MUtils
78
- chmod +x prebuild.sh
8-
- chmod +x m3rdparty/packages/install.sh
99
- sudo ./prebuild.sh
1010
- mkdir build
1111
- cd build
1212
- cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
1313
- make
1414
- sudo make install
15-
- cd ..
16-
- cd ..
15+
- cd $TRAVIS_BUILD_DIR
1716
- mkdir build
1817
- cd build
1918

CMakeLists.txt

+11-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
cmake_minimum_required(VERSION 3.2)
22

33
message(STATUS "CMakeLists: Zep")
4-
message(STATUS "Build Type: " ${CMAKE_BUILD_TYPE})
5-
6-
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
74

85
# Global Options
96
option(BUILD_QT "Make Qt Library" OFF)
@@ -25,14 +22,19 @@ set(gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" FORCE)
2522
set(CMAKE_DEBUG_POSTFIX "-debug")
2623
set(CMAKE_RELWITHDEBINFO_POSTFIX "-reldbg")
2724

25+
if (BUILD_DEMOS OR BUILD_EXTENSIONS)
26+
if (WIN32)
27+
set(VCPKG_TARGET_TRIPLET x64-windows-static)
28+
endif()
29+
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../vcpkg/scripts/buildsystems/vcpkg.cmake CACHE STRING "Vcpkg toolchain file")
30+
endif()
31+
2832
project(Zep
2933
LANGUAGES CXX C
3034
VERSION 0.5.0
3135
)
3236

33-
# Used Packages
34-
include(GNUInstallDirs)
35-
include(CMakePackageConfigHelpers)
37+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
3638

3739
# Can I remove these now?
3840
if (ZEP_FEATURE_CPP_FILE_SYSTEM)
@@ -51,15 +53,17 @@ set (M3RDPARTY_DIR ${CMAKE_CURRENT_LIST_DIR}/m3rdparty)
5153

5254
configure_file(${ZEP_ROOT}/cmake/config_app.h.cmake ${CMAKE_BINARY_DIR}/config_app.h)
5355

56+
include(GNUInstallDirs)
57+
5458
# Set all compiler flags
5559
include(cmake/all.cmake)
5660

5761
# Functions for file copying
5862
include(m3rdparty/cmake/copy_files.cmake)
5963

6064
# The main library
61-
add_subdirectory(extensions)
6265
add_subdirectory(src)
66+
add_subdirectory(extensions)
6367
add_subdirectory(tests)
6468
add_subdirectory(demos)
6569

appveyor.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ install:
3232
build_script:
3333
# generate build script
3434
- cd %APPVEYOR_BUILD_FOLDER%
35-
- dir
35+
- cd ..
3636
# create folder for an out-of-source-tree build: "c:\projects\build"
3737
- git clone https://github.com/cmaughan/MUtils
3838
- cd MUtils

cmake/all.cmake

+110-21
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,129 @@
1-
# Compiler flags
2-
if(CMAKE_COMPILER_IS_GNUCXX)
3-
include(${PROJECT_SOURCE_DIR}/cmake/g++.cmake)
4-
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
5-
include(${PROJECT_SOURCE_DIR}/cmake/clang++.cmake)
6-
elseif(MSVC)
7-
include(${PROJECT_SOURCE_DIR}/cmake/msvc.cmake)
8-
else()
9-
message(WARNING "Unknown compiler, not setting flags")
1+
if(WIN32)
2+
add_compile_options("$<$<CONFIG:RELWITHDEBINFO>:-DTRACY_ENABLE=1 -DMT>")
3+
add_compile_options("$<$<CONFIG:DEBUG>:-DTRACY_ENABLE=1 -DMTd>")
4+
add_compile_options("$<$<CONFIG:RELEASE>:-DMT>")
5+
add_compile_options(-D_CRT_SECURE_NO_WARNINGS=1 -DGLM_ENABLE_EXPERIMENTAL -DGLM_LANG_STL11_FORCED -DGLM_FORCE_DEPTH_ZERO_TO_ONE -DNOMINMAX -D_SCL_SECURE_NO_WARNINGS=1 -D_CRT_NONSTDC_NO_WARNINGS=1 -D_SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING -D_CRT_SECURE_NO_WARNINGS=1 -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -D_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING)
106
endif()
117

128
# Ensure Debug Flags
139
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG -DDEBUG")
1410

15-
message(STATUS "System: ${CMAKE_SYSTEM}")
16-
message(STATUS "Compiler: ${CMAKE_CXX_COMPILER_ID}")
17-
message(STATUS "Flags: ${CMAKE_CXX_FLAGS}")
18-
message(STATUS "Arch: ${PROCESSOR_ARCH}")
11+
# ------------------------------------------------------------------------------
12+
# Coverage
13+
# ------------------------------------------------------------------------------
14+
if(ENABLE_COVERAGE)
15+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g ")
16+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0")
17+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs")
18+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftest-coverage")
19+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
20+
endif()
21+
22+
# ------------------------------------------------------------------------------
23+
# Google Sanitizers
24+
# ------------------------------------------------------------------------------
25+
26+
if(ENABLE_ASAN)
27+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
28+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1")
29+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
30+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer")
31+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
32+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak")
33+
endif()
34+
35+
if(ENABLE_USAN)
36+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
37+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
38+
endif()
39+
40+
if(ENABLE_TSAN)
41+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
42+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
43+
endif()
44+
45+
# ------------------------------------------------------------------------------
46+
# Valgrind
47+
# ------------------------------------------------------------------------------
48+
49+
set(MEMORYCHECK_COMMAND_OPTIONS "${MEMORYCHECK_COMMAND_OPTIONS} --leak-check=full")
50+
set(MEMORYCHECK_COMMAND_OPTIONS "${MEMORYCHECK_COMMAND_OPTIONS} --track-fds=yes")
51+
set(MEMORYCHECK_COMMAND_OPTIONS "${MEMORYCHECK_COMMAND_OPTIONS} --trace-children=yes")
52+
set(MEMORYCHECK_COMMAND_OPTIONS "${MEMORYCHECK_COMMAND_OPTIONS} --error-exitcode=1")
1953

2054
# System flags
2155
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
2256
message(STATUS "TARGET_PC")
23-
SET(TARGET_PC 1)
24-
SET(PROJECT_CPP_FILESYSTEM 1)
25-
INCLUDE(${PROJECT_SOURCE_DIR}/cmake/pc.cmake)
57+
set(TARGET_PC 1)
58+
59+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
60+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
61+
62+
LIST(APPEND PLATFORM_LINKLIBS
63+
opengl32.lib
64+
winmm.lib # SDL - sound, etc.
65+
version.lib # SDL - windows keyboard
66+
imm32.lib # SDL - windows keyboard
67+
)
2668
endif()
2769

2870
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
2971
message(STATUS "TARGET_MAC")
30-
SET(TARGET_MAC 1)
31-
INCLUDE(${PROJECT_SOURCE_DIR}/cmake/mac.cmake)
72+
73+
find_package(OpenGL REQUIRED)
74+
find_package(Threads REQUIRED)
75+
find_package(BZIP2 REQUIRED)
76+
find_package(ZLIB REQUIRED)
77+
78+
if(NOT OPENGL_FOUND)
79+
message(ERROR " OPENGL not found!")
80+
endif(NOT OPENGL_FOUND)
81+
82+
include_directories(${OpenGL_INCLUDE_DIRS})
83+
link_directories(${OpenGL_LIBRARY_DIRS})
84+
add_definitions(${OpenGL_DEFINITIONS})
85+
86+
LIST(APPEND PLATFORM_LINKLIBS
87+
${OPENGL_LIBRARY}
88+
${BZIP2_LIBRARY}
89+
${ZLIB_LIBRARY}
90+
dl
91+
"-framework CoreFoundation"
92+
)
93+
94+
set(TARGET_MAC 1)
3295
endif()
3396

3497
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
98+
find_package(OpenGL REQUIRED)
99+
if(NOT OPENGL_FOUND)
100+
message(ERROR " OPENGL not found!")
101+
endif(NOT OPENGL_FOUND)
102+
103+
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
104+
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
105+
find_package(Threads REQUIRED)
106+
107+
include_directories(${OpenGL_INCLUDE_DIRS})
108+
link_directories(${OpenGL_LIBRARY_DIRS})
109+
add_definitions(${OpenGL_DEFINITIONS})
110+
111+
LIST(APPEND PLATFORM_LINKLIBS
112+
dl
113+
Threads::Threads
114+
${OPENGL_LIBRARY}
115+
z
116+
)
117+
35118
message(STATUS "TARGET_LINUX")
36-
SET(TARGET_LINUX 1)
37-
SET(PROJECT_CPP_FILESYSTEM 1)
38-
INCLUDE(${PROJECT_SOURCE_DIR}/cmake/linux.cmake)
119+
set(TARGET_LINUX 1)
39120
endif()
40121

122+
message(STATUS "System: ${CMAKE_SYSTEM}")
123+
message(STATUS "Compiler: ${CMAKE_CXX_COMPILER_ID}")
124+
message(STATUS "Flags: ${CMAKE_CXX_FLAGS}")
125+
message(STATUS "Debug Flags: ${CMAKE_CXX_FLAGS_DEBUG}")
126+
message(STATUS "Release Flags: ${CMAKE_CXX_FLAGS_RELEASE}")
127+
message(STATUS "RelWithDebInfo Flags: ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
128+
message(STATUS "Arch: ${PROCESSOR_ARCH}")
129+

cmake/clang++.cmake

-4
This file was deleted.

config_imgui.sh

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/sh
2+
3+
mkdir build
4+
cd build
5+
if [ "$1" != "" ] ; then
6+
cmake -G "Unix Makefiles" -DBUILD_QT=OFF -DBUILD_IMGUI=ON -DCMAKE_BUILD_TYPE=$1 ../
7+
else
8+
cmake -G "Unix Makefiles" -DBUILD_QT=OFF -DBUILD_IMGUI=ON -DCMAKE_BUILD_TYPE=Release ../
9+
fi
10+
cd ../

demos/CMakeLists.txt

+9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@ set(IDENTIFIER "com.zep")
77

88
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_CURRENT_LIST_DIR}/cmake)
99

10+
find_package(gsl-lite REQUIRED)
11+
find_package(SDL2 REQUIRED)
12+
find_package(fmt REQUIRED)
13+
find_package(gl3w REQUIRED)
14+
find_package(imgui REQUIRED)
15+
find_package(freetype CONFIG REQUIRED)
16+
find_package(unofficial-concurrentqueue REQUIRED)
17+
find_package(tinyfiledialogs REQUIRED)
18+
1019
include(${M3RDPARTY_DIR}/list.cmake)
1120
include(${CMAKE_CURRENT_LIST_DIR}/cmake/demo_common.cmake)
1221
add_subdirectory(demo_imgui)

demos/cmake/demo_common.cmake

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ endif()
2323

2424
if (NOT IS_QT)
2525
set(RESOURCE_DEPLOY_FILES ${RESOURCE_DEPLOY_FILES}
26-
${MUTILS_INCLUDE_DIR}/imgui/misc/fonts/Cousine-Regular.ttf
27-
${MUTILS_INCLUDE_DIR}/imgui/misc/fonts/DroidSans.ttf
28-
${MUTILS_INCLUDE_DIR}/imgui/misc/fonts/Roboto-Medium.ttf)
26+
${DEMO_ROOT}/demo_imgui/res/Cousine-Regular.ttf
27+
${DEMO_ROOT}/demo_imgui/res/DroidSans.ttf
28+
${DEMO_ROOT}/demo_imgui/res/Roboto-Medium.ttf)
2929
endif()
3030

3131
if (WIN32)

demos/demo_common.h

+72
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,80 @@
11
#pragma once
22

3+
#include <filesystem>
4+
#include <chrono>
5+
#include <thread>
6+
#include <unordered_map>
7+
#include <string>
8+
#include <functional>
9+
310
namespace Zep
411
{
512
const float DemoFontPtSize = 14.0f;
13+
14+
15+
// Define available file changes
16+
enum class FileStatus {created, modified, erased};
17+
18+
class FileWatcher {
19+
public:
20+
std::string path_to_watch;
21+
// Time interval at which we check the base folder for changes
22+
std::chrono::duration<int, std::milli> delay;
23+
24+
// Keep a record of files from the base directory and their last modification time
25+
FileWatcher(std::string path_to_watch, std::chrono::duration<int, std::milli> delay) : path_to_watch{path_to_watch}, delay{delay} {
26+
for(auto &file : std::filesystem::recursive_directory_iterator(path_to_watch)) {
27+
paths_[file.path().string()] = std::filesystem::last_write_time(file);
28+
}
29+
}
30+
31+
// Monitor "path_to_watch" for changes and in case of a change execute the user supplied "action" function
32+
void start(const std::function<void (std::string, FileStatus)> &action) {
33+
while(running_) {
34+
// Wait for "delay" milliseconds
35+
std::this_thread::sleep_for(delay);
36+
37+
auto it = paths_.begin();
38+
while (it != paths_.end()) {
39+
if (!std::filesystem::exists(it->first)) {
40+
action(it->first, FileStatus::erased);
41+
it = paths_.erase(it);
42+
}
43+
else {
44+
it++;
45+
}
46+
}
47+
48+
// Check if a file was created or modified
49+
for(auto &file : std::filesystem::recursive_directory_iterator(path_to_watch)) {
50+
auto current_file_last_write_time = std::filesystem::last_write_time(file);
51+
52+
// File creation
53+
if(!contains(file.path().string())) {
54+
paths_[file.path().string()] = current_file_last_write_time;
55+
action(file.path().string(), FileStatus::created);
56+
// File modification
57+
} else {
58+
if(paths_[file.path().string()] != current_file_last_write_time) {
59+
paths_[file.path().string()] = current_file_last_write_time;
60+
action(file.path().string(), FileStatus::modified);
61+
}
62+
}
63+
}
64+
}
65+
}
66+
private:
67+
std::unordered_map<std::string, std::filesystem::file_time_type> paths_;
68+
bool running_ = true;
69+
70+
// Check if "paths_" contains a given key
71+
// If your compiler supports C++20 use paths_.contains(key) instead of this function
72+
bool contains(const std::string &key) {
73+
auto el = paths_.find(key);
74+
return el != paths_.end();
75+
}
76+
};
77+
678
} // Zep
779

880

0 commit comments

Comments
 (0)