@@ -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 )
6862endfunction ()
6963
7064add_compile_options (
@@ -88,10 +82,14 @@ else()
8882endif ()
8983
9084add_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+
9593set (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 ()
458420else ()
459421 add_executable (UnleashedRecomp ${UNLEASHED_RECOMP_CXX_SOURCES} )
460422endif ()
@@ -492,10 +454,6 @@ endif()
492454
493455if (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 ()
499457endif ()
500458
501459if (WIN32 )
@@ -527,6 +485,7 @@ set(UNLEASHED_RECOMP_LINK_LIBS
527485)
528486
529487if (CMAKE_SYSTEM_NAME STREQUAL "iOS" )
488+ list (PREPEND UNLEASHED_RECOMP_LINK_LIBS SDL2::SDL2main)
530489 list (APPEND UNLEASHED_RECOMP_LINK_LIBS "-framework UniformTypeIdentifiers" )
531490endif ()
532491
@@ -546,16 +505,6 @@ endif()
546505
547506target_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)
560509if (NOT DEFINED DIRECTX_DXC_TOOL)
561510 set (_dxc_vendor_dir "${CMAKE_SOURCE_DIR } /tools/XenosRecomp/thirdparty/dxc-bin" )
@@ -583,10 +532,6 @@ endif()
583532function (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 )
0 commit comments