aboutsummaryrefslogtreecommitdiff
path: root/PxShared/src/compiler/cmake
diff options
context:
space:
mode:
authorMarijn Tamis <[email protected]>2018-05-03 18:22:48 +0200
committerMarijn Tamis <[email protected]>2018-05-03 18:22:48 +0200
commitca32c59a58d37c1822e185a2d5f3d0d3e8943593 (patch)
treeb06b9eec03f34344ef8fc31aa147b2714d3962ee /PxShared/src/compiler/cmake
parentForced rename of platform folders in cmake dir. Git didn't pick this up before. (diff)
downloadnvcloth-ca32c59a58d37c1822e185a2d5f3d0d3e8943593.tar.xz
nvcloth-ca32c59a58d37c1822e185a2d5f3d0d3e8943593.zip
NvCloth 1.1.4 Release. (24070740)
Diffstat (limited to 'PxShared/src/compiler/cmake')
-rw-r--r--PxShared/src/compiler/cmake/CMakeLists.txt84
-rw-r--r--PxShared/src/compiler/cmake/PxFoundation.cmake171
-rw-r--r--PxShared/src/compiler/cmake/templates/ProjectVersion.cmake.in24
-rw-r--r--PxShared/src/compiler/cmake/uwp/CMakeLists.txt64
-rw-r--r--PxShared/src/compiler/cmake/uwp/PxFoundation.cmake97
5 files changed, 440 insertions, 0 deletions
diff --git a/PxShared/src/compiler/cmake/CMakeLists.txt b/PxShared/src/compiler/cmake/CMakeLists.txt
new file mode 100644
index 0000000..680a8ca
--- /dev/null
+++ b/PxShared/src/compiler/cmake/CMakeLists.txt
@@ -0,0 +1,84 @@
+cmake_minimum_required(VERSION 3.7)
+PROJECT(PxShared C CXX)
+
+OPTION(PX_GENERATE_GPU_PROJECTS "Generate the GPU projects" ON)
+OPTION(PX_SCALAR_MATH "Forces the usage of non-SIMD vector math" OFF)
+
+SET(PXSHARED_MAJOR_VERSION 1)
+SET(PXSHARED_MINOR_VERSION 1)
+SET(PXSHARED_PATCH_VERSION 0)
+SET(PXSHARED_VERSION ${PXSHARED_MAJOR_VERSION}.${PXSHARED_MINOR_VERSION}.${PXSHARED_PATCH_VERSION})
+
+CMAKE_POLICY(SET CMP0057 NEW) # Enable IN_LIST
+CMAKE_POLICY(SET CMP0007 OLD) # Stop complaining about empty entries in lists
+
+IF(NOT DEFINED PXSHARED_ROOT_DIR)
+
+ STRING(REPLACE "\\" "/" BRD_TEMP $ENV{PXSHARED_ROOT_DIR})
+
+ # This env variable is set by GenerateProjects.bat, and is no longer available when CMake rebuilds, so this stores it in the cache
+ SET(PXSHARED_ROOT_DIR ${BRD_TEMP} CACHE INTERNAL "Root of the PxShared source tree")
+
+ENDIF()
+
+MESSAGE("PXSHARED ROOT ${PXSHARED_ROOT_DIR}")
+
+IF(NOT EXISTS ${PXSHARED_ROOT_DIR})
+ MESSAGE(FATAL_ERROR "PXSHARED_ROOT_DIR environment variable wasn't set or was invalid.")
+ENDIF()
+
+# GW_DEPS_ROOT can be defined by user to avoid packman usage
+IF(NOT EXISTS ${GW_DEPS_ROOT})
+ SET(GW_DEPS_ROOT $ENV{PM_PACKAGES_ROOT})
+ENDIF()
+
+IF(NOT DEFINED CMAKEMODULES_VERSION)
+ SET(CMAKEMODULES_PATH $ENV{PM_CMakeModules_PATH} CACHE INTERNAL "Path to CMakeModules")
+ SET(CMAKEMODULES_NAME $ENV{PM_CMakeModules_NAME} CACHE INTERNAL "CMakeModules name")
+ SET(CMAKEMODULES_VERSION $ENV{PM_CMakeModules_VERSION} CACHE INTERNAL "CMakeModules version from generation batch")
+ENDIF()
+
+#TODO: More elegance
+IF(NOT EXISTS ${CMAKEMODULES_PATH})
+ MESSAGE(FATAL_ERROR "Could not find ${CMAKEMODULES_PATH}")
+ENDIF()
+
+SET(CMAKE_MODULE_PATH "${CMAKEMODULES_PATH}")
+
+# Now set the paths
+
+INCLUDE(NvidiaBuildOptions)
+
+IF(CMAKE_CONFIGURATION_TYPES)
+ SET(CMAKE_CONFIGURATION_TYPES debug checked profile release)
+ SET(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
+ "Reset config to what we need"
+ FORCE)
+
+ SET(CMAKE_SHARED_LINKER_FLAGS_CHECKED "")
+ SET(CMAKE_SHARED_LINKER_FLAGS_PROFILE "")
+
+ # Build PDBs for all configurations
+ SET(CMAKE_SHARED_LINKER_FLAGS "/DEBUG")
+
+ENDIF()
+
+# Prevent failure due to command line limitations
+IF(USE_RESPONSE_FILES)
+ SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
+ SET(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES 1)
+ SET(CMAKE_C_USE_RESPONSE_FILE_FOR_LIBRARIES 1)
+ SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1)
+ SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES 1)
+ SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_LIBRARIES 1)
+ENDIF()
+
+SET(PROJECT_CMAKE_FILES_DIR src/compiler/cmake)
+SET(PLATFORM_CMAKELISTS ${PXSHARED_ROOT_DIR}/${PROJECT_CMAKE_FILES_DIR}/${TARGET_BUILD_PLATFORM}/CMakeLists.txt)
+
+IF(NOT EXISTS ${PLATFORM_CMAKELISTS})
+ MESSAGE(FATAL_ERROR "Unable to find platform CMakeLists.txt for ${TARGET_BUILD_PLATFORM} at ${PLATFORM_CMAKELISTS}")
+ENDIF()
+
+# Include the platform specific CMakeLists
+INCLUDE(${PXSHARED_ROOT_DIR}/${PROJECT_CMAKE_FILES_DIR}/${TARGET_BUILD_PLATFORM}/CMakeLists.txt)
diff --git a/PxShared/src/compiler/cmake/PxFoundation.cmake b/PxShared/src/compiler/cmake/PxFoundation.cmake
new file mode 100644
index 0000000..098b216
--- /dev/null
+++ b/PxShared/src/compiler/cmake/PxFoundation.cmake
@@ -0,0 +1,171 @@
+#
+# Build PxFoundation common
+#
+
+SET(PXSHARED_SOURCE_DIR ${PXSHARED_ROOT_DIR}/src)
+SET(LL_SOURCE_DIR ${PXSHARED_SOURCE_DIR}/foundation)
+
+# Include here after the directories are defined so that the platform specific file can use the variables.
+include(${PXSHARED_ROOT_DIR}/${PROJECT_CMAKE_FILES_DIR}/${TARGET_BUILD_PLATFORM}/PxFoundation.cmake)
+
+SET(PXFOUNDATION_HEADERS
+ ${PXSHARED_ROOT_DIR}/include/foundation/Px.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxAllocatorCallback.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxAssert.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxBitAndData.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxBounds3.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxErrorCallback.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxErrors.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxFlags.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxFoundation.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxFoundationVersion.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxIntrinsics.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxIO.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxMat33.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxMat44.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxMath.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxMathUtils.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxMemory.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxPlane.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxPreprocessor.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxProfiler.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxQuat.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxSimpleTypes.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxStrideIterator.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxTransform.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxUnionCast.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxVec2.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxVec3.h
+ ${PXSHARED_ROOT_DIR}/include/foundation/PxVec4.h
+)
+SOURCE_GROUP(include FILES ${PXFOUNDATION_HEADERS})
+
+SET(PXFOUNDATION_SOURCE
+ ${LL_SOURCE_DIR}/src/PsAllocator.cpp
+ ${LL_SOURCE_DIR}/src/PsAssert.cpp
+ ${LL_SOURCE_DIR}/src/PsFoundation.cpp
+ ${LL_SOURCE_DIR}/src/PsMathUtils.cpp
+ ${LL_SOURCE_DIR}/src/PsString.cpp
+ ${LL_SOURCE_DIR}/src/PsTempAllocator.cpp
+ ${LL_SOURCE_DIR}/src/PsUtilities.cpp
+)
+SOURCE_GROUP(src\\src FILES ${PXFOUNDATION_SOURCE})
+
+SET(PXFOUNDATION_SOURCE_HEADERS
+ ${LL_SOURCE_DIR}/include/Ps.h
+ ${LL_SOURCE_DIR}/include/PsAlignedMalloc.h
+ ${LL_SOURCE_DIR}/include/PsAlloca.h
+ ${LL_SOURCE_DIR}/include/PsAllocator.h
+ ${LL_SOURCE_DIR}/include/PsAoS.h
+ ${LL_SOURCE_DIR}/include/PsArray.h
+ ${LL_SOURCE_DIR}/include/PsAtomic.h
+ ${LL_SOURCE_DIR}/include/PsBasicTemplates.h
+ ${LL_SOURCE_DIR}/include/PsBitUtils.h
+ ${LL_SOURCE_DIR}/include/PsBroadcast.h
+ ${LL_SOURCE_DIR}/include/PsCpu.h
+ ${LL_SOURCE_DIR}/include/PsFoundation.h
+ ${LL_SOURCE_DIR}/include/PsFPU.h
+ ${LL_SOURCE_DIR}/include/PsHash.h
+ ${LL_SOURCE_DIR}/include/PsHashInternals.h
+ ${LL_SOURCE_DIR}/include/PsHashMap.h
+ ${LL_SOURCE_DIR}/include/PsHashSet.h
+ ${LL_SOURCE_DIR}/include/PsInlineAllocator.h
+ ${LL_SOURCE_DIR}/include/PsInlineAoS.h
+ ${LL_SOURCE_DIR}/include/PsInlineArray.h
+ ${LL_SOURCE_DIR}/include/PsIntrinsics.h
+ ${LL_SOURCE_DIR}/include/PsMathUtils.h
+ ${LL_SOURCE_DIR}/include/PsMutex.h
+ ${LL_SOURCE_DIR}/include/PsPool.h
+ ${LL_SOURCE_DIR}/include/PsSList.h
+ ${LL_SOURCE_DIR}/include/PsSocket.h
+ ${LL_SOURCE_DIR}/include/PsSort.h
+ ${LL_SOURCE_DIR}/include/PsSortInternals.h
+ ${LL_SOURCE_DIR}/include/PsString.h
+ ${LL_SOURCE_DIR}/include/PsSync.h
+ ${LL_SOURCE_DIR}/include/PsTempAllocator.h
+ ${LL_SOURCE_DIR}/include/PsThread.h
+ ${LL_SOURCE_DIR}/include/PsTime.h
+ ${LL_SOURCE_DIR}/include/PsUserAllocated.h
+ ${LL_SOURCE_DIR}/include/PsUtilities.h
+ ${LL_SOURCE_DIR}/include/PsVecMath.h
+ ${LL_SOURCE_DIR}/include/PsVecMathAoSScalar.h
+ ${LL_SOURCE_DIR}/include/PsVecMathAoSScalarInline.h
+ ${LL_SOURCE_DIR}/include/PsVecMathSSE.h
+ ${LL_SOURCE_DIR}/include/PsVecMathUtilities.h
+ ${LL_SOURCE_DIR}/include/PsVecQuat.h
+ ${LL_SOURCE_DIR}/include/PsVecTransform.h
+)
+SOURCE_GROUP("src\\include" FILES ${PXFOUNDATION_SOURCE_HEADERS})
+
+ADD_LIBRARY(PxFoundation ${PXFOUNDATION_LIBTYPE}
+ ${PXFOUNDATION_SOURCE}
+ ${PXFOUNDATION_SOURCE_HEADERS}
+ ${PXFOUNDATION_HEADERS}
+
+ ${PXFOUNDATION_PLATFORM_FILES}
+)
+
+# Add the headers to the install
+INSTALL(FILES ${PXFOUNDATION_HEADERS} DESTINATION include/foundation)
+
+INSTALL(FILES ${PXFOUNDATION_SOURCE_HEADERS} DESTINATION src/foundation/include)
+
+TARGET_INCLUDE_DIRECTORIES(PxFoundation
+ PRIVATE ${PXSHARED_ROOT_DIR}/include
+ PRIVATE ${LL_SOURCE_DIR}/include
+
+ PRIVATE ${PXFOUNDATION_PLATFORM_INCLUDES}
+
+ INTERFACE $<INSTALL_INTERFACE:include>$<BUILD_INTERFACE:${PXSHARED_ROOT_DIR}/include> ${PXFOUNDATION_PLATFORM_INTERFACE_HEADERS}
+ INTERFACE $<INSTALL_INTERFACE:include/foundation>$<BUILD_INTERFACE:${PXSHARED_ROOT_DIR}/include/foundation>
+ #INTERFACE $<INSTALL_INTERFACE:include/foundation/windows>$<BUILD_INTERFACE:${PXSHARED_ROOT_DIR}/include/foundation/windows>
+
+ # FIXME: This is really terrible! Don't export src directories
+ INTERFACE $<INSTALL_INTERFACE:src/foundation/include>$<BUILD_INTERFACE:${PXSHARED_ROOT_DIR}/src/foundation/include>
+
+)
+
+TARGET_COMPILE_DEFINITIONS(PxFoundation
+ PRIVATE ${PXFOUNDATION_COMPILE_DEFS}
+)
+
+# Add linked libraries
+TARGET_LINK_LIBRARIES(PxFoundation
+ PRIVATE ${PXFOUNDATION_PLATFORM_LINKED_LIBS}
+)
+
+
+IF(USE_GAMEWORKS_OUTPUT_DIRS AND PXFOUNDATION_LIBTYPE STREQUAL "STATIC")
+ SET_TARGET_PROPERTIES(PxFoundation PROPERTIES
+ ARCHIVE_OUTPUT_NAME_DEBUG "PxFoundation_static"
+ ARCHIVE_OUTPUT_NAME_CHECKED "PxFoundation_static"
+ ARCHIVE_OUTPUT_NAME_PROFILE "PxFoundation_static"
+ ARCHIVE_OUTPUT_NAME_RELEASE "PxFoundation_static"
+ )
+
+ IF(DEFINED CMAKE_DEBUG_POSTFIX)
+ SET_TARGET_PROPERTIES(PxFoundation PROPERTIES
+ COMPILE_PDB_NAME_DEBUG "PxFoundation_static_${CMAKE_DEBUG_POSTFIX}"
+ COMPILE_PDB_NAME_CHECKED "PxFoundation_static_${CMAKE_CHECKED_POSTFIX}"
+ COMPILE_PDB_NAME_PROFILE "PxFoundation_static_${CMAKE_PROFILE_POSTFIX}"
+ COMPILE_PDB_NAME_RELEASE "PxFoundation_static_${CMAKE_RELEASE_POSTFIX}"
+ )
+ ELSE()
+ SET_TARGET_PROPERTIES(PxFoundation PROPERTIES
+ COMPILE_PDB_NAME_DEBUG "PxFoundation_static"
+ COMPILE_PDB_NAME_CHECKED "PxFoundation_static"
+ COMPILE_PDB_NAME_PROFILE "PxFoundation_static"
+ COMPILE_PDB_NAME_RELEASE "PxFoundation_static"
+ )
+ ENDIF()
+ELSE()
+ SET_TARGET_PROPERTIES(PxFoundation PROPERTIES
+ COMPILE_PDB_NAME_DEBUG "PxFoundation${CMAKE_DEBUG_POSTFIX}"
+ COMPILE_PDB_NAME_CHECKED "PxFoundation${CMAKE_CHECKED_POSTFIX}"
+ COMPILE_PDB_NAME_PROFILE "PxFoundation${CMAKE_PROFILE_POSTFIX}"
+ COMPILE_PDB_NAME_RELEASE "PxFoundation${CMAKE_RELEASE_POSTFIX}"
+ )
+ENDIF()
+
+# enable -fPIC so we can link static libs with the editor
+SET_TARGET_PROPERTIES(PxFoundation PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
diff --git a/PxShared/src/compiler/cmake/templates/ProjectVersion.cmake.in b/PxShared/src/compiler/cmake/templates/ProjectVersion.cmake.in
new file mode 100644
index 0000000..650b862
--- /dev/null
+++ b/PxShared/src/compiler/cmake/templates/ProjectVersion.cmake.in
@@ -0,0 +1,24 @@
+set(PACKAGE_VERSION "@PXSHARED_VERSION@")
+
+if("@PXSHARED_VERSION@" MATCHES "^([0-9]+\\.[0-9]+\\.[0-9]+)\\.") # strip the tweak version
+ set(CVF_VERSION_NO_TWEAK "${CMAKE_MATCH_1}")
+else()
+ set(CVF_VERSION_NO_TWEAK "1.1.0")
+endif()
+
+if(PACKAGE_FIND_VERSION MATCHES "^([0-9]+\\.[0-9]+\\.[0-9]+)\\.") # strip the tweak version
+ set(REQUESTED_VERSION_NO_TWEAK "${CMAKE_MATCH_1}")
+else()
+ set(REQUESTED_VERSION_NO_TWEAK "${PACKAGE_FIND_VERSION}")
+endif()
+
+if(REQUESTED_VERSION_NO_TWEAK STREQUAL CVF_VERSION_NO_TWEAK)
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+else()
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+endif()
+
+if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
+ set(PACKAGE_VERSION_EXACT TRUE)
+endif()
+
diff --git a/PxShared/src/compiler/cmake/uwp/CMakeLists.txt b/PxShared/src/compiler/cmake/uwp/CMakeLists.txt
new file mode 100644
index 0000000..dd3250e
--- /dev/null
+++ b/PxShared/src/compiler/cmake/uwp/CMakeLists.txt
@@ -0,0 +1,64 @@
+
+SET(CMAKE_CXX_FLAGS "/Wall /wd4514 /wd4820 /wd4127 /wd4710 /wd4711 /wd4577 /wd4530 /d2Zi+ /WX /W4 /ZW /GF /GS- /GR- /Gd /fp:fast ${DISABLE_ITERATOR_DEBUGGING}")
+
+SET(CMAKE_CXX_FLAGS_DEBUG "/Od ${WINCRT_NDEBUG} /Zi")
+SET(CMAKE_CXX_FLAGS_CHECKED "/Ox ${WINCRT_NDEBUG} /Zi")
+SET(CMAKE_CXX_FLAGS_PROFILE "/Ox ${WINCRT_NDEBUG} /Zi")
+SET(CMAKE_CXX_FLAGS_RELEASE "/Ox ${WINCRT_NDEBUG} /Zi")
+
+# Build PDBs for all configurations
+SET(CMAKE_SHARED_LINKER_FLAGS "/DEBUG")
+
+# Controls PX_NVTX for all projects on windows
+SET(PXSHARED_UWP_ENABLE_NVTX 0)
+
+# Disable cuda and dx for all projects on windows
+SET(PXSHARED_UWP_COMPILE_DEFS WIN32;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_WINSOCK_DEPRECATED_NO_WARNINGS;DISABLE_CUDA_PHYSX;)
+
+SET(PXSHARED_UWP_DEBUG_COMPILE_DEFS PX_DEBUG=1;PX_CHECKED=1;PX_NVTX=${PXSHARED_UWP_ENABLE_NVTX})
+SET(PXSHARED_UWP_CHECKED_COMPILE_DEFS PX_CHECKED=1;PX_NVTX=${PXSHARED_UWP_ENABLE_NVTX})
+SET(PXSHARED_UWP_PROFILE_COMPILE_DEFS PX_PROFILE=1;PX_NVTX=${PXSHARED_UWP_ENABLE_NVTX})
+SET(PXSHARED_UWP_RELEASE_COMPILE_DEFS )
+
+IF(PX_SCALAR_MATH)
+ ADD_DEFINITIONS(-DPX_SIMD_DISABLED)
+ENDIF()
+
+IF(CMAKE_CL_64)
+ ADD_DEFINITIONS(-DWIN64)
+ENDIF(CMAKE_CL_64)
+
+
+# Include project cmake files here
+IF(DEFINED PX_SELECT_COMPONENTS)
+ if ("PxFoundation" IN_LIST PX_SELECT_COMPONENTS)
+ INCLUDE(PxFoundation.cmake)
+ endif()
+ELSE()
+ INCLUDE(PxFoundation.cmake)
+
+ INCLUDE(CMakePackageConfigHelpers)
+
+ configure_file(templates/ProjectVersion.cmake.in ${PXSHARED_ROOT_DIR}/pxshared-config-version.cmake @ONLY)
+
+# WRITE_BASIC_PACKAGE_VERSION_FILE(${PXSHARED_ROOT_DIR}/pxshared-config-version.cmake VERSION ${PXSHARED_VERSION} COMPATIBILITY ExactVersion)
+
+ SET(PXSHARED_LIBS PxFoundation)
+
+ # PX_ROOT_LIB_DIR is set by NvidiaBuildOptions and put into the cache. It's a relative path to the lib dir without config
+
+ install(
+ TARGETS ${PXSHARED_LIBS}
+ EXPORT PxShared
+ DESTINATION $<$<CONFIG:debug>:${PX_ROOT_LIB_DIR}/debug>$<$<CONFIG:release>:${PX_ROOT_LIB_DIR}/release>$<$<CONFIG:checked>:${PX_ROOT_LIB_DIR}/checked>$<$<CONFIG:profile>:${PX_ROOT_LIB_DIR}/profile> )
+
+ install(EXPORT PxShared FILE pxshared-config.cmake DESTINATION cmake)
+
+ install(FILES ${PXSHARED_ROOT_DIR}/pxshared-config-version.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake)
+
+ # This doesn't use libpath-suffix, as it won't have the "wrapper" top
+ export(EXPORT PxShared FILE ${PXSHARED_ROOT_DIR}/pxshared-config.cmake)
+
+
+ENDIF()
+
diff --git a/PxShared/src/compiler/cmake/uwp/PxFoundation.cmake b/PxShared/src/compiler/cmake/uwp/PxFoundation.cmake
new file mode 100644
index 0000000..a4b666d
--- /dev/null
+++ b/PxShared/src/compiler/cmake/uwp/PxFoundation.cmake
@@ -0,0 +1,97 @@
+#
+# Build PxFoundation
+#
+
+# Can no longer just use LIBPATH_SUFFIX since it depends on build type
+IF(CMAKE_CL_64)
+ SET(RESOURCE_LIBPATH_SUFFIX "x64")
+ELSEIF(${PX_OUTPUT_ARCH} STREQUAL "arm")
+ SET(RESOURCE_LIBPATH_SUFFIX "arm")
+ELSE(CMAKE_CL_64)
+ SET(RESOURCE_LIBPATH_SUFFIX "x86")
+ENDIF(CMAKE_CL_64)
+
+SET(PXFOUNDATION_LIBTYPE SHARED)
+
+SET(PXFOUNDATION_RESOURCE_FILE
+ ${PXSHARED_SOURCE_DIR}/compiler/resource_${RESOURCE_LIBPATH_SUFFIX}/PxFoundation.rc
+)
+SOURCE_GROUP(resource FILES ${PXFOUNDATION_RESOURCE_FILE})
+
+SET(PXFOUNDATION_PLATFORM_HEADERS
+ ${PXSHARED_ROOT_DIR}/include/foundation/windows/PxWindowsIntrinsics.h
+)
+SOURCE_GROUP("include\\windows" FILES ${PXFOUNDATION_PLATFORM_HEADERS})
+
+SET(PXFOUNDATION_PLATFORM_SOURCE
+ ${LL_SOURCE_DIR}/src/windows/PsWindowsAtomic.cpp
+ ${LL_SOURCE_DIR}/src/windows/PsWindowsCpu.cpp
+ ${LL_SOURCE_DIR}/src/windows/PsWindowsFPU.cpp
+ ${LL_SOURCE_DIR}/src/windows/PsWindowsMutex.cpp
+ ${LL_SOURCE_DIR}/src/windows/PsWindowsPrintString.cpp
+ ${LL_SOURCE_DIR}/src/windows/PsWindowsSList.cpp
+ ${LL_SOURCE_DIR}/src/windows/PsWindowsSocket.cpp
+ ${LL_SOURCE_DIR}/src/windows/PsWindowsSync.cpp
+ ${LL_SOURCE_DIR}/src/windows/PsWindowsTime.cpp
+)
+SOURCE_GROUP("src\\src\\windows" FILES ${PXFOUNDATION_PLATFORM_SOURCE})
+
+SET(PXFOUNDATION_UWP_PLATFORM_SOURCE
+ ${LL_SOURCE_DIR}/src/windows/PsUWPThread.cpp
+)
+SOURCE_GROUP("src\\src\\uwp" FILES ${PXFOUNDATION_UWP_PLATFORM_SOURCE})
+
+
+SET(PXFOUNDATION_PLATFORM_SOURCE_HEADERS
+ ${LL_SOURCE_DIR}/include/windows/PsWindowsAoS.h
+ ${LL_SOURCE_DIR}/include/windows/PsWindowsFPU.h
+ ${LL_SOURCE_DIR}/include/windows/PsWindowsInclude.h
+ ${LL_SOURCE_DIR}/include/windows/PsWindowsInlineAoS.h
+ ${LL_SOURCE_DIR}/include/windows/PsWindowsIntrinsics.h
+ ${LL_SOURCE_DIR}/include/windows/PsWindowsLoadLibrary.h
+ ${LL_SOURCE_DIR}/include/windows/PsWindowsTrigConstants.h
+)
+SOURCE_GROUP("src\\include\\windows" FILES ${PXFOUNDATION_PLATFORM_SOURCE_HEADERS})
+
+SET(PXFOUNDATION_PLATFORM_SOURCE_HEADERS_2
+ ${LL_SOURCE_DIR}/include/unix/PsUnixInlineAoS.h
+ ${LL_SOURCE_DIR}/include/unix/PsUnixTrigConstants.h
+)
+SOURCE_GROUP("src\\include\\unix" FILES ${PXFOUNDATION_PLATFORM_SOURCE_HEADERS_2})
+
+SET(PXFOUNDATION_PLATFORM_SOURCE_HEADERS_3
+ ${LL_SOURCE_DIR}/include/unix/neon/PsUnixNeonAoS.h
+ ${LL_SOURCE_DIR}/include/unix/neon/PsUnixNeonInlineAoS.h
+)
+SOURCE_GROUP("src\\include\\unix\\neon" FILES ${PXFOUNDATION_PLATFORM_SOURCE_HEADERS_3})
+
+INSTALL(FILES ${PXFOUNDATION_PLATFORM_HEADERS} DESTINATION include/foundation/windows)
+
+INSTALL(FILES ${PXFOUNDATION_PLATFORM_SOURCE_HEADERS} DESTINATION src/foundation/include/windows)
+INSTALL(FILES ${PXFOUNDATION_PLATFORM_SOURCE_HEADERS_2} DESTINATION src/foundation/include/unix)
+INSTALL(FILES ${PXFOUNDATION_PLATFORM_SOURCE_HEADERS_3} DESTINATION src/foundation/include/unix/neon)
+
+SET(PXFOUNDATION_PLATFORM_FILES
+ ${PXFOUNDATION_PLATFORM_HEADERS}
+ ${PXFOUNDATION_PLATFORM_SOURCE}
+ ${PXFOUNDATION_UWP_PLATFORM_SOURCE}
+ ${PXFOUNDATION_PLATFORM_SOURCE_HEADERS}
+ ${PXFOUNDATION_RESOURCE_FILE}
+)
+
+SET(PXFOUNDATION_PLATFORM_INCLUDES
+ ${LL_SOURCE_DIR}/include/windows
+)
+
+SET(PXFOUNDATION_COMPILE_DEFS
+ # Common to all configurations
+ ${PXSHARED_UWP_COMPILE_DEFS};PX_FOUNDATION_DLL=1;
+
+ $<$<CONFIG:debug>:${PXSHARED_UWP_DEBUG_COMPILE_DEFS};>
+ $<$<CONFIG:checked>:${PXSHARED_UWP_CHECKED_COMPILE_DEFS};>
+ $<$<CONFIG:profile>:${PXSHARED_UWP_PROFILE_COMPILE_DEFS};>
+ $<$<CONFIG:release>:${PXSHARED_UWP_RELEASE_COMPILE_DEFS};>
+)
+
+SET(PXFOUNDATION_PLATFORM_INTERFACE_HEADERS "$<INSTALL_INTERFACE:include/foundation/windows>$<BUILD_INTERFACE:${PXSHARED_ROOT_DIR}/include/foundation/windows>")
+