Skip to content

Commit

Permalink
iOS (#162)
Browse files Browse the repository at this point in the history
* Suppory iOS

* Fix build error

* macOS: Do not build universal bundle
  • Loading branch information
xfangfang authored Jul 9, 2023
1 parent 81f9bfb commit 0783092
Show file tree
Hide file tree
Showing 13 changed files with 298 additions and 54 deletions.
10 changes: 10 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ on:
description: 'build flatpak (aarch64)'
required: false
default: 'false'
universal_macos:
description: 'build macos (universal)'
required: false
default: 'false'
release:
description: 'Push a new release'
required: false
Expand Down Expand Up @@ -248,6 +252,7 @@ jobs:
fetch-depth: 0

- name: install deps
if: matrix.arch != 'Universal' || ( matrix.arch == 'Universal' && github.event.inputs.universal_macos == 'true')
run: |
brew install create-dmg dylibbundler webp boost
brew tap xfangfang/wiliwili
Expand All @@ -261,23 +266,27 @@ jobs:
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}

- name: Update gamepad mappings
if: matrix.arch != 'Universal' || ( matrix.arch == 'Universal' && github.event.inputs.universal_macos == 'true')
id: gamepad
run: |
BRLS_GLFW="library/borealis/library/lib/extern/glfw"
cmake -P ${BRLS_GLFW}/CMake/GenerateMappings.cmake ${BRLS_GLFW}/src/mappings.h.in ${BRLS_GLFW}/src/mappings.h
- name: Build
if: matrix.arch != 'Universal' || ( matrix.arch == 'Universal' && github.event.inputs.universal_macos == 'true')
id: compile
run: |
cmake -B build -DPLATFORM_DESKTOP=ON -DCMAKE_BUILD_TYPE=Release -DMAC_${{ matrix.arch }}=ON -DMAC_DOWNLOAD_DYLIB=ON
make -C build wiliwili.app -j$(sysctl -n hw.ncpu)
- name: Name
if: matrix.arch != 'Universal' || ( matrix.arch == 'Universal' && github.event.inputs.universal_macos == 'true')
id: name
run: |
echo "DMG=${{ needs.version.outputs.DIST_DMG_PREFIX }}-${{ matrix.arch }}-${{ needs.version.outputs.version }}" >> $GITHUB_OUTPUT
- name: Bundle
if: matrix.arch != 'Universal' || ( matrix.arch == 'Universal' && github.event.inputs.universal_macos == 'true')
id: bundle
run: |
mkdir -p dist
Expand All @@ -290,6 +299,7 @@ jobs:
--volname "wiliwili (${{ needs.version.outputs.version }})" ${{ steps.name.outputs.DMG }}.dmg "dist/"
- name: Upload dist
if: matrix.arch != 'Universal' || ( matrix.arch == 'Universal' && github.event.inputs.universal_macos == 'true')
uses: actions/upload-artifact@v3
with:
name: ${{ steps.name.outputs.DMG }}
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,6 @@ repo/
.xmake
.vs
.DS_Store
/winrt/AppxManifest.xml
/winrt/AppxManifest.xml
libromfs-generator
build-*
167 changes: 139 additions & 28 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
cmake_minimum_required(VERSION 3.15)
cmake_minimum_required(VERSION 3.10)

# build options
set(PLATFORM_DESKTOP
OFF
CACHE BOOL "build for desktop, ON for desktop; OFF for switch"
)
set(PLATFORM_IOS
OFF
CACHE BOOL "build for iOS"
)
set(BUILTIN_NSP
OFF
CACHE BOOL "Built in NSP forwarder (only for NintendoSwitch)"
Expand Down Expand Up @@ -91,28 +95,12 @@ set(MPV_NO_FB
option(USE_GLFW "using glfw for input and create window" ON)
option(USE_SDL2 "using sdl2 for input and create window" OFF)
option(USE_GL2 "using OpenGL 2.1" OFF)
option(USE_GLES2 "using OpenGL ES 2.0 (current only works with USE_GLFW)" OFF)

option(USE_GLES2 "using OpenGL ES 2.0" OFF)
option(USE_GLES3 "using OpenGL ES 3.0" OFF)
option(INSTALL "Install to system. only use this option with Linux." OFF)
option(USE_LIBROMFS "using libromfs to bundle resources" OFF)

if (USE_SDL2)
message("SDL2")
set(USE_GLFW OFF)
else ()
# default glfw3.3
message("GLFW")
set(USE_GLFW ON)
set(USE_SDL2 OFF)
endif ()

if (USE_GL2)
set(USE_GL2 ON)
add_definitions(-DUSE_GL2)
set(MPV_NO_FB ON)
elseif (USE_GLES2)
set(USE_GLES2 ON)
add_definitions(-DUSE_GLES2)
endif ()
# =======================================================================

include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/extra.cmake)

Expand All @@ -131,6 +119,17 @@ if (PLATFORM_DESKTOP)
set(_USE_SHARED_LIB ON)
set(USE_SYSTEM_CURL ON)
endif ()
elseif (PLATFORM_IOS)
message(STATUS "building for iOS")
set(USE_SDL2 ON)
set(USE_GLES3 ON)
set(MPV_NO_FB ON)
set(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2") # iphone, ipad
set(USE_LIBROMFS ON) # package resources inside
set(LIBROMFS_PREBUILT_GENERATOR "${CMAKE_CURRENT_SOURCE_DIR}/libromfs-generator" CACHE STRING "")
if (NOT EXISTS "${LIBROMFS_PREBUILT_GENERATOR}")
message(FATAL_ERROR "libromfs-generator has not been built, please refer to library/borealis/build_libromfs_generator.sh for more information")
endif()
else ()
message(STATUS "building for SWITCH")
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
Expand Down Expand Up @@ -163,6 +162,32 @@ else ()
message(STATUS "NX_ELF2NRO" = ${NX_ELF2NRO_EXE})
endif ()

if (USE_GL2)
message(STATUS "USE_GL2")
set(USE_GL2 ON)
add_definitions(-DUSE_GL2)
set(MPV_NO_FB ON)
elseif (USE_GLES2)
message(STATUS "USE_GLES2")
set(USE_GLES2 ON)
add_definitions(-DUSE_GLES2)
set(MPV_NO_FB ON)
elseif (USE_GLES3)
message(STATUS "USE_GLES3")
set(USE_GLES3 ON)
add_definitions(-DUSE_GLES3)
else ()
message(STATUS "USE_GL3/4")
endif ()

if (USE_SDL2)
message(STATUS "SDL2")
set(USE_GLFW OFF)
else ()
message(STATUS "GLFW")
set(USE_GLFW ON)
endif ()

# project info
project(wiliwili)
set(VERSION_MAJOR "1")
Expand Down Expand Up @@ -199,6 +224,13 @@ endif ()
if (MPV_NO_FB)
list(APPEND PLATFORM_OPTION -DMPV_NO_FB)
endif()
if (USE_LIBROMFS)
message(STATUS "USE LIBROMFS")
set(USE_LIBROMFS ON)
add_definitions(-DUSE_LIBROMFS)
set(LIBROMFS_PROJECT_NAME ${PROJECT_NAME})
set(LIBROMFS_RESOURCE_LOCATION "${PROJECT_RESOURCES}")
endif ()

# disable in-source build
if (PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
Expand Down Expand Up @@ -235,6 +267,36 @@ if (PLATFORM_DESKTOP)
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
list(APPEND PLATFORM_OPTION -pthread -I${MPV_INCLUDE_DIR})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
elseif (PLATFORM_IOS)
if (NOT DEFINED IOS_DEPS_DIR)
message(FATAL_ERROR "You should add -DIOS_DEPS_DIR=/some/path which contain include and lib for ios")
endif ()
set(IOS_INCLUDE_DIR "${IOS_DEPS_DIR}/include")
set(IOS_LIB_DIR "${IOS_DEPS_DIR}/lib")
list(APPEND PLATFORM_INCLUDES "${IOS_INCLUDE_DIR}")
list(APPEND PLATFORM_OPTION -DUSE_WEBP)
set(PLATFORM_LIBS
${IOS_LIB_DIR}/libmpv.a
${IOS_LIB_DIR}/libavcodec.a
${IOS_LIB_DIR}/libavdevice.a
${IOS_LIB_DIR}/libavfilter.a
${IOS_LIB_DIR}/libavformat.a
${IOS_LIB_DIR}/libswresample.a
${IOS_LIB_DIR}/libswscale.a
${IOS_LIB_DIR}/libavutil.a
${IOS_LIB_DIR}/libuchardet.a
${IOS_LIB_DIR}/libharfbuzz.a
${IOS_LIB_DIR}/libfribidi.a
${IOS_LIB_DIR}/libfreetype.a
${IOS_LIB_DIR}/libass.a
${IOS_LIB_DIR}/libssl.a
${IOS_LIB_DIR}/libcrypto.a
${IOS_LIB_DIR}/libwebp.a
${IOS_LIB_DIR}/libsharpyuv.a
z
bz2
"-framework CoreMedia -framework CoreText -framework VideoToolbox"
)
else ()
if (USE_SDL2)
set(PLATFORM_LIBS SDL2)
Expand Down Expand Up @@ -277,6 +339,7 @@ else ()
list(APPEND PLATFORM_LIBS nsp)
list(APPEND PLATFORM_OPTION -DBUILTIN_NSP)
endif ()
# compile option for mongoose
list(APPEND PLATFORM_OPTION -DMG_ARCH=10086)
list(
APPEND
Expand All @@ -288,12 +351,14 @@ endif ()
# build borealis qrcode and other third party libraries
add_subdirectory(library)

find_package(WebP)
if (WebP_FOUND)
message(STATUS "Found webp: ${WebP_INCLUDE_DIR} ${WebP_LIBRARY}")
add_definitions(-DUSE_WEBP)
list(APPEND PLATFORM_INCLUDES ${WebP_INCLUDE_DIRS})
list(APPEND PLATFORM_LIBS ${WebP_LIBRARY})
if (NOT PLATFORM_IOS)
find_package(WebP)
if (WebP_FOUND)
message(STATUS "Found webp: ${WebP_INCLUDE_DIR} ${WebP_LIBRARY}")
list(APPEND PLATFORM_OPTION -DUSE_WEBP)
list(APPEND PLATFORM_INCLUDES ${WebP_INCLUDE_DIRS})
list(APPEND PLATFORM_LIBS ${WebP_LIBRARY})
endif ()
endif ()

# building target
Expand Down Expand Up @@ -364,7 +429,9 @@ if (PLATFORM_DESKTOP)
"${CMAKE_COMMAND}" -E copy_directory ${CMAKE_SOURCE_DIR}/resources
${CMAKE_CURRENT_BINARY_DIR}/resources
)
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}.data)
if (NOT USE_LIBROMFS)
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}.data)
endif ()

if (APPLE)
if (MAC_DOWNLOAD_DYLIB)
Expand Down Expand Up @@ -433,6 +500,50 @@ if (PLATFORM_DESKTOP)
)
endif ()
endif ()
elseif (PLATFORM_IOS)
set(IOS_CODE_SIGN_IDENTITY "" CACHE STRING "The code sign identity to use when building the IPA.")
if(IOS_CODE_SIGN_IDENTITY STREQUAL "")
set(IOS_CODE_SIGNING_ENABLED NO)
else()
set(IOS_CODE_SIGNING_ENABLED YES)
endif()
if (NOT DEFINED IOS_GUI_IDENTIFIER)
set(IOS_GUI_IDENTIFIER "${PACKAGE_NAME}")
message(WARNING "Using default package name: ${PACKAGE_NAME}")
endif ()
if (TVOS)
set(IOS_SPLASH_STORYBOARD "${CMAKE_SOURCE_DIR}/library/borealis/demo/ios/tvos/Splash.storyboard")
else ()
set(IOS_SPLASH_STORYBOARD "${CMAKE_SOURCE_DIR}/library/borealis/demo/ios/iphoneos/Splash.storyboard")
endif ()
set(IOS_ASSETS ${CMAKE_SOURCE_DIR}/library/borealis/demo/ios/Images.xcassets)
set_target_properties(${PROJECT_NAME} PROPERTIES
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "${IOS_CODE_SIGN_IDENTITY}"
XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "${IOS_CODE_SIGNING_ENABLED}"
XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "${IOS_CODE_SIGNING_ENABLED}"
BUNDLE TRUE
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/scripts/ios/iOSBundleInfo.plist.in
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_GUI_IDENTIFIER ${IOS_GUI_IDENTIFIER}
MACOSX_BUNDLE_BUNDLE_NAME wiliwili
MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_ALTER}"
MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_ALTER}"
XCODE_ATTRIBUTE_ENABLE_BITCODE NO
XCODE_ATTRIBUTE_SKIP_INSTALL NO
XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon"
)
set_property(
SOURCE ${IOS_ASSETS}
PROPERTY MACOSX_PACKAGE_LOCATION "Resources"
)
set_property(
SOURCE ${IOS_SPLASH_STORYBOARD}
PROPERTY MACOSX_PACKAGE_LOCATION "Resources"
)
target_sources(${PROJECT_NAME} PRIVATE
${IOS_ASSETS}
${IOS_SPLASH_STORYBOARD}
)
else ()
set(BUILD_FONT_DIR ${CMAKE_BINARY_DIR}/resources/font)
set(APP_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}")
Expand Down
2 changes: 1 addition & 1 deletion cmake/extra.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ add_definitions(-DBUILD_TAG_VERSION=${GIT_TAG_VERSION} -DBUILD_TAG_SHORT=${GIT_T
message(STATUS "building from git tag ${GIT_TAG_VERSION}")
message(STATUS "building from git commit ${GIT_TAG_SHORT}")

if (APPLE)
if (APPLE AND NOT PLATFORM_IOS)
if (MAC_IntelChip)
message(STATUS "CMAKE_OSX_ARCHITECTURES: x86_64")
message(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET: 10.11")
Expand Down
3 changes: 0 additions & 3 deletions cmake/macos.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ if (APPLE)
endif ()

if (MAC_DOWNLOAD_DYLIB)
link_libraries(
${CMAKE_BINARY_DIR}/deps/${MAC_OS_ARCH}
)
set(PLATFORM_LIBS
${CMAKE_BINARY_DIR}/deps/${MAC_OS_ARCH}/libmpv.2.dylib
${CMAKE_BINARY_DIR}/deps/${MAC_OS_ARCH}/libwebp.7.1.6.dylib
Expand Down
25 changes: 17 additions & 8 deletions library/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ else ()
set(CPR_USE_SYSTEM_CURL OFF)
set(CPR_FORCE_WINSSL_BACKEND ON)
endif ()
elseif (PLATFORM_IOS)
set(CPR_USE_SYSTEM_CURL OFF)
set(CPR_ENABLE_SSL ON)
else ()
set(CPR_USE_SYSTEM_CURL ON)
set(CPR_FORCE_MBEDTLS_BACKEND ON)
Expand All @@ -42,10 +45,12 @@ else ()
add_subdirectory(cpr EXCLUDE_FROM_ALL)

# add libopencc
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
add_subdirectory(OpenCC EXCLUDE_FROM_ALL)
target_compile_options(libopencc PRIVATE -w)
if (NOT USE_LIBROMFS)
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
add_subdirectory(OpenCC EXCLUDE_FROM_ALL)
target_compile_options(libopencc PRIVATE -w)
endif ()

# add QR-Code-generator
add_library(
Expand Down Expand Up @@ -76,10 +81,14 @@ add_subdirectory(lunasvg EXCLUDE_FROM_ALL)
add_subdirectory(mongoose EXCLUDE_FROM_ALL)

# add borealis
set(BRLS_USE_OPENCC ON)
if (_USE_SHARED_LIB)
set(BRLS_OPENCC_INCLUDE ${opencc_INCLUDE_DIRS})
if (USE_LIBROMFS)
set(BRLS_USE_OPENCC OFF)
else ()
set(BRLS_OPENCC_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/OpenCC/src)
set(BRLS_USE_OPENCC ON)
if (_USE_SHARED_LIB)
set(BRLS_OPENCC_INCLUDE ${opencc_INCLUDE_DIRS})
else ()
set(BRLS_OPENCC_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/OpenCC/src)
endif ()
endif ()
add_subdirectory(borealis/library)
Loading

0 comments on commit 0783092

Please sign in to comment.