From dfc218eb0a5b47c4443e31ae06b3f514c0154b0f Mon Sep 17 00:00:00 2001 From: Cedric Guillemet <1312968+CedricGuillemet@users.noreply.github.com> Date: Thu, 1 Jun 2023 17:50:28 +0200 Subject: [PATCH] Agnostic toolset for VS project + std link issue with MSVC 17.2+ (#580) * Agnostic toolset for VS project * platform tool version * pragma for std * Update Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonReactNative.vcxproj Co-authored-by: Gary Hsu <bghgary@users.noreply.github.com> * update windows readme --------- Co-authored-by: Gary Hsu <bghgary@users.noreply.github.com> --- Modules/@babylonjs/react-native-windows/README.md | 8 ++++++++ .../windows/BabylonReactNative/BabylonModule.cpp | 6 ++++++ .../windows/BabylonReactNative/BabylonReactNative.vcxproj | 4 ++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Modules/@babylonjs/react-native-windows/README.md b/Modules/@babylonjs/react-native-windows/README.md index 4a84b9a19..e9ff6dc1f 100644 --- a/Modules/@babylonjs/react-native-windows/README.md +++ b/Modules/@babylonjs/react-native-windows/README.md @@ -10,3 +10,11 @@ This package has several **peer dependencies**. If these dependencies are unmet, This package will not work without installing the `@babylonjs/react-native` peer dependency. The `react-native-permissions` dependency is required for XR capabilities of Babylon.js. + +### Toolset + +Default toolset is v142. It's possible to change it using project variable named `BabylonReactNativeToolset`. +There are multiple ways to specify it: +- environment variable +- msbuild property (`msbuild /p:BabylonReactNativeToolset=v143` for example) +- customize the build by folder (https://learn.microsoft.com/en-us/visualstudio/msbuild/customize-by-directory?view=vs-2022) \ No newline at end of file diff --git a/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonModule.cpp b/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonModule.cpp index 240cbc662..6cb24ca85 100644 --- a/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonModule.cpp +++ b/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonModule.cpp @@ -2,6 +2,12 @@ #include "BabylonModule.h" #include "JSI/JsiApiContext.h" +// see https://developercommunity.visualstudio.com/t/-imp-std-init-once-complete-unresolved-external-sy/1684365 +#if _MSC_VER >= 1932 // Visual Studio 2022 version 17.2+ +# pragma comment(linker, "/alternatename:__imp___std_init_once_complete=__imp_InitOnceComplete") +# pragma comment(linker, "/alternatename:__imp___std_init_once_begin_initialize=__imp_InitOnceBeginInitialize") +#endif + using namespace winrt::BabylonReactNative::implementation; REACT_INIT(Initialize); diff --git a/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonReactNative.vcxproj b/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonReactNative.vcxproj index 6960fe7a2..818b25733 100644 --- a/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonReactNative.vcxproj +++ b/Modules/@babylonjs/react-native-windows/windows/BabylonReactNative/BabylonReactNative.vcxproj @@ -77,8 +77,8 @@ <PropertyGroup Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> <PlatformToolset>v142</PlatformToolset> - <PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset> - <PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset> + <PlatformToolset Condition="'$(BabylonReactNativeToolset)'!=''">$(BabylonReactNativeToolset)</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> <GenerateManifest>false</GenerateManifest> <PreferredToolArchitecture>x64</PreferredToolArchitecture>