cmake_minimum_required(VERSION 3.21) add_subdirectory(${CMAKE_SOURCE_DIR}/src/third-party) set(MAIN_CPP ${CMAKE_SOURCE_DIR}/src/main.cpp) set(MESSAGES_CPP ${CMAKE_SOURCE_DIR}/src/messages.cpp) set(RESOURCE_RC ${CMAKE_SOURCE_DIR}/src/resource.rc) if (WIN32) set(RSRC_RC_DEP "${CMAKE_SOURCE_DIR}/data/cataicon.ico") set(RSRC_RC_DEP "${RSRC_RC_DEP};${CMAKE_SOURCE_DIR}/data/application_manifest.xml") set_source_files_properties( ${RESOURCE_RC} PROPERTIES OBJECT_DEPENDS "${RSRC_RC_DEP}") endif () file(GLOB CATACLYSM_DDA_SOURCES ${CMAKE_SOURCE_DIR}/src/*.cpp) list(REMOVE_ITEM CATACLYSM_DDA_SOURCES ${MAIN_CPP} ${MESSAGES_CPP}) file(GLOB CATACLYSM_DDA_HEADERS ${CMAKE_SOURCE_DIR}/src/*.h) # Get GIT version strings add_custom_target( get_version DEPENDS ${CMAKE_SOURCE_DIR}/src/version.h WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) add_custom_command( OUTPUT ${CMAKE_SOURCE_DIR}/src/version.h COMMAND ${CMAKE_COMMAND} -D SRC=${CMAKE_SOURCE_DIR}/src/version.h.in -D DST=${CMAKE_SOURCE_DIR}/src/version.h -D GIT_EXECUTABLE=${GIT_EXECUTABLE} -P ${CMAKE_SOURCE_DIR}/src/version.cmake WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) # Build tiles version if requested if (TILES) add_library( cataclysm-tiles-common OBJECT ${CATACLYSM_DDA_SOURCES} ${CATACLYSM_DDA_HEADERS}) target_include_directories(cataclysm-tiles-common INTERFACE ${CMAKE_SOURCE_DIR}/src) target_link_libraries(cataclysm-tiles-common PUBLIC third-party) if (WIN32) add_definitions(-DUSE_WINMAIN) add_executable( cataclysm-tiles WIN32 ${MAIN_CPP} ${MESSAGES_CPP} ${RESOURCE_RC}) else () add_executable(cataclysm-tiles ${MAIN_CPP} ${MESSAGES_CPP}) endif () add_dependencies(cataclysm-tiles-common get_version) target_link_libraries(cataclysm-tiles PRIVATE cataclysm-tiles-common) target_compile_definitions(cataclysm-tiles-common PUBLIC TILES ) if(NOT "${CMAKE_EXPORT_COMPILE_COMMANDS}") target_precompile_headers(cataclysm-tiles-common PUBLIC ${CMAKE_SOURCE_DIR}/pch/main-pch.hpp) endif () if (LOCALIZE) target_include_directories(cataclysm-tiles-common PUBLIC ${LIBINTL_INCLUDE_DIR} ${ICONV_INCLUDE_DIR}) target_link_libraries(cataclysm-tiles-common PUBLIC ${LIBINTL_LIBRARIES} ${ICONV_LIBRARIES}) endif () if (CMAKE_USE_PTHREADS_INIT) target_compile_options(cataclysm-tiles-common PUBLIC "-pthread") endif () if (CMAKE_THREAD_LIBS_INIT) target_link_libraries(cataclysm-tiles-common PUBLIC ${CMAKE_THREAD_LIBS_INIT}) endif () if (NOT DYNAMIC_LINKING) # SDL, SDL_Image, SDL_ttf deps are required for static build target_include_directories(cataclysm-tiles-common PUBLIC ${FREETYPE_INCLUDE_DIRS} ${PNG_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR} ${BZIP2_INCLUDE_DIR}) target_link_libraries(cataclysm-tiles-common PUBLIC ${FREETYPE_LIBRARIES} ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${BZIP2_LIBRARIES}) target_link_libraries(cataclysm-tiles-common PUBLIC SDL2::SDL2-static) endif () target_include_directories(cataclysm-tiles-common PUBLIC ${SDL2_INCLUDE_DIR} ${SDL2_IMAGE_INCLUDE_DIRS} ${SDL2_TTF_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS}) target_link_libraries(cataclysm-tiles-common PUBLIC ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARIES} ${SDL2_TTF_LIBRARIES} ${ZLIB_LIBRARIES}) if(TARGET SDL2::SDL2) target_link_libraries(cataclysm-tiles-common PUBLIC SDL2::SDL2 SDL2::SDL2main SDL2::SDL2_image SDL2::SDL2_ttf) endif() if (SOUND) if (VCPKG_MANIFEST_MODE) find_package(Ogg REQUIRED) find_package(Vorbis REQUIRED) # SDL2_mixer::SDL2_mixer-static = TODO x64-mingw-static ? target_link_libraries(cataclysm-tiles-common PUBLIC SDL2::SDL2_mixer Ogg::ogg Vorbis::vorbis) endif() target_compile_definitions(cataclysm-tiles-common PUBLIC SDL_SOUND ) target_include_directories(cataclysm-tiles-common PUBLIC ${OGGVORBIS_INCLUDE_DIR}) target_link_libraries(cataclysm-tiles-common PUBLIC ${OGG_LIBRARY}) target_link_libraries(cataclysm-tiles-common PUBLIC ${VORBIS_LIBRARY}) target_link_libraries(cataclysm-tiles-common PUBLIC ${VORBISFILE_LIBRARY}) target_include_directories(cataclysm-tiles-common PUBLIC ${SDL2_MIXER_INCLUDE_DIRS}) target_link_libraries(cataclysm-tiles-common PUBLIC ${SDL2_MIXER_LIBRARIES}) endif () if (WIN32) # Global settings for Windows targets (at end) target_link_libraries(cataclysm-tiles-common PUBLIC gdi32.lib) target_link_libraries(cataclysm-tiles-common PUBLIC winmm.lib) target_link_libraries(cataclysm-tiles-common PUBLIC imm32.lib) target_link_libraries(cataclysm-tiles-common PUBLIC ole32.lib) target_link_libraries(cataclysm-tiles-common PUBLIC oleaut32.lib) target_link_libraries(cataclysm-tiles-common PUBLIC version.lib) target_link_libraries(cataclysm-tiles-common PUBLIC setupapi.lib) if (SOUND) target_link_libraries(cataclysm-tiles-common PUBLIC shlwapi.lib) endif() if (BACKTRACE) target_link_libraries(cataclysm-tiles-common PUBLIC dbghelp.lib) if (LIBBACKTRACE) target_link_libraries(cataclysm-tiles-common PUBLIC backtrace) endif () endif () endif () if (LIBBACKTRACE) target_link_libraries(cataclysm-tiles-common PUBLIC backtrace) endif () if (RELEASE) install(TARGETS cataclysm-tiles DESTINATION ${BIN_PREFIX}) endif () endif () # Build curses version if requested if (CURSES) add_library(cataclysm-common OBJECT ${CATACLYSM_DDA_SOURCES} ${CATACLYSM_DDA_HEADERS}) target_include_directories(cataclysm-common INTERFACE ${CMAKE_SOURCE_DIR}/src) target_link_libraries(cataclysm-common PUBLIC third-party) if (WIN32) add_executable(cataclysm ${MAIN_CPP} ${MESSAGES_CPP} ${RESOURCE_RC}) else () add_executable(cataclysm ${MAIN_CPP} ${MESSAGES_CPP}) endif () add_dependencies(cataclysm-common get_version) target_link_libraries(cataclysm PRIVATE cataclysm-common) if (LOCALIZE) target_include_directories(cataclysm-common PUBLIC ${LIBINTL_INCLUDE_DIR} ${ICONV_INCLUDE_DIR}) target_link_libraries(cataclysm-common PUBLIC ${LIBINTL_LIBRARIES} ${ICONV_LIBRARIES}) endif () target_include_directories(cataclysm-common PUBLIC ${CURSES_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS}) target_link_libraries(cataclysm-common PUBLIC ${CURSES_LIBRARIES} ${ZLIB_LIBRARIES}) if (CMAKE_USE_PTHREADS_INIT) target_compile_options(cataclysm-common PUBLIC "-pthread") endif () if (CMAKE_THREAD_LIBS_INIT) target_link_libraries(cataclysm-common PUBLIC ${CMAKE_THREAD_LIBS_INIT}) endif () if (WIN32) # Global settings for Windows targets (at end) target_link_libraries(cataclysm-common PUBLIC gdi32.lib) target_link_libraries(cataclysm-common PUBLIC winmm.lib) target_link_libraries(cataclysm-common PUBLIC imm32.lib) target_link_libraries(cataclysm-common PUBLIC ole32.lib) target_link_libraries(cataclysm-common PUBLIC oleaut32.lib) target_link_libraries(cataclysm-common PUBLIC version.lib) if (BACKTRACE) target_link_libraries(cataclysm-common PUBLIC dbghelp.lib) endif () endif () if (LIBBACKTRACE) target_link_libraries(cataclysm-common PUBLIC backtrace) endif () if (RELEASE) install(TARGETS cataclysm DESTINATION ${BIN_PREFIX}) endif () endif () if (MINGW AND NOT RELEASE) # Try to Install shared libraries for dev builds # Note: It is specific to MSYS2 and uses hardcoded versions so # probably it will fail if you run it :) # GCC-specific libraries and zlib find_library(RuntimeLib_GCC_S_DW2_1 "gcc_s_dw2-1") find_library(RuntimeLib_STDC_PP_6 "stdc++-6") find_library(RuntimeLib_WINPTHREAD_1 "winpthread-1") find_library(RuntimeLib_zlib "zlib1") set(RuntimeLib_GCC_ALL ${RuntimeLib_GCC_S_DW2_1} ${RuntimeLib_STDC_PP_6} ${RuntimeLib_WINPTHREAD_1} ${RuntimeLib_zlib}) if (TILES) # SDL2 can have a varius deps. Here you are the MSYS2 ones... find_library(RuntimeLib_SDL2 "SDL2") find_library(RuntimeLib_SDL2_IMG "SDL2_image") find_library(RuntimeLib_png "libpng16-16") find_library(RuntimeLib_jpeg "libjpeg-8") find_library(RuntimeLib_jbig "libjbig-0") find_library(RuntimeLib_tiff "libtiff-5") find_library(RuntimeLib_webp "libwebp-5") find_library(RuntimeLib_lzma "liblzma-5") find_library(RuntimeLib_bz2 "libbz2-1") find_library(RuntimeLib_hb "libharfbuzz-0") find_library(RuntimeLib_SDL2_TTF "SDL2_ttf") find_library(RuntimeLib_ft "libfreetype-6") find_library(RuntimeLib_glib "libglib-2.0-0") set(RuntimeLib_SDL ${RuntimeLib_SDL2} ${RuntimeLib_SDL2_IMG} ${RuntimeLib_png} ${RuntimeLib_jpeg} ${RuntimeLib_jbig} ${RuntimeLib_tiff} ${RuntimeLib_webp} ${RuntimeLib_lzma} ${RuntimeLib_bz2} ${RuntimeLib_hb} ${RuntimeLib_SDL2_TTF} ${RuntimeLib_ft} ${RuntimeLib_glib}) if (SOUND) find_library(RuntimeLib_SDL_SND "SDL2_mixer") find_library(RuntimeLib_flac "libFLAC-8") find_library(RuntimeLib_ogg "libogg-0") find_library(RuntimeLib_flu "libfluidsynth-1") find_library(RuntimeLib_port "libportaudio-2") find_library(RuntimeLib_snd "libsndfile-1") find_library(RuntimeLib_vorb "libvorbis-0") find_library(RuntimeLib_vorb_enc "libvorbisenc-2") find_library(RuntimeLib_vorb_f "libvorbisfile-3") find_library(RuntimeLib_mod "libmodplug-1") find_library(RuntimeLib_mpeg "smpeg2") set(RuntimeLib_SDL_SOUND ${RuntimeLib_SDL_SND} ${RuntimeLib_flac} ${RuntimeLib_ogg} ${RuntimeLib_flu} ${RuntimeLib_port} ${RuntimeLib_snd} ${RuntimeLib_vorb} ${RuntimeLib_vorb_enc} ${RuntimeLib_vorb_f} ${RuntimeLib_mod} ${RuntimeLib_mpeg}) endif () endif () install(FILES ${RuntimeLib_GCC_ALL} ${RuntimeLib_LOCALIZE} ${RuntimeLib_SDL} ${RuntimeLib_SDL_SOUND} DESTINATION ${BIN_PREFIX}) endif ()