Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,10 @@ _deps
*.vpc
*.vpc.sentinel
*.vpc_crc

# Parts from builds
*.recipe
*.lastbuildstate
*.exp
*.ilk
build*/
258 changes: 127 additions & 131 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,73 +1,66 @@
# Copyright (c) 2020, Valve Software
#
# SPDX-License-Identifier: BSD-3-Clause

cmake_minimum_required(VERSION 3.10)
set(CMAKE_SUPPRESS_REGENERATION true)
project(unity_xr_openvr_plugin)

# C++ 17 - note cmake minver is 3.10 supported only on MS C++ 2015 Update 3 and above
# C++ 17 - note cmake minver is 3.10 supported only on MS C++ 2015 Update 3 and
# above
message(STATUS "Project language set to C++17")

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(BINARY_RUNTIME_PATH "${CMAKE_SOURCE_DIR}/com.valve.openvr/Runtime")

# Determine platform architecture
message(STATUS "Checking platform architecture...")
set(PACKAGE "com.valve.openvr")

# Auto determine platform if none is provided
if(NOT PLATFORM)
if(CMAKE_SIZEOF_VOID_P MATCHES 8)
set(PLATFORM 64)
set(PLATFORM 64)
else()
set(PLATFORM 32)
set(PLATFORM 32)
endif()
endif()

# Platform binary path
if(PLATFORM MATCHES 64)
set(PLATFORMX "x64")
else()
set(PLATFORMX "x86")
set(PLATFORMX "x86")
endif()

set(BINARY_PATH "${CMAKE_SOURCE_DIR}/com.valve.openvr/Runtime/${PLATFORMX}")
message(STATUS "Platform binary path set to: ${BINARY_PATH}")
option(
COPY_TO_PACKAGE
"Should the binaries be copied to the ${PACKAGE} package as a post-build step? This will modify the source tree!"
ON)

set(DEST "${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE}/Runtime/${PLATFORMX}")

# Set Platform
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
add_definitions(-DLINUX -DPOSIX)
set(OPENVR_API_NAME "libopenvr_api")
set(COMPILED_LIB_TYPE "so")
set(IMPORT_LIB_TYPE "so.dbg")
set(ARCH_TARGET linux64)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath -Wl,'$ORIGIN'")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

if(${PLATFORM} MATCHES 32)
message(WARNING "OpenVR x86 binaries not provided on x86 GNU/Linux.")
endif()
add_definitions(-DLINUX -DPOSIX)
set(CMAKE_SHARED_LINKER_FLAGS
"${CMAKE_SHARED_LINKER_FLAGS} -Wl,-rpath -Wl,'$ORIGIN'")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
if(${MSVC_VERSION} VERSION_LESS 1919)
set(PDBFILE "vc141.pdb")
else()
set(PDBFILE "vc142.pdb")
if(${PLATFORM} MATCHES 32)
message(WARNING "OpenVR x86 binaries not provided on x86 GNU/Linux.")
endif()

elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
add_definitions(-D_WIN32)
add_compile_options("/Zi")
set(OPENVR_API_NAME "openvr_api")
set(COMPILED_LIB_TYPE "dll")
set(IMPORT_LIB_TYPE "lib")
set(ARCH_TARGET win${PLATFORM})
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS True)
endif()

if(MSVC)
message(WARNING "Adding static link option.")
add_compile_options(
$<$<CONFIG:>:/MT> #---------|
$<$<CONFIG:Debug>:/MTd> #---|-- Statically link the runtime libraries
$<$<CONFIG:Release>:/MT> #--|
)
# Statically link the runtime libraries
add_compile_options(
$<$<CONFIG:>:/MT>
$<$<CONFIG:Debug>:/MTd>
$<$<CONFIG:Release>:/MT>
$<$<CONFIG:RelWithDebInfo>:/MT>)
endif()

message(STATUS "Compilation set for ${CMAKE_SYSTEM_NAME} ${PLATFORM}bit")
Expand All @@ -76,107 +69,110 @@ message(STATUS "Compilation set for ${CMAKE_SYSTEM_NAME} ${PLATFORM}bit")
message(STATUS "Adding XRSDKOpenVR...")

add_library(XRSDKOpenVR SHARED
${CMAKE_SOURCE_DIR}/Providers/dllmain.cpp
${CMAKE_SOURCE_DIR}/Providers/OpenVRProviderContext.h
${CMAKE_SOURCE_DIR}/Providers/OpenVRSystem.h ${CMAKE_SOURCE_DIR}/Providers/OpenVRSystem.cpp
${CMAKE_SOURCE_DIR}/Providers/UserProjectSettings.h ${CMAKE_SOURCE_DIR}/Providers/UserProjectSettings.cpp

${CMAKE_SOURCE_DIR}/Providers/Display/Display.h ${CMAKE_SOURCE_DIR}/Providers/Display/Display.cpp
${CMAKE_SOURCE_DIR}/Providers/Input/Input.h ${CMAKE_SOURCE_DIR}/Providers/Input/Input.cpp

${CMAKE_SOURCE_DIR}/CommonHeaders/UnityInterfaces.h ${CMAKE_SOURCE_DIR}/CommonHeaders/UnityInterfaces.cpp

${CMAKE_SOURCE_DIR}/CommonHeaders/Singleton.h
${CMAKE_SOURCE_DIR}/CommonHeaders/CommonTypes.h

${CMAKE_SOURCE_DIR}/CommonHeaders/OpenVR/openvr.h
${CMAKE_SOURCE_DIR}/CommonHeaders/OpenVR/openvr_driver.h

${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityXRAudio.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityEventQueue.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityGraphics.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityGraphicsD3D11.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityGraphicsD3D12.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityGraphicsMetal.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityGraphicsVulkan.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityInterface.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityProfilerCallbacks.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityRenderingExtensions.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityShaderCompilerAccess.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityXRDisplay.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityXRDisplayShadingRateExt.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityXRInput.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityXRMeshing.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityXRPreInit.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityXRStats.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/IUnityXRTrace.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/UnitySubsystemTypes.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/UnityXRDisplayStats.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/UnityXRTypes.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/UnityTypes.h
${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/XRMath.h ${CMAKE_SOURCE_DIR}/CommonHeaders/ProviderInterface/XRMath.cpp
Providers/dllmain.cpp
Providers/OpenVRProviderContext.h
Providers/OpenVRSystem.h Providers/OpenVRSystem.cpp
Providers/UserProjectSettings.h Providers/UserProjectSettings.cpp

Providers/Display/Display.h Providers/Display/Display.cpp
Providers/Input/Input.h Providers/Input/Input.cpp

CommonHeaders/UnityInterfaces.h CommonHeaders/UnityInterfaces.cpp

CommonHeaders/Singleton.h
CommonHeaders/CommonTypes.h

CommonHeaders/OpenVR/openvr.h
CommonHeaders/OpenVR/openvr_driver.h

CommonHeaders/ProviderInterface/IUnityXRAudio.h
CommonHeaders/ProviderInterface/IUnityEventQueue.h
CommonHeaders/ProviderInterface/IUnityGraphics.h
CommonHeaders/ProviderInterface/IUnityGraphicsD3D11.h
CommonHeaders/ProviderInterface/IUnityGraphicsD3D12.h
CommonHeaders/ProviderInterface/IUnityGraphicsMetal.h
CommonHeaders/ProviderInterface/IUnityGraphicsVulkan.h
CommonHeaders/ProviderInterface/IUnityInterface.h
CommonHeaders/ProviderInterface/IUnityProfilerCallbacks.h
CommonHeaders/ProviderInterface/IUnityRenderingExtensions.h
CommonHeaders/ProviderInterface/IUnityShaderCompilerAccess.h
CommonHeaders/ProviderInterface/IUnityXRDisplay.h
CommonHeaders/ProviderInterface/IUnityXRDisplayShadingRateExt.h
CommonHeaders/ProviderInterface/IUnityXRInput.h
CommonHeaders/ProviderInterface/IUnityXRMeshing.h
CommonHeaders/ProviderInterface/IUnityXRPreInit.h
CommonHeaders/ProviderInterface/IUnityXRStats.h
CommonHeaders/ProviderInterface/IUnityXRTrace.h
CommonHeaders/ProviderInterface/UnitySubsystemTypes.h
CommonHeaders/ProviderInterface/UnityXRDisplayStats.h
CommonHeaders/ProviderInterface/UnityXRTypes.h
CommonHeaders/ProviderInterface/UnityTypes.h
CommonHeaders/ProviderInterface/XRMath.h CommonHeaders/ProviderInterface/XRMath.cpp
)

target_include_directories(XRSDKOpenVR PUBLIC
${CMAKE_SOURCE_DIR}/Providers
${CMAKE_SOURCE_DIR}/CommonHeaders
${CMAKE_SOURCE_DIR}/ThirdParty
target_include_directories(XRSDKOpenVR PUBLIC
Providers
CommonHeaders
ThirdParty
)

include(GenerateExportHeader)
generate_export_header(XRSDKOpenVR)


message(STATUS "Runtime output directory set to: ${BINARY_PATH}")
set_target_properties(XRSDKOpenVR
PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${BINARY_PATH}"
ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${BINARY_PATH}"
LIBRARY_OUTPUT_DIRECTORY_DEBUG "${BINARY_PATH}"
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${BINARY_PATH}"
ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${BINARY_PATH}"
LIBRARY_OUTPUT_DIRECTORY_RELEASE "${BINARY_PATH}"
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${BINARY_PATH}"
)


# OpenVR
message(STATUS "Importing OpenVR API...")

add_library(openvr_api SHARED IMPORTED)
set_target_properties(openvr_api PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/${PLATFORMX}/${OPENVR_API_NAME}.${COMPILED_LIB_TYPE})
set_target_properties(openvr_api PROPERTIES IMPORTED_IMPLIB ${CMAKE_SOURCE_DIR}/lib/${PLATFORMX}/${OPENVR_API_NAME}.${IMPORT_LIB_TYPE})
set(OPENVR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/${PLATFORMX})
add_library(openvr_api SHARED IMPORTED)
set_target_properties(
openvr_api
PROPERTIES
IMPORTED_LOCATION
${OPENVR_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}openvr_api${CMAKE_SHARED_LIBRARY_SUFFIX}
)
if(WIN32)
set_target_properties(
openvr_api
PROPERTIES
IMPORTED_IMPLIB
${OPENVR_DIR}/${CMAKE_IMPORT_LIBRARY_PREFIX}openvr_api${CMAKE_IMPORT_LIBRARY_SUFFIX}
)
endif()
set_target_properties(openvr_api PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(XRSDKOpenVR PUBLIC openvr_api)

if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
# Post-Build - Copy OpenVR api
add_custom_command(TARGET XRSDKOpenVR POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_SOURCE_DIR}/lib/${PLATFORMX}/${OPENVR_API_NAME}.${COMPILED_LIB_TYPE}
${BINARY_PATH}/${OPENVR_API_NAME}.${COMPILED_LIB_TYPE}

COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_SOURCE_DIR}/lib/${PLATFORMX}/${OPENVR_API_NAME}.${COMPILED_LIB_TYPE}.sig
${BINARY_PATH}/${OPENVR_API_NAME}.${COMPILED_LIB_TYPE}.sig

COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_SOURCE_DIR}/lib/${PLATFORMX}/${OPENVR_API_NAME}.${IMPORT_LIB_TYPE}
${BINARY_PATH}/${OPENVR_API_NAME}.${IMPORT_LIB_TYPE}

COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_SOURCE_DIR}/XRSDKOPENVR.dir/Release/${PDBFILE}
${BINARY_PATH}/${PDBFILE}
)
else()
# Post-Build - Copy OpenVR api
add_custom_command(TARGET XRSDKOpenVR POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_SOURCE_DIR}/lib/${PLATFORMX}/${OPENVR_API_NAME}.${COMPILED_LIB_TYPE}
${BINARY_PATH}/lib/${PLATFORMX}/${OPENVR_API_NAME}.${COMPILED_LIB_TYPE}

COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_SOURCE_DIR}/lib/${PLATFORMX}/${OPENVR_API_NAME}.${IMPORT_LIB_TYPE}
${BINARY_PATH}/lib/${PLATFORMX}/${OPENVR_API_NAME}.${IMPORT_LIB_TYPE}
)
if(COPY_TO_PACKAGE)
message(
STATUS
"Will copy result binary (and OpenVR dependency) to ${DEST} as a post-build step: Turn off COPY_TO_PACKAGE to disable this behavior."
)

if(WIN32)
# Post-Build - Copy OpenVR api
add_custom_command(
TARGET XRSDKOpenVR
POST_BUILD
COMMAND
${CMAKE_COMMAND} -E copy
${OPENVR_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}openvr_api${CMAKE_SHARED_LIBRARY_SUFFIX}
${DEST}
COMMAND
${CMAKE_COMMAND} -E copy
${OPENVR_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}openvr_api${CMAKE_SHARED_LIBRARY_SUFFIX}.sig
${DEST}
COMMAND ${CMAKE_COMMAND} -E rm -f ${DEST}/$<TARGET_FILE_NAME:XRSDKOpenVR>
COMMAND ${CMAKE_COMMAND} -E rm -f ${DEST}/$<TARGET_PDB_FILE_NAME:XRSDKOpenVR>
COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:XRSDKOpenVR>" ${DEST}
COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_PDB_FILE:XRSDKOpenVR>" ${DEST}
COMMENT "Copying plugin binary to package runtime directory"
VERBATIM)
else()
# Post-Build - Copy OpenVR api
add_custom_command(
TARGET XRSDKOpenVR
POST_BUILD
COMMAND
${CMAKE_COMMAND} -E copy
${OPENVR_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}openvr_api${CMAKE_SHARED_LIBRARY_SUFFIX}
${DEST}
COMMAND ${CMAKE_COMMAND} -E rm -f "${DEST}/$<TARGET_FILE_NAME:XRSDKOpenVR>"
COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:XRSDKOpenVR>" ${DEST}
COMMENT "Copying plugin binary to package runtime directory"
VERBATIM)
endif()
endif()
7 changes: 3 additions & 4 deletions com.valve.openvr/Editor/OpenVRBuildProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ public class OpenVRBuildProcessor : IPreprocessBuildWithReport
{
"XRSDKOpenVR",
"openvr_api",
"vc14",
};

public int callbackOrder { get; set; }
Expand All @@ -28,8 +27,8 @@ public bool ShouldIncludeRuntimePluginsInBuild(string path)
{
XRGeneralSettings generalSettings = XRGeneralSettingsPerBuildTarget.XRGeneralSettingsForBuildTarget(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget));
if (generalSettings == null)
return false;
return false;

foreach (var loader in generalSettings.Manager.loaders)
{
if (loader is OpenVRLoader)
Expand Down Expand Up @@ -58,4 +57,4 @@ public void OnPreprocessBuild(BuildReport report)
}
}
}
#endif
#endif
Binary file modified com.valve.openvr/Runtime/x64/XRSDKOpenVR.dll
Binary file not shown.
2 changes: 1 addition & 1 deletion com.valve.openvr/Runtime/x64/XRSDKOpenVR.dll.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added com.valve.openvr/Runtime/x64/XRSDKOpenVR.pdb
Binary file not shown.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 0 additions & 8 deletions com.valve.openvr/Runtime/x64/lib.meta

This file was deleted.

8 changes: 0 additions & 8 deletions com.valve.openvr/Runtime/x64/lib/x64.meta

This file was deleted.

Binary file not shown.
Binary file not shown.

This file was deleted.

Loading