-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCMakeLists.txt
134 lines (109 loc) · 4.26 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
cmake_minimum_required(VERSION 3.15)
cmake_policy(SET CMP0069 NEW)
cmake_policy(SET CMP0091 NEW)
project("CRL" VERSION 2.0.0 LANGUAGES C)
set(CMAKE_C_STANDARD 99)
# Autotools variables
set(top_srcdir ${CMAKE_CURRENT_SOURCE_DIR})
set(top_builddir ${CMAKE_CURRENT_BINARY_DIR})
# AC_INIT variables
set(PACKAGE_VERSION "2.0")
set(PACKAGE_NAME "${PROJECT_NAME}")
set(PACKAGE_TARNAME "crl-doom")
set(PACKAGE_STRING "${PROJECT_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_BUGREPORT "[email protected]")
string(REGEX REPLACE " Doom$" "" PACKAGE_SHORTNAME "${PACKAGE_NAME}")
set(PACKAGE_COPYRIGHT "Copyright (C) 2011-2017 RestlessRodent, 2018-2025 Julia Nechaevskaya")
set(PACKAGE_LICENSE "GNU GPL (version 2)")
# Any settings that should apply to all targets in this directory and all
# subdirectories should go here. Use judiciously.
if(MSVC)
add_definitions("/D_CRT_SECURE_NO_WARNINGS" "/D_CRT_SECURE_NO_DEPRECATE"
"/D_CRT_NONSTDC_NO_DEPRECATE")
# Disable several warnings for cl.exe.
add_compile_options("/wd4018" # Signed/unsigned mismatch
"/wd4244" # Conversion from 'type1' to 'type2', possible loss of data
"/wd4267" # Conversion from 'size_t' to 'type', possible loss of data
)
else()
add_compile_options("-Wall"
"-Wredundant-decls"
"-Wformat-security"
"-Wno-ignored-qualifiers"
"-Wpedantic"
# "-Wextra"
)
endif()
# Enable LTO if available. Hovewer, CMake does not appear to support
# LTO properly for MinGW GCC which results in much longer linking time.
# Consider only enabling it when making a release.
include(CheckIPOSupported)
check_ipo_supported(RESULT HAVE_LTO)
include(CMakeDependentOption) # Note: replace first OFF to ON to enable.
cmake_dependent_option(ENABLE_LTO "Use link-time optimization" ON "HAVE_LTO" OFF)
if(ENABLE_LTO)
message(STATUS "LTO - enabled")
else()
message(STATUS "LTO - disabled")
endif()
# Enable ASan (AddressSanitizer).
# Note: doesn't work with MinGW, use Clang64 if using MSYS enviroment.
option(ENABLE_ASAN "Enable ASan" OFF)
if(ENABLE_ASAN)
add_compile_options("-fsanitize=address")
add_link_options(-fsanitize=address)
endif()
option(CMAKE_FIND_PACKAGE_PREFER_CONFIG
"Lookup package config files before using find modules" On)
option(ENABLE_SDL2_NET "Enable SDL2_net" On)
option(ENABLE_SDL2_MIXER "Enable SDL2_mixer" On)
find_package(SDL2 2.0.18)
if(ENABLE_SDL2_MIXER)
find_package(SDL2_mixer 2.0.2)
if(NOT TARGET SDL2_mixer::SDL2_mixer)
add_library(SDL2_mixer::SDL2_mixer ALIAS SDL2_mixer::SDL2_mixer-static)
endif()
else()
add_compile_definitions(DISABLE_SDL2MIXER=1)
endif()
if(ENABLE_SDL2_NET)
find_package(SDL2_net 2.0.0)
if(NOT TARGET SDL2_net::SDL2_net)
add_library(SDL2_net::SDL2_net ALIAS SDL2_net::SDL2_net-static)
endif()
else()
add_compile_definitions(DISABLE_SDL2NET=1)
endif()
# Check for libsamplerate.
find_package(SampleRate)
if(SampleRate_FOUND)
set(HAVE_LIBSAMPLERATE TRUE)
endif()
# Check for Miniz (replaces libpng).
add_subdirectory("miniz")
# Check for FluidSynth.
# find_package(FluidSynth)
# if(FluidSynth_FOUND)
# set(HAVE_FLUIDSYNTH TRUE)
# endif()
find_package(m)
include(CheckSymbolExists)
include(CheckIncludeFile)
check_symbol_exists(strcasecmp "strings.h" HAVE_DECL_STRCASECMP)
check_symbol_exists(strncasecmp "strings.h" HAVE_DECL_STRNCASECMP)
check_include_file("dirent.h" HAVE_DIRENT_H)
string(CONCAT WINDOWS_RC_VERSION "${PROJECT_VERSION_MAJOR}, "
"${PROJECT_VERSION_MINOR}, ${PROJECT_VERSION_PATCH}, 0")
# Without a hyphen. This is used for the bash-completion scripts.
string(TOLOWER "${PACKAGE_SHORTNAME}" PROGRAM_SPREFIX)
# With a hyphen, used almost everywhere else.
set(PROGRAM_PREFIX "${PROGRAM_SPREFIX}-")
configure_file(cmake/config.h.cin config.h)
configure_file(src/doom-res.rc.in src/doom-res.rc)
configure_file(src/heretic-res.rc.in src/heretic-res.rc)
configure_file(src/setup-res.rc.in src/setup-res.rc)
configure_file(src/setup/setup-manifest.xml.in src/setup/setup-manifest.xml)
foreach(SUBDIR textscreen opl pcsound src)
add_subdirectory("${SUBDIR}")
endforeach()