summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt226
1 files changed, 226 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 000000000..c1ffa9ecc
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,226 @@
+cmake_minimum_required(VERSION 3.5)
+
+project(OpenTTD)
+
+if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
+ message(FATAL_ERROR "In-source builds not allowed. Please run \"cmake ..\" from the bin directory")
+endif (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
+
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
+
+include(Options)
+set_options()
+set_directory_options()
+
+include(Static)
+set_static_if_needed()
+
+# Prefer -pthread over -lpthread, which is often the better option of the two.
+set(CMAKE_THREAD_PREFER_PTHREAD YES)
+# Make sure we have Threads available.
+find_package(Threads REQUIRED)
+
+find_package(ZLIB)
+find_package(LibLZMA)
+find_package(LZO)
+find_package(PNG)
+if (NOT WIN32)
+ find_package(SDL2)
+ if (NOT SDL2_FOUND)
+ find_package(SDL)
+ endif( NOT SDL2_FOUND)
+ find_package(Allegro)
+ find_package(Fluidsynth)
+ find_package(Freetype)
+ find_package(Fontconfig)
+ find_package(ICU OPTIONAL_COMPONENTS i18n lx)
+ find_package(XDG_basedir)
+endif (NOT WIN32)
+if (APPLE)
+ find_package(Iconv)
+
+ find_library(AUDIOTOOLBOX_LIBRARY AudioToolbox)
+ find_library(AUDIOUNIT_LIBRARY AudioUnit)
+ find_library(COCOA_LIBRARY Cocoa)
+endif (APPLE)
+
+if (MSVC)
+ find_package(Editbin REQUIRED)
+endif (MSVC)
+
+find_package(SSE)
+find_package(Xaudio2)
+
+find_package(Grfcodec)
+
+# IPO is only properly supported from CMake 3.9. Despite the fact we are
+# CMake 3.5, still enable IPO if we detect we are 3.9+.
+if (POLICY CMP0069)
+ cmake_policy(SET CMP0069 NEW)
+ include(CheckIPOSupported)
+ check_ipo_supported(RESULT IPO_FOUND)
+endif (POLICY CMP0069)
+
+show_options()
+
+if (UNIX AND NOT APPLE AND NOT OPTION_DEDICATED)
+ if (NOT SDL_FOUND AND NOT SDL2_FOUND)
+ message(FATAL_ERROR "SDL or SDL2 is required for this platform")
+ endif (NOT SDL_FOUND AND NOT SDL2_FOUND)
+endif (UNIX AND NOT APPLE AND NOT OPTION_DEDICATED)
+if (APPLE)
+ if (NOT AUDIOTOOLBOX_LIBRARY)
+ message(FATAL_ERROR "AudioToolbox is required for this platform")
+ endif (NOT AUDIOTOOLBOX_LIBRARY)
+ if (NOT AUDIOUNIT_LIBRARY)
+ message(FATAL_ERROR "AudioUnit is required for this platform")
+ endif (NOT AUDIOUNIT_LIBRARY)
+ if (NOT COCOA_LIBRARY)
+ message(FATAL_ERROR "Cocoa is required for this platform")
+ endif (NOT COCOA_LIBRARY)
+endif (APPLE)
+
+if (MSVC)
+ # C++17 for MSVC
+ set(CMAKE_CXX_STANDARD 17)
+else (MSVC)
+ # C++11 for all other targets
+ set(CMAKE_CXX_STANDARD 11)
+endif (MSVC)
+
+set(CMAKE_CXX_STANDARD_REQUIRED YES)
+set(CMAKE_CXX_EXTENSIONS NO)
+
+list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/rev.cpp")
+if (WIN32)
+ list(APPEND GENERATED_SOURCE_FILES "${CMAKE_BINARY_DIR}/generated/ottdres.rc")
+endif (WIN32)
+
+# Generate a target to determine version, which is execute every 'make' run
+add_custom_target(find_version
+ ${CMAKE_COMMAND}
+ -DFIND_VERSION_BINARY_DIR=${CMAKE_BINARY_DIR}/generated
+ -DCPACK_BINARY_DIR=${CMAKE_BINARY_DIR}
+ -P "${CMAKE_SOURCE_DIR}/cmake/scripts/FindVersion.cmake"
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ BYPRODUCTS ${GENERATED_SOURCE_FILES}
+)
+
+include(SourceList)
+include(Endian)
+add_endian_definition()
+
+# Needed by rev.cpp
+include_directories(${CMAKE_SOURCE_DIR}/src)
+# Needed by everything that uses Squirrel
+include_directories(${CMAKE_SOURCE_DIR}/src/3rdparty/squirrel/include)
+
+include(CompileFlags)
+compile_flags()
+
+add_executable(openttd WIN32 ${GENERATED_SOURCE_FILES})
+# All other files are added via target_sources()
+
+include(AddCustomXXXTimestamp)
+add_subdirectory(${CMAKE_SOURCE_DIR}/src)
+add_subdirectory(${CMAKE_SOURCE_DIR}/media/baseset)
+
+add_dependencies(openttd
+ find_version)
+
+target_link_libraries(openttd
+ openttd::languages
+ openttd::settings
+ openttd::basesets
+ Threads::Threads
+)
+
+if (IPO_FOUND)
+ set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE True)
+ set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_MINSIZEREL True)
+ set_target_properties(openttd PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO True)
+endif (IPO_FOUND)
+set_target_properties(openttd PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/bin")
+process_compile_flags()
+
+if (APPLE OR UNIX)
+ add_definitions(-DUNIX)
+endif (APPLE OR UNIX)
+
+include(LinkPackage)
+link_package(PNG TARGET PNG::PNG ENCOURAGED)
+link_package(ZLIB TARGET ZLIB::ZLIB ENCOURAGED)
+link_package(LIBLZMA TARGET LibLZMA::LibLZMA ENCOURAGED)
+link_package(LZO ENCOURAGED)
+link_package(XDG_basedir)
+
+if (NOT OPTION_DEDICATED)
+ link_package(Fluidsynth)
+ link_package(SDL)
+ link_package(SDL2)
+ link_package(Allegro)
+ link_package(FREETYPE TARGET Freetype::Freetype)
+ link_package(Fontconfig TARGET Fontconfig::Fontconfig)
+ link_package(ICU_lx)
+ link_package(ICU_i18n)
+endif (NOT OPTION_DEDICATED)
+
+if (APPLE)
+ link_package(Iconv TARGET Iconv::Iconv)
+
+ target_link_libraries(openttd
+ ${AUDIOTOOLBOX_LIBRARY}
+ ${AUDIOUNIT_LIBRARY}
+ ${COCOA_LIBRARY}
+ )
+
+ add_definitions(
+ -DWITH_COCOA
+ -DENABLE_COCOA_QUARTZ
+ )
+endif (APPLE)
+
+if (NOT PERSONAL_DIR STREQUAL "(not set)")
+ add_definitions(
+ -DWITH_PERSONAL_DIR
+ -DPERSONAL_DIR="${PERSONAL_DIR}"
+ )
+endif (NOT PERSONAL_DIR STREQUAL "(not set)")
+
+if (NOT SHARED_DIR STREQUAL "(not set)")
+ add_definitions(
+ -DWITH_SHARED_DIR
+ -DSHARED_DIR="${SHARED_DIR}"
+ )
+endif (NOT SHARED_DIR STREQUAL "(not set)")
+
+if (NOT GLOBAL_DIR STREQUAL "(not set)")
+ add_definitions(
+ -DGLOBAL_DATA_DIR="${GLOBAL_DIR}"
+ )
+endif (NOT GLOBAL_DIR STREQUAL "(not set)")
+
+link_package(SSE)
+
+add_definitions_based_on_options()
+
+if (WIN32)
+ add_definitions(
+ -DUNICODE
+ -D_UNICODE
+ -DWITH_UNISCRIBE
+ )
+
+ target_link_libraries(openttd
+ ws2_32
+ winmm
+ imm32
+ )
+endif (WIN32)
+
+if (CMAKE_SIZEOF_VOID_P EQUAL 8)
+ add_definitions(-D_SQ64)
+endif (CMAKE_SIZEOF_VOID_P EQUAL 8)
+
+include(CreateRegression)
+create_regression()