diff --git a/CMakeLists.txt b/CMakeLists.txt index eca5cd9..9f31d47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,9 @@ file(MAKE_DIRECTORY ${layer_directory}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${layer_directory}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${layer_directory}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${layer_directory}) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${layer_directory}) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${layer_directory}) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${layer_directory}) set(current_folder_path_prefix "./") # This works on windows too now with up-to-date OpenXR loaders set(CMAKE_CXX_STANDARD 17) @@ -45,7 +48,8 @@ if(WIN32) add_compile_definitions(/w26812) endif() else() - set(library_filename "${library_name}.so") + set(library_filename "lib${library_name}.so") + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined") endif(WIN32) configure_file( diff --git a/src/layer.cpp b/src/layer.cpp index 8102c93..78351d1 100644 --- a/src/layer.cpp +++ b/src/layer.cpp @@ -7,6 +7,7 @@ #include "layer.hpp" #include "layer_config.hpp" #include +#include OpenXRLayer* OpenXRLayer::this_layer = nullptr; std::vector OpenXRLayer::extensions{}; @@ -18,14 +19,13 @@ void OpenXRLayer::SetEnabledExtensions(const std::vector& extension bool OpenXRLayer::IsExtensionEnabled(const char* extensionName) { - const auto iterator = std::find_if(extensions.begin(), - extensions.end(), - [extensionName](const char* enabled_extension) - { - return 0 == strcmp(extensionName, enabled_extension); - }); - - return iterator != extensions.end(); + for(const auto ext : extensions) + { + if(!strcmp(ext, extensionName)) + return true; + } + + return false; } OpenXRLayer::OpenXRLayer(PFN_xrGetInstanceProcAddr nextLayerGetInstanceProcAddr) : diff --git a/src/layer_bootstrap.hpp b/src/layer_bootstrap.hpp index b1dc74c..ab6e8d3 100644 --- a/src/layer_bootstrap.hpp +++ b/src/layer_bootstrap.hpp @@ -11,7 +11,14 @@ #define XR_OS_WINDOWS #define WIN32_LEAN_AND_MEAN #define NOMINMAX -#include +#include +#elif defined __linux__ +// openxr loader recommends using secure_getenv, which was introduced in glibc 2.17 +#include +#define XR_OS_LINUX +#if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 17 +#define HAVE_SECURE_GETENV +#endif #endif #include "openxr/openxr_platform_defines.h"