cmake_minimum_required(VERSION 3.20) project(FreeExileServerNative CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) include_directories(include) if(MSVC) add_compile_options(/arch:AVX2 /W4) # Enable /O2 only for Release and RelWithDebInfo to prevent collision with Debug /RTC1 add_compile_options("$<$:/O2>" "$<$:/O2>") else() add_compile_options(-O3 -mavx2 -Wall -Wextra) endif() # 1. Standalone executable target add_executable(freeexile_zone_server src/main.cpp) # 2. Shared library target (DLL on Windows / .so on Linux / .dylib on macOS) add_library(freeexile_sim_core SHARED src/sim_core_ffi.cpp) # Sync build artifact to server/engine_native for backward compatibility add_custom_command(TARGET freeexile_sim_core POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_SOURCE_DIR}/../server/engine_native" COMMAND ${CMAKE_COMMAND} -E copy_if_different $ "${CMAKE_CURRENT_SOURCE_DIR}/../server/engine_native/$" COMMENT "Syncing $ to server/engine_native for backward compatibility" )