mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-10-02 03:38:08 +03:00
211 lines
5.8 KiB
CMake
211 lines
5.8 KiB
CMake
cmake_minimum_required(VERSION 3.13)
|
|
|
|
project(xsystem35 LANGUAGES C)
|
|
set(CMAKE_C_STANDARD 99)
|
|
enable_testing()
|
|
|
|
include(CheckIncludeFile)
|
|
include(CheckLibraryExists)
|
|
include(CheckSymbolExists)
|
|
|
|
# In msys, `pkg-config --libs` returns `-lmingw32` but find_library() cannot
|
|
# find it in default search paths.
|
|
if (MSYS)
|
|
list(APPEND CMAKE_LIBRARY_PATH $ENV{MINGW_PREFIX}/$ENV{MINGW_CHOST}/lib)
|
|
endif ()
|
|
|
|
# A wrapper around pkg_check_modules() that skips the check if ENABLE_<prefix> is false
|
|
macro (optional_pkg_check_modules prefix)
|
|
option(ENABLE_${prefix} "Use ${prefix} if available" ON)
|
|
if (ENABLE_${prefix})
|
|
pkg_check_modules(${prefix} ${ARGN})
|
|
endif()
|
|
endmacro()
|
|
|
|
check_symbol_exists(getlogin "unistd.h" HAVE_GETLOGIN)
|
|
check_symbol_exists(mmap "sys/mman.h" HAVE_MMAP)
|
|
check_symbol_exists(sigaction "signal.h" HAVE_SIGACTION)
|
|
check_symbol_exists(uname "sys/utsname.h" HAVE_UNAME)
|
|
|
|
if (EMSCRIPTEN)
|
|
set(DEFAULT_FONT_PATH /fonts/)
|
|
elseif (ANDROID)
|
|
set(SDL2MIXER_FOUND 1)
|
|
find_library(ndk_zlib z)
|
|
find_library(ndk_log log)
|
|
else()
|
|
find_package(ZLIB REQUIRED)
|
|
|
|
include(FindPkgConfig)
|
|
optional_pkg_check_modules(GTK3 IMPORTED_TARGET gtk+-3.0)
|
|
if (GTK3_FOUND)
|
|
set(ENABLE_GTK 1)
|
|
endif()
|
|
|
|
pkg_check_modules(SDL2 IMPORTED_TARGET sdl2)
|
|
pkg_check_modules(SDL2TTF IMPORTED_TARGET SDL2_ttf)
|
|
optional_pkg_check_modules(SDL2MIXER IMPORTED_TARGET SDL2_mixer)
|
|
|
|
option(ENABLE_DEBUGGER "Enable built-in debugger" ON)
|
|
if (ENABLE_DEBUGGER)
|
|
pkg_check_modules(cJSON IMPORTED_TARGET libcjson)
|
|
if (NOT cJSON_FOUND)
|
|
# libcjson-dev of Debian buster / Ubuntu 20.04 does not install pkgconfig files.
|
|
find_library(cJSON cjson)
|
|
if (NOT cJSON)
|
|
message(FATAL_ERROR "libcjson is required but not found.")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
optional_pkg_check_modules(WEBP IMPORTED_TARGET libwebp)
|
|
if (WEBP_FOUND)
|
|
set(HAVE_WEBP 1)
|
|
endif()
|
|
|
|
find_library(PORTMIDI portmidi)
|
|
if (PORTMIDI)
|
|
set(HAVE_PORTMIDI 1)
|
|
set(ENABLE_MIDI_PORTMIDI 1)
|
|
endif()
|
|
|
|
set(DEFAULT_FONT_PATH ${CMAKE_INSTALL_PREFIX}/share/xsystem35/fonts/)
|
|
endif()
|
|
|
|
# Menu
|
|
|
|
if (EMSCRIPTEN)
|
|
set(SRC_MENU menu_emscripten.c)
|
|
elseif (ANDROID)
|
|
set(SRC_MENU menu_android.c)
|
|
elseif (ENABLE_GTK)
|
|
set(SRC_MENU menu.c menu_callback.c menu_gui.c s39init.c)
|
|
|
|
# i18n support (currently only menus are translated)
|
|
include(FindIntl)
|
|
include(FindGettext)
|
|
if (Intl_FOUND AND GETTEXT_FOUND)
|
|
set(ENABLE_NLS 1)
|
|
add_compile_definitions(LOCALEDIR="${CMAKE_INSTALL_PREFIX}/share/locale")
|
|
include_directories(${Intl_INCLUDE_DIRS})
|
|
link_libraries(${Intl_LIBRARIES})
|
|
endif()
|
|
else ()
|
|
set(SRC_MENU menu_sdl.c sdl_input.c)
|
|
endif()
|
|
|
|
# PCM audio
|
|
|
|
if (EMSCRIPTEN)
|
|
list(APPEND SRC_AUDIO)
|
|
list(APPEND SRC_AUDIO pcm.emscripten.c bgm.emscripten.c bgi.c)
|
|
list(APPEND SUMMARY_AUDIO "Emscripten")
|
|
elseif (SDL2MIXER_FOUND)
|
|
list(APPEND SRC_AUDIO pcm.sdlmixer.c bgm.sdlmixer.c bgi.c)
|
|
list(APPEND SUMMARY_AUDIO "SDL_mixer")
|
|
set(ENABLE_SDLMIXER 1)
|
|
else()
|
|
list(APPEND SRC_AUDIO pcm.dummy.c bgm.dummy.c)
|
|
endif()
|
|
|
|
# CDROM
|
|
|
|
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
list(APPEND SRC_CDROM cdrom.Linux.c)
|
|
list(APPEND SUMMARY_CDROM "Linux ioctl")
|
|
set(ENABLE_CDROM_LINUX 1)
|
|
elseif (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
|
|
list(APPEND SRC_CDROM cdrom.FreeBSD.c)
|
|
list(APPEND SUMMARY_CDROM "*BSD ioctl")
|
|
set(ENABLE_CDROM_BSD 1)
|
|
elseif (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
|
|
list(APPEND SRC_CDROM cdrom.emscripten.c)
|
|
list(APPEND SUMMARY_CDROM "Emscripten")
|
|
set(ENABLE_CDROM_EMSCRIPTEN 1)
|
|
elseif (CMAKE_SYSTEM_NAME STREQUAL "Android")
|
|
list(APPEND SRC_CDROM cdrom.android.c)
|
|
list(APPEND SUMMARY_CDROM "Android")
|
|
set(ENABLE_CDROM_ANDROID 1)
|
|
else()
|
|
list(APPEND SRC_CDROM cdrom.empty.c)
|
|
endif()
|
|
if (SDL2MIXER_FOUND AND NOT ANDROID)
|
|
list(APPEND SRC_CDROM cdrom.mp3.c)
|
|
list(APPEND SUMMARY_CDROM "SDL_mixer (wav|mp3|ogg...)")
|
|
set(ENABLE_CDROM_MP3 1)
|
|
endif()
|
|
set(CDROM_DEVICE "playlist.txt" CACHE STRING "CDROM Device Name")
|
|
|
|
# MIDI
|
|
|
|
if (EMSCRIPTEN)
|
|
list(APPEND SRC_MIDI midi.emscripten.c)
|
|
list(APPEND SUMMARY_MIDI "Emscripten")
|
|
elseif (ANDROID)
|
|
list(APPEND SRC_MIDI midi.android.c)
|
|
list(APPEND SUMMARY_MIDI "Android")
|
|
else()
|
|
if (HAVE_SIGACTION)
|
|
list(APPEND SRC_MIDI midi.rawmidi.c midifile.c)
|
|
list(APPEND SUMMARY_MIDI "raw")
|
|
set(MIDI_DEVICE "/dev/midi" CACHE STRING "midi device")
|
|
set(ENABLE_MIDI_RAWMIDI 1)
|
|
endif()
|
|
|
|
if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
|
|
check_symbol_exists(SNDCTL_SEQ_NRSYNTHS "machine/soundcard.h" ENABLE_MIDI_SEQMIDI)
|
|
elseif (CMAKE_SYSTEM_NAME MATCHES "(NetBSD|OpenBSD)")
|
|
check_symbol_exists(SNDCTL_SEQ_NRSYNTHS "soundcard.h" ENABLE_MIDI_SEQMIDI)
|
|
else ()
|
|
check_symbol_exists(SNDCTL_SEQ_NRSYNTHS "sys/soundcard.h" ENABLE_MIDI_SEQMIDI)
|
|
endif()
|
|
|
|
if (ENABLE_MIDI_SEQMIDI)
|
|
list(APPEND SUMMARY_MIDI "OSS sequencer")
|
|
set(SEQ_DEVICE "/dev/sequencer" CACHE STRING "sequencer device")
|
|
endif()
|
|
|
|
if (SDL2MIXER_FOUND)
|
|
list(APPEND SRC_MIDI midi.sdlmixer.c)
|
|
list(APPEND SUMMARY_MIDI "SDL_mixer")
|
|
set(ENABLE_MIDI_SDLMIXER 1)
|
|
endif()
|
|
|
|
if (HAVE_PORTMIDI AND ENABLE_MIDI_PORTMIDI)
|
|
list(APPEND SRC_MIDI midi.portmidi.c)
|
|
list(APPEND SUMMARY_MIDI "PortMidi")
|
|
endif()
|
|
endif()
|
|
|
|
function (print_summary name)
|
|
if (ARGN)
|
|
list(JOIN ARGN ", " MSG)
|
|
else()
|
|
set(MSG "none")
|
|
endif()
|
|
message(" ${name}: ${MSG}")
|
|
endfunction()
|
|
|
|
message("xsystem35 summary:")
|
|
message("------------------")
|
|
print_summary(audio ${SUMMARY_AUDIO})
|
|
print_summary(cdrom ${SUMMARY_CDROM})
|
|
print_summary(midi ${SUMMARY_MIDI})
|
|
message("------------------")
|
|
|
|
set(PACKAGE ${PROJECT_NAME})
|
|
configure_file(config.h.in config.h)
|
|
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
|
add_compile_definitions(HAVE_CONFIG_H)
|
|
add_compile_definitions($<$<CONFIG:Debug>:DEBUG>)
|
|
|
|
add_subdirectory(src)
|
|
add_subdirectory(tools)
|
|
add_subdirectory(fonts)
|
|
if (ENABLE_NLS)
|
|
add_subdirectory(po)
|
|
endif()
|
|
|
|
add_subdirectory(modules)
|
|
target_link_libraries(xsystem35 PRIVATE modules)
|