mirror of
https://gitlab.com/es-de/emulationstation-de.git
synced 2025-04-02 10:51:45 -04:00
Added CMake configuration for building on iOS
This commit is contained in:
parent
0ea6384e52
commit
cd78e2645a
6 changed files with 104 additions and 42 deletions
|
@ -9,7 +9,10 @@
|
|||
#
|
||||
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
if(APPLE)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES iOS)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 14.0 CACHE STRING "iOS deployment target")
|
||||
elseif(APPLE)
|
||||
# Set this to the minimum supported macOS version, and also update
|
||||
# es-app/assets/ES-DE_Info.plist accordingly.
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0 CACHE STRING "macOS deployment target")
|
||||
|
@ -91,6 +94,15 @@ if(EXISTS /usr/include/bcm_host.h)
|
|||
message("-- Building on a Raspberry Pi (64-bit OS)")
|
||||
endif()
|
||||
|
||||
# iOS.
|
||||
if(IOS)
|
||||
message("-- Building for iOS (arm64)")
|
||||
set(GLES ON)
|
||||
set(BUNDLED_CERTS ON)
|
||||
add_compile_definitions(__IOS__)
|
||||
include(${CMAKE_SOURCE_DIR}/ios/cmake/variables.cmake)
|
||||
endif()
|
||||
|
||||
#---------------------------------------------------------------------------------------------------
|
||||
# Emscripten WebAssembly build.
|
||||
|
||||
|
@ -118,12 +130,12 @@ if(GLSYSTEM MATCHES "Desktop OpenGL")
|
|||
find_package(OpenGL REQUIRED)
|
||||
elseif(ANDROID)
|
||||
find_package(OpenGLES3 REQUIRED)
|
||||
elseif(GLES AND NOT EMSCRIPTEN)
|
||||
elseif(GLES AND NOT IOS AND NOT EMSCRIPTEN)
|
||||
find_package(OpenGLES2 REQUIRED)
|
||||
endif()
|
||||
|
||||
# On macOS and Windows all dependencies are kept in-tree in the "external" directory.
|
||||
if(APPLE)
|
||||
# On macOS, iOS and Windows all dependencies are kept in-tree in the "external" directory.
|
||||
if(APPLE AND NOT IOS)
|
||||
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/external/FFmpeg)
|
||||
message(FATAL_ERROR "-- You need to build the dependencies in ./external first")
|
||||
endif()
|
||||
|
@ -132,7 +144,7 @@ elseif(WIN32)
|
|||
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/external/pugixml/pugixml.dll)
|
||||
message(FATAL_ERROR "-- You need to build the dependencies in ./external first")
|
||||
endif()
|
||||
elseif(NOT EMSCRIPTEN AND NOT ANDROID)
|
||||
elseif(NOT EMSCRIPTEN AND NOT ANDROID AND NOT IOS)
|
||||
find_package(CURL REQUIRED)
|
||||
find_package(FFmpeg REQUIRED)
|
||||
find_package(FreeImage REQUIRED)
|
||||
|
@ -279,8 +291,8 @@ if(ASAN OR UBSAN)
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_ASSERTIONS -D_FORTIFY_SOURCE=3")
|
||||
endif()
|
||||
|
||||
# The following removes half of the ranlib warnings on macOS regarding no symbols for files
|
||||
# that are #ifdef'ed away. There must be a way to remove the other half as well?
|
||||
# The following removes the ranlib warnings on macOS regarding missing symbols for files that have
|
||||
# been #ifdef'ed away.
|
||||
if(APPLE)
|
||||
SET(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
|
||||
SET(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
|
||||
|
@ -378,7 +390,7 @@ if(DEINIT_ON_LAUNCH)
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if(AUR_BUILD OR FLATPAK_BUILD OR RETRODECK OR RPI OR HAIKU OR CMAKE_SYSTEM_NAME MATCHES FreeBSD)
|
||||
if(AUR_BUILD OR FLATPAK_BUILD OR RETRODECK OR RPI OR HAIKU OR IOS OR CMAKE_SYSTEM_NAME MATCHES FreeBSD)
|
||||
set(APPLICATION_UPDATER OFF)
|
||||
endif()
|
||||
|
||||
|
@ -462,8 +474,19 @@ set(COMMON_INCLUDE_DIRS ${CURL_INCLUDE_DIR}
|
|||
${CMAKE_CURRENT_SOURCE_DIR}/external/utfcpp/source
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/es-core/src
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/es-pdf-converter/src)
|
||||
|
||||
if(APPLE)
|
||||
if(IOS)
|
||||
set(COMMON_INCLUDE_DIRS ${COMMON_INCLUDE_DIRS}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/curl/include
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/ffmpeg-kit/src/ffmpeg
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/FreeImage/Source
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/freetype/include
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/gettext/gettext-runtime/intl
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/libgit2/include
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/harfbuzz/src
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/icu/icu4c/source/common
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/pugixml/src
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/SDL)
|
||||
elseif(APPLE)
|
||||
set(COMMON_INCLUDE_DIRS ${COMMON_INCLUDE_DIRS}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/FFmpeg
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/external/freeimage/FreeImage/Source
|
||||
|
@ -538,7 +561,30 @@ endif()
|
|||
#---------------------------------------------------------------------------------------------------
|
||||
# Dependency libraries.
|
||||
|
||||
if(APPLE)
|
||||
if(IOS)
|
||||
set(COMMON_LIBRARIES ${COMMON_LIBRARIES}
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libavcodec.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libavfilter.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libavformat.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libavutil.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libswresample.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libswscale.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libcurl.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libfontconfig.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libfreeimage.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libfreetype.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libgit.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libharfbuzz.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libicudata.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libicui18n.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libicuuc.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libintl.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libopenjpeg.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libpoppler.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libpoppler-cpp.xcframework
|
||||
${PROJECT_SOURCE_DIR}/Frameworks/libSDL.xcframework
|
||||
${PROJECT_SOURCE_DIR}/libpugixml.a)
|
||||
elseif(APPLE)
|
||||
set(COMMON_LIBRARIES ${COMMON_LIBRARIES}
|
||||
${CURL_LIBRARIES}
|
||||
${PROJECT_SOURCE_DIR}/libavcodec.60.dylib
|
||||
|
@ -660,13 +706,16 @@ if(NOT WIN32)
|
|||
if(ANDROID)
|
||||
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}/liblunasvg.a)
|
||||
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI}/librlottie.a)
|
||||
elseif(IOS)
|
||||
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/${CMAKE_BUILD_TYPE}/liblunasvg.a)
|
||||
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/${CMAKE_BUILD_TYPE}/librlottie.a)
|
||||
else()
|
||||
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/liblunasvg.a)
|
||||
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/librlottie.a)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
if(APPLE AND NOT IOS)
|
||||
# See es-app/CMakeLists.txt for an explation for why an extra "Resources" directory
|
||||
# has been added to the install prefix.
|
||||
set(CMAKE_INSTALL_PREFIX "/Applications/ES-DE.app/Contents/Resources")
|
||||
|
|
|
@ -111,14 +111,16 @@ set(ES_SOURCES
|
|||
)
|
||||
|
||||
if(WIN32)
|
||||
LIST(APPEND ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE.rc)
|
||||
list(APPEND ES_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/assets/ES-DE.rc)
|
||||
endif()
|
||||
|
||||
#---------------------------------------------------------------------------------------------------
|
||||
# OS-specific installation and package generation setup.
|
||||
|
||||
# Define target.
|
||||
if(APPLE)
|
||||
if(IOS)
|
||||
include(${CMAKE_SOURCE_DIR}/ios/cmake/ios.cmake)
|
||||
elseif(APPLE)
|
||||
include_directories(${COMMON_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
||||
add_executable(ES-DE ${ES_SOURCES} ${ES_HEADERS})
|
||||
target_link_libraries(ES-DE ${COMMON_LIBRARIES} es-core)
|
||||
|
@ -202,7 +204,7 @@ if(WIN32)
|
|||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes/modern-es-de DESTINATION themes)
|
||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/themes/slate-es-de DESTINATION themes)
|
||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/resources DESTINATION .)
|
||||
elseif(APPLE)
|
||||
elseif(APPLE AND NOT IOS)
|
||||
# For completely unknown reasons, when generating a Bundle using cpack, an extra 'Resources'
|
||||
# directory is added to the target path. Simply adding the two dots as a prefix fixes the
|
||||
# problem, but doing so would break 'make install' which was actually behaving correctly.
|
||||
|
@ -288,7 +290,7 @@ elseif(HAIKU)
|
|||
DESTINATION data/es-de/themes)
|
||||
install(DIRECTORY ${CMAKE_SOURCE_DIR}/resources
|
||||
DESTINATION data/es-de)
|
||||
elseif(NOT ANDROID)
|
||||
elseif(NOT ANDROID AND NOT IOS)
|
||||
install(TARGETS es-de RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
install(TARGETS es-pdf-convert RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES Linux OR CMAKE_SYSTEM_NAME MATCHES FreeBSD)
|
||||
|
|
|
@ -179,6 +179,13 @@ if(ANDROID)
|
|||
set(CORE_SOURCES ${CORE_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/PlatformUtilAndroid.cpp)
|
||||
endif()
|
||||
|
||||
if(IOS)
|
||||
set(CORE_HEADERS ${CORE_HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/src/InputOverlay.h)
|
||||
set(CORE_HEADERS ${CORE_HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/PlatformUtilIOS.h)
|
||||
set(CORE_HEADERS ${CORE_HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/src/InputOverlay.cpp)
|
||||
set(CORE_SOURCES ${CORE_SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/src/utils/PlatformUtilIOS.cpp)
|
||||
endif()
|
||||
|
||||
#---------------------------------------------------------------------------------------------------
|
||||
# Miscellaneous configuration.
|
||||
|
||||
|
|
|
@ -13,23 +13,31 @@ if(WIN32)
|
|||
set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/poppler-cpp.lib)
|
||||
# Disable DLL interface warnings.
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4251")
|
||||
elseif(APPLE)
|
||||
set(POPPLER_CPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/cpp ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/build/cpp)
|
||||
set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/../libpoppler-cpp.0.dylib)
|
||||
elseif(ANDROID)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -llog")
|
||||
set(POPPLER_CPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/cpp ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/build/cpp)
|
||||
set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/../android/libs/${ANDROID_CPU_ARCH}/libpoppler-cpp.so)
|
||||
elseif(IOS)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -llog")
|
||||
set(POPPLER_CPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/cpp ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/build/cpp)
|
||||
elseif(APPLE)
|
||||
set(POPPLER_CPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/cpp ${CMAKE_CURRENT_SOURCE_DIR}/../external/poppler/build/cpp)
|
||||
set(POPPLER_CPP_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/../libpoppler-cpp.0.dylib)
|
||||
else()
|
||||
find_package(Poppler REQUIRED COMPONENTS cpp)
|
||||
endif()
|
||||
|
||||
include_directories(${POPPLER_CPP_INCLUDE_DIR})
|
||||
if (ANDROID)
|
||||
if(ANDROID)
|
||||
set(CONVERTER_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/ConvertPDF.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/ConvertPDF.h)
|
||||
add_library(es-pdf-convert SHARED ${CONVERTER_SOURCE_FILES})
|
||||
elseif(IOS)
|
||||
set(CONVERTER_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/ConvertPDF.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/ConvertPDF.h)
|
||||
add_library(es-pdf-convert STATIC ${CONVERTER_SOURCE_FILES})
|
||||
else()
|
||||
set(CONVERTER_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/ConvertPDF.cpp
|
||||
|
@ -40,6 +48,9 @@ target_link_libraries(es-pdf-convert PRIVATE ${POPPLER_CPP_LIBRARY})
|
|||
|
||||
if(WIN32)
|
||||
set_target_properties(es-pdf-convert PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/es-pdf-converter" INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
elseif(IOS)
|
||||
set_target_properties(es-pdf-convert PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE
|
||||
XCODE_ATTRIBUTE_DEVELOPMENT_TEAM ${IOS_DEVELOPMENT_TEAM})
|
||||
else()
|
||||
set_target_properties(es-pdf-convert PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
endif()
|
||||
|
|
33
external/CMakeLists.txt
vendored
33
external/CMakeLists.txt
vendored
|
@ -7,27 +7,27 @@
|
|||
#
|
||||
|
||||
# This makes it possible to set options in subprojects.
|
||||
set (CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
||||
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
|
||||
|
||||
# Suppress warnings about cmake_minimum_required() defining deprecated versions.
|
||||
set(CMAKE_WARN_DEPRECATED OFF CACHE BOOL "" FORCE)
|
||||
|
||||
if (WIN32)
|
||||
if(WIN32)
|
||||
# On Windows the build type needs to match the main binary.
|
||||
if (CMAKE_BUILD_TYPE MATCHES Profiling)
|
||||
set (CMAKE_BUILD_TYPE Release)
|
||||
if(CMAKE_BUILD_TYPE MATCHES Profiling)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
elseif(NOT CMAKE_BUILD_TYPE MATCHES Debug)
|
||||
set (CMAKE_BUILD_TYPE Release)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif()
|
||||
else()
|
||||
# Always build with optimizations enabled and without debug info.
|
||||
set (CMAKE_BUILD_TYPE Release)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif()
|
||||
|
||||
unset(CMAKE_CXX_FLAGS)
|
||||
unset(CMAKE_EXE_LINKER_FLAGS)
|
||||
|
||||
if (WIN32)
|
||||
if(WIN32)
|
||||
set(BUILD_SHARED_LIBS ON)
|
||||
else()
|
||||
set(BUILD_SHARED_LIBS OFF)
|
||||
|
@ -41,15 +41,11 @@ if(CMAKE_CXX_COMPILER_ID MATCHES MSVC)
|
|||
endif()
|
||||
|
||||
if(ANDROID)
|
||||
if(ANDROID_LITE_RELEASE)
|
||||
set_target_properties(lunasvg PROPERTIES ARCHIVE_OUTPUT_DIRECTORY
|
||||
${PROJECT_SOURCE_DIR}/android_lite_${ANDROID_ABI})
|
||||
else()
|
||||
set_target_properties(lunasvg PROPERTIES ARCHIVE_OUTPUT_DIRECTORY
|
||||
${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI})
|
||||
endif()
|
||||
set_target_properties(lunasvg PROPERTIES ARCHIVE_OUTPUT_DIRECTORY
|
||||
${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI})
|
||||
endif()
|
||||
|
||||
|
||||
# Disable threading support for rlottie as this functionality actually leads to far worse
|
||||
# performance. As well there is a bug on Windows that makes rlottie hang forever on application
|
||||
# shutdown if compiled using MinGW with threading support enabled.
|
||||
|
@ -71,13 +67,8 @@ else()
|
|||
endif()
|
||||
|
||||
if(ANDROID)
|
||||
if(ANDROID_LITE_RELEASE)
|
||||
set_target_properties(rlottie PROPERTIES ARCHIVE_OUTPUT_DIRECTORY
|
||||
${PROJECT_SOURCE_DIR}/android_lite_${ANDROID_ABI})
|
||||
else()
|
||||
set_target_properties(rlottie PROPERTIES ARCHIVE_OUTPUT_DIRECTORY
|
||||
${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI})
|
||||
endif()
|
||||
set_target_properties(rlottie PROPERTIES ARCHIVE_OUTPUT_DIRECTORY
|
||||
${PROJECT_SOURCE_DIR}/android_${ANDROID_ABI})
|
||||
endif()
|
||||
|
||||
# Build LunaSVG before rlottie.
|
||||
|
|
|
@ -8,7 +8,9 @@
|
|||
|
||||
add_custom_target(localization ALL COMMENT Compiling localization message catalogs)
|
||||
|
||||
if(APPLE)
|
||||
if(IOS)
|
||||
set(MSGFMT_BINARY ${PROJECT_SOURCE_DIR}/external/macos/local_install/bin/msgfmt)
|
||||
elseif(APPLE)
|
||||
set(MSGFMT_BINARY ${PROJECT_SOURCE_DIR}/external/local_install/bin/msgfmt)
|
||||
elseif(WIN32)
|
||||
set(MSGFMT_BINARY ${PROJECT_SOURCE_DIR}/external/gettext/bin/msgfmt.exe)
|
||||
|
|
Loading…
Add table
Reference in a new issue