@@ -143,6 +143,39 @@ endif()
143143
144144add_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
147180target_compile_definitions (Framework PUBLIC MG_ENABLE_LOG=0 )
148181
@@ -153,7 +186,36 @@ ENDIF()
153186
154187# External libraries & other stuff
155188macro (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 ()
170235endmacro ()
171236
@@ -179,6 +244,11 @@ endif()
179244link_shared_deps (FrameworkServer )
180245target_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
183253if (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 ()
203308endif ()
0 commit comments