Skip to content

Commit 5d5adbc

Browse files
committed
remove seperate iOS launcher and unify app entry point
Use main.cpp as the sole application entry point via SDL_main.h and remove UnleashedRecompIOSLauncher to avoid duplicated build logic.
1 parent 0532161 commit 5d5adbc

3 files changed

Lines changed: 53 additions & 190 deletions

File tree

UnleashedRecomp/CMakeLists.txt

Lines changed: 50 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,8 @@ function(BIN2C)
5757
)
5858
endif()
5959

60-
set(_bin2c_target ${BIN2C_ARGS_TARGET_OBJ})
61-
62-
if(CMAKE_SYSTEM_NAME STREQUAL "iOS" AND TARGET UnleashedRecompIOSLauncher)
63-
set(_bin2c_target UnleashedRecompIOSLauncher)
64-
endif()
65-
6660
set_source_files_properties(${BIN2C_ARGS_DEST_FILE}.c PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
67-
target_sources(${_bin2c_target} PRIVATE ${BIN2C_ARGS_DEST_FILE}.c)
61+
target_sources(${BIN2C_ARGS_TARGET_OBJ} PRIVATE ${BIN2C_ARGS_DEST_FILE}.c)
6862
endfunction()
6963

7064
add_compile_options(
@@ -88,10 +82,14 @@ else()
8882
endif()
8983

9084
add_compile_definitions(
91-
SDL_MAIN_HANDLED
9285
_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR # Microsoft wtf?
9386
_CRT_SECURE_NO_WARNINGS)
9487

88+
# SDL owns the iOS process entry point and invokes the application's SDL_main.
89+
if(NOT CMAKE_SYSTEM_NAME STREQUAL "iOS")
90+
add_compile_definitions(SDL_MAIN_HANDLED)
91+
endif()
92+
9593
set(UNLEASHED_RECOMP_PRECOMPILED_HEADERS
9694
"stdafx.h"
9795
)
@@ -336,80 +334,36 @@ elseif(APPLE)
336334

337335
set(IOS_BUNDLE_VERSION ${MACOS_BUNDLE_VERSION})
338336

339-
add_executable(UnleashedRecomp MACOSX_BUNDLE
340-
${UNLEASHED_RECOMP_CXX_SOURCES}
341-
res/macos/game_icon.icns
342-
)
343-
set_source_files_properties(res/macos/game_icon.icns PROPERTIES
344-
MACOSX_PACKAGE_LOCATION Resources)
345-
set_target_properties(UnleashedRecomp PROPERTIES
346-
OUTPUT_NAME "Unleashed Recompiled"
347-
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/res/macos/MacOSXBundleInfo.plist.in
348-
MACOSX_BUNDLE_GUI_IDENTIFIER hedge-dev.UnleashedRecomp
349-
MACOSX_BUNDLE_BUNDLE_NAME "Unleashed Recompiled"
350-
MACOSX_BUNDLE_BUNDLE_VERSION ${MACOS_BUNDLE_VERSION}
351-
MACOSX_BUNDLE_SHORT_VERSION_STRING ${MACOS_BUNDLE_VERSION}
352-
MACOSX_BUNDLE_ICON_FILE "game_icon.icns"
353-
MACOSX_DEPLOYMENT_TARGET "${CMAKE_OSX_DEPLOYMENT_TARGET}"
354-
)
355-
356337
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
338+
add_executable(UnleashedRecomp MACOSX_BUNDLE ${UNLEASHED_RECOMP_CXX_SOURCES})
357339
set_target_properties(UnleashedRecomp PROPERTIES
358-
EXCLUDE_FROM_ALL TRUE
359-
EXCLUDE_FROM_DEFAULT_BUILD TRUE
360-
)
361-
endif()
362-
363-
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
364-
add_executable(UnleashedRecompIOSLauncher MACOSX_BUNDLE
365-
${UNLEASHED_RECOMP_CXX_SOURCES}
366-
"ios/launcher_main.mm"
367-
)
368-
set_target_properties(UnleashedRecompIOSLauncher PROPERTIES
369340
OUTPUT_NAME "Unleashed Recompiled iOS"
370341
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/res/ios/iOSBundleInfo.plist.in
371-
MACOSX_BUNDLE_GUI_IDENTIFIER hedge-dev.UnleashedRecomp.iOSLauncher
372-
MACOSX_BUNDLE_BUNDLE_NAME "Unleashed Recompiled"
373-
MACOSX_BUNDLE_BUNDLE_VERSION ${IOS_BUNDLE_VERSION}
374-
MACOSX_BUNDLE_SHORT_VERSION_STRING ${IOS_BUNDLE_VERSION}
375-
MACOSX_DEPLOYMENT_TARGET "${CMAKE_OSX_DEPLOYMENT_TARGET}"
376-
)
377-
378-
set_target_properties(UnleashedRecompIOSLauncher PROPERTIES
379-
OUTPUT_NAME "Unleashed Recompiled iOS"
380-
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/res/ios/iOSBundleInfo.plist.in
381-
MACOSX_BUNDLE_GUI_IDENTIFIER hedge-dev.UnleashedRecomp.iOSLauncher
342+
MACOSX_BUNDLE_GUI_IDENTIFIER hedge-dev.UnleashedRecomp.iOS
382343
MACOSX_BUNDLE_BUNDLE_NAME "Unleashed Recompiled"
383344
MACOSX_BUNDLE_BUNDLE_VERSION ${IOS_BUNDLE_VERSION}
384345
MACOSX_BUNDLE_SHORT_VERSION_STRING ${IOS_BUNDLE_VERSION}
385346
XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2"
386347
XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "${CMAKE_OSX_DEPLOYMENT_TARGET}"
387-
)
388-
389-
target_compile_definitions(UnleashedRecompIOSLauncher PRIVATE
390-
UNLEASHED_RECOMP_IOS_LAUNCHER
348+
BUILD_RPATH "@executable_path/Frameworks"
349+
INSTALL_RPATH "@executable_path/Frameworks"
391350
)
392351

393352
set(MVK_FRAMEWORK_PATH "Frameworks/MoltenVK.framework")
394353
set(MVK_ICD_PATH "vulkan/icd.d")
395354

396-
set(MVK_APP_DIR "$<TARGET_BUNDLE_DIR:UnleashedRecompIOSLauncher>")
355+
set(MVK_APP_DIR "$<TARGET_BUNDLE_DIR:UnleashedRecomp>")
397356
set(MVK_FRAMEWORK_DST "${MVK_APP_DIR}/${MVK_FRAMEWORK_PATH}")
398357
set(MVK_ICD_DST "${MVK_APP_DIR}/${MVK_ICD_PATH}")
399358

400-
set_target_properties(UnleashedRecompIOSLauncher PROPERTIES
401-
BUILD_RPATH "@executable_path/Frameworks"
402-
INSTALL_RPATH "@executable_path/Frameworks"
403-
)
404-
405359
set(MVK_ICD_SRC "${UNLEASHED_RECOMP_THIRDPARTY_ROOT}/MoltenVK/MoltenVK/MoltenVK/icd/MoltenVK_icd.json")
406360

407361
set(MVK_FRAMEWORK_SRC
408362
"${CMAKE_BINARY_DIR}/thirdparty/MoltenVK/MoltenVK.framework"
409363
)
410364

411365
add_custom_command(
412-
TARGET UnleashedRecompIOSLauncher POST_BUILD
366+
TARGET UnleashedRecomp POST_BUILD
413367
COMMAND ${CMAKE_COMMAND} -E make_directory "${MVK_FRAMEWORK_DST}"
414368
COMMAND ${CMAKE_COMMAND} -E copy_directory
415369
"${MVK_FRAMEWORK_SRC}"
@@ -418,43 +372,51 @@ elseif(APPLE)
418372
)
419373

420374
add_custom_command(
421-
TARGET UnleashedRecompIOSLauncher POST_BUILD
375+
TARGET UnleashedRecomp POST_BUILD
422376
COMMAND ${CMAKE_COMMAND} -E make_directory "${MVK_APP_DIR}/vulkan/icd.d"
423377
COMMAND ${CMAKE_COMMAND} -E copy
424378
"${MVK_ICD_SRC}"
425379
"${MVK_APP_DIR}/vulkan/icd.d/MoltenVK_icd.json"
426380
COMMENT "Copying MoltenVK ICD"
427381
)
428382

429-
add_dependencies(UnleashedRecompIOSLauncher MoltenVK)
430-
endif()
431-
432-
# Linking with MoltenVK directly would prevent using the system Vulkan loader to load with debug layers.
433-
# Instead, copy the MoltenVK dylib to the app bundle along with an ICD file for the loader to find it.
434-
# In the event the loader is not installed, the MoltenVK dylib can still be picked up directly in the app bundle.
435-
set(MVK_BUNDLED_PATH "Resources/vulkan/icd.d")
436-
set(MVK_DST "${CMAKE_CURRENT_BINARY_DIR}/Unleashed Recompiled.app/Contents/${MVK_BUNDLED_PATH}")
437-
set_property(TARGET UnleashedRecomp APPEND PROPERTY BUILD_RPATH "@executable_path/../${MVK_BUNDLED_PATH}")
438-
439-
set(MVK_ICD_SRC "${UNLEASHED_RECOMP_THIRDPARTY_ROOT}/MoltenVK/MoltenVK/MoltenVK/icd/MoltenVK_icd.json")
440-
set(MVK_ICD_DST "${MVK_DST}/MoltenVK_icd.json")
441-
set(MVK_DYLIB_SRC "${CMAKE_BINARY_DIR}/thirdparty/MoltenVK/MoltenVK.framework/MoltenVK")
442-
set(MVK_DYLIB_DST "${MVK_DST}/libMoltenVK.dylib")
383+
add_dependencies(UnleashedRecomp MoltenVK)
384+
else()
385+
add_executable(UnleashedRecomp MACOSX_BUNDLE
386+
${UNLEASHED_RECOMP_CXX_SOURCES}
387+
res/macos/game_icon.icns
388+
)
389+
set_source_files_properties(res/macos/game_icon.icns PROPERTIES
390+
MACOSX_PACKAGE_LOCATION Resources)
391+
set_target_properties(UnleashedRecomp PROPERTIES
392+
OUTPUT_NAME "Unleashed Recompiled"
393+
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/res/macos/MacOSXBundleInfo.plist.in
394+
MACOSX_BUNDLE_GUI_IDENTIFIER hedge-dev.UnleashedRecomp
395+
MACOSX_BUNDLE_BUNDLE_NAME "Unleashed Recompiled"
396+
MACOSX_BUNDLE_BUNDLE_VERSION ${MACOS_BUNDLE_VERSION}
397+
MACOSX_BUNDLE_SHORT_VERSION_STRING ${MACOS_BUNDLE_VERSION}
398+
MACOSX_BUNDLE_ICON_FILE "game_icon.icns"
399+
MACOSX_DEPLOYMENT_TARGET "${CMAKE_OSX_DEPLOYMENT_TARGET}"
400+
)
401+
# Linking with MoltenVK directly would prevent using the system Vulkan loader to load with debug layers.
402+
# Instead, copy the MoltenVK dylib to the app bundle along with an ICD file for the loader to find it.
403+
# In the event the loader is not installed, the MoltenVK dylib can still be picked up directly in the app bundle.
404+
set(MVK_BUNDLED_PATH "Resources/vulkan/icd.d")
405+
set(MVK_DST "${CMAKE_CURRENT_BINARY_DIR}/Unleashed Recompiled.app/Contents/${MVK_BUNDLED_PATH}")
406+
set_property(TARGET UnleashedRecomp APPEND PROPERTY BUILD_RPATH "@executable_path/../${MVK_BUNDLED_PATH}")
443407

444-
add_custom_command(
445-
OUTPUT ${MVK_DST}
446-
COMMAND ${CMAKE_COMMAND} -E make_directory ${MVK_DST})
447-
add_custom_command(
448-
OUTPUT ${MVK_ICD_DST}
449-
DEPENDS ${MVK_ICD_SRC} ${MVK_DST}
450-
COMMAND ${CMAKE_COMMAND} -E copy ${MVK_ICD_SRC} ${MVK_ICD_DST})
451-
add_custom_command(
452-
OUTPUT ${MVK_DYLIB_DST}
453-
DEPENDS ${MVK_DYLIB_SRC} ${MVK_DST}
454-
COMMAND ${CMAKE_COMMAND} -E copy ${MVK_DYLIB_SRC} ${MVK_DYLIB_DST})
455-
add_custom_target(CopyMoltenVK DEPENDS ${MVK_ICD_DST} ${MVK_DYLIB_DST})
456-
add_dependencies(CopyMoltenVK MoltenVK)
457-
add_dependencies(UnleashedRecomp CopyMoltenVK)
408+
set(MVK_ICD_SRC "${UNLEASHED_RECOMP_THIRDPARTY_ROOT}/MoltenVK/MoltenVK/MoltenVK/icd/MoltenVK_icd.json")
409+
set(MVK_ICD_DST "${MVK_DST}/MoltenVK_icd.json")
410+
set(MVK_DYLIB_SRC "${CMAKE_BINARY_DIR}/thirdparty/MoltenVK/MoltenVK.framework/MoltenVK")
411+
set(MVK_DYLIB_DST "${MVK_DST}/libMoltenVK.dylib")
412+
413+
add_custom_command(OUTPUT ${MVK_DST} COMMAND ${CMAKE_COMMAND} -E make_directory ${MVK_DST})
414+
add_custom_command(OUTPUT ${MVK_ICD_DST} DEPENDS ${MVK_ICD_SRC} ${MVK_DST} COMMAND ${CMAKE_COMMAND} -E copy ${MVK_ICD_SRC} ${MVK_ICD_DST})
415+
add_custom_command(OUTPUT ${MVK_DYLIB_DST} DEPENDS ${MVK_DYLIB_SRC} ${MVK_DST} COMMAND ${CMAKE_COMMAND} -E copy ${MVK_DYLIB_SRC} ${MVK_DYLIB_DST})
416+
add_custom_target(CopyMoltenVK DEPENDS ${MVK_ICD_DST} ${MVK_DYLIB_DST})
417+
add_dependencies(CopyMoltenVK MoltenVK)
418+
add_dependencies(UnleashedRecomp CopyMoltenVK)
419+
endif()
458420
else()
459421
add_executable(UnleashedRecomp ${UNLEASHED_RECOMP_CXX_SOURCES})
460422
endif()
@@ -492,10 +454,6 @@ endif()
492454

493455
if(UNLEASHED_RECOMP_METAL)
494456
target_compile_definitions(UnleashedRecomp PRIVATE UNLEASHED_RECOMP_METAL)
495-
496-
if(TARGET UnleashedRecompIOSLauncher)
497-
target_compile_definitions(UnleashedRecompIOSLauncher PRIVATE UNLEASHED_RECOMP_METAL)
498-
endif()
499457
endif()
500458

501459
if(WIN32)
@@ -527,6 +485,7 @@ set(UNLEASHED_RECOMP_LINK_LIBS
527485
)
528486

529487
if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
488+
list(PREPEND UNLEASHED_RECOMP_LINK_LIBS SDL2::SDL2main)
530489
list(APPEND UNLEASHED_RECOMP_LINK_LIBS "-framework UniformTypeIdentifiers")
531490
endif()
532491

@@ -546,16 +505,6 @@ endif()
546505

547506
target_precompile_headers(UnleashedRecomp PUBLIC ${UNLEASHED_RECOMP_PRECOMPILED_HEADERS})
548507

549-
if(TARGET UnleashedRecompIOSLauncher)
550-
target_link_libraries(UnleashedRecompIOSLauncher PRIVATE ${UNLEASHED_RECOMP_LINK_LIBS})
551-
target_include_directories(UnleashedRecompIOSLauncher PRIVATE
552-
${CMAKE_CURRENT_SOURCE_DIR}
553-
"${CMAKE_CURRENT_SOURCE_DIR}/api"
554-
${UNLEASHED_RECOMP_THIRDPARTY_INCLUDES}
555-
)
556-
target_precompile_headers(UnleashedRecompIOSLauncher PUBLIC ${UNLEASHED_RECOMP_PRECOMPILED_HEADERS})
557-
endif()
558-
559508
# If DXC tool not provided, try to pick up vendored host DXC (used for shader compilation)
560509
if(NOT DEFINED DIRECTX_DXC_TOOL)
561510
set(_dxc_vendor_dir "${CMAKE_SOURCE_DIR}/tools/XenosRecomp/thirdparty/dxc-bin")
@@ -583,10 +532,6 @@ endif()
583532
function(compile_shader FILE_PATH TARGET_NAME)
584533
set(_shader_target UnleashedRecomp)
585534

586-
if(CMAKE_SYSTEM_NAME STREQUAL "iOS" AND TARGET UnleashedRecompIOSLauncher)
587-
set(_shader_target UnleashedRecompIOSLauncher)
588-
endif()
589-
590535
set(HLSL_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/gpu/shader/hlsl/${FILE_PATH}.hlsl)
591536
set(MSL_FILE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/gpu/shader/msl/${FILE_PATH}.metal)
592537
cmake_path(GET HLSL_FILE_PATH STEM HLSL_NAME)

UnleashedRecomp/ios/launcher_main.mm

Lines changed: 0 additions & 81 deletions
This file was deleted.

UnleashedRecomp/main.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
#include <stdafx.h>
2+
#if defined(__IPHONEOS__)
3+
#include <SDL_main.h>
4+
#endif
25
#ifdef __x86_64__
36
#include <cpuid.h>
47
#endif
@@ -197,11 +200,7 @@ void init()
197200
}
198201
#endif
199202

200-
#if defined(UNLEASHED_RECOMP_IOS_LAUNCHER)
201-
int UnleashedMain(int argc, char *argv[])
202-
#else
203203
int main(int argc, char *argv[])
204-
#endif
205204
{
206205
#ifdef _WIN32
207206
timeBeginPeriod(1);

0 commit comments

Comments
 (0)