diff options
| author | moraaar <[email protected]> | 2021-01-18 13:06:41 +0000 |
|---|---|---|
| committer | Marijn Tamis <[email protected]> | 2021-04-13 12:18:28 +0200 |
| commit | 1bc68df930bd60e8480204791fc1947c7141cded (patch) | |
| tree | 05edaa89d2468d76c74f23ecdbb6e63dfc6481b3 /NvCloth/compiler | |
| parent | Fix errors in licence.txt (diff) | |
| download | nvcloth-lumberyard.tar.xz nvcloth-lumberyard.zip | |
- Added support to build both share & static libraries on all platforms (pc, mac, ios, android, linux)lumberyard
+ Modified cmake files to be able to choose between static or dynamic libraries
+ Predefined NvCloth API macros when building staticly so it doesn't include any export/import code.
- Fixed linking error on iOS as it didn't include any implementation for Atomics (using unix version as Mac does)
- Fixed Windows cmake bug when choosing between /MT and /MD.
- Fixed linking error when NEON is enabled caused by compiling SwCollision.cpp, SwSelfCollision.cpp and SwSolverKernel.cpp content twice.
- Enabled NEON SIMD instructions on all platforms that supports it:
+ Modified NEON code to be platform agnostic using macros, not Android only.
+ Enbled NEON instructions on iOS
+ Modified Android cmake files to use the right macros depending on ABI being built.
- Fixed compilation error when client app uses NvCloth library and the app compiles with Visual Studio 2019.
+ Microsoft removed <typeinfo.h> from VS2019 16.3 and that header is used by NvCloth library. Fixed nVidia's NvCloth library to use <typeinfo> instead from that version.
- Fixed unstable cloth simulation on Android (armv8).
+ Cloth particles during simulation were very unstable on Android (armv8), their location gets out of control really quickly with very unpredictable behaviour. After many attempts to find the source of the problem debugging the library, the solution came by adding the flag "-ffast-math" in the compilation of the library for Android (armv8).
Diffstat (limited to 'NvCloth/compiler')
| -rw-r--r-- | NvCloth/compiler/cmake/android/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | NvCloth/compiler/cmake/android/NvCloth.cmake | 33 | ||||
| -rw-r--r-- | NvCloth/compiler/cmake/ios/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | NvCloth/compiler/cmake/ios/NvCloth.cmake | 25 | ||||
| -rw-r--r-- | NvCloth/compiler/cmake/linux/NvCloth.cmake | 14 | ||||
| -rw-r--r-- | NvCloth/compiler/cmake/mac/NvCloth.cmake | 18 | ||||
| -rw-r--r-- | NvCloth/compiler/cmake/windows/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | NvCloth/compiler/cmake/windows/NvCloth.cmake | 18 |
8 files changed, 85 insertions, 37 deletions
diff --git a/NvCloth/compiler/cmake/android/CMakeLists.txt b/NvCloth/compiler/cmake/android/CMakeLists.txt index 7ef0673..da911d1 100644 --- a/NvCloth/compiler/cmake/android/CMakeLists.txt +++ b/NvCloth/compiler/cmake/android/CMakeLists.txt @@ -16,14 +16,19 @@ ENDIF() if(${ANDROID_ABI} STREQUAL "armeabi-v7a") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-rtti -fno-exceptions -ffunction-sections -fdata-sections -funwind-tables -fomit-frame-pointer -funswitch-loops -finline-limit=300 -fno-strict-aliasing -fstack-protector -Wno-invalid-offsetof ") + SET(NVCLOTH_ANDROID_ABI_DEFS __arm__;PX_SIMD_DISABLED) elseif(${ANDROID_ABI} STREQUAL "armeabi-v7a with NEON") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-rtti -ffast-math -fno-exceptions -ffunction-sections -funwind-tables -fomit-frame-pointer -funswitch-loops -finline-limit=300 -fno-strict-aliasing -fstack-protector -Wno-invalid-offsetof ") + SET(NVCLOTH_ANDROID_ABI_DEFS __arm__;__ARM_NEON__;NV_SIMD_SCALAR=1) elseif(${ANDROID_ABI} STREQUAL "arm64-v8a") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-rtti -fno-exceptions -ffunction-sections -fdata-sections -Wno-invalid-offsetof ") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-rtti -ffast-math -fno-exceptions -ffunction-sections -fdata-sections -Wno-invalid-offsetof ") + SET(NVCLOTH_ANDROID_ABI_DEFS __arm64__;__ARM_NEON__) elseif(${ANDROID_ABI} STREQUAL "x86") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-rtti -fno-exceptions -ffunction-sections -fdata-sections -Wno-invalid-offsetof -fpack-struct=8 -malign-double ") + SET(NVCLOTH_ANDROID_ABI_DEFS __i386__) elseif(${ANDROID_ABI} STREQUAL "x86_64") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-rtti -fno-exceptions -ffunction-sections -fdata-sections -Wno-invalid-offsetof -mstackrealign -msse3 ") + SET(NVCLOTH_ANDROID_ABI_DEFS __x86_64__) endif() SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") @@ -33,8 +38,7 @@ SET(CMAKE_CXX_FLAGS_RELEASE "-O3") # a version from pxshared #SET(NVCLOTH_ANDROID_COMPILE_DEFS _LIB;__STDC_LIMIT_MACROS;) -# TODO: __ARM_NEON__;__arm64__ only on supporting archs -SET(NVCLOTH_ANDROID_COMPILE_DEFS _LIB;__STDC_LIMIT_MACROS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;PX_NVCLOTH_STATIC_LIB;__ARM_NEON__;__arm64__) +SET(NVCLOTH_ANDROID_COMPILE_DEFS _LIB;__STDC_LIMIT_MACROS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;${NVCLOTH_ANDROID_ABI_DEFS}) SET(NVCLOTH_ANDROID_DEBUG_COMPILE_DEFS _DEBUG;PX_DEBUG=1;PX_CHECKED=1) SET(NVCLOTH_ANDROID_CHECKED_COMPILE_DEFS NDEBUG;PX_CHECKED=1) SET(NVCLOTH_ANDROID_PROFILE_COMPILE_DEFS NDEBUG;PX_PROFILE=1) diff --git a/NvCloth/compiler/cmake/android/NvCloth.cmake b/NvCloth/compiler/cmake/android/NvCloth.cmake index 8463368..13fb92f 100644 --- a/NvCloth/compiler/cmake/android/NvCloth.cmake +++ b/NvCloth/compiler/cmake/android/NvCloth.cmake @@ -6,16 +6,25 @@ SET(GW_DEPS_ROOT $ENV{GW_DEPS_ROOT}) SET(NVCLOTH_SOURCE_DIR ${PROJECT_SOURCE_DIR}/../../../) +if(${ANDROID_ABI} STREQUAL "armeabi-v7a with NEON" OR ${ANDROID_ABI} STREQUAL "arm64-v8a") + SET(NVCLOTH_PLATFORM_NEON_FILES + ${PROJECT_ROOT_DIR}/src/neon/NeonCollision.cpp + ${PROJECT_ROOT_DIR}/src/neon/NeonSelfCollision.cpp + ${PROJECT_ROOT_DIR}/src/neon/NeonSolverKernel.cpp + ${PROJECT_ROOT_DIR}/src/neon/SwCollisionHelpers.h + ) +else() + SET(NVCLOTH_PLATFORM_NEON_FILES + ) +endif() + SET(NVCLOTH_PLATFORM_SOURCE_FILES ${PROJECT_ROOT_DIR}/src/ps/unix/PsUnixAtomic.cpp ${PROJECT_ROOT_DIR}/src/ps/unix/PsUnixFPU.h ${PROJECT_ROOT_DIR}/src/ps/android/cpu-features.c ${PROJECT_ROOT_DIR}/src/ps/android/cpu-features.h - ${PROJECT_ROOT_DIR}/src/neon/NeonCollision.cpp - ${PROJECT_ROOT_DIR}/src/neon/NeonSelfCollision.cpp - ${PROJECT_ROOT_DIR}/src/neon/NeonSolverKernel.cpp - ${PROJECT_ROOT_DIR}/src/neon/SwCollisionHelpers.h + ${NVCLOTH_PLATFORM_NEON_FILES} ) SET(NVCLOTH_PLATFORM_INCLUDES @@ -23,14 +32,18 @@ SET(NVCLOTH_PLATFORM_INCLUDES ${ANDROID_NDK}/sources/android/cpufeatures ) +IF(PX_STATIC_LIBRARIES) + SET(NVCLOTH_API_COMPILE_DEFS NV_CLOTH_IMPORT=;PX_CALL_CONV=;) +ELSE() + SET(NVCLOTH_API_COMPILE_DEFS NV_CLOTH_IMPORT=PX_DLL_EXPORT;) +ENDIF() + # Use generator expressions to set config specific preprocessor definitions SET(NVCLOTH_COMPILE_DEFS ${NVCLOTH_ANDROID_COMPILE_DEFS}; - NvCloth_STATIC_LIB; # TODO: needed? + ${NVCLOTH_API_COMPILE_DEFS} NV_ANDROID - NV_SIMD_SCALAR=1 # always compile scalar paths on android, so we may use them as fallback - NV_CLOTH_IMPORT=PX_DLL_EXPORT NV_CLOTH_ENABLE_DX11=0 NV_CLOTH_ENABLE_CUDA=0 @@ -40,5 +53,11 @@ SET(NVCLOTH_COMPILE_DEFS $<$<CONFIG:release>:${NVCLOTH_ANDROID_RELEASE_COMPILE_DEFS};> ) +IF(PX_STATIC_LIBRARIES) + SET(NVCLOTH_LIBTYPE STATIC) +ELSE() + SET(NVCLOTH_LIBTYPE SHARED) +ENDIF() + # include common low level settings INCLUDE(../common/NvCloth.cmake) diff --git a/NvCloth/compiler/cmake/ios/CMakeLists.txt b/NvCloth/compiler/cmake/ios/CMakeLists.txt index bf36e95..938a5bf 100644 --- a/NvCloth/compiler/cmake/ios/CMakeLists.txt +++ b/NvCloth/compiler/cmake/ios/CMakeLists.txt @@ -28,7 +28,7 @@ SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -g") SET(PHYSX_IOS_ENABLE_NVTX 0) # Disable cuda and dx for all projects on ios -SET(PHYSX_IOS_COMPILE_DEFS DISABLE_COMPUTE_PHYSX) +SET(PHYSX_IOS_COMPILE_DEFS DISABLE_COMPUTE_PHYSX;__ARM_NEON__) SET(PHYSX_IOS_DEBUG_COMPILE_DEFS _DEBUG;PX_DEBUG=1;PX_CHECKED=1;PX_NVTX=${PHYSX_IOS_ENABLE_NVTX};PX_SUPPORT_PVD=0) SET(PHYSX_IOS_CHECKED_COMPILE_DEFS NDEBUG;PX_CHECKED=1;PX_NVTX=${PHYSX_IOS_ENABLE_NVTX};PX_SUPPORT_PVD=0) SET(PHYSX_IOS_PROFILE_COMPILE_DEFS NDEBUG;PX_PROFILE=1;PX_NVTX=${PHYSX_IOS_ENABLE_NVTX};PX_SUPPORT_PVD=0) diff --git a/NvCloth/compiler/cmake/ios/NvCloth.cmake b/NvCloth/compiler/cmake/ios/NvCloth.cmake index 2da5516..c6722e3 100644 --- a/NvCloth/compiler/cmake/ios/NvCloth.cmake +++ b/NvCloth/compiler/cmake/ios/NvCloth.cmake @@ -15,15 +15,24 @@ SET(NVCLOTH_PLATFORM_INCLUDES ) SET(NVCLOTH_PLATFORM_SOURCE_FILES - #${PROJECT_ROOT_DIR}/src/neon/NeonCollision.cpp - #${PROJECT_ROOT_DIR}/src/neon/NeonSelfCollision.cpp - #${PROJECT_ROOT_DIR}/src/neon/NeonSolverKernel.cpp - #${PROJECT_ROOT_DIR}/src/neon/SwCollisionHelpers.h + ${PROJECT_ROOT_DIR}/src/ps/unix/PsUnixAtomic.cpp + ${PROJECT_ROOT_DIR}/src/ps/unix/PsUnixFPU.h + + ${PROJECT_ROOT_DIR}/src/neon/NeonCollision.cpp + ${PROJECT_ROOT_DIR}/src/neon/NeonSelfCollision.cpp + ${PROJECT_ROOT_DIR}/src/neon/NeonSolverKernel.cpp + ${PROJECT_ROOT_DIR}/src/neon/SwCollisionHelpers.h ) +IF(PX_STATIC_LIBRARIES) + SET(NVCLOTH_API_COMPILE_DEFS NV_CLOTH_IMPORT=;PX_CALL_CONV=;) +ELSE() + SET(NVCLOTH_API_COMPILE_DEFS NV_CLOTH_IMPORT=PX_DLL_EXPORT;) +ENDIF() + # Use generator expressions to set config specific preprocessor definitions SET(NVCLOTH_COMPILE_DEFS - NV_CLOTH_IMPORT=PX_DLL_EXPORT + ${NVCLOTH_API_COMPILE_DEFS} NV_CLOTH_ENABLE_DX11=0 NV_CLOTH_ENABLE_CUDA=0 @@ -36,7 +45,11 @@ SET(NVCLOTH_COMPILE_DEFS $<$<CONFIG:release>:${PHYSX_IOS_RELEASE_COMPILE_DEFS};> ) -SET(NVCLOTH_LIBTYPE STATIC) +IF(PX_STATIC_LIBRARIES) + SET(NVCLOTH_LIBTYPE STATIC) +ELSE() + SET(NVCLOTH_LIBTYPE SHARED) +ENDIF() # include common PhysX settings INCLUDE(../common/NvCloth.cmake) diff --git a/NvCloth/compiler/cmake/linux/NvCloth.cmake b/NvCloth/compiler/cmake/linux/NvCloth.cmake index 64188f0..0fb6750 100644 --- a/NvCloth/compiler/cmake/linux/NvCloth.cmake +++ b/NvCloth/compiler/cmake/linux/NvCloth.cmake @@ -32,10 +32,6 @@ SET(NVCLOTH_PLATFORM_INCLUDES SET(NVCLOTH_PLATFORM_SOURCE_FILES ${PROJECT_ROOT_DIR}/src/ps/unix/PsUnixAtomic.cpp ${PROJECT_ROOT_DIR}/src/ps/unix/PsUnixFPU.h - #${PROJECT_ROOT_DIR}/src/neon/NeonCollision.cpp - #${PROJECT_ROOT_DIR}/src/neon/NeonSelfCollision.cpp - #${PROJECT_ROOT_DIR}/src/neon/NeonSolverKernel.cpp - #${PROJECT_ROOT_DIR}/src/neon/SwCollisionHelpers.h ) IF(${NV_CLOTH_ENABLE_CUDA}) LIST(APPEND NVCLOTH_PLATFORM_SOURCE_FILES @@ -96,11 +92,15 @@ DEPENDS ${CUDA_FATBIN} ) ENDIF() - +IF(PX_STATIC_LIBRARIES) + SET(NVCLOTH_API_COMPILE_DEFS NV_CLOTH_IMPORT=;PX_CALL_CONV=;) +ELSE() + SET(NVCLOTH_API_COMPILE_DEFS NV_CLOTH_IMPORT=PX_DLL_EXPORT;) +ENDIF() # Use generator expressions to set config specific preprocessor definitions SET(NVCLOTH_COMPILE_DEFS - NV_CLOTH_IMPORT=PX_DLL_EXPORT + ${NVCLOTH_API_COMPILE_DEFS} NV_CLOTH_ENABLE_DX11=0 # Common to all configurations @@ -121,7 +121,7 @@ LIST(APPEND NVCLOTH_COMPILE_DEFS ) ENDIF() -IF(DEFINED PX_STATIC_LIBRARIES) +IF(PX_STATIC_LIBRARIES) SET(NVCLOTH_LIBTYPE STATIC) ELSE() SET(NVCLOTH_LIBTYPE SHARED) diff --git a/NvCloth/compiler/cmake/mac/NvCloth.cmake b/NvCloth/compiler/cmake/mac/NvCloth.cmake index 086b508..b5310b1 100644 --- a/NvCloth/compiler/cmake/mac/NvCloth.cmake +++ b/NvCloth/compiler/cmake/mac/NvCloth.cmake @@ -17,15 +17,17 @@ SET(NVCLOTH_PLATFORM_INCLUDES SET(NVCLOTH_PLATFORM_SOURCE_FILES ${PROJECT_ROOT_DIR}/src/ps/unix/PsUnixAtomic.cpp ${PROJECT_ROOT_DIR}/src/ps/unix/PsUnixFPU.h - #${PROJECT_ROOT_DIR}/src/neon/NeonCollision.cpp - #${PROJECT_ROOT_DIR}/src/neon/NeonSelfCollision.cpp - #${PROJECT_ROOT_DIR}/src/neon/NeonSolverKernel.cpp - #${PROJECT_ROOT_DIR}/src/neon/SwCollisionHelpers.h ) +IF(PX_STATIC_LIBRARIES) + SET(NVCLOTH_API_COMPILE_DEFS NV_CLOTH_IMPORT=;PX_CALL_CONV=;) +ELSE() + SET(NVCLOTH_API_COMPILE_DEFS NV_CLOTH_IMPORT=PX_DLL_EXPORT;) +ENDIF() + # Use generator expressions to set config specific preprocessor definitions SET(NVCLOTH_COMPILE_DEFS - NV_CLOTH_IMPORT=PX_DLL_EXPORT + ${NVCLOTH_API_COMPILE_DEFS} NV_CLOTH_ENABLE_DX11=0 NV_CLOTH_ENABLE_CUDA=0 @@ -38,7 +40,11 @@ SET(NVCLOTH_COMPILE_DEFS $<$<CONFIG:release>:${PHYSX_MAC_RELEASE_COMPILE_DEFS};> ) -SET(NVCLOTH_LIBTYPE SHARED) +IF(PX_STATIC_LIBRARIES) + SET(NVCLOTH_LIBTYPE STATIC) +ELSE() + SET(NVCLOTH_LIBTYPE SHARED) +ENDIF() # include common PhysX settings INCLUDE(../common/NvCloth.cmake) diff --git a/NvCloth/compiler/cmake/windows/CMakeLists.txt b/NvCloth/compiler/cmake/windows/CMakeLists.txt index 30f2a65..64630bf 100644 --- a/NvCloth/compiler/cmake/windows/CMakeLists.txt +++ b/NvCloth/compiler/cmake/windows/CMakeLists.txt @@ -25,7 +25,7 @@ SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE " /LTCG") SET(CMAKE_SHARED_LINKER_FLAGS_PROFILE " /LTCG") SET(CMAKE_SHARED_LINKER_FLAGS_CHECKED " /LTCG") -IF(DEFINED STATIC_WINCRT) +IF(STATIC_WINCRT) SET(WINCRT_NDEBUG "/MT") SET(WINCRT_DEBUG "/MTd") ELSE() diff --git a/NvCloth/compiler/cmake/windows/NvCloth.cmake b/NvCloth/compiler/cmake/windows/NvCloth.cmake index 065ea18..7641d1a 100644 --- a/NvCloth/compiler/cmake/windows/NvCloth.cmake +++ b/NvCloth/compiler/cmake/windows/NvCloth.cmake @@ -78,10 +78,6 @@ LIST(APPEND NVCLOTH_PLATFORM_SOURCE_FILES ${PROJECT_ROOT_DIR}/src/dx/DxSolverKernelBlob.h ${PROJECT_ROOT_DIR}/src/dx/DxSortKernel.inc - #${PROJECT_ROOT_DIR}/src/neon/NeonCollision.cpp - #${PROJECT_ROOT_DIR}/src/neon/NeonSelfCollision.cpp - #${PROJECT_ROOT_DIR}/src/neon/NeonSolverKernel.cpp - #${PROJECT_ROOT_DIR}/src/neon/SwCollisionHelpers.h ) ENDIF() @@ -134,9 +130,15 @@ DEPENDS ${CUDA_FATBIN} ) ENDIF() +IF(PX_STATIC_LIBRARIES) + SET(NVCLOTH_API_COMPILE_DEFS NV_CLOTH_IMPORT=;PX_CALL_CONV=;) +ELSE() + SET(NVCLOTH_API_COMPILE_DEFS NV_CLOTH_IMPORT=PX_DLL_EXPORT;) +ENDIF() + SET(NVCLOTH_COMPILE_DEFS - NV_CLOTH_IMPORT=PX_DLL_EXPORT + ${NVCLOTH_API_COMPILE_DEFS} $<$<CONFIG:debug>:${NVCLOTH_WINDOWS_DEBUG_COMPILE_DEFS};PX_PHYSX_DLL_NAME_POSTFIX=DEBUG;> $<$<CONFIG:checked>:${NVCLOTH_WINDOWS_CHECKED_COMPILE_DEFS};PX_PHYSX_DLL_NAME_POSTFIX=CHECKED;> @@ -162,7 +164,11 @@ LIST(APPEND NVCLOTH_COMPILE_DEFS ) ENDIF() -SET(NVCLOTH_LIBTYPE SHARED) +IF(PX_STATIC_LIBRARIES) + SET(NVCLOTH_LIBTYPE STATIC) +ELSE() + SET(NVCLOTH_LIBTYPE SHARED) +ENDIF() # include common NvCloth settings INCLUDE(../common/NvCloth.cmake) |