Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
mgba/CMakeLists.txt
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1349 lines (1204 sloc)
52.2 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| cmake_minimum_required(VERSION 3.1) | |
| list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/src/platform/cmake/") | |
| if(POLICY CMP0025) | |
| cmake_policy(SET CMP0025 NEW) | |
| endif() | |
| if(POLICY CMP0072) | |
| cmake_policy(SET CMP0072 NEW) | |
| set(OpenGL_GL_PREFERENCE LEGACY) | |
| endif() | |
| project(mGBA) | |
| if(NOT DEFINED LIBMGBA_ONLY) | |
| get_directory_property(LIBMGBA_ONLY EXCLUDE_FROM_ALL) | |
| endif() | |
| if(NOT DEFINED BINARY_NAME) | |
| set(BINARY_NAME mgba) | |
| endif() | |
| if(NOT LIBMGBA_ONLY) | |
| set(BINARY_NAME ${BINARY_NAME} CACHE INTERNAL "Name of output binaries") | |
| endif() | |
| set(CMAKE_C_STANDARD 11) | |
| if(NOT MSVC) | |
| set(CMAKE_C_STANDARD_REQUIRED ON) | |
| set(CMAKE_C_EXTENSIONS OFF) | |
| if(SWITCH OR 3DS OR (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_LESS "4.3")) | |
| set(CMAKE_C_EXTENSIONS ON) | |
| endif() | |
| set(WARNING_FLAGS "-Wall -Wextra -Wno-missing-field-initializers") | |
| if(WIN32) | |
| # mingw32 likes to complain about using the "wrong" format strings despite them actually working | |
| set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-format") | |
| endif() | |
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS} -Werror=implicit-function-declaration -Werror=implicit-int -fwrapv") | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS} -Woverloaded-virtual") | |
| else() | |
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS /wd4003 /wd4244 /wd4146 /wd4267 /Zc:preprocessor-") | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS /wd4003 /wd4244 /wd4146 /wd4267 /Zc:preprocessor-") | |
| endif() | |
| if(NOT LIBMGBA_ONLY) | |
| set(USE_DEBUGGERS ON CACHE BOOL "Whether or not to enable the debugging infrastructure") | |
| if (NOT WIN32) | |
| set(USE_EDITLINE ON CACHE BOOL "Whether or not to enable the CLI-mode debugger") | |
| endif() | |
| set(USE_GDB_STUB ON CACHE BOOL "Whether or not to enable the GDB stub ARM debugger") | |
| set(USE_FFMPEG ON CACHE BOOL "Whether or not to enable FFmpeg support") | |
| set(USE_ZLIB ON CACHE BOOL "Whether or not to enable zlib support") | |
| set(USE_MINIZIP ON CACHE BOOL "Whether or not to enable external minizip support") | |
| set(USE_PNG ON CACHE BOOL "Whether or not to enable PNG support") | |
| set(USE_LIBZIP ON CACHE BOOL "Whether or not to enable LIBZIP support") | |
| set(USE_SQLITE3 ON CACHE BOOL "Whether or not to enable SQLite3 support") | |
| set(USE_ELF ON CACHE BOOL "Whether or not to enable ELF support") | |
| set(USE_LUA ON CACHE BOOL "Whether or not to enable Lua scripting support") | |
| set(USE_JSON_C ON CACHE BOOL "Whether or not to enable JSON-C support") | |
| set(M_CORE_GBA ON CACHE BOOL "Build Game Boy Advance core") | |
| set(M_CORE_GB ON CACHE BOOL "Build Game Boy core") | |
| set(USE_LZMA ON CACHE BOOL "Whether or not to enable 7-Zip support") | |
| set(USE_DISCORD_RPC ON CACHE BOOL "Whether or not to enable Discord RPC support") | |
| set(ENABLE_SCRIPTING ON CACHE BOOL "Whether or not to enable scripting support") | |
| set(BUILD_QT ON CACHE BOOL "Build Qt frontend") | |
| set(BUILD_SDL ON CACHE BOOL "Build SDL frontend") | |
| set(BUILD_LIBRETRO OFF CACHE BOOL "Build libretro core") | |
| if(APPLE) | |
| set(BUILD_OPENEMU OFF CACHE BOOL "Build OpenEmu core") | |
| endif() | |
| set(BUILD_PERF OFF CACHE BOOL "Build performance profiling tool") | |
| set(BUILD_TEST OFF CACHE BOOL "Build testing harness") | |
| set(BUILD_SUITE OFF CACHE BOOL "Build test suite") | |
| set(BUILD_CINEMA OFF CACHE BOOL "Build video tests suite") | |
| set(BUILD_ROM_TEST OFF CACHE BOOL "Build ROM test tool") | |
| set(BUILD_EXAMPLE OFF CACHE BOOL "Build example frontends") | |
| set(BUILD_PYTHON OFF CACHE BOOL "Build Python bindings") | |
| set(BUILD_STATIC OFF CACHE BOOL "Build a static library") | |
| set(BUILD_SHARED ON CACHE BOOL "Build a shared library") | |
| set(SKIP_LIBRARY OFF CACHE BOOL "Skip building the library (useful for only building libretro or OpenEmu cores)") | |
| set(BUILD_GL ON CACHE BOOL "Build with OpenGL") | |
| set(BUILD_GLES2 ON CACHE BOOL "Build with OpenGL|ES 2") | |
| set(BUILD_GLES3 ON CACHE BOOL "Build with OpenGL|ES 3") | |
| set(BUILD_DOCGEN OFF CACHE BOOL "Build the scripting API documentation generator") | |
| set(USE_EPOXY ON CACHE STRING "Build with libepoxy") | |
| set(DISABLE_DEPS OFF CACHE BOOL "Build without dependencies") | |
| set(DISTBUILD OFF CACHE BOOL "Build distribution packages") | |
| if(WIN32) | |
| set(WIN32_UNIX_PATHS OFF CACHE BOOL "Use Unix-like paths") | |
| mark_as_advanced(WIN32_UNIX_PATHS) | |
| endif() | |
| mark_as_advanced(BUILD_DOCGEN) | |
| else() | |
| set(DISABLE_FRONTENDS ON) | |
| set(DISABLE_DEPS ON) | |
| set(BUILD_STATIC ON) | |
| set(BUILD_SHARED OFF) | |
| if(NOT DEFINED M_CORE_GBA) | |
| set(M_CORE_GBA ON) | |
| endif() | |
| if(NOT DEFINED M_CORE_GB) | |
| set(M_CORE_GB ON) | |
| endif() | |
| endif() | |
| file(GLOB THIRD_PARTY_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/inih/*.c) | |
| set(CORE_VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-mem.c ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-fifo.c) | |
| set(VFS_SRC) | |
| include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/include) | |
| if(NOT CMAKE_BUILD_TYPE) | |
| set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type (e.g. Release, RelWithDebInfo, or Debug)" FORCE) | |
| endif() | |
| if(UNIX OR WIN32_UNIX_PATHS) | |
| include(GNUInstallDirs) | |
| else() | |
| set(CMAKE_INSTALL_LIBDIR ".") | |
| set(CMAKE_INSTALL_BINDIR ".") | |
| set(CMAKE_INSTALL_DATADIR ".") | |
| set(CMAKE_INSTALL_DOCDIR ".") | |
| set(CMAKE_INSTALL_INCLUDEDIR "include") | |
| endif() | |
| if(APPLE AND DISTBUILD) | |
| set(CMAKE_INSTALL_DOCDIR ".") | |
| endif() | |
| if(NOT DEFINED LIBDIR) | |
| set(LIBDIR "${CMAKE_INSTALL_LIBDIR}") | |
| endif() | |
| if(NOT LIBMGBA_ONLY) | |
| set(LIBDIR "${LIBDIR}" CACHE PATH "Installed library directory") | |
| mark_as_advanced(LIBDIR) | |
| endif() | |
| if (BUILD_LIBRETRO) | |
| set(LIBRETRO_LIBDIR "${LIBDIR}" CACHE PATH "Installed library directory (Libretro)") | |
| mark_as_advanced(LIBRETRO_LIBDIR) | |
| endif() | |
| if (BUILD_OPENEMU) | |
| set(OE_LIBDIR "${LIBDIR}" CACHE PATH "Installed library directory (OpenEmu)") | |
| mark_as_advanced(OE_LIBDIR) | |
| endif() | |
| if (DISTBUILD) | |
| set(EXTRA_LICENSES "" CACHE FILEPATH "Extra licenses to include in distribution packaages") | |
| mark_as_advanced(EXTRA_LICENSES) | |
| endif() | |
| mark_as_advanced(DISTBUILD) | |
| set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIBDIR}") | |
| if(${CMAKE_INSTALL_PREFIX} STREQUAL "/usr") | |
| set(CMAKE_SKIP_RPATH ON) | |
| endif() | |
| if (NOT DEFINED MANDIR) | |
| set(MANDIR ${CMAKE_INSTALL_MANDIR}) | |
| endif() | |
| include(FindFeature) | |
| include(FindFunction) | |
| # Version information | |
| add_custom_target(${BINARY_NAME}-version-info ALL | |
| COMMAND ${CMAKE_COMMAND} | |
| -DBINARY_NAME=${BINARY_NAME} | |
| -DCONFIG_FILE=${CMAKE_CURRENT_SOURCE_DIR}/src/core/version.c.in | |
| -DOUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/version.c | |
| -P ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake | |
| WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) | |
| include(${CMAKE_CURRENT_SOURCE_DIR}/version.cmake) | |
| configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/core/version.c.in ${CMAKE_CURRENT_BINARY_DIR}/version.c) | |
| source_group("Generated sources" FILES ${CMAKE_CURRENT_BINARY_DIR}/version.c) | |
| # Advanced settings | |
| if(NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_COMPILER_VERSION VERSION_LESS "4.5")) | |
| set(DEFAULT_LTO ON) | |
| else() | |
| set(DEFAULT_LTO OFF) | |
| endif() | |
| if(NOT LIBMGBA_ONLY) | |
| set(BUILD_LTO ${DEFAULT_LTO} CACHE BOOL "Build with link-time optimization") | |
| set(BUILD_PGO OFF CACHE BOOL "Build with profiling-guided optimization") | |
| set(PGO_STAGE_2 CACHE BOOL "Rebuild for profiling-guided optimization after profiles have been generated") | |
| set(PGO_DIR "/tmp/gba-pgo/" CACHE PATH "Profiling-guided optimization profiles path") | |
| mark_as_advanced(BUILD_LTO BUILD_PGO PGO_STAGE_2 PGO_DIR) | |
| endif() | |
| set(PGO_PRE_FLAGS "-fprofile-generate=${PGO_DIR} -fprofile-arcs") | |
| set(PGO_POST_FLAGS "-fprofile-use=${PGO_DIR} -fbranch-probabilities") | |
| if(BUILD_PGO AND CMAKE_SYSTEM_NAME STREQUAL "Generic") | |
| add_definitions(-DTARGET_POSIX_IO) | |
| endif() | |
| if(BUILD_PGO AND NOT PGO_STAGE_2) | |
| set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${PGO_PRE_FLAGS}") | |
| set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${PGO_PRE_FLAGS}") | |
| set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PGO_PRE_FLAGS}") | |
| set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${PGO_PRE_FLAGS}") | |
| elseif(BUILD_PGO AND PGO_STAGE_2) | |
| set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${PGO_POST_FLAGS}") | |
| set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${PGO_POST_FLAGS}") | |
| set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PGO_POST_FLAGS}") | |
| set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${PGO_POST_FLAGS}") | |
| endif() | |
| # Platform support | |
| if(WIN32) | |
| set(WIN32_VERSION "${LIB_VERSION_MAJOR},${LIB_VERSION_MINOR},${LIB_VERSION_PATCH}") | |
| add_definitions(-D_WIN32_WINNT=0x0600) | |
| set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) | |
| if(MSVC) | |
| add_definitions(-DNOMINMAX -DWIN32_LEAN_AND_MEAN) | |
| add_definitions(-D_UNICODE -DUNICODE) | |
| else() | |
| add_definitions(-D_GNU_SOURCE) | |
| endif() | |
| list(APPEND OS_LIB ws2_32 shlwapi) | |
| list(APPEND CORE_VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-fd.c ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/windows/vfs-w32.c) | |
| file(GLOB OS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/windows/*.c) | |
| source_group("Windows-specific code" FILES ${OS_SRC}) | |
| elseif(UNIX) | |
| set(USE_PTHREADS ON) | |
| if(CMAKE_SYSTEM_NAME STREQUAL "Linux") | |
| add_definitions(-D_GNU_SOURCE) | |
| endif() | |
| list(APPEND CORE_VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-fd.c ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-dirent.c) | |
| file(GLOB OS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/posix/*.c) | |
| source_group("POSIX-specific code" FILES ${OS_SRC}) | |
| endif() | |
| if(APPLE) | |
| execute_process(COMMAND xcrun --show-sdk-version OUTPUT_VARIABLE MACOSX_SDK) | |
| add_definitions(-D_DARWIN_C_SOURCE) | |
| list(APPEND OS_LIB "-framework Foundation") | |
| if(NOT CMAKE_SYSTEM_VERSION VERSION_LESS "10.0") # Darwin 10.x is Mac OS X 10.6 | |
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=10.6") | |
| endif() | |
| # Not supported until Xcode 9 | |
| if(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_C_COMPILER_VERSION VERSION_LESS "9") | |
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__STDC_NO_THREADS__=1") | |
| endif() | |
| if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9") | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STDC_NO_THREADS__=1") | |
| endif() | |
| endif() | |
| if(NOT HAIKU AND NOT MSVC AND NOT PSP2) | |
| set(M_LIBRARY m) | |
| endif() | |
| list(APPEND OS_LIB ${M_LIBRARY}) | |
| if(APPLE OR CMAKE_C_COMPILER_ID STREQUAL "GNU" AND BUILD_LTO) | |
| set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto") | |
| set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto") | |
| endif() | |
| if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang") | |
| find_program(OBJCOPY ${cross_prefix}objcopy) | |
| find_program(STRIP ${cross_prefix}strip) | |
| set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} -gdwarf") | |
| set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -gdwarf") | |
| endif() | |
| if(BUILD_BBB OR BUILD_RASPI OR BUILD_PANDORA) | |
| if(NOT BUILD_EGL) | |
| add_definitions(-DCOLOR_16_BIT -DCOLOR_5_6_5) | |
| endif() | |
| endif() | |
| if(BUILD_RASPI) | |
| set(BUILD_GL OFF CACHE BOOL "OpenGL not supported" FORCE) | |
| endif() | |
| if(BUILD_PANDORA) | |
| add_definitions(-DBUILD_PANDORA) | |
| endif() | |
| if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm.*") | |
| enable_language(ASM) | |
| endif() | |
| if(PSP2) | |
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-format") | |
| endif() | |
| if(DEFINED 3DS OR DEFINED PSP2 OR DEFINED WII OR DEFINED SWITCH) | |
| set(IS_EMBEDDED ON) | |
| set(USE_DEBUGGERS OFF) | |
| set(USE_SQLITE3 OFF) | |
| set(USE_DISCORD_RPC OFF) | |
| set(USE_LIBZIP OFF CACHE BOOL "") | |
| endif() | |
| if(DEFINED SWITCH) | |
| set(BUILD_GLES2 OFF CACHE BOOL "Build with OpenGL|ES 2" FORCE) | |
| set(BUILD_GLES3 ON CACHE BOOL "Build with OpenGL|ES 3" FORCE) | |
| endif() | |
| if(NOT M_CORE_GBA) | |
| set(USE_GDB_STUB OFF) | |
| endif() | |
| if(NOT USE_DEBUGGERS) | |
| set(USE_EDITLINE OFF) | |
| set(USE_GDB_STUB OFF) | |
| endif() | |
| if(WII) | |
| add_definitions(-U__STRICT_ANSI__) | |
| endif() | |
| include(CheckCCompilerFlag) | |
| include(CheckIncludeFiles) | |
| set(FUNCTION_DEFINES) | |
| find_function(strdup) | |
| find_function(strlcpy) | |
| find_function(strndup) | |
| find_function(vasprintf) | |
| find_function(freelocale) | |
| find_function(newlocale) | |
| find_function(setlocale) | |
| find_function(snprintf_l) | |
| find_function(uselocale) | |
| find_function(popcount32) | |
| find_function(futimens) | |
| find_function(futimes) | |
| find_function(realpath) | |
| if(ANDROID AND ANDROID_NDK_MAJOR GREATER 13) | |
| find_function(localtime_r) | |
| set(HAVE_STRTOF_L ON) | |
| elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") | |
| find_function(localtime_r) | |
| # The strtof_l on Linux not actually exposed nor actually strtof_l | |
| set(HAVE_STRTOF_L OFF) | |
| else() | |
| find_function(localtime_r) | |
| find_function(strtof_l) | |
| endif() | |
| check_include_files("xlocale.h" HAVE_XLOCALE) | |
| if(CMAKE_SYSTEM_NAME STREQUAL "Generic") | |
| if(NOT IS_EMBEDDED) | |
| set(DISABLE_DEPS ON CACHE BOOL "This platform cannot build with dependencies" FORCE) | |
| endif() | |
| set(BUILD_STATIC ON CACHE BOOL "" FORCE) | |
| set(BUILD_SHARED OFF CACHE BOOL "" FORCE) | |
| set(DISABLE_FRONTENDS ON) | |
| set(MINIMAL_CORE ON) | |
| set(ENABLE_EXTRA ON) | |
| endif() | |
| if(USE_PTHREADS) | |
| check_include_files("pthread.h" HAVE_PTHREAD_H) | |
| if(HAVE_PTHREAD_H) | |
| check_c_compiler_flag(-pthread HAVE_PTHREAD) | |
| if(HAVE_PTHREAD AND NOT APPLE AND NOT HAIKU) | |
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread") | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") | |
| endif() | |
| find_function(pthread_create) | |
| if(HAVE_PTHREAD_CREATE) | |
| add_definitions(-DUSE_PTHREADS) | |
| check_include_files("pthread_np.h" HAVE_PTHREAD_NP_H) | |
| find_function(pthread_setname_np) | |
| find_function(pthread_set_name_np) | |
| endif() | |
| endif() | |
| endif() | |
| if(HAVE_NEWLOCALE AND HAVE_FREELOCALE OR APPLE) | |
| list(APPEND FUNCTION_DEFINES HAVE_LOCALE) | |
| if (HAVE_SNPRINTF_L) | |
| list(APPEND FUNCTION_DEFINES HAVE_SNPRINTF_L) | |
| endif() | |
| endif() | |
| if(HAVE_XLOCALE) | |
| list(APPEND FUNCTION_DEFINES HAVE_XLOCALE) | |
| endif() | |
| if(HAVE_PTHREAD_NP_H) | |
| list(APPEND FUNCTION_DEFINES HAVE_PTHREAD_NP_H) | |
| endif() | |
| # Feature dependencies | |
| set(FEATURE_DEFINES) | |
| set(FEATURE_FLAGS) | |
| set(FEATURE_SRC) | |
| set(FEATURES) | |
| set(ENABLES) | |
| if(CMAKE_SYSTEM_NAME MATCHES ".*BSD|DragonFly") | |
| set(LIBEDIT_LIBRARIES -ledit) | |
| if (CMAKE_SYSTEM_NAME STREQUAL OpenBSD) | |
| list(APPEND LIBEDIT_LIBRARIES -ltermcap) | |
| endif() | |
| else() | |
| find_feature(USE_EDITLINE "libedit") | |
| endif() | |
| if(BUILD_GL) | |
| find_package(OpenGL QUIET) | |
| if(NOT OPENGL_FOUND OR (APPLE AND MACOSX_SDK VERSION_GREATER 10.14)) | |
| set(BUILD_GL OFF CACHE BOOL "OpenGL not found" FORCE) | |
| elseif(UNIX AND NOT APPLE AND TARGET OpenGL::GL) | |
| set(OPENGL_LIBRARY OpenGL::GL) | |
| endif() | |
| if(OpenGL_GLX_FOUND) | |
| list(APPEND FEATURES GLX) | |
| endif() | |
| if(OpenGL_EGL_FOUND) | |
| list(APPEND FEATURES EGL) | |
| list(APPEND OPENGL_LIBRARY ${OPENGL_egl_LIBRARY}) | |
| endif() | |
| endif() | |
| if(BUILD_GL) | |
| list(APPEND FEATURE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/opengl/gl.c) | |
| list(APPEND FEATURE_DEFINES BUILD_GL) | |
| list(APPEND DEPENDENCY_LIB ${OPENGL_LIBRARY}) | |
| include_directories(${OPENGL_INCLUDE_DIR}) | |
| endif() | |
| if(NOT BUILD_GL AND NOT LIBMGBA_ONLY) | |
| set(OPENGL_LIBRARY "" CACHE PATH "" FORCE) | |
| endif() | |
| if(BUILD_GLES2 AND NOT BUILD_GL) | |
| if(APPLE AND MACOSX_SDK VERSION_GREATER 10.14) | |
| find_package(OpenGL QUIET) | |
| set(OPENGLES2_INCLUDE_DIR ${OPENGL_INCLUDE_DIR}) | |
| set(OPENGLES2_LIBRARY ${OPENGL_LIBRARY}) | |
| endif() | |
| find_path(OPENGLES2_INCLUDE_DIR NAMES GLES2/gl2.h) | |
| find_library(OPENGLES2_LIBRARY NAMES GLESv2 GLESv2_CM) | |
| if(NOT OPENGLES2_INCLUDE_DIR OR NOT OPENGLES2_LIBRARY) | |
| set(BUILD_GLES2 OFF CACHE BOOL "OpenGL|ES 2 not found" FORCE) | |
| endif() | |
| endif() | |
| if(BUILD_GLES2) | |
| list(APPEND FEATURE_DEFINES BUILD_GLES2) | |
| list(APPEND DEPENDENCY_LIB ${OPENGLES2_LIBRARY}) | |
| include_directories(${OPENGLES2_INCLUDE_DIR}) | |
| endif() | |
| if(BUILD_GLES3 AND NOT BUILD_GL) | |
| if(APPLE AND MACOSX_SDK VERSION_GREATER 10.14) | |
| find_package(OpenGL QUIET) | |
| set(OPENGLES3_INCLUDE_DIR ${OPENGL_INCLUDE_DIR}) | |
| set(OPENGLES3_LIBRARY ${OPENGL_LIBRARY}) | |
| endif() | |
| find_path(OPENGLES3_INCLUDE_DIR NAMES GLES3/gl3.h) | |
| find_library(OPENGLES3_LIBRARY NAMES GLESv3 GLESv2) | |
| if(NOT OPENGLES3_INCLUDE_DIR OR NOT OPENGLES3_LIBRARY) | |
| set(BUILD_GLES3 OFF CACHE BOOL "OpenGL|ES 3 not found" FORCE) | |
| endif() | |
| endif() | |
| if(BUILD_GLES3) | |
| list(APPEND FEATURE_DEFINES BUILD_GLES3) | |
| list(APPEND DEPENDENCY_LIB ${OPENGLES3_LIBRARY}) | |
| include_directories(${OPENGLES3_INCLUDE_DIR}) | |
| endif() | |
| if(BUILD_GLES2 OR BUILD_GLES3) | |
| list(APPEND FEATURE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/opengl/gles2.c) | |
| endif() | |
| if(NOT BUILD_GLES2 AND NOT BUILD_GLES3 AND NOT LIBMGBA_ONLY) | |
| set(OPENGLES2_LIBRARY "" CACHE PATH "" FORCE) | |
| endif() | |
| if(DISABLE_DEPS) | |
| set(USE_GDB_STUB OFF) | |
| set(USE_DISCORD_RPC OFF) | |
| set(USE_JSON_C OFF) | |
| set(USE_SQLITE3 OFF) | |
| set(USE_PNG OFF) | |
| set(USE_ZLIB OFF) | |
| endif() | |
| set(WANT_ZLIB ${USE_ZLIB}) | |
| set(WANT_PNG ${USE_PNG}) | |
| set(WANT_SQLITE3 ${USE_SQLITE3}) | |
| set(USE_CMOCKA ${BUILD_SUITE}) | |
| if(DEFINED VCPKG_TARGET_TRIPLET) | |
| find_feature(USE_FFMPEG "FFMPEG") | |
| if(FFMPEG_FOUND) | |
| set(LIBAVRESAMPLE_FOUND OFF) | |
| set(LIBSWRESAMPLE_FOUND ON) | |
| endif() | |
| else() | |
| find_feature(USE_FFMPEG "libavcodec;libavfilter;libavformat;libavutil;libswscale;libswresample|libavresample") | |
| endif() | |
| find_feature(USE_ZLIB "ZLIB") | |
| find_feature(USE_MINIZIP "minizip") | |
| find_feature(USE_PNG "PNG") | |
| find_feature(USE_LIBZIP "libzip") | |
| find_feature(USE_EPOXY "epoxy") | |
| find_feature(USE_CMOCKA "cmocka") | |
| find_feature(USE_SQLITE3 "SQLite3|sqlite3") | |
| find_feature(USE_ELF "libelf") | |
| find_feature(ENABLE_PYTHON "PythonLibs") | |
| # Features | |
| add_subdirectory(src/debugger) | |
| add_subdirectory(src/feature) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6") | |
| if(USE_EDITLINE) | |
| list(APPEND FEATURES EDITLINE) | |
| include_directories(AFTER ${LIBEDIT_INCLUDE_DIRS}) | |
| link_directories(${LIBEDIT_LIBRARY_DIRS}) | |
| if(BUILD_STATIC) | |
| set(DEBUGGER_LIB ${LIBEDIT_STATIC_LIBRARIES}) | |
| else() | |
| set(DEBUGGER_LIB ${LIBEDIT_LIBRARIES}) | |
| endif() | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libedit2") | |
| list(APPEND FEATURE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/feature/editline/cli-el-backend.c") | |
| else() | |
| set(DEBUGGER_LIB "") | |
| endif() | |
| if(USE_GDB_STUB) | |
| list(APPEND FEATURES GDB_STUB) | |
| list(APPEND FEATURE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/debugger/gdb-stub.c) | |
| endif() | |
| source_group("Debugger" FILES ${DEBUGGER_SRC}) | |
| if(USE_FFMPEG) | |
| list(APPEND FEATURES FFMPEG) | |
| if(LIBSWRESAMPLE_FOUND) | |
| list(APPEND FEATURES LIBSWRESAMPLE) | |
| else() | |
| list(APPEND FEATURES LIBAVRESAMPLE) | |
| list(APPEND FEATURES LIBAV) | |
| endif() | |
| include_directories(AFTER ${FFMPEG_INCLUDE_DIRS} ${LIBAVCODEC_INCLUDE_DIRS} ${LIBAVFILTER_INCLUDE_DIRS} ${LIBAVFORMAT_INCLUDE_DIRS} ${LIBAVRESAMPLE_INCLUDE_DIRS} ${LIBAVUTIL_INCLUDE_DIRS} ${LIBSWRESAMPLE_INCLUDE_DIRS} ${LIBSWSCALE_INCLUDE_DIRS}) | |
| link_directories(${FFMPEG_LIBRARY_DIRS} ${LIBAVCODEC_LIBRARY_DIRS} ${LIBAVFILTER_LIBRARY_DIRS} ${LIBAVFORMAT_LIBRARY_DIRS} ${LIBAVRESAMPLE_LIBRARY_DIRS} ${LIBAVUTIL_LIBRARY_DIRS} ${LIBSWRESAMPLE_LIBRARY_DIRS} ${LIBSWSCALE_LIBRARY_DIRS}) | |
| list(APPEND FEATURE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/feature/ffmpeg/ffmpeg-encoder.c" "${CMAKE_CURRENT_SOURCE_DIR}/src/feature/ffmpeg/ffmpeg-decoder.c" "${CMAKE_CURRENT_SOURCE_DIR}/src/feature/ffmpeg/ffmpeg-scale.c") | |
| list(APPEND DEPENDENCY_LIB ${FFMPEG_LIBRARIES} ${LIBAVCODEC_LIBRARIES} ${LIBAVFILTER_LIBRARIES} ${LIBAVFORMAT_LIBRARIES} ${LIBAVRESAMPLE_LIBRARIES} ${LIBAVUTIL_LIBRARIES} ${LIBSWSCALE_LIBRARIES} ${LIBSWRESAMPLE_LIBRARIES}) | |
| if(WIN32 AND NOT DEFINED VCPKG_TARGET_TRIPLET) | |
| list(APPEND DEPENDENCY_LIB bcrypt) | |
| endif() | |
| if(UNIX) | |
| string(REGEX MATCH "^[0-9]+" LIBAVCODEC_VERSION_MAJOR ${libavcodec_VERSION}) | |
| string(REGEX MATCH "^[0-9]+" LIBAVFILTER_VERSION_MAJOR ${libavfilter_VERSION}) | |
| string(REGEX MATCH "^[0-9]+" LIBAVFORMAT_VERSION_MAJOR ${libavformat_VERSION}) | |
| string(REGEX MATCH "^[0-9]+" LIBAVUTIL_VERSION_MAJOR ${libavutil_VERSION}) | |
| string(REGEX MATCH "^[0-9]+" LIBSWSCALE_VERSION_MAJOR ${libswscale_VERSION}) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libavcodec${LIBAVCODEC_VERSION_MAJOR}|libavcodec-extra-${LIBAVCODEC_VERSION_MAJOR}|libavcodec-ffmpeg${LIBAVCODEC_VERSION_MAJOR}|libavcodec-ffmpeg-extra${LIBAVCODEC_VERSION_MAJOR}") | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libavfilter${LIBAVFILTER_VERSION_MAJOR}|libavfilter-ffmpeg${LIBAVFILTER_VERSION_MAJOR}") | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libavformat${LIBAVFORMAT_VERSION_MAJOR}|libavformat-ffmpeg${LIBAVFORMAT_VERSION_MAJOR}") | |
| if(LIBSWRESAMPLE_FOUND) | |
| string(REGEX MATCH "^[0-9]+" LIBSWRESAMPLE_VERSION_MAJOR ${libswresample_VERSION}) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libswresample${LIBSWRESAMPLE_VERSION_MAJOR}|libswresample-ffmpeg${LIBSWRESAMPLE_VERSION_MAJOR}") | |
| else() | |
| string(REGEX MATCH "^[0-9]+" LIBAVRESAMPLE_VERSION_MAJOR ${libavresample_VERSION}) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libavresample${LIBAVRESAMPLE_VERSION_MAJOR}|libavresample-ffmpeg${LIBAVRESAMPLE_VERSION_MAJOR}") | |
| endif() | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libavutil${LIBAVUTIL_VERSION_MAJOR}|libavutil-ffmpeg${LIBAVUTIL_VERSION_MAJOR}") | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libswscale${LIBSWSCALE_VERSION_MAJOR}|libswscale-ffmpeg${LIBSWSCALE_VERSION_MAJOR}") | |
| set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "libavcodec-extra|libavcodec-ffmpeg-extra${LIBAVCODEC_VERSION_MAJOR}") | |
| endif() | |
| if(APPLE) | |
| list(APPEND DEPENDENCY_LIB "-framework VideoDecodeAcceleration" "-framework CoreVideo") | |
| endif() | |
| endif() | |
| list(APPEND THIRD_PARTY_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/blip_buf/blip_buf.c") | |
| if(WANT_ZLIB AND NOT USE_ZLIB) | |
| set(SKIP_INSTALL_ALL ON) | |
| add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib zlib EXCLUDE_FROM_ALL) | |
| set_target_properties(zlibstatic PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/zlib;${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib" POSITION_INDEPENDENT_CODE ON) | |
| set(ZLIB_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib ${CMAKE_CURRENT_BINARY_DIR}/zlib) | |
| set(ZLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib ${CMAKE_CURRENT_BINARY_DIR}/zlib) | |
| set(ZLIB_LIBRARY zlibstatic) | |
| list(APPEND DEPENDENCY_LIB zlibstatic) | |
| set(USE_ZLIB ON) | |
| endif() | |
| if(USE_ZLIB) | |
| list(APPEND FEATURES ZLIB) | |
| include_directories(AFTER ${ZLIB_INCLUDE_DIRS}) | |
| list(APPEND DEPENDENCY_LIB ${ZLIB_LIBRARIES}) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},zlib1g") | |
| set(HAVE_CRC32 ON) | |
| list(APPEND OS_LIB ${ZLIB_LIBRARIES}) | |
| else() | |
| # zlib pulls in crc32 | |
| check_function_exists(crc32 HAVE_CRC32) | |
| endif() | |
| if(HAVE_CRC32) | |
| list(APPEND FUNCTION_DEFINES HAVE_CRC32) | |
| endif() | |
| if(WANT_PNG AND USE_ZLIB AND NOT USE_PNG) | |
| set(PNG_STATIC ON CACHE BOOL "" FORCE) | |
| set(PNG_SHARED OFF CACHE BOOL "" FORCE) | |
| set(PNG_TESTS OFF CACHE BOOL "" FORCE) | |
| set(SKIP_INSTALL_ALL ON) | |
| if (SWITCH) | |
| set(PNG_ARM_NEON "off" CACHE STRING "" FORCE) | |
| endif() | |
| add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/libpng libpng EXCLUDE_FROM_ALL) | |
| set_target_properties(png_static PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/libpng;${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/libpng;${ZLIB_INCLUDE_DIRS}" POSITION_INDEPENDENT_CODE ON) | |
| set(PNG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/libpng ${CMAKE_CURRENT_BINARY_DIR}/libpng) | |
| list(APPEND DEPENDENCY_LIB png_static) | |
| set(USE_PNG ON) | |
| endif() | |
| if(USE_PNG) | |
| list(APPEND FEATURES PNG) | |
| include_directories(AFTER ${PNG_INCLUDE_DIRS}) | |
| list(APPEND DEPENDENCY_LIB ${PNG_LIBRARIES} ${ZLIB_LIBRARIES}) | |
| if(PNG_VERSION_STRING) | |
| string(REGEX MATCH "^[0-9]+\\.[0-9]+" PNG_VERSION_PARTIAL ${PNG_VERSION_STRING}) | |
| if(${PNG_VERSION_PARTIAL} STREQUAL "1.6") | |
| set(PNG_DEB_VERSION "16-16") | |
| else() | |
| set(PNG_DEB_VERSION "12-0") | |
| endif() | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libpng${PNG_DEB_VERSION}") | |
| endif() | |
| endif() | |
| if(WANT_SQLITE3 AND NOT USE_SQLITE3) | |
| list(APPEND FEATURE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/sqlite3/sqlite3.c) | |
| include_directories(AFTER ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/sqlite3/) | |
| set(USE_SQLITE3 ON) | |
| endif() | |
| if(USE_LIBZIP) | |
| if(TARGET libzip::zip) | |
| set(ZIP_LIBRARIES libzip::zip) | |
| elseif(TARGET zip) | |
| set(ZIP_LIBRARIES zip) | |
| else() | |
| include_directories(AFTER ${LIBZIP_INCLUDE_DIRS}) | |
| link_directories(${LIBZIP_LIBRARY_DIRS}) | |
| set(ZIP_LIBRARIES ${LIBZIP_LIBRARIES}) | |
| endif() | |
| list(APPEND DEPENDENCY_LIB ${ZIP_LIBRARIES}) | |
| list(APPEND FEATURES LIBZIP) | |
| list(APPEND VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-zip.c) | |
| string(REGEX MATCH "^[0-9]+" LIBZIP_VERSION_MAJOR "${libzip_VERSION}") | |
| if (LIBZIP_VERSION_MAJOR LESS 1) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libzip2") | |
| elseif(LIBZIP_VERSION_MAJOR EQUAL 1 OR NOT LIBZIP_VERSION_MAJOR) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libzip4|libzip5") | |
| else() | |
| message(AUTHOR_WARNING "Unknown version of libzip detected: ${libzip_VERSION}") | |
| endif() | |
| elseif(USE_MINIZIP) | |
| include_directories(AFTER ${MINIZIP_INCLUDE_DIRS}) | |
| link_directories(${MINIZIP_LIBRARY_DIRS}) | |
| set(ZIP_LIBRARIES ${MINIZIP_LIBRARIES}) | |
| list(APPEND DEPENDENCY_LIB ${MINIZIP_LIBRARIES}) | |
| list(APPEND FEATURES MINIZIP) | |
| list(APPEND VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-zip.c) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libminizip1") | |
| set(CMAKE_REQUIRED_LIBRARIES ${MINIZIP_LIBRARIES}) | |
| check_function_exists(unztell64 HAVE_UNZTELL64) | |
| unset(CMAKE_REQUIRED_LIBRARIES) | |
| if(NOT HAVE_UNZTELL64) | |
| add_definitions(-Dunztell64=unzTell64) # Bug in downstream minizip that some distros use | |
| endif() | |
| elseif(USE_ZLIB) | |
| list(APPEND FEATURES MINIZIP) | |
| list(APPEND VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-zip.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib/contrib/minizip/ioapi.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib/contrib/minizip/unzip.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib/contrib/minizip/zip.c) | |
| include_directories(AFTER ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib/contrib) | |
| if(NOT MSVC) | |
| set_source_files_properties( | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib/contrib/minizip/ioapi.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib/contrib/minizip/unzip.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/zlib/contrib/minizip/zip.c | |
| PROPERTIES COMPILE_FLAGS "-Wno-unused-parameter -Wno-implicit-function-declaration") | |
| endif() | |
| endif() | |
| if (USE_LZMA) | |
| include_directories(AFTER ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma) | |
| add_definitions(-D_7ZIP_PPMD_SUPPPORT) | |
| list(APPEND VFS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/util/vfs/vfs-lzma.c) | |
| set(LZMA_SRC | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/7zAlloc.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/7zArcIn.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/7zBuf.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/7zBuf2.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/7zCrc.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/7zCrcOpt.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/7zDec.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/CpuArch.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/Delta.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/LzmaDec.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/Lzma2Dec.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/Bra.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/Bra86.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/BraIA64.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/Bcj2.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/Ppmd7.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/Ppmd7Dec.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/7zFile.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/lzma/7zStream.c) | |
| list(APPEND VFS_SRC ${LZMA_SRC}) | |
| list(APPEND FEATURES LZMA) | |
| endif() | |
| if(USE_EPOXY) | |
| if(NOT APPLE OR NOT MACOSX_SDK VERSION_GREATER 10.14) | |
| list(APPEND FEATURE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/opengl/gl.c) | |
| list(APPEND FEATURE_DEFINES BUILD_GL) | |
| endif() | |
| list(APPEND FEATURE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/opengl/gles2.c) | |
| list(APPEND FEATURE_DEFINES BUILD_GLES2 BUILD_GLES3) | |
| list(APPEND FEATURES EPOXY) | |
| include_directories(AFTER ${EPOXY_INCLUDE_DIRS}) | |
| link_directories(${EPOXY_LIBRARY_DIRS}) | |
| set(OPENGLES2_LIBRARY ${EPOXY_LIBRARIES}) | |
| list(APPEND DEPENDENCY_LIB ${EPOXY_LIBRARIES}) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libepoxy0") | |
| elseif(BUILD_GL) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libgl1|libgles2") | |
| elseif(BUILD_GLES2) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libgles2") | |
| endif() | |
| if(WIN32 AND NOT (LIBMGBA_ONLY OR SKIP_LIBRARY OR USE_EPOXY)) | |
| message(FATAL_ERROR "Windows requires epoxy module!") | |
| endif() | |
| if(USE_SQLITE3) | |
| list(APPEND FEATURES SQLITE3) | |
| include_directories(AFTER ${SQLITE3_INCLUDE_DIRS}) | |
| link_directories(${SQLITE3_LIBRARY_DIRS}) | |
| list(APPEND DEPENDENCY_LIB ${SQLITE3_LIBRARIES}) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libsqlite3-0") | |
| list(APPEND FEATURE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/feature/sqlite3/no-intro.c") | |
| endif() | |
| if(USE_ELF) | |
| list(APPEND FEATURES ELF) | |
| include_directories(AFTER ${LIBELF_INCLUDE_DIRS}) | |
| link_directories(${LIBELF_LIBRARY_DIRS}) | |
| list(APPEND DEPENDENCY_LIB ${LIBELF_LIBRARIES}) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libelf1") | |
| endif() | |
| if (USE_DISCORD_RPC) | |
| add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/discord-rpc discord-rpc EXCLUDE_FROM_ALL) | |
| list(APPEND FEATURES DISCORD_RPC) | |
| include_directories(AFTER ${CMAKE_CURRENT_SOURCE_DIR}/src/third-party/discord-rpc/include) | |
| endif() | |
| if(ENABLE_SCRIPTING) | |
| list(APPEND ENABLES SCRIPTING) | |
| find_feature(USE_JSON_C "json-c") | |
| if(NOT USE_LUA VERSION_LESS 5.1) | |
| find_feature(USE_LUA "Lua" ${USE_LUA}) | |
| else() | |
| find_feature(USE_LUA "Lua") | |
| endif() | |
| if(USE_JSON_C) | |
| list(APPEND FEATURES JSON_C) | |
| if(TARGET json-c::json-c) | |
| list(APPEND DEPENDENCY_LIB json-c::json-c) | |
| get_target_property(JSON_C_SONAME json-c::json-c IMPORTED_SONAME_NONE) | |
| string(SUBSTRING "${JSON_C_SONAME}" 13 -1 JSON_C_SOVER) | |
| # This is only needed on 0.15, but the target unhelpfully does not contain version info | |
| get_target_property(JSON_C_INCLUDE_DIR json-c::json-c INTERFACE_INCLUDE_DIRECTORIES) | |
| if(NOT JSON_C_INCLUDE_DIR MATCHES json-c$) | |
| include_directories(AFTER "${JSON_C_INCLUDE_DIR}/json-c") | |
| endif() | |
| else() | |
| if(${json-c_VERSION} VERSION_LESS 0.13.0) | |
| set(JSON_C_SOVER 3) | |
| elseif(${json-c_VERSION} VERSION_LESS 0.15.0) | |
| set(JSON_C_SOVER 4) | |
| endif() | |
| list(APPEND DEPENDENCY_LIB ${json-c_LIBRARIES}) | |
| include_directories(AFTER ${json-c_INCLUDE_DIRS}) | |
| link_directories(${json-c_LIBDIRS}) | |
| endif() | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libjson-c${JSON_C_SOVER}") | |
| endif() | |
| if(USE_LUA) | |
| list(APPEND FEATURE_DEFINES USE_LUA) | |
| include_directories(AFTER ${LUA_INCLUDE_DIR}) | |
| list(APPEND FEATURE_DEFINES LUA_VERSION_ONLY=\"${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}\") | |
| list(APPEND DEPENDENCY_LIB ${LUA_LIBRARY}) | |
| set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},liblua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}-0") | |
| endif() | |
| if(BUILD_PYTHON) | |
| find_package(PythonLibs ${USE_PYTHON_VERSION}) | |
| list(APPEND DEPENDENCY_LIB ${PYTHON_LIBRARIES}) | |
| include_directories(AFTER ${PYTHON_INCLUDE_DIRS}) | |
| list(APPEND ENABLES PYTHON) | |
| endif() | |
| add_subdirectory(src/script) | |
| endif() | |
| add_subdirectory(src/arm) | |
| add_subdirectory(src/core) | |
| add_subdirectory(src/gb) | |
| add_subdirectory(src/gba) | |
| add_subdirectory(src/sm83) | |
| add_subdirectory(src/util) | |
| list(APPEND GUI_SRC ${EXTRA_GUI_SRC}) | |
| list(APPEND UTIL_BASE_SRC ${CMAKE_CURRENT_BINARY_DIR}/version.c) | |
| list(APPEND UTIL_SRC ${CMAKE_CURRENT_BINARY_DIR}/version.c) | |
| set(TEST_SRC ${CORE_TEST_SRC}) | |
| if(M_CORE_GB) | |
| add_definitions(-DM_CORE_GB) | |
| list(APPEND CORE_SRC ${SM83_SRC} ${GB_SRC}) | |
| list(APPEND DEBUGGER_SRC ${SM83_DEBUGGER_SRC} ${GB_DEBUGGER_SRC}) | |
| list(APPEND TEST_SRC ${SM83_TEST_SRC} ${GB_TEST_SRC}) | |
| endif() | |
| if(M_CORE_GBA) | |
| add_definitions(-DM_CORE_GBA) | |
| list(APPEND CORE_SRC ${ARM_SRC} ${GBA_SRC}) | |
| list(APPEND DEBUGGER_SRC ${ARM_DEBUGGER_SRC} ${GBA_DEBUGGER_SRC}) | |
| list(APPEND TEST_SRC ${ARM_TEST_SRC} ${GBA_TEST_SRC}) | |
| endif() | |
| if(USE_DEBUGGERS) | |
| list(APPEND FEATURE_SRC ${DEBUGGER_SRC}) | |
| list(APPEND TEST_SRC ${DEBUGGER_TEST_SRC}) | |
| list(APPEND FEATURES DEBUGGERS) | |
| endif() | |
| if(ENABLE_SCRIPTING) | |
| list(APPEND FEATURE_SRC ${SCRIPT_SRC}) | |
| list(APPEND TEST_SRC ${SCRIPT_TEST_SRC}) | |
| endif() | |
| foreach(FEATURE IN LISTS FEATURES) | |
| list(APPEND FEATURE_DEFINES "USE_${FEATURE}") | |
| endforeach() | |
| foreach(ENABLE IN LISTS ENABLES) | |
| list(APPEND FEATURE_DEFINES "ENABLE_${ENABLE}") | |
| endforeach() | |
| source_group("Virtual files" FILES ${CORE_VFS_SRC} ${VFS_SRC}) | |
| source_group("Extra features" FILES ${FEATURE_SRC}) | |
| source_group("Third-party code" FILES ${THIRD_PARTY_SRC}) | |
| # Platform binaries | |
| set(OS_DEFINES) | |
| if(DEFINED 3DS) | |
| add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/3ds ${CMAKE_CURRENT_BINARY_DIR}/3ds) | |
| endif() | |
| if(DEFINED WII) | |
| add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/wii ${CMAKE_CURRENT_BINARY_DIR}/wii) | |
| endif() | |
| if(DEFINED PSP2) | |
| add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/psp2 ${CMAKE_CURRENT_BINARY_DIR}/psp2) | |
| endif() | |
| if(DEFINED SWITCH) | |
| add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/switch ${CMAKE_CURRENT_BINARY_DIR}/switch) | |
| endif() | |
| # Binaries | |
| list(APPEND CORE_SRC | |
| ${UTIL_SRC} | |
| ${CORE_VFS_SRC} | |
| ${OS_SRC} | |
| ${THIRD_PARTY_SRC}) | |
| list(APPEND TEST_SRC ${UTIL_TEST_SRC}) | |
| set(SRC ${CORE_SRC} ${VFS_SRC}) | |
| if(NOT MINIMAL_CORE) | |
| set(ENABLE_EXTRA ON) | |
| if(M_CORE_GBA) | |
| list(APPEND SRC ${GBA_SIO_SRC}) | |
| endif() | |
| if(M_CORE_GB) | |
| list(APPEND SRC ${GB_SIO_SRC}) | |
| endif() | |
| list(APPEND SRC ${FEATURE_SRC}) | |
| endif() | |
| if(ENABLE_EXTRA) | |
| if(M_CORE_GBA) | |
| list(APPEND SRC ${GBA_EXTRA_SRC}) | |
| endif() | |
| if(M_CORE_GB) | |
| list(APPEND SRC ${GB_EXTRA_SRC}) | |
| endif() | |
| list(APPEND SRC ${EXTRA_SRC}) | |
| endif() | |
| if(ENABLE_SCRIPTING) | |
| list(APPEND SRC ${CORE_SCRIPT_SRC}) | |
| endif() | |
| if(NOT SKIP_LIBRARY) | |
| if(NOT BUILD_STATIC AND NOT BUILD_SHARED) | |
| set(BUILD_SHARED ON) | |
| endif() | |
| if(BUILD_SHARED) | |
| add_library(${BINARY_NAME} SHARED ${SRC} ${VFS_SRC}) | |
| set(EXPORT_DEFINES MGBA_DLL) | |
| if(BUILD_STATIC) | |
| add_library(${BINARY_NAME}-static STATIC ${SRC}) | |
| target_include_directories(${BINARY_NAME}-static BEFORE PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}/include) | |
| set_target_properties(${BINARY_NAME}-static PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES};BUILD_STATIC" COMPILE_OPTIONS "${FEATURE_FLAGS}") | |
| install(TARGETS ${BINARY_NAME}-static DESTINATION ${LIBDIR} COMPONENT lib${BINARY_NAME}) | |
| add_dependencies(${BINARY_NAME}-static ${BINARY_NAME}-version-info) | |
| endif() | |
| else() | |
| add_library(${BINARY_NAME} STATIC ${SRC}) | |
| list(APPEND OS_DEFINES BUILD_STATIC) | |
| endif() | |
| target_include_directories(${BINARY_NAME} BEFORE PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}/include) | |
| set_target_properties(${BINARY_NAME} PROPERTIES VERSION ${LIB_VERSION_STRING} SOVERSION ${LIB_VERSION_ABI} COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES};${EXPORT_DEFINES}" COMPILE_OPTIONS "${FEATURE_FLAGS}") | |
| add_dependencies(${BINARY_NAME} ${BINARY_NAME}-version-info) | |
| file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/mgba-util) | |
| target_link_libraries(${BINARY_NAME} ${DEBUGGER_LIB} ${DEPENDENCY_LIB} ${OS_LIB}) | |
| install(TARGETS ${BINARY_NAME} LIBRARY DESTINATION ${LIBDIR} COMPONENT lib${BINARY_NAME} NAMELINK_SKIP ARCHIVE DESTINATION ${LIBDIR} RUNTIME DESTINATION ${LIBDIR} COMPONENT lib${BINARY_NAME}) | |
| if(BUILD_SHARED) | |
| install(TARGETS ${BINARY_NAME} LIBRARY DESTINATION ${LIBDIR} COMPONENT ${BINARY_NAME}-dev NAMELINK_ONLY) | |
| endif() | |
| if(UNIX AND NOT APPLE AND NOT HAIKU) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/mgba-16.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/16x16/apps RENAME io.mgba.${PROJECT_NAME}.png COMPONENT ${BINARY_NAME}) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/mgba-24.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/24x24/apps RENAME io.mgba.${PROJECT_NAME}.png COMPONENT ${BINARY_NAME}) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/mgba-32.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/32x32/apps RENAME io.mgba.${PROJECT_NAME}.png COMPONENT ${BINARY_NAME}) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/mgba-48.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/48x48/apps RENAME io.mgba.${PROJECT_NAME}.png COMPONENT ${BINARY_NAME}) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/mgba-64.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/64x64/apps RENAME io.mgba.${PROJECT_NAME}.png COMPONENT ${BINARY_NAME}) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/mgba-96.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/96x96/apps RENAME io.mgba.${PROJECT_NAME}.png COMPONENT ${BINARY_NAME}) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/mgba-128.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/128x128/apps RENAME io.mgba.${PROJECT_NAME}.png COMPONENT ${BINARY_NAME}) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/mgba-256.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/256x256/apps RENAME io.mgba.${PROJECT_NAME}.png COMPONENT ${BINARY_NAME}) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/mgba-512.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/512x512/apps RENAME io.mgba.${PROJECT_NAME}.png COMPONENT ${BINARY_NAME}) | |
| endif() | |
| else() | |
| set(BUILD_SHARED OFF) | |
| set(BUILD_STATIC OFF) | |
| find_library(${BINARY_NAME} ${BINARY_NAME}) | |
| if(NOT ${BINARY_NAME}_FOUND) | |
| set(DISABLE_FRONTENDS ON) | |
| set(BUILD_PERF OFF) | |
| set(BUILD_TEST OFF) | |
| set(BUILD_SUITE OFF) | |
| endif() | |
| endif() | |
| if(DISABLE_FRONTENDS) | |
| set(BUILD_SDL OFF) | |
| set(BUILD_QT OFF) | |
| endif() | |
| if(BUILD_PYTHON) | |
| enable_testing() | |
| add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/python ${CMAKE_CURRENT_BINARY_DIR}/python) | |
| endif() | |
| if(BUILD_LIBRETRO) | |
| file(GLOB RETRO_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/libretro/*.c) | |
| add_library(${BINARY_NAME}_libretro SHARED ${CORE_SRC} ${RETRO_SRC}) | |
| add_dependencies(${BINARY_NAME}_libretro ${BINARY_NAME}-version-info) | |
| set_target_properties(${BINARY_NAME}_libretro PROPERTIES PREFIX "" COMPILE_DEFINITIONS "__LIBRETRO__;COLOR_16_BIT;COLOR_5_6_5;DISABLE_THREADING;MGBA_STANDALONE;${OS_DEFINES};${FUNCTION_DEFINES};MINIMAL_CORE=2") | |
| target_link_libraries(${BINARY_NAME}_libretro ${OS_LIB}) | |
| if(MSVC) | |
| install(TARGETS ${BINARY_NAME}_libretro RUNTIME DESTINATION ${LIBRETRO_LIBDIR} COMPONENT ${BINARY_NAME}_libretro) | |
| else() | |
| install(TARGETS ${BINARY_NAME}_libretro LIBRARY DESTINATION ${LIBRETRO_LIBDIR} COMPONENT ${BINARY_NAME}_libretro NAMELINK_SKIP) | |
| endif() | |
| endif() | |
| if(BUILD_OPENEMU) | |
| find_library(FOUNDATION Foundation) | |
| find_library(OPENEMUBASE OpenEmuBase) | |
| file(GLOB OE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/openemu/*.m) | |
| add_library(${BINARY_NAME}-openemu MODULE ${CORE_SRC} ${OS_SRC}) | |
| set_target_properties(${BINARY_NAME}-openemu PROPERTIES | |
| MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/openemu/Info.plist.in | |
| BUNDLE TRUE | |
| BUNDLE_EXTENSION oecoreplugin | |
| OUTPUT_NAME ${PROJECT_NAME} | |
| COMPILE_OPTIONS "-fobjc-arc" | |
| COMPILE_DEFINITIONS "DISABLE_THREADING;MGBA_STANDALONE;${OS_DEFINES};${FUNCTION_DEFINES};MINIMAL_CORE=1") | |
| target_link_libraries(${BINARY_NAME}-openemu ${OS_LIB} ${FOUNDATION} ${OPENEMUBASE}) | |
| install(TARGETS ${BINARY_NAME}-openemu LIBRARY DESTINATION ${OE_LIBDIR} COMPONENT ${BINARY_NAME}.oecoreplugin NAMELINK_SKIP) | |
| endif() | |
| if(BUILD_QT AND (WIN32 OR APPLE OR CMAKE_SYSTEM_NAME STREQUAL "Linux")) | |
| set(BUILD_UPDATER ON) | |
| endif() | |
| if(BUILD_UPDATER) | |
| add_executable(updater-stub WIN32 ${CORE_VFS_SRC} ${VFS_SRC} ${OS_SRC} ${UTIL_BASE_SRC} ${THIRD_PARTY_SRC} | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/core/config.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/feature/updater.c | |
| ${CMAKE_CURRENT_SOURCE_DIR}/src/feature/updater-main.c) | |
| target_link_libraries(updater-stub ${ZLIB_LIBRARY} ${ZLIB_LIBRARY} ${ZIP_LIBRARIES} ${OS_LIB} ${PLATFORM_LIBRARY}) | |
| set_target_properties(updater-stub PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FUNCTION_DEFINES};${FEATURE_DEFINES};BUILD_STATIC") | |
| if(MSVC) | |
| set_target_properties(updater-stub PROPERTIES LINK_FLAGS /ENTRY:mainCRTStartup) | |
| else() | |
| set_target_properties(updater-stub PROPERTIES LINK_FLAGS_RELEASE -s) | |
| set_target_properties(updater-stub PROPERTIES LINK_FLAGS_RELWITHDEBINFO -s) | |
| endif() | |
| endif() | |
| if(ENABLE_SCRIPTING AND BUILD_DOCGEN) | |
| add_executable(docgen ${CMAKE_CURRENT_SOURCE_DIR}/src/script/docgen.c) | |
| target_link_libraries(docgen ${OS_LIB} ${PLATFORM_LIBRARY} ${BINARY_NAME}) | |
| endif() | |
| if(BUILD_SDL) | |
| add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/sdl ${CMAKE_CURRENT_BINARY_DIR}/sdl) | |
| endif() | |
| if(BUILD_QT) | |
| add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/qt ${CMAKE_CURRENT_BINARY_DIR}/qt) | |
| endif() | |
| if(NOT USE_CMOCKA) | |
| set(BUILD_SUITE OFF) | |
| endif() | |
| if(BUILD_TEST OR BUILD_SUITE OR BUILD_CINEMA) | |
| enable_testing() | |
| endif() | |
| add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/test ${CMAKE_CURRENT_BINARY_DIR}/test) | |
| if(BUILD_EXAMPLE) | |
| add_executable(${BINARY_NAME}-example-server ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/example/client-server/server.c) | |
| target_link_libraries(${BINARY_NAME}-example-server ${BINARY_NAME}) | |
| set_target_properties(${BINARY_NAME}-example-server PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}") | |
| if(SDL_FOUND) | |
| add_executable(${BINARY_NAME}-example-client ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/example/client-server/client.c) | |
| target_link_libraries(${BINARY_NAME}-example-client ${BINARY_NAME} ${SDL_LIBRARY} ${SDLMAIN_LIBRARY} ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY}) | |
| set_target_properties(${BINARY_NAME}-example-client PROPERTIES | |
| COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}" | |
| INCLUDE_DIRECTORIES "${SDL_INCLUDE_DIR};${CMAKE_CURRENT_SOURCE_DIR}/src;${CMAKE_CURRENT_SOURCE_DIR}/include") | |
| endif() | |
| endif() | |
| file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/mgba) | |
| configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/core/flags.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/mgba/flags.h) | |
| install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/mgba DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT ${BINARY_NAME}-dev FILES_MATCHING PATTERN "*.h") | |
| install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/mgba-util DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT ${BINARY_NAME}-dev FILES_MATCHING PATTERN "*.h") | |
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/mgba/flags.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/mgba COMPONENT ${BINARY_NAME}-dev) | |
| # Packaging | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/licenses/blip_buf.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses COMPONENT ${BINARY_NAME}) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/licenses/inih.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses COMPONENT ${BINARY_NAME}) | |
| if(USE_DISCORD_RPC) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/licenses/discord-rpc.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses COMPONENT ${BINARY_NAME}) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/licenses/rapidjson.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses COMPONENT ${BINARY_NAME}) | |
| if(WIN32) | |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/res/licenses/mingw-std-threads.txt DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses COMPONENT ${BINARY_NAME}) | |
| endif() | |
| endif() | |
| if(EXTRA_LICENSES) | |
| install(FILES ${EXTRA_LICENSES} DESTINATION ${CMAKE_INSTALL_DOCDIR}/licenses COMPONENT ${BINARY_NAME}) | |
| endif() | |
| file(GLOB READMES ${CMAKE_CURRENT_SOURCE_DIR}/README*.md) | |
| find_program(UNIX2DOS NAMES unix2dos) | |
| find_program(MARKDOWN NAMES markdown kramdown pandoc) | |
| if(UNIX OR NOT UNIX2DOS) | |
| if(UNIX OR NOT MARKDOWN) | |
| install(FILES ${READMES} DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT ${BINARY_NAME}) | |
| endif() | |
| install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/CHANGES" "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT ${BINARY_NAME}) | |
| else() | |
| add_custom_command(OUTPUT CHANGES.txt COMMAND ${UNIX2DOS} -n "${CMAKE_CURRENT_SOURCE_DIR}/CHANGES" "${CMAKE_CURRENT_BINARY_DIR}/CHANGES.txt" MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/CHANGES") | |
| add_custom_command(OUTPUT LICENSE.txt COMMAND ${UNIX2DOS} -n "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt" MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") | |
| add_custom_target(CHANGES ALL DEPENDS CHANGES.txt) | |
| add_custom_target(LICENSE ALL DEPENDS LICENSE.txt) | |
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CHANGES.txt ${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT ${BINARY_NAME}) | |
| if(DISTBUILD AND WIN32) | |
| set(BIN_DIR ".\\") | |
| string(REGEX REPLACE "[^-A-Za-z0-9_.]" "-" CLEAN_VERSION_STRING "${VERSION_STRING}") | |
| file(RELATIVE_PATH SETUP_DIR_SLASH "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/src/platform/windows/setup") | |
| file(RELATIVE_PATH RES_DIR_SLASH "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/res") | |
| string(REPLACE "/" "\\" SETUP_DIR "${SETUP_DIR_SLASH}") | |
| string(REPLACE "/" "\\" RES_DIR "${RES_DIR_SLASH}") | |
| if(CMAKE_SYSTEM_PROCESSOR MATCHES ".*64$") | |
| set(WIN_BITS 64) | |
| else() | |
| set(WIN_BITS 32) | |
| endif() | |
| if(GIT_TAG) | |
| set(IS_RELEASE 1) | |
| else() | |
| set(IS_RELEASE 0) | |
| endif() | |
| configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/platform/windows/setup/setup.iss.in" setup.iss) | |
| set_source_files_properties(setup.iss PROPERTIES GENERATED ON) | |
| if(INSTALLER_NAME) | |
| set(INSTALLER_TARGET "${INSTALLER_NAME}.exe") | |
| set(ISCC_FLAGS "/F${INSTALLER_NAME}") | |
| else() | |
| set(INSTALLER_TARGET "${PROJECT_NAME}-setup-${CLEAN_VERSION_STRING}-win${WIN_BITS}.exe") | |
| endif() | |
| if(CMAKE_CROSSCOMPILING) | |
| find_program(WINE NAMES wine wine-stable wine-development) | |
| find_file(ISCC ISCC.exe HINTS "$ENV{HOME}/.wine/drive_c/Program Files/" PATH_SUFFIXES "Inno Setup 5") | |
| add_custom_command(OUTPUT ${INSTALLER_TARGET} | |
| COMMAND "${WINE}" "${ISCC}" setup.iss /Q ${ISCC_FLAGS} | |
| DEPENDS ${BINARY_NAME}-qt ${BINARY_NAME}-sdl setup.iss CHANGES LICENSE) | |
| else() | |
| find_program(ISCC NAMES ISCC ISCC.exe PATH_SUFFIXES "Inno Setup 5") | |
| add_custom_command(OUTPUT ${INSTALLER_TARGET} | |
| COMMAND "${ISCC}" setup.iss /Q ${ISCC_FLAGS} | |
| DEPENDS ${BINARY_NAME}-qt ${BINARY_NAME}-sdl setup.iss CHANGES LICENSE) | |
| endif() | |
| if(ISCC) | |
| add_custom_target(installer ALL DEPENDS ${INSTALLER_TARGET}) | |
| install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${INSTALLER_TARGET}" DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT installer) | |
| endif() | |
| endif() | |
| endif() | |
| if(MARKDOWN) | |
| foreach(README ${READMES}) | |
| get_filename_component(README_BASE "${README}" NAME_WE) | |
| add_custom_command(OUTPUT ${README_BASE}.html COMMAND ${MARKDOWN} "${README}" > ${README_BASE}.html MAIN_DEPENDENCY "${README}") | |
| add_custom_target(${README_BASE} ALL DEPENDS ${README_BASE}.html) | |
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${README_BASE}.html DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT ${BINARY_NAME}) | |
| endforeach() | |
| endif() | |
| set(CPACK_PACKAGE_VERSION ${VERSION_STRING}) | |
| set(CPACK_PACKAGE_VERSION_MAJOR ${LIB_VERSION_MAJOR}) | |
| set(CPACK_PACKAGE_VERSION_MINOR ${LIB_VERSION_MINOR}) | |
| set(CPACK_PACKAGE_VERSION_PATCH ${LIB_VERSION_PATCH}) | |
| set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE) | |
| set(CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/README.md) | |
| set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "mGBA Game Boy Advance Emulator") | |
| set(CPACK_PACKAGE_VENDOR "Vicki Pfau") | |
| set(CPACK_PACKAGE_CONTACT "Vicki Pfau <vi@endrift.com>") | |
| set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md") | |
| set(CPACK_DEBIAN_PACKAGE_SECTION "games") | |
| set(CPACK_DEB_COMPONENT_INSTALL ON) | |
| if(CMAKE_BUILD_TYPE STREQUAL "Release") | |
| set(CPACK_STRIP_FILES ON) | |
| endif() | |
| if(DISTBUILD) | |
| set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) | |
| set(CPACK_DMG_FILESYSTEM "HFS+") | |
| set(CPACK_DMG_FORMAT "UDBZ") | |
| set(CPACK_DMG_VOLUME_NAME "${PROJECT_NAME} ${VERSION_STRING}") | |
| if(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" AND BUILD_SHARED) | |
| if(NOT APPLE) | |
| add_custom_command(TARGET ${BINARY_NAME} POST_BUILD COMMAND "${OBJCOPY}" --only-keep-debug "$<TARGET_FILE:${BINARY_NAME}>" "$<TARGET_FILE:${BINARY_NAME}>.debug") | |
| add_custom_command(TARGET ${BINARY_NAME} POST_BUILD COMMAND "${STRIP}" "$<TARGET_FILE:${BINARY_NAME}>") | |
| add_custom_command(TARGET ${BINARY_NAME} POST_BUILD COMMAND "${OBJCOPY}" --add-gnu-debuglink "$<TARGET_FILE:${BINARY_NAME}>.debug" "$<TARGET_FILE:${BINARY_NAME}>") | |
| install(FILES "$<TARGET_FILE:${BINARY_NAME}>.debug" DESTINATION ${LIBDIR} COMPONENT lib${BINARY_NAME}-dbg) | |
| endif() | |
| endif() | |
| if(APPLE) | |
| set(CPACK_COMPONENTS_ALL ${BINARY_NAME} ${BINARY_NAME}-qt ${BINARY_NAME}-sdl ${BINARY_NAME}-qt-dbg ${BINARY_NAME}-sdl-dbg ${BINARY_NAME}-perf) | |
| configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/platform/cmake/DMGOverrides.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/DMGOverrides.cmake @ONLY) | |
| set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_CURRENT_BINARY_DIR}/DMGOverrides.cmake) | |
| elseif(WIN32) | |
| set(CPACK_COMPONENTS_ALL ${BINARY_NAME} ${BINARY_NAME}-qt ${BINARY_NAME}-sdl ${BINARY_NAME}-qt-dbg ${BINARY_NAME}-sdl-dbg ${BINARY_NAME}-perf installer) | |
| elseif(3DS) | |
| set(CPACK_COMPONENTS_ALL ${BINARY_NAME} ${BINARY_NAME}-dbg ${BINARY_NAME}-3ds ${BINARY_NAME}-perf) | |
| elseif(WII) | |
| set(CPACK_COMPONENTS_ALL ${BINARY_NAME} ${BINARY_NAME}-dbg ${BINARY_NAME}-wii ${BINARY_NAME}-perf) | |
| elseif(PSP2) | |
| set(CPACK_COMPONENTS_ALL ${BINARY_NAME} ${BINARY_NAME}-dbg ${BINARY_NAME}-psp2 ${BINARY_NAME}-perf) | |
| elseif(SWITCH) | |
| set(CPACK_COMPONENTS_ALL ${BINARY_NAME} ${BINARY_NAME}-dbg ${BINARY_NAME}-switch) | |
| endif() | |
| endif() | |
| include(CPack) | |
| cpack_add_component_group(base) | |
| cpack_add_component(${BINARY_NAME} GROUP base) | |
| cpack_add_component_group(dev PARENT_GROUP base) | |
| if(BUILD_SHARED) | |
| cpack_add_component(lib${BINARY_NAME} GROUP base) | |
| if(BUILD_STATIC) | |
| cpack_add_component(lib${BINARY_NAME}-static GROUP dev) | |
| endif() | |
| elseif(BUILD_STATIC) | |
| cpack_add_component(lib${BINARY_NAME} GROUP dev) | |
| endif() | |
| cpack_add_component(${BINARY_NAME}-dev GROUP dev) | |
| if(3DS) | |
| cpack_add_component(${BINARY_NAME}-3ds GROUP base) | |
| elseif(PSP2) | |
| cpack_add_component(${BINARY_NAME}-psp2 GROUP base) | |
| elseif(WII) | |
| cpack_add_component(${BINARY_NAME}-wii GROUP base) | |
| elseif(SWITCH) | |
| cpack_add_component(${BINARY_NAME}-switch GROUP base) | |
| endif() | |
| if(BUILD_QT) | |
| cpack_add_component_group(qt PARENT_GROUP base) | |
| cpack_add_component(${BINARY_NAME}-qt GROUP qt) | |
| endif() | |
| if(SDL_FOUND) | |
| cpack_add_component_group(sdl PARENT_GROUP base) | |
| cpack_add_component(${BINARY_NAME}-sdl GROUP sdl) | |
| endif() | |
| if(DISTBUILD) | |
| cpack_add_component_group(debug PARENT_GROUP dev) | |
| if(BUILD_SHARED AND NOT IS_EMBEDDED) | |
| cpack_add_component(lib${BINARY_NAME}-dbg GROUP debug) | |
| endif() | |
| if(IS_EMBEDDED) | |
| cpack_add_component(${BINARY_NAME}-dbg GROUP debug) | |
| endif() | |
| if(BUILD_QT) | |
| cpack_add_component(${BINARY_NAME}-qt-dbg GROUP debug) | |
| endif() | |
| if(SDL_FOUND) | |
| cpack_add_component(${BINARY_NAME}-sdl-dbg GROUP debug) | |
| endif() | |
| if(WIN32) | |
| cpack_add_component_group(installer PARENT_GROUP base) | |
| endif() | |
| endif() | |
| cpack_add_component_group(test PARENT_GROUP dev) | |
| cpack_add_component(${BINARY_NAME}-perf GROUP test) | |
| cpack_add_component(${BINARY_NAME}-test GROUP test) | |
| # Summaries | |
| set(SUMMARY_GL_LIST) | |
| if(USE_EPOXY) | |
| set(SUMMARY_GL_LIST "libepoxy") | |
| else() | |
| if(BUILD_GL) | |
| list(APPEND SUMMARY_GL_LIST "OpenGL") | |
| endif() | |
| if(BUILD_GLES2) | |
| list(APPEND SUMMARY_GL_LIST "OpenGL|ES 2") | |
| endif() | |
| if(BUILD_GLES3) | |
| list(APPEND SUMMARY_GL_LIST "OpenGL|ES 3") | |
| endif() | |
| endif() | |
| if(NOT SUMMARY_GL_LIST) | |
| set(SUMMARY_GL OFF) | |
| else() | |
| string(REPLACE ";" ", " SUMMARY_GL "${SUMMARY_GL_LIST}") | |
| endif() | |
| if(USE_LIBZIP) | |
| set(SUMMARY_ZIP libzip) | |
| elseif(USE_MINIZIP) | |
| set(SUMMARY_ZIP "minizip (external)") | |
| elseif(USE_ZLIB) | |
| set(SUMMARY_ZIP "minizip (included)") | |
| else() | |
| set(SUMMARY_ZIP OFF) | |
| endif() | |
| if(NOT QUIET AND NOT LIBMGBA_ONLY) | |
| message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") | |
| message(STATUS "Platforms:") | |
| message(STATUS " Game Boy Advance: ${M_CORE_GBA}") | |
| message(STATUS " Game Boy: ${M_CORE_GB}") | |
| message(STATUS "Features:") | |
| message(STATUS " Debuggers: ${USE_DEBUGGERS}") | |
| if(NOT WIN32) | |
| message(STATUS " CLI debugger: ${USE_EDITLINE}") | |
| endif() | |
| message(STATUS " GDB stub: ${USE_GDB_STUB}") | |
| message(STATUS " GIF/Video recording: ${USE_FFMPEG}") | |
| message(STATUS " Screenshot/advanced savestate support: ${USE_PNG}") | |
| message(STATUS " ZIP support: ${SUMMARY_ZIP}") | |
| message(STATUS " 7-Zip support: ${USE_LZMA}") | |
| message(STATUS " SQLite3 game database: ${USE_SQLITE3}") | |
| message(STATUS " ELF loading support: ${USE_ELF}") | |
| message(STATUS " Discord Rich Presence support: ${USE_DISCORD_RPC}") | |
| message(STATUS " OpenGL support: ${SUMMARY_GL}") | |
| message(STATUS "Scripting support: ${ENABLE_SCRIPTING}") | |
| if(ENABLE_SCRIPTING) | |
| if(LUA_VERSION_STRING) | |
| message(STATUS " Lua: ${LUA_VERSION_STRING}") | |
| else() | |
| message(STATUS " Lua: ${USE_LUA}") | |
| endif() | |
| message(STATUS " storage API: ${USE_JSON_C}") | |
| endif() | |
| message(STATUS "Frontends:") | |
| message(STATUS " Qt: ${BUILD_QT}") | |
| message(STATUS " SDL (${SDL_VERSION}): ${BUILD_SDL}") | |
| message(STATUS " Python bindings: ${BUILD_PYTHON}") | |
| message(STATUS " Examples: ${BUILD_EXAMPLE}") | |
| message(STATUS "Test tools:") | |
| message(STATUS " Profiling: ${BUILD_PERF}") | |
| message(STATUS " Test harness: ${BUILD_TEST}") | |
| message(STATUS " Test suite: ${BUILD_SUITE}") | |
| message(STATUS " Video test suite: ${BUILD_CINEMA}") | |
| message(STATUS " ROM tester: ${BUILD_ROM_TEST}") | |
| message(STATUS "Cores:") | |
| message(STATUS " Libretro core: ${BUILD_LIBRETRO}") | |
| if(APPLE) | |
| message(STATUS " OpenEmu core: ${BUILD_OPENEMU}") | |
| endif() | |
| message(STATUS "Libraries:") | |
| message(STATUS " Static: ${BUILD_STATIC}") | |
| message(STATUS " Shared: ${BUILD_SHARED}") | |
| endif() |