-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
121 lines (100 loc) · 3.26 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
cmake_minimum_required(VERSION 3.24)
project(ctgui_project)
include(FetchContent)
set(SFML_VERSION "2.6.2")
set(SFML_BUILD_AUDIO FALSE)
set(SFML_BUILD_NETWORK FALSE)
set(CSFML_BUILD_AUDIO FALSE)
set(CSFML_BUILD_NETWORK FALSE)
set(SFML_USE_STATIC_STD_LIBS TRUE)
set(BUILD_SHARED_LIBS FALSE)
# Disable non-system dependencies of Freetype
set(FT_DISABLE_BROTLI TRUE)
set(FT_DISABLE_PNG TRUE)
set(FT_DISABLE_HARFBUZZ TRUE)
set(TGUI_BUILD_GUI_BUILDER FALSE) # Exclude GUI builder because it causes freetype static linking issues
set(CTGUI_LINK_TGUI_STATICALLY TRUE)
set(CSFML_LINK_SFML_STATICALLY TRUE)
set(TGUI_BACKEND SFML_GRAPHICS)
set(TGUI_BUILD_FRAMEWORK FALSE)
set(CTGUI_USE_CSFML_VERSION 2)
set(CTGUI_HAS_BACKEND_CSFML_GRAPHICS 1)
# Remove C++ stdlib flag for C compilation
if(APPLE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-command-line-argument")
endif()
# Add necessary preprocessor definitions for static linking
add_definitions(-DSFML_STATIC -DTGUI_STATIC)
# Fetch FreeType source
FetchContent_Declare(
freetype
GIT_REPOSITORY https://gitlab.freedesktop.org/freetype/freetype.git
GIT_TAG VER-2-13-2 # Change this to the desired FreeType version
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(freetype)
set(FREETYPE_INCLUDE_DIRS ${freetype_SOURCE_DIR}/include)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(FREETYPE_LIBRARY ${freetype_BINARY_DIR}/libfreetyped.a)
else()
set(FREETYPE_LIBRARY ${freetype_BINARY_DIR}/libfreetype.a)
endif()
# Fetch SFML
FetchContent_Declare(
SFML
GIT_REPOSITORY https://github.com/SFML/SFML.git
GIT_TAG "${SFML_VERSION}"
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(SFML)
# Configure paths before fetching CSFML
set(SFML_ROOT "${sfml_SOURCE_DIR}")
set(SFML_DIR "${sfml_BINARY_DIR}")
set(SFML_PATH "${sfml_SOURCE_DIR}")
set(SFML_INCLUDE_DIR "${sfml_SOURCE_DIR}/include")
set(SFML_LIBRARY_DIR "${sfml_BINARY_DIR}/lib")
set(SFML_DEPENDENCIES_DIR "${sfml_SOURCE_DIR}/extlibs")
# Create SFML config file that CSFML can find. This overwrites the already existing one because the original one causes conflict.
file(WRITE "${sfml_BINARY_DIR}/SFMLConfig.cmake"
"set(SFML_VERSION ${SFML_VERSION})
set(SFML_INCLUDE_DIR \"${SFML_INCLUDE_DIR}\")
set(SFML_LIBRARY_DIR \"${SFML_LIBRARY_DIR}\")
set(SFML_DEPENDENCIES_DIR \"${SFML_DEPENDENCIES_DIR}\")
set(SFML_FOUND TRUE)
")
# Fetch CSFML
FetchContent_Declare(
CSFML
GIT_REPOSITORY https://github.com/SFML/CSFML.git
GIT_TAG 2.6.x
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(CSFML)
FetchContent_Declare(
TGUI
GIT_REPOSITORY https://github.com/texus/TGUI.git
GIT_TAG v1.7.0
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(TGUI)
FetchContent_Declare(
CTGUI
GIT_REPOSITORY https://github.com/texus/CTGUI.git
GIT_TAG 1.x
GIT_SHALLOW TRUE
)
set(CSFML_INCLUDE_DIR ${CSFML_SOURCE_DIR}/include)
FetchContent_MakeAvailable(CTGUI)
# Add test executable
add_executable(${PROJECT_NAME} debug/main.c)
# Link libraries
target_link_libraries(ctgui PUBLIC freetype)
target_link_libraries(${PROJECT_NAME} PRIVATE ctgui)
set_target_properties(${PROJECT_NAME} PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH "@executable_path;@executable_path/../lib"
)
# Include directories
target_include_directories(${PROJECT_NAME} PRIVATE
${csfml_SOURCE_DIR}/include
)