diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ae3d30a02..5bd27d4c5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -175,7 +175,7 @@ jobs: build/install/debug.tar.* build-ios: - name: Build iOS + name: Build iOS (AppleClang arm64) runs-on: macos-11 steps: @@ -195,10 +195,21 @@ jobs: run: cmake --preset ios-default - name: Build - run: cmake --build --preset ios-default + run: cmake --build --preset ios-default --target install + + - name: Generate IPA + run: ci/build-ipa.sh + + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + name: metaforce-${{env.METAFORCE_VERSION}}-ios-appleclang-arm64 + path: | + build/install/Metaforce.ipa + build/install/debug.tar.* build-tvos: - name: Build tvOS + name: Build tvOS (AppleClang arm64) runs-on: macos-11 steps: @@ -218,7 +229,18 @@ jobs: run: cmake --preset tvos-default - name: Build - run: cmake --build --preset tvos-default + run: cmake --build --preset tvos-default --target install + + - name: Generate IPA + run: ci/build-ipa.sh + + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + name: metaforce-${{env.METAFORCE_VERSION}}-tvos-appleclang-arm64 + path: | + build/install/Metaforce.ipa + build/install/debug.tar.* build-windows: name: Build Windows (${{matrix.name}} x86_64) @@ -302,7 +324,7 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@v2 with: - name: metaforce-${{env.METAFORCE_VERSION}}-win32-clang-x86_64 + name: metaforce-${{env.METAFORCE_VERSION}}-win32-${{matrix.preset}}-x86_64 path: | ${{env.BUILD_DIR}}/install/*.exe ${{env.BUILD_DIR}}/install/debug.7z diff --git a/CMakeLists.txt b/CMakeLists.txt index ac9ac626d..786b2da06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -372,6 +372,29 @@ add_subdirectory(gbalink EXCLUDE_FROM_ALL) configure_file(${CMAKE_SOURCE_DIR}/version.h.in ${CMAKE_BINARY_DIR}/version.h) # Packaging logic +function(get_target_output_name target result_var) + get_target_property(output_name ${target} OUTPUT_NAME) + if (output_name STREQUAL "output_name-NOTFOUND") + set(${result_var} "${target}" PARENT_SCOPE) + else () + set(${result_var} "${output_name}" PARENT_SCOPE) + endif () +endfunction() +function(get_target_prefix target result_var) + set(${result_var} "" PARENT_SCOPE) + if (APPLE) + # Have to recreate some bundle logic here, since CMake can't tell us + get_target_property(is_bundle ${target} MACOSX_BUNDLE) + if (is_bundle) + get_target_output_name(${target} output_name) + if (CMAKE_SYSTEM_NAME STREQUAL Darwin) + set(${result_var} "${output_name}.app/Contents/MacOS/" PARENT_SCOPE) + else () + set(${result_var} "${output_name}.app/" PARENT_SCOPE) + endif () + endif () + endif () +endfunction() list(APPEND BINARY_TARGETS metaforce) set(EXTRA_TARGETS "") if (TARGET crashpad_handler) @@ -380,20 +403,26 @@ endif () set(BIN_PREFIX "${CMAKE_INSTALL_PREFIX}") install(TARGETS ${BINARY_TARGETS} ${EXTRA_TARGETS} DESTINATION ${BIN_PREFIX}) if (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo) - foreach (target IN LISTS BINARY_TARGETS) + set(DEBUG_FILES_LIST "") + foreach (target IN LISTS BINARY_TARGETS EXTRA_TARGETS) + get_target_output_name(${target} output_name) if (WIN32) install(FILES $ DESTINATION ${BIN_PREFIX} OPTIONAL) elseif (APPLE) + get_target_prefix(${target} target_prefix) install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND rm -fr \"$.dSYM\")") - install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND dsymutil \"$\")") - install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND strip -S \"$\")") - install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND mv \"$.dSYM\" .)") + install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND dsymutil \"${target_prefix}$\")") + install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND strip -S \"${target_prefix}$\")") + if (NOT target_prefix STREQUAL "") + install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND mv \"${target_prefix}$.dSYM\" .)") + endif () elseif (UNIX) - install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND objcopy --only-keep-debug ${target} ${target}.dbg)") - install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND objcopy --strip-debug --add-gnu-debuglink=${target}.dbg ${target})") + get_target_prefix(${target} target_prefix) + install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND objcopy --only-keep-debug \"${target_prefix}$\" \"${target_prefix}$.dbg\")") + install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND objcopy --strip-debug --add-gnu-debuglink=$.dbg \"${target_prefix}$\")") endif () + list(APPEND DEBUG_FILES_LIST "${output_name}") endforeach () - set(DEBUG_FILES_LIST ${BINARY_TARGETS}) if (WIN32) list(TRANSFORM DEBUG_FILES_LIST APPEND ".pdb") list(JOIN DEBUG_FILES_LIST " " DEBUG_FILES) @@ -408,3 +437,13 @@ if (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo) install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND tar -I \"xz -9 -T0\" -cvf \"${CMAKE_INSTALL_PREFIX}/debug.tar.xz\" ${DEBUG_FILES})") endif () endif () +foreach (target IN LISTS BINARY_TARGETS) + get_target_prefix(${target} target_prefix) + foreach (extra_target IN LISTS EXTRA_TARGETS) + get_target_prefix(${extra_target} extra_prefix) + if (NOT "${target_prefix}" STREQUAL "${extra_prefix}") + # Copy extra target to target prefix + install(CODE "execute_process(WORKING_DIRECTORY \"${BIN_PREFIX}\" COMMAND cp \"${extra_prefix}$\" \"${target_prefix}$\")") + endif () + endforeach () +endforeach () diff --git a/Runtime/CMakeLists.txt b/Runtime/CMakeLists.txt index 445bef2fd..5cc041221 100644 --- a/Runtime/CMakeLists.txt +++ b/Runtime/CMakeLists.txt @@ -244,7 +244,6 @@ if (APPLE) elseif (IOS) set(RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/platforms/ios) set(INFO_PLIST ${RESOURCE_DIR}/Info.plist.in) - message("Using INFO_PLIST ${INFO_PLIST}") file(GLOB_RECURSE RESOURCE_FILES "${RESOURCE_DIR}/Base.lproj/*") list(APPEND RESOURCE_FILES ${RESOURCE_DIR}/Assets.car @@ -255,7 +254,7 @@ if (APPLE) set(INFO_PLIST ${RESOURCE_DIR}/Info.plist.in) set(RESOURCE_FILES ${RESOURCE_DIR}/mainicon.icns) endif () - target_sources(metaforce PRIVATE ${INFO_PLIST} ${RESOURCE_FILES}) + target_sources(metaforce PRIVATE ${RESOURCE_FILES}) # Add to resources, preserving directory structure foreach (FILE ${RESOURCE_FILES}) file(RELATIVE_PATH NEW_FILE "${RESOURCE_DIR}" ${FILE}) @@ -268,9 +267,10 @@ if (APPLE) MACOSX_BUNDLE TRUE MACOSX_BUNDLE_INFO_PLIST ${INFO_PLIST} MACOSX_BUNDLE_BUNDLE_NAME Metaforce - MACOSX_BUNDLE_GUI_IDENTIFIER dev.test.metaforce + MACOSX_BUNDLE_GUI_IDENTIFIER com.axiodl.Metaforce MACOSX_BUNDLE_BUNDLE_VERSION "${METAFORCE_VERSION_STRING}" MACOSX_BUNDLE_SHORT_VERSION_STRING "${METAFORCE_SHORT_VERSION_STRING}" + OUTPUT_NAME Metaforce ) endif () if (WINDOWS_STORE) diff --git a/ci/build-dmg.sh b/ci/build-dmg.sh index c4acb9e72..fe429d03c 100755 --- a/ci/build-dmg.sh +++ b/ci/build-dmg.sh @@ -1,8 +1,8 @@ #!/bin/bash -ex cd build/install -for i in metaforce crashpad_handler; do - codesign --timestamp --options runtime -s "$CODESIGN_IDENT" metaforce.app/Contents/MacOS/$i +for i in Metaforce crashpad_handler; do + codesign --timestamp --options runtime -s "$CODESIGN_IDENT" Metaforce.app/Contents/MacOS/$i done -create-dmg metaforce.app --identity="$CODESIGN_IDENT" . +create-dmg Metaforce.app --identity="$CODESIGN_IDENT" . xcrun altool -t osx -f *.dmg --primary-bundle-id com.axiodl.Metaforce \ --notarize-app -u "$ASC_USERNAME" -p "$ASC_PASSWORD" --team-id "$ASC_TEAM_ID" diff --git a/ci/build-ipa.sh b/ci/build-ipa.sh new file mode 100755 index 000000000..54de44fef --- /dev/null +++ b/ci/build-ipa.sh @@ -0,0 +1,7 @@ +#!/bin/bash -ex +cd build/install +rm -fr Payload +mkdir Payload +cp -r Metaforce.app Payload +zip -r Metaforce.zip Payload +mv Metaforce.zip Metaforce.ipa