0ad/source/tools/atlas/CMakeLists.txt
Cayleb-Ordo 058f0fba61 Add CMake Configuration for ActorEditor
Name the project AtlasMisc as the atlas Object is shared.

Not working as of 04.06.2026:
- Linking to wxWidgets find_package target
  - Terrain.obj : `error LNK2019: Verweis auf nicht aufgel├Âstes externes Symbol ""int const wxEVT_NULL" (?wxEVT_NULL@@3HB)" in Funktion ""void __cdecl dynamic initializer for 'private: static struct wxEventTableEntry const * const TerrainSidebar::sm_eventTableEntries''(void)" (??__E?sm_eventTableEntries@TerrainSidebar@@0QBUwxEventTableEntry@@B@@YAXXZ)".`

Working:
- Using find_package extra variables to find most of the windows ext. libs
- excluding SDL2 and Boost, which use the custom find_prebuild_library function
2026-08-04 13:11:24 +02:00

162 lines
4.7 KiB
CMake

cmake_minimum_required(VERSION 3.25.1...4.0.0)
project(AtlasMisc LANGUAGES CXX)
include(0ad-Functions)
# +++++++++++++++++++++ Project Macros ++++++++++++++++++++
macro(set_atlas_build_flags _target)
target_link_options(${_target}
PRIVATE
$<$<PLATFORM_ID:Linux,FreeBSD>:-fPIC>
$<$<PLATFORM_ID:Linux>:-rdynamic>
)
target_compile_options(${_target}
PRIVATE
$<$<PLATFORM_ID:Linux,FreeBSD>:-fPIC>
$<$<PLATFORM_ID:Linux,Darwin>:-Wno-unused-local-typedefs>
)
target_link_libraries(${_target}
PRIVATE
$<$<PLATFORM_ID:Windows>:winmm delayimp>
)
endmacro()
# +++++++++++++++++++++ Required Packages ++++++++++++++++++
find_package(wxWidgets 3.0.4 REQUIRED COMPONENTS gl xml)
find_package(Iconv 1.0 REQUIRED)
find_package(ZLIB 1.2 REQUIRED)
find_package(LibXml2 2.9 REQUIRED)
find_package(CxxTest 4.4 REQUIRED)
if(UNIX)
find_package(Boost 1.69.0 REQUIRED CONFIG)
find_package(SDL2 2.0.2 REQUIRED)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
include(FindPrebuildLibrary)
find_prebuild_library(Sdl2)
find_prebuild_library(Boost INC_PATH ${0AD_EXT_LIBDIR}/boost/include/)
endif()
# +++++++++++++++++++++ Project Targets ++++++++++++++++++++
add_library(AtlasObject STATIC)
add_library(AtlasUI SHARED)
add_executable(ActorEditor)
# Set Macos Bundle and Windows Window Application
set_target_properties(ActorEditor
PROPERTIES
WIN32_EXECUTABLE $<$<PLATFORM_ID:Windows>:TRUE>
MACOSX_BUNDLE $<$<PLATFORM_ID:Darwin>:TRUE>
)
add_subdirectory(AtlasFrontends/)
add_subdirectory(AtlasObject/)
add_subdirectory(AtlasUI/)
# +++++++++++++++++++++ Set Output Paths +++++++++++++++++++
set_target_properties(AtlasObject
PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/binaries/system
)
set_target_properties(AtlasUI
PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/binaries/system
)
set_target_properties(ActorEditor
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/binaries/system
)
# +++++++++++++++++++++ AtlasObject ++++++++++++++++++++++++
set_atlas_build_flags(AtlasObject)
target_include_directories(AtlasObject PRIVATE ${CMAKE_SOURCE_DIR}/source)
target_link_libraries(AtlasObject
PRIVATE
${BUILD_FLAGS_TARGET}
$<$<PLATFORM_ID:Linux>:Boost::headers>
$<$<PLATFORM_ID:Windows>:BOOST::headers>
Iconv::Iconv
LibXml2::LibXml2
SDL2::SDL2
)
# +++++++++++++++++++++ AtlasUI ++++++++++++++++++++++++++++
if(NOT without-pch)
add_pch(TARGET AtlasUI PCH_DIR ${PROJECT_SOURCE_DIR}/AtlasUI/Misc)
else()
target_compile_definitions(AtlasUI PRIVATE CONFIG_ENABLE_PCH=0)
set_target_properties(AtlasUI PROPERTIES
DISABLE_PRECOMPILE_HEADERS TRUE
)
target_include_directories(AtlasUI
BEFORE PRIVATE
${PROJECT_SOURCE_DIR}/AtlasUI/Misc
)
endif()
set_atlas_build_flags(AtlasUI)
target_include_directories(AtlasUI PRIVATE ${CMAKE_SOURCE_DIR}/source/)
target_link_libraries(AtlasUI
PRIVATE
${BUILD_FLAGS_TARGET}
LibXml2::LibXml2
Iconv::Iconv
$<$<PLATFORM_ID:Linux>:Boost::headers>
$<$<PLATFORM_ID:Windows>:BOOST::headers>
SDL2::SDL2
ZLIB::ZLIB
AtlasObject
wxWidgets::wxWidgets
)
target_compile_definitions(AtlasUI
PRIVATE
$<$<VERSION_GREATER_EQUAL:${wxWidgets_VERSION},3.3.0>:wxNO_REQUIRE_LITERAL_MSGIDS>
)
# +++++++++++++++++++++ ActorEditor ++++++++++++++++++++++++
target_include_directories(ActorEditor
PRIVATE
${PROJECT_SOURCE_DIR}/
)
target_link_libraries(ActorEditor
PRIVATE
${BUILD_FLAGS_TARGET}
$<$<NOT:$<PLATFORM_ID:Windows>>:AtlasObject>
AtlasUI
)
target_link_options(ActorEditor
PRIVATE
$<$<AND:$<PLATFORM_ID:Windows>,$<STREQUAL:${ARCH},amd64>>:/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df'>
$<$<AND:$<PLATFORM_ID:Windows>,$<STREQUAL:${ARCH},x86>>:/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df'>
$<$<PLATFORM_ID:Darwin>:-arch ${MACOS_ARCH}>
)
target_compile_options(ActorEditor
PRIVATE
$<$<PLATFORM_ID:Darwin>:-arch ${MACOS_ARCH}>
)
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set_target_properties(ActorEditor PROPERTIES
XCODE_ATTRIBUTE_ARCHS ${MACOS_ARCH}
XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET $<$<BOOL:${macosx-version-min}>:${macosx-version-min}>
)
endif()
# get_target_property(win32 ActorEditor WIN32_EXECUTABLE)
# get_target_property(macos ActorEditor MACOSX_BUNDLE)
# file(GENERATE OUTPUT debugexpr.txt CONTENT "${win32} ${macos}" TARGET ActorEditor)
# include(CMakePrintHelpers)
# cmake_print_properties(TARGETS AtlasUI
# PROPERTIES
# # INCLUDE_DIRECTORIES
# # LINK_LIBRARIES
# # COMPILE_OPTIONS
# # COMPILE_DEFINITIONS
# # WIN32_EXECUTABLE
# # MACOSX_BUNDLE
# # IMPORTED_LOCATION
# # INTERFACE_INCLUDE_DIRECTORIES
# # CXX_EXTENSIONS
# # CXX_STANDARD_REQUIRED
# )