Skip to content

Commit f13ffb9

Browse files
committed
Merge branch 'develop' of github.com:MafiaHub/Framework into develop
2 parents acfa1f7 + 6554ca5 commit f13ffb9

File tree

3 files changed

+111
-40
lines changed

3 files changed

+111
-40
lines changed

CMakeLists.txt

Lines changed: 2 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -23,45 +23,8 @@ endif()
2323

2424
add_subdirectory(${PROJECT_SOURCE_DIR}/vendors)
2525

26-
# Load the global headers one by one (a few ones have relative include path, so we are forced to do so)
27-
include_directories(
28-
"${PROJECT_SOURCE_DIR}/vendors/glm"
29-
"${PROJECT_SOURCE_DIR}/vendors/minhook/include"
30-
"${PROJECT_SOURCE_DIR}/vendors/firebase/include"
31-
"${PROJECT_SOURCE_DIR}/vendors/cppfs/source/cppfs/include"
32-
"${PROJECT_SOURCE_DIR}/vendors/json/include"
33-
"${PROJECT_SOURCE_DIR}/vendors/slikenet/Source"
34-
"${PROJECT_SOURCE_DIR}/vendors/ntdll"
35-
"${PROJECT_SOURCE_DIR}/vendors/semver"
36-
"${PROJECT_SOURCE_DIR}/vendors/imgui"
37-
"${PROJECT_SOURCE_DIR}/vendors/sdl2/include"
38-
"${PROJECT_SOURCE_DIR}/vendors/spdlog/include"
39-
"${PROJECT_SOURCE_DIR}/vendors/optick/src"
40-
"${PROJECT_SOURCE_DIR}/vendors/steamworks/include"
41-
"${PROJECT_SOURCE_DIR}/vendors/galaxy/Include"
42-
"${PROJECT_SOURCE_DIR}/vendors/udis86"
43-
"${PROJECT_SOURCE_DIR}/vendors/httplib"
44-
"${PROJECT_SOURCE_DIR}/vendors/lua-5.4.4/src/lua54"
45-
"${PROJECT_SOURCE_DIR}/vendors/discord/src"
46-
"${PROJECT_SOURCE_DIR}/vendors/sentry/include"
47-
"${PROJECT_SOURCE_DIR}/vendors/curl/include"
48-
"${PROJECT_SOURCE_DIR}/vendors/fmt/include"
49-
"${PROJECT_SOURCE_DIR}/vendors/libsig"
50-
"${PROJECT_SOURCE_DIR}/vendors/sfd"
51-
"${PROJECT_SOURCE_DIR}/vendors/cxxopts"
52-
"${PROJECT_SOURCE_DIR}/vendors/fu2"
53-
"${PROJECT_SOURCE_DIR}/vendors/sol"
54-
"${PROJECT_SOURCE_DIR}/vendors/freetype/include"
55-
"${PROJECT_SOURCE_DIR}/vendors/StackWalker/Main/StackWalker"
56-
"${PROJECT_SOURCE_DIR}/vendors/ultralight/include"
57-
"${PROJECT_SOURCE_DIR}/vendors/directxtk"
58-
"${PROJECT_SOURCE_DIR}/vendors/javascriptcorepp/include"
59-
"${PROJECT_SOURCE_DIR}/vendors/ftl/include"
60-
"${PROJECT_SOURCE_DIR}/vendors"
61-
"${PROJECT_SOURCE_DIR}/code/framework/src/"
62-
"${PROJECT_SOURCE_DIR}/code/framework/src/services"
63-
"${PROJECT_SOURCE_DIR}/code/framework/"
64-
)
26+
# Include directories are now managed per-target in code/framework/CMakeLists.txt
27+
# This provides cleaner dependency tracking and faster builds
6528

6629
# Include all Framework dependencies
6730
add_subdirectory(${PROJECT_SOURCE_DIR}/code)

code/framework/CMakeLists.txt

Lines changed: 106 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,39 @@ endif()
143143

144144
add_library(FrameworkServer STATIC ${FRAMEWORK_SERVER_SRC})
145145

146+
# Precompiled Headers (PCH) for faster builds
147+
# Framework base PCH - stable, frequently used headers
148+
# Using PUBLIC so child targets can inherit via INTERFACE_PRECOMPILE_HEADERS
149+
target_precompile_headers(Framework PUBLIC
150+
# STL (stable, frequently used)
151+
<memory>
152+
<string>
153+
<vector>
154+
<unordered_map>
155+
<functional>
156+
157+
# Stable vendor headers
158+
<spdlog/spdlog.h>
159+
<glm/glm.hpp>
160+
<glm/gtc/quaternion.hpp>
161+
<nlohmann/json.hpp>
162+
)
163+
164+
# FrameworkServer PCH - reuses Framework PCH + adds scripting/ECS headers
165+
target_precompile_headers(FrameworkServer PRIVATE
166+
"$<TARGET_PROPERTY:Framework,INTERFACE_PRECOMPILE_HEADERS>"
167+
<sol/sol.hpp>
168+
<flecs/flecs.h>
169+
)
170+
171+
# FrameworkClient PCH (Windows only)
172+
if(WIN32)
173+
target_precompile_headers(FrameworkClient PRIVATE
174+
"$<TARGET_PROPERTY:Framework,INTERFACE_PRECOMPILE_HEADERS>"
175+
<flecs/flecs.h>
176+
)
177+
endif()
178+
146179
# Custom defines
147180
target_compile_definitions(Framework PUBLIC MG_ENABLE_LOG=0)
148181

@@ -153,7 +186,36 @@ ENDIF()
153186

154187
# External libraries & other stuff
155188
macro(link_shared_deps target_name)
156-
target_include_directories(${target_name} PUBLIC "src")
189+
# Framework source directories (PUBLIC for dependent projects)
190+
target_include_directories(${target_name} PUBLIC
191+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
192+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/services>
193+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
194+
)
195+
196+
# Core vendor headers needed by all Framework targets (PUBLIC for API exposure)
197+
target_include_directories(${target_name} PUBLIC
198+
${CMAKE_SOURCE_DIR}/vendors/glm
199+
${CMAKE_SOURCE_DIR}/vendors/json/include
200+
${CMAKE_SOURCE_DIR}/vendors/spdlog/include
201+
${CMAKE_SOURCE_DIR}/vendors/fmt/include
202+
${CMAKE_SOURCE_DIR}/vendors/sol # Lua bindings (used in scripting API)
203+
${CMAKE_SOURCE_DIR}/vendors/lua-5.4.4/src/lua54 # Lua headers (required by sol)
204+
${CMAKE_SOURCE_DIR}/vendors/fu2 # function2 (used in world/modules/base.hpp)
205+
${CMAKE_SOURCE_DIR}/vendors/slikenet/Source # Networking (used in messages.h)
206+
${CMAKE_SOURCE_DIR}/vendors/cxxopts # Command-line parsing (used in integrations)
207+
${CMAKE_SOURCE_DIR}/vendors # flecs, etc.
208+
)
209+
210+
# Implementation-only vendor headers (PRIVATE - not part of public API)
211+
target_include_directories(${target_name} PRIVATE
212+
${CMAKE_SOURCE_DIR}/vendors/cppfs/source/cppfs/include
213+
${CMAKE_SOURCE_DIR}/vendors/semver
214+
${CMAKE_SOURCE_DIR}/vendors/httplib
215+
${CMAKE_SOURCE_DIR}/vendors/sentry/include
216+
${CMAKE_SOURCE_DIR}/vendors/curl/include
217+
${CMAKE_SOURCE_DIR}/vendors/ftl/include
218+
)
157219

158220
# Required libraries for apple systems
159221
if(APPLE)
@@ -166,6 +228,9 @@ macro(link_shared_deps target_name)
166228
# Required libraries for windows
167229
if(WIN32)
168230
target_link_libraries(${target_name} StackWalker)
231+
target_include_directories(${target_name} PRIVATE
232+
${CMAKE_SOURCE_DIR}/vendors/StackWalker/Main/StackWalker
233+
)
169234
endif()
170235
endmacro()
171236

@@ -179,6 +244,11 @@ endif()
179244
link_shared_deps(FrameworkServer)
180245
target_link_libraries(FrameworkServer MafiaHubServices libsig lua54_static)
181246

247+
# FrameworkServer-specific includes
248+
target_include_directories(FrameworkServer PRIVATE
249+
${CMAKE_SOURCE_DIR}/vendors/libsig
250+
)
251+
182252
# Platform-dependent post processing
183253
if(WIN32)
184254
target_link_directories(Framework PUBLIC ${CMAKE_SOURCE_DIR}/vendors/openssl/lib)
@@ -189,15 +259,50 @@ if(WIN32)
189259
set(CLIENT_SHARED_LIBS minhook SteamSDK udis86)
190260
target_link_libraries(FrameworkClient ${CLIENT_SHARED_LIBS} ${FREETYPE_LIBRARY})
191261

262+
# FrameworkClient-specific includes (Windows graphics, hooking, external services)
263+
target_include_directories(FrameworkClient PRIVATE
264+
${CMAKE_SOURCE_DIR}/vendors/minhook/include
265+
${CMAKE_SOURCE_DIR}/vendors/imgui
266+
${CMAKE_SOURCE_DIR}/vendors/sdl2/include
267+
${CMAKE_SOURCE_DIR}/vendors/steamworks/include
268+
${CMAKE_SOURCE_DIR}/vendors/galaxy/Include
269+
${CMAKE_SOURCE_DIR}/vendors/udis86
270+
${CMAKE_SOURCE_DIR}/vendors/discord/src
271+
${CMAKE_SOURCE_DIR}/vendors/freetype/include
272+
${CMAKE_SOURCE_DIR}/vendors/optick/src
273+
)
274+
192275
link_shared_deps(FrameworkLoader)
193276
target_link_libraries(FrameworkLoader ${CLIENT_SHARED_LIBS} MafiaHubServices FrameworkLoaderData ntdll sfd)
194277
target_link_libraries(FrameworkLoaderData udis86 minhook)
195278
target_link_options(FrameworkLoaderData PUBLIC /EXPORT:CoreRT_SetupSEHHandler /EXPORT:GetThreadLocalStorage /EXPORT:CoreSetExceptionOverride)
196279

280+
# FrameworkLoader-specific includes
281+
target_include_directories(FrameworkLoader PRIVATE
282+
${CMAKE_SOURCE_DIR}/vendors/minhook/include
283+
${CMAKE_SOURCE_DIR}/vendors/ntdll
284+
${CMAKE_SOURCE_DIR}/vendors/sfd
285+
${CMAKE_SOURCE_DIR}/vendors/steamworks/include
286+
${CMAKE_SOURCE_DIR}/vendors/udis86
287+
)
288+
289+
# FrameworkLoaderData includes
290+
target_include_directories(FrameworkLoaderData PRIVATE
291+
${CMAKE_SOURCE_DIR}/vendors/udis86
292+
${CMAKE_SOURCE_DIR}/vendors/minhook/include
293+
)
294+
197295
if(NOT CMAKE_CL_64)
198296
target_link_options(FrameworkServer PUBLIC "-SAFESEH:NO")
199297
else()
200298
target_link_libraries(FrameworkClient UltralightSDK JavaScriptCorePP)
201299
target_link_options(FrameworkClient PUBLIC "-SAFESEH:NO")
300+
301+
# Ultralight GUI includes (64-bit only)
302+
target_include_directories(FrameworkClient PRIVATE
303+
${CMAKE_SOURCE_DIR}/vendors/ultralight/include
304+
${CMAKE_SOURCE_DIR}/vendors/directxtk
305+
${CMAKE_SOURCE_DIR}/vendors/javascriptcorepp/include
306+
)
202307
endif()
203308
endif()

code/tests/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ add_executable(FrameworkTests framework_ut.cpp)
33
target_include_directories(FrameworkTests PRIVATE . ../framework/src)
44
target_link_libraries(FrameworkTests Framework FrameworkServer)
55

6+
# Reuse FrameworkServer's PCH (includes sol, flecs, and Framework's headers)
7+
target_precompile_headers(FrameworkTests REUSE_FROM FrameworkServer)
8+
69
add_custom_target(RunFrameworkTests
710
COMMAND $<TARGET_FILE:FrameworkTests>
811
DEPENDS $<TARGET_FILE:FrameworkTests>)

0 commit comments

Comments
 (0)