Browse Source

Merge pull request #202 from AMZN-Olex/olex/physx4_monolithic_build_fix

Specified an explicit order of PhysX4 libraries
Olex Lozitskiy 2 years ago
parent
commit
3ef189c669

+ 39 - 10
package-system/PhysX/FindPhysX.cmake.template

@@ -55,17 +55,42 @@ set(extra_static_libs ${EXTRA_STATIC_LIBS_NON_MONOLITHIC})
 set(extra_shared_libs ${EXTRA_SHARED_LIBS})
 
 if(LY_MONOLITHIC_GAME)
-    list(APPEND $${MY_NAME}_LIBRARIES
-        $${PATH_TO_STATIC_LIBS}/$${CMAKE_STATIC_LIBRARY_PREFIX}PhysX_static_64$${CMAKE_STATIC_LIBRARY_SUFFIX}
-        $${PATH_TO_STATIC_LIBS}/$${CMAKE_STATIC_LIBRARY_PREFIX}PhysXCooking_static_64$${CMAKE_STATIC_LIBRARY_SUFFIX}
-        $${PATH_TO_STATIC_LIBS}/$${CMAKE_STATIC_LIBRARY_PREFIX}PhysXFoundation_static_64$${CMAKE_STATIC_LIBRARY_SUFFIX}
-        $${PATH_TO_STATIC_LIBS}/$${CMAKE_STATIC_LIBRARY_PREFIX}PhysXCommon_static_64$${CMAKE_STATIC_LIBRARY_SUFFIX}
+    if(LY_PHYSX_PROFILE_USE_CHECKED_LIBS)
+        set(MONO_PATH_TO_STATIC_LIBS $${CMAKE_CURRENT_LIST_DIR}/PhysX/static/checked/lib)
+    else()
+        set(MONO_PATH_TO_STATIC_LIBS $${CMAKE_CURRENT_LIST_DIR}/PhysX/static/profile/lib)
+    endif()
+    # The order of PhysX 4.x static libraries is important for monolithic targets.
+    set(IMPORTED_PHYSICS_LIBS
+        PhysX_static_64
+        PhysXPvdSDK_static_64
+        PhysXVehicle_static_64
+        PhysXCharacterKinematic_static_64
+        PhysXExtensions_static_64
+        PhysXCooking_static_64
+        PhysXCommon_static_64
+        PhysXFoundation_static_64
     )
-    if(extra_shared_libs)
-        set($${MY_NAME}_RUNTIME_DEPENDENCIES
-            $${extra_shared_libs}
+    foreach(PHYSICS_LIB $${IMPORTED_PHYSICS_LIBS})
+        add_library($${PHYSICS_LIB}::imported STATIC IMPORTED GLOBAL)
+        set($${PHYSICS_LIB}_PATH $${MONO_PATH_TO_STATIC_LIBS}/$${CMAKE_STATIC_LIBRARY_PREFIX}$${PHYSICS_LIB}$${CMAKE_STATIC_LIBRARY_SUFFIX})
+        set_target_properties($${PHYSICS_LIB}::imported
+            PROPERTIES
+                IMPORTED_LOCATION_DEBUG   $${$${PHYSICS_LIB}_PATH}
+                IMPORTED_LOCATION_PROFILE $${$${PHYSICS_LIB}_PATH}
+                IMPORTED_LOCATION_RELEASE $${$${PHYSICS_LIB}_PATH}
         )
-    endif()
+        target_link_libraries($${PHYSICS_LIB}::imported INTERFACE 
+            $${PREVIOUS_PHYSICS_LIB}
+            $${MONO_PATH_TO_STATIC_LIBS}/$${CMAKE_STATIC_LIBRARY_PREFIX}$${PHYSICS_LIB}$${CMAKE_STATIC_LIBRARY_SUFFIX}
+        )
+        set (PREVIOUS_PHYSICS_LIB $${PHYSICS_LIB}::imported)
+    endforeach()
+
+    add_library(Physx4_STATIC_LIBS_FOR_MONOLITHIC::imported INTERFACE IMPORTED GLOBAL)
+    target_link_libraries(Physx4_STATIC_LIBS_FOR_MONOLITHIC::imported INTERFACE
+        PhysXFoundation_static_64::imported
+    )
 else()
     list(APPEND $${MY_NAME}_LIBRARIES
         $${PATH_TO_IMPORT_LIBS}/$${import_lib_prefix}PhysX_64$${import_lib_suffix}
@@ -85,7 +110,11 @@ endif()
 
 add_library($${TARGET_WITH_NAMESPACE} INTERFACE IMPORTED GLOBAL)
 ly_target_include_system_directories(TARGET $${TARGET_WITH_NAMESPACE} INTERFACE $${$${MY_NAME}_INCLUDE_DIR})
-target_link_libraries($${TARGET_WITH_NAMESPACE} INTERFACE $${$${MY_NAME}_LIBRARIES})
+if(LY_MONOLITHIC_GAME)
+    target_link_libraries($${TARGET_WITH_NAMESPACE} INTERFACE Physx4_STATIC_LIBS_FOR_MONOLITHIC::imported)
+else()
+    target_link_libraries($${TARGET_WITH_NAMESPACE} INTERFACE $${$${MY_NAME}_LIBRARIES})
+endif()
 target_compile_definitions($${TARGET_WITH_NAMESPACE} INTERFACE $${$${MY_NAME}_COMPILE_DEFINITIONS})
 if(DEFINED $${MY_NAME}_RUNTIME_DEPENDENCIES)
     ly_add_target_files(TARGETS $${TARGET_WITH_NAMESPACE} FILES $${$${MY_NAME}_RUNTIME_DEPENDENCIES})

+ 1 - 1
package-system/PhysX/build_package_image.py

@@ -119,7 +119,7 @@ def main():
                 builder.writePackageInfoFile(
                     outputDir,
                     settings={
-                        'PackageName': f'PhysX-4.1.2.29882248-rev5-{args.platformName}',
+                        'PackageName': f'PhysX-4.1.2.29882248-rev6-{args.platformName}',
                         'URL': 'https://github.com/NVIDIAGameWorks/PhysX',
                         'License': 'BSD-3-Clause',
                         'LicenseFile': 'PhysX/LICENSE.md'

+ 41 - 6
package-system/PhysX5/FindPhysX.cmake

@@ -52,12 +52,43 @@ set(extra_static_libs ${EXTRA_STATIC_LIBS_NON_MONOLITHIC})
 set(extra_shared_libs ${EXTRA_SHARED_LIBS})
 
 if(LY_MONOLITHIC_GAME)
-    list(APPEND ${MY_NAME}_LIBRARIES
-        ${PATH_TO_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}PhysX_static_64${CMAKE_STATIC_LIBRARY_SUFFIX}
-        ${PATH_TO_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}PhysXCooking_static_64${CMAKE_STATIC_LIBRARY_SUFFIX}
-        ${PATH_TO_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}PhysXFoundation_static_64${CMAKE_STATIC_LIBRARY_SUFFIX}
-        ${PATH_TO_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}PhysXCommon_static_64${CMAKE_STATIC_LIBRARY_SUFFIX}
+    if(LY_PHYSX_PROFILE_USE_CHECKED_LIBS)
+        set(MONO_PATH_TO_STATIC_LIBS ${CMAKE_CURRENT_LIST_DIR}/PhysX/physx/bin/static/checked)
+    else()
+        set(MONO_PATH_TO_STATIC_LIBS ${CMAKE_CURRENT_LIST_DIR}/PhysX/physx/bin/static/profile)
+    endif()
+    # The order of PhysX 5.x static libraries is important for monolithic targets.
+    set(IMPORTED_PHYSICS_LIBS
+        PhysX_static_64
+        PhysXPvdSDK_static_64
+        PhysXVehicle_static_64
+        PhysXCharacterKinematic_static_64
+        PhysXExtensions_static_64
+        PhysXCooking_static_64
+        PhysXCommon_static_64
+        PhysXFoundation_static_64
+    )
+    foreach(PHYSICS_LIB ${IMPORTED_PHYSICS_LIBS})
+        add_library(${PHYSICS_LIB}::imported STATIC IMPORTED GLOBAL)
+        set(${PHYSICS_LIB}_PATH ${MONO_PATH_TO_STATIC_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${PHYSICS_LIB}${CMAKE_STATIC_LIBRARY_SUFFIX})
+        set_target_properties(${PHYSICS_LIB}::imported
+            PROPERTIES
+                IMPORTED_LOCATION_DEBUG   ${${PHYSICS_LIB}_PATH}
+                IMPORTED_LOCATION_PROFILE ${${PHYSICS_LIB}_PATH}
+                IMPORTED_LOCATION_RELEASE ${${PHYSICS_LIB}_PATH}
+        )
+        target_link_libraries(${PHYSICS_LIB}::imported INTERFACE 
+            ${PREVIOUS_PHYSICS_LIB}
+            ${MONO_PATH_TO_STATIC_LIBS}/${CMAKE_STATIC_LIBRARY_PREFIX}${PHYSICS_LIB}${CMAKE_STATIC_LIBRARY_SUFFIX}
+        )
+        set (PREVIOUS_PHYSICS_LIB ${PHYSICS_LIB}::imported)
+    endforeach()
+
+    add_library(Physx5_STATIC_LIBS_FOR_MONOLITHIC::imported INTERFACE IMPORTED GLOBAL)
+        target_link_libraries(Physx5_STATIC_LIBS_FOR_MONOLITHIC::imported INTERFACE
+        PhysXFoundation_static_64::imported
     )
+
     if(extra_shared_libs)
         set(${MY_NAME}_RUNTIME_DEPENDENCIES
             ${extra_shared_libs}
@@ -82,7 +113,11 @@ endif()
 
 add_library(${TARGET_WITH_NAMESPACE} INTERFACE IMPORTED GLOBAL)
 ly_target_include_system_directories(TARGET ${TARGET_WITH_NAMESPACE} INTERFACE ${${MY_NAME}_INCLUDE_DIR})
-target_link_libraries(${TARGET_WITH_NAMESPACE} INTERFACE ${${MY_NAME}_LIBRARIES})
+if(LY_MONOLITHIC_GAME)
+    target_link_libraries(${TARGET_WITH_NAMESPACE} INTERFACE Physx5_STATIC_LIBS_FOR_MONOLITHIC::imported)
+else()
+    target_link_libraries(${TARGET_WITH_NAMESPACE} INTERFACE ${${MY_NAME}_LIBRARIES})
+endif()
 target_compile_definitions(${TARGET_WITH_NAMESPACE} INTERFACE ${${MY_NAME}_COMPILE_DEFINITIONS})
 if(DEFINED ${MY_NAME}_RUNTIME_DEPENDENCIES)
     ly_add_target_files(TARGETS ${TARGET_WITH_NAMESPACE} FILES ${${MY_NAME}_RUNTIME_DEPENDENCIES})

+ 2 - 2
package_build_list_host_linux.json

@@ -24,7 +24,7 @@
         "OpenEXR-3.1.3-rev4-linux": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenEXR --platform-name Linux --package-root ../../package-system/OpenEXR/temp --clean",
         "OpenXR-1.0.22-rev2-linux": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenXR --platform-name Linux --package-root ../../package-system --clean",
         "openimageio-opencolorio-2.3.17-rev2-linux": "package-system/openimageio-opencolorio/build_openimageio.py --package-name=openimageio-opencolorio-2.3.17-rev2-linux --clean",
-        "PhysX-4.1.2.29882248-rev5-linux": "package-system/PhysX/build_package_image.py --platform-name linux",
+        "PhysX-4.1.2.29882248-rev6-linux": "package-system/PhysX/build_package_image.py --platform-name linux",
         "PhysX-5.1.1-rev1-linux": "package-system/PhysX5/build_package_image.py --platform-name linux",
         "NvCloth-v1.1.6-4-gd243404-pr58-rev1-linux": "package-system/NvCloth/build_package_image.py --platform-name linux",
         "poly2tri-7f0487a-rev1-linux": "package-system/poly2tri/build_package_image.py --platform-name linux",
@@ -76,7 +76,7 @@
         "tiff-4.2.0.15-rev3-linux": "package-system/tiff-linux",
         "python-3.10.5-rev3-linux": "package-system/python/temp/python-linux",
         "python-3.10.5-rev3-linux-aarch64": "package-system/python/temp/python-linux-aarch64",
-        "PhysX-4.1.2.29882248-rev5-linux": "package-system/PhysX-linux",
+        "PhysX-4.1.2.29882248-rev6-linux": "package-system/PhysX-linux",
         "PhysX-5.1.1-rev1-linux": "package-system/PhysX5/temp/PhysX5-linux",
         "NvCloth-v1.1.6-4-gd243404-pr58-rev1-linux": "package-system/NvCloth-linux",
         "mikkelsen-1.0.0.4-linux": "package-system/mikkelsen-linux",