You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
507 lines
12 KiB
507 lines
12 KiB
include(functions/genex) |
|
|
|
set(libdevilutionx_SRCS |
|
appfat.cpp |
|
automap.cpp |
|
capture.cpp |
|
codec.cpp |
|
control.cpp |
|
cursor.cpp |
|
dead.cpp |
|
debug.cpp |
|
diablo.cpp |
|
doom.cpp |
|
drlg_l1.cpp |
|
drlg_l2.cpp |
|
drlg_l3.cpp |
|
drlg_l4.cpp |
|
dthread.cpp |
|
dx.cpp |
|
encrypt.cpp |
|
engine.cpp |
|
error.cpp |
|
engine/assets.cpp |
|
gamemenu.cpp |
|
gendung.cpp |
|
gmenu.cpp |
|
help.cpp |
|
hwcursor.cpp |
|
init.cpp |
|
interfac.cpp |
|
inv.cpp |
|
itemdat.cpp |
|
items.cpp |
|
lighting.cpp |
|
loadsave.cpp |
|
menu.cpp |
|
minitext.cpp |
|
misdat.cpp |
|
missiles.cpp |
|
monstdat.cpp |
|
monster.cpp |
|
movie.cpp |
|
msg.cpp |
|
multi.cpp |
|
nthread.cpp |
|
objdat.cpp |
|
objects.cpp |
|
options.cpp |
|
pack.cpp |
|
palette.cpp |
|
path.cpp |
|
pfile.cpp |
|
player.cpp |
|
plrmsg.cpp |
|
portal.cpp |
|
quests.cpp |
|
restrict.cpp |
|
scrollrt.cpp |
|
setmaps.cpp |
|
sha.cpp |
|
spelldat.cpp |
|
spells.cpp |
|
stores.cpp |
|
sync.cpp |
|
textdat.cpp |
|
themes.cpp |
|
tmsg.cpp |
|
town.cpp |
|
towners.cpp |
|
track.cpp |
|
trigs.cpp |
|
controls/axis_direction.cpp |
|
controls/controller.cpp |
|
controls/controller_motion.cpp |
|
controls/devices/game_controller.cpp |
|
controls/devices/joystick.cpp |
|
controls/devices/kbcontroller.cpp |
|
controls/game_controls.cpp |
|
controls/menu_controls.cpp |
|
controls/modifier_hints.cpp |
|
controls/plrctrls.cpp |
|
controls/keymapper.cpp |
|
engine/animationinfo.cpp |
|
engine/demomode.cpp |
|
engine/load_cel.cpp |
|
engine/random.cpp |
|
engine/render/automap_render.cpp |
|
engine/render/cel_render.cpp |
|
engine/render/cl2_render.cpp |
|
engine/render/dun_render.cpp |
|
engine/render/text_render.cpp |
|
engine/surface.cpp |
|
mpq/mpq_reader.cpp |
|
mpq/mpq_sdl_rwops.cpp |
|
mpq/mpq_writer.cpp |
|
qol/autopickup.cpp |
|
qol/common.cpp |
|
qol/monhealthbar.cpp |
|
qol/xpbar.cpp |
|
qol/itemlabels.cpp |
|
utils/console.cpp |
|
utils/display.cpp |
|
utils/file_util.cpp |
|
utils/language.cpp |
|
utils/logged_fstream.cpp |
|
utils/paths.cpp |
|
utils/sdl_bilinear_scale.cpp |
|
utils/sdl_thread.cpp |
|
utils/utf8.cpp |
|
DiabloUI/art.cpp |
|
DiabloUI/art_draw.cpp |
|
DiabloUI/button.cpp |
|
DiabloUI/credits.cpp |
|
DiabloUI/credits_lines.cpp |
|
DiabloUI/diabloui.cpp |
|
DiabloUI/dialogs.cpp |
|
DiabloUI/errorart.cpp |
|
DiabloUI/mainmenu.cpp |
|
DiabloUI/progress.cpp |
|
DiabloUI/scrollbar.cpp |
|
DiabloUI/settingsmenu.cpp |
|
DiabloUI/selconn.cpp |
|
DiabloUI/selgame.cpp |
|
DiabloUI/selhero.cpp |
|
DiabloUI/selok.cpp |
|
DiabloUI/selstart.cpp |
|
DiabloUI/selyesno.cpp |
|
DiabloUI/support_lines.cpp |
|
DiabloUI/title.cpp |
|
panels/charpanel.cpp |
|
panels/mainpanel.cpp |
|
panels/spell_book.cpp |
|
panels/spell_icons.cpp |
|
panels/spell_list.cpp |
|
dvlnet/abstract_net.cpp |
|
dvlnet/base.cpp |
|
dvlnet/cdwrap.cpp |
|
dvlnet/frame_queue.cpp |
|
dvlnet/loopback.cpp |
|
dvlnet/packet.cpp |
|
storm/storm_net.cpp |
|
storm/storm_svid.cpp |
|
miniwin/misc_msg.cpp) |
|
|
|
if(IOS) |
|
list(APPEND libdevilutionx_SRCS platform/ios/ios_paths.m) |
|
endif() |
|
|
|
if(USE_SDL1) |
|
list(APPEND libdevilutionx_SRCS utils/sdl2_to_1_2_backports.cpp) |
|
endif() |
|
|
|
if(NOSOUND) |
|
list(APPEND libdevilutionx_SRCS |
|
effects_stubs.cpp |
|
sound_stubs.cpp) |
|
else() |
|
list(APPEND libdevilutionx_SRCS |
|
effects.cpp |
|
sound.cpp |
|
utils/push_aulib_decoder.cpp |
|
utils/soundsample.cpp) |
|
endif() |
|
|
|
if(NOT NONET) |
|
if(NOT DISABLE_TCP) |
|
list(APPEND libdevilutionx_SRCS |
|
dvlnet/tcp_client.cpp |
|
dvlnet/tcp_server.cpp) |
|
endif() |
|
if(NOT DISABLE_ZERO_TIER) |
|
list(APPEND libdevilutionx_SRCS |
|
dvlnet/protocol_zt.cpp |
|
dvlnet/zerotier_native.cpp |
|
dvlnet/zerotier_lwip.cpp) |
|
endif() |
|
endif() |
|
|
|
if(VIRTUAL_GAMEPAD) |
|
list(APPEND libdevilutionx_SRCS |
|
controls/touch/event_handlers.cpp |
|
controls/touch/gamepad.cpp |
|
controls/touch/renderers.cpp) |
|
endif() |
|
|
|
|
|
if(NINTENDO_SWITCH) |
|
list(APPEND libdevilutionx_SRCS |
|
platform/switch/network.cpp |
|
platform/switch/keyboard.cpp |
|
platform/switch/docking.cpp |
|
platform/switch/asio/pause.c |
|
platform/switch/asio/net/if.c |
|
platform/switch/asio/sys/signal.c) |
|
|
|
if(PACKET_ENCRYPTION) |
|
list(APPEND libdevilutionx_SRCS |
|
platform/switch/random.cpp) |
|
endif() |
|
endif() |
|
|
|
if(VITA) |
|
list(APPEND libdevilutionx_SRCS |
|
platform/vita/network.cpp |
|
platform/vita/keyboard.cpp |
|
platform/vita/touch.cpp) |
|
|
|
if(PACKET_ENCRYPTION) |
|
list(APPEND libdevilutionx_SRCS |
|
platform/vita/random.cpp) |
|
endif() |
|
endif() |
|
|
|
if(NINTENDO_3DS) |
|
list(APPEND libdevilutionx_SRCS |
|
platform/ctr/system.cpp |
|
platform/ctr/keyboard.cpp |
|
platform/ctr/display.cpp |
|
platform/ctr/messagebox.cpp |
|
platform/ctr/sockets.cpp |
|
platform/ctr/locale.cpp |
|
platform/ctr/asio/net/if.c |
|
platform/ctr/asio/sys/socket.c |
|
platform/ctr/asio/sys/uio.c) |
|
|
|
|
|
if(PACKET_ENCRYPTION) |
|
list(APPEND libdevilutionx_SRCS |
|
platform/ctr/random.cpp) |
|
endif() |
|
endif() |
|
|
|
if(DISCORD_INTEGRATION) |
|
list(APPEND libdevilutionx_SRCS |
|
discord/discord.cpp |
|
) |
|
endif() |
|
|
|
add_library(libdevilutionx OBJECT ${libdevilutionx_SRCS}) |
|
target_include_directories(libdevilutionx PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) |
|
|
|
# Use file GENERATE instead of configure_file because configure_file |
|
# does not support generator expressions. |
|
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) |
|
if(is_multi_config) |
|
set(CONFIG_PATH $<CONFIG>/config.h) |
|
target_include_directories(libdevilutionx PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>) |
|
else() |
|
set(CONFIG_PATH config.h) |
|
endif() |
|
file(GENERATE OUTPUT ${CONFIG_PATH} CONTENT |
|
"#pragma once |
|
#define PROJECT_NAME \"${PROJECT_NAME}\" |
|
#define PROJECT_VERSION \"${PROJECT_VERSION_WITH_SUFFIX}\" |
|
#define PROJECT_VERSION_MAJOR ${PROJECT_VERSION_MAJOR} |
|
#define PROJECT_VERSION_MINOR ${PROJECT_VERSION_MINOR} |
|
#define PROJECT_VERSION_PATCH ${PROJECT_VERSION_PATCH} |
|
") |
|
|
|
if(DISCORD_INTEGRATION) |
|
target_compile_definitions(libdevilutionx PRIVATE DISCORD) |
|
target_link_libraries(libdevilutionx PRIVATE discord discord_game_sdk) |
|
endif() |
|
|
|
if(GPERF) |
|
find_package(Gperftools REQUIRED) |
|
endif() |
|
|
|
if(NOT NINTENDO_3DS) |
|
target_link_libraries(libdevilutionx PUBLIC |
|
Threads::Threads) |
|
endif() |
|
|
|
target_link_libraries(libdevilutionx PUBLIC |
|
PKWare |
|
libmpq |
|
libsmackerdec |
|
simpleini |
|
hoehrmann_utf8) |
|
|
|
if(WIN32) |
|
target_link_libraries(libdevilutionx PUBLIC find_steam_game) |
|
endif() |
|
|
|
if(NOT NONET) |
|
if(NOT DISABLE_TCP) |
|
target_link_libraries(libdevilutionx PUBLIC asio) |
|
endif() |
|
if(PACKET_ENCRYPTION) |
|
target_link_libraries(libdevilutionx PUBLIC sodium) |
|
endif() |
|
endif() |
|
|
|
target_link_libraries(libdevilutionx PUBLIC fmt::fmt) |
|
|
|
genex_for_option(DEBUG) |
|
target_compile_definitions(libdevilutionx PUBLIC "$<${DEBUG_GENEX}:_DEBUG>") |
|
|
|
if(NOT NONET AND NOT DISABLE_TCP) |
|
target_compile_definitions(libdevilutionx PUBLIC ASIO_STANDALONE) |
|
endif() |
|
|
|
genex_for_option(UBSAN) |
|
target_compile_options(libdevilutionx PUBLIC $<${UBSAN_GENEX}:-fsanitize=undefined>) |
|
target_link_libraries(libdevilutionx PUBLIC $<${UBSAN_GENEX}:-fsanitize=undefined>) |
|
|
|
if(TSAN) |
|
target_compile_options(libdevilutionx PUBLIC -fsanitize=thread) |
|
target_link_libraries(libdevilutionx PUBLIC -fsanitize=thread) |
|
else() |
|
genex_for_option(ASAN) |
|
target_compile_options(libdevilutionx PUBLIC "$<${ASAN_GENEX}:-fsanitize=address;-fsanitize-recover=address>") |
|
target_link_libraries(libdevilutionx PUBLIC "$<${ASAN_GENEX}:-fsanitize=address;-fsanitize-recover=address>") |
|
endif() |
|
|
|
if(USE_SDL1) |
|
target_link_libraries(libdevilutionx PUBLIC |
|
${SDL_LIBRARY} |
|
SDL_image) |
|
target_compile_definitions(libdevilutionx PUBLIC USE_SDL1) |
|
else() |
|
target_link_libraries(libdevilutionx PUBLIC |
|
${SDL2_MAIN} |
|
SDL2::SDL2 |
|
SDL2::SDL2_image) |
|
endif() |
|
|
|
if(NOT NOSOUND) |
|
target_link_libraries(libdevilutionx PUBLIC SDL_audiolib) |
|
endif() |
|
|
|
if(NOT NONET AND NOT DISABLE_ZERO_TIER) |
|
if(NOT ANDROID) |
|
target_link_libraries(libdevilutionx PUBLIC zt-static) |
|
else() |
|
target_link_libraries(libdevilutionx PUBLIC zt-shared) |
|
endif() |
|
endif() |
|
|
|
if(AMIGA) |
|
target_link_libraries(libdevilutionx PUBLIC |
|
${ZLIB_LIBRARY}) |
|
if(NOT WARPOS) |
|
target_link_libraries(libdevilutionx PUBLIC -ldebug) |
|
endif() |
|
endif() |
|
|
|
if(VITA) |
|
target_link_libraries(libdevilutionx PUBLIC |
|
ScePower_stub |
|
SceAppUtil_stub |
|
SceNet_stub |
|
SceNetCtl_stub |
|
) |
|
target_compile_definitions(libdevilutionx PUBLIC VITA) |
|
endif() |
|
|
|
if(NINTENDO_3DS) |
|
target_link_libraries(libdevilutionx PUBLIC 3ds::citro3d 3ds::ctrulib) |
|
endif() |
|
|
|
if(GPERF) |
|
target_link_libraries(libdevilutionx PUBLIC ${GPERFTOOLS_LIBRARIES}) |
|
endif() |
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") |
|
genex_for_option(DEVILUTIONX_STATIC_CXX_STDLIB) |
|
target_link_libraries(libdevilutionx PUBLIC $<${DEVILUTIONX_STATIC_CXX_STDLIB_GENEX}:-static-libgcc;-static-libstdc++>) |
|
endif() |
|
|
|
if(WIN32) |
|
target_link_libraries(libdevilutionx PUBLIC shlwapi wsock32 ws2_32 wininet) |
|
|
|
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") |
|
target_compile_options(libdevilutionx PUBLIC "/W3" "/Zc:__cplusplus" "/utf-8") |
|
target_compile_definitions(libdevilutionx PUBLIC _CRT_SECURE_NO_WARNINGS) |
|
else() |
|
target_compile_options(libdevilutionx PUBLIC $<$<CONFIG:Debug>:-gstabs>) |
|
endif() |
|
endif() |
|
|
|
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC") |
|
# Note: For Valgrind support. |
|
genex_for_option(DEBUG) |
|
target_compile_options(libdevilutionx PUBLIC $<${DEBUG_GENEX}:-fno-omit-frame-pointer>) |
|
|
|
# Warnings for devilutionX |
|
target_compile_options(libdevilutionx PUBLIC -Wall -Wextra -Wno-unused-parameter) |
|
|
|
# For ARM and other default unsigned char platforms |
|
target_compile_options(libdevilutionx PUBLIC -fsigned-char) |
|
endif() |
|
|
|
if(NOT WIN32 AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL FreeBSD) |
|
# Enable POSIX extensions such as `readlink` and `ftruncate`. |
|
add_definitions(-D_POSIX_C_SOURCE=200809L) |
|
endif() |
|
|
|
if(HAIKU) |
|
target_link_libraries(libdevilutionx PUBLIC network) |
|
endif() |
|
|
|
if(BUILD_TESTING) |
|
if(ENABLE_CODECOVERAGE) |
|
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") |
|
message(WARNING "Codecoverage not supported with MSVC") |
|
else() |
|
target_compile_options(libdevilutionx PUBLIC --coverage) |
|
target_link_options(libdevilutionx PUBLIC --coverage) |
|
endif() |
|
endif() |
|
|
|
target_compile_definitions(libdevilutionx PRIVATE _DVL_EXPORTING) |
|
endif() |
|
|
|
# Defines without value |
|
foreach( |
|
def_name |
|
NOSOUND |
|
NONET |
|
PREFILL_PLAYER_NAME |
|
DISABLE_TCP |
|
DISABLE_ZERO_TIER |
|
DISABLE_STREAMING_MUSIC |
|
DISABLE_STREAMING_SOUNDS |
|
BUILD_TESTING |
|
GPERF |
|
GPERF_HEAP_MAIN |
|
GPERF_HEAP_FIRST_GAME_ITERATION |
|
STREAM_ALL_AUDIO |
|
PACKET_ENCRYPTION |
|
VIRTUAL_GAMEPAD |
|
) |
|
if(${def_name}) |
|
list(APPEND def_list ${def_name}) |
|
endif() |
|
endforeach(def_name) |
|
|
|
# Defines with value |
|
foreach( |
|
def_name |
|
DEFAULT_WIDTH |
|
DEFAULT_HEIGHT |
|
DEFAULT_AUDIO_SAMPLE_RATE |
|
DEFAULT_AUDIO_CHANNELS |
|
DEFAULT_AUDIO_BUFFER_SIZE |
|
DEFAULT_AUDIO_RESAMPLING_QUALITY |
|
MO_LANG_DIR |
|
SDL1_VIDEO_MODE_BPP |
|
SDL1_VIDEO_MODE_FLAGS |
|
SDL1_VIDEO_MODE_SVID_FLAGS |
|
SDL1_FORCE_SVID_VIDEO_MODE |
|
SDL1_FORCE_DIRECT_RENDER |
|
HAS_KBCTRL |
|
KBCTRL_BUTTON_DPAD_LEFT |
|
KBCTRL_BUTTON_DPAD_RIGHT |
|
KBCTRL_BUTTON_DPAD_UP |
|
KBCTRL_BUTTON_DPAD_DOWN |
|
KBCTRL_BUTTON_B |
|
KBCTRL_BUTTON_A |
|
KBCTRL_BUTTON_Y |
|
KBCTRL_BUTTON_X |
|
KBCTRL_BUTTON_LEFTSTICK |
|
KBCTRL_BUTTON_RIGHTSTICK |
|
KBCTRL_BUTTON_RIGHTSHOULDER |
|
KBCTRL_BUTTON_LEFTSHOULDER |
|
KBCTRL_BUTTON_TRIGGERLEFT |
|
KBCTRL_BUTTON_TRIGGERRIGHT |
|
KBCTRL_BUTTON_START |
|
KBCTRL_BUTTON_BACK |
|
KBCTRL_IGNORE_1 |
|
JOY_AXIS_LEFTX |
|
JOY_AXIS_LEFTY |
|
JOY_AXIS_RIGHTX |
|
JOY_AXIS_RIGHTY |
|
JOY_HAT_DPAD_UP_HAT |
|
JOY_HAT_DPAD_UP |
|
JOY_HAT_DPAD_DOWN_HAT |
|
JOY_HAT_DPAD_DOWN |
|
JOY_HAT_DPAD_LEFT_HAT |
|
JOY_HAT_DPAD_LEFT |
|
JOY_HAT_DPAD_RIGHT_HAT |
|
JOY_HAT_DPAD_RIGHT |
|
JOY_BUTTON_DPAD_LEFT |
|
JOY_BUTTON_DPAD_RIGHT |
|
JOY_BUTTON_DPAD_UP |
|
JOY_BUTTON_DPAD_DOWN |
|
JOY_BUTTON_B |
|
JOY_BUTTON_A |
|
JOY_BUTTON_Y |
|
JOY_BUTTON_X |
|
JOY_BUTTON_LEFTSTICK |
|
JOY_BUTTON_RIGHTSTICK |
|
JOY_BUTTON_RIGHTSHOULDER |
|
JOY_BUTTON_LEFTSHOULDER |
|
JOY_BUTTON_TRIGGERLEFT |
|
JOY_BUTTON_TRIGGERRIGHT |
|
JOY_BUTTON_START |
|
JOY_BUTTON_BACK |
|
REMAP_KEYBOARD_KEYS |
|
) |
|
if(DEFINED ${def_name}) |
|
list(APPEND def_list ${def_name}=${${def_name}}) |
|
endif() |
|
endforeach(def_name) |
|
|
|
target_compile_definitions(libdevilutionx PUBLIC ${def_list})
|
|
|