Skip to content

Commit fdfa1f5

Browse files
Win32 Installation test (#1276)
Build the UnitTests app using installation lib/headers. If the build fails, something is missing in the installation process. Some questions: - Do we want to have Debug/Release testing? - PDBs? - Do we want to package the installation and test that package instead (npm? nuget?) - Do we want to package for another platform ? - Do we want to test the unittest build in this process instead ?
1 parent b612a90 commit fdfa1f5

File tree

4 files changed

+207
-0
lines changed

4 files changed

+207
-0
lines changed

.github/jobs/win32.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,13 @@ jobs:
7070
Playground app:///Scripts/validation_native.js
7171
displayName: 'Validation Tests'
7272
73+
- script: |
74+
cmake --build build${{ variables.solutionName }} --target INSTALL --config RelWithDebInfo
75+
cd Install/Test
76+
cmake . -DBINARY_DIR=../../build${{ variables.solutionName }} ${{ variables.jsEngineDefine }}
77+
cmake --build . --config RelWithDebInfo
78+
displayName: 'Install'
79+
7380
- task: PublishBuildArtifacts@1
7481
inputs:
7582
artifactName: '${{ variables.solutionName }} - ${{ parameters.graphics_api }} Rendered Pictures'

Install/Test/CMakeLists.txt

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
# cmake 3.18+ to have the ARCHIVE_EXTRACT sub-command for files
2+
cmake_minimum_required(VERSION 3.18)
3+
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
4+
5+
include(FetchContent)
6+
7+
project(TestInstall)
8+
9+
FetchContent_Declare(cmake-extensions
10+
GIT_REPOSITORY https://github.com/BabylonJS/CMakeExtensions.git
11+
GIT_TAG 366dc4a84fb20f4060d97e89948c343e74c51fc3)
12+
FetchContent_MakeAvailable(cmake-extensions)
13+
14+
set(CMAKE_CXX_STANDARD 17)
15+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
16+
17+
# __cplusplus value is not in sync with language version used. MVSC needs this flag to update it accordingly
18+
# https://gitlab.kitware.com/cmake/cmake/-/issues/18837
19+
if(MSVC)
20+
add_compile_options(/Zc:__cplusplus)
21+
endif()
22+
23+
if(NAPI_JAVASCRIPT_ENGINE STREQUAL "")
24+
message("No JS Engine provided. Defaulting to Chakra.")
25+
set(NAPI_JAVASCRIPT_ENGINE "Chakra")
26+
endif()
27+
28+
# executable stub
29+
30+
set(APPS_DIR "../../Apps")
31+
set(UNITTESTS_DIR "${APPS_DIR}/UnitTests")
32+
set(LOCAL_SCRIPTS "${UNITTESTS_DIR}/Scripts/tests.js")
33+
34+
set(NPM_SCRIPTS
35+
"${APPS_DIR}/node_modules/babylonjs/babylon.max.js"
36+
"${APPS_DIR}/node_modules/babylonjs/babylon.max.js.map"
37+
"${APPS_DIR}/node_modules/babylonjs-materials/babylonjs.materials.js"
38+
"${APPS_DIR}/node_modules/babylonjs-materials/babylonjs.materials.js.map"
39+
"${APPS_DIR}/node_modules/chai/chai.js"
40+
"${APPS_DIR}/node_modules/mocha/mocha.js")
41+
42+
set(HEADERS "${UNITTESTS_DIR}/Shared/Tests.h")
43+
44+
if(WIN32)
45+
set(TEST_INSTALL_APP "${UNITTESTS_DIR}/Win32/App.cpp")
46+
else()
47+
message(FATAL_ERROR "Unrecognized platform: ${CMAKE_SYSTEM_NAME}")
48+
endif()
49+
50+
# Nuget/JSI
51+
set(NUGET_PATH "${BINARY_DIR}/NuGet")
52+
53+
if(NAPI_JAVASCRIPT_ENGINE STREQUAL "JSI")
54+
set(V8JSI_VERSION "0.64.33")
55+
set(CPU_ARCH "x64")
56+
set(PLATFORM_FOLDER "win32")
57+
set(V8JSI_PACKAGE_PATH "${NUGET_PATH}/packages/ReactNative.V8Jsi.Windows.${V8JSI_VERSION}")
58+
set(V8JSI_LIB_PATH_RELEASE "${V8JSI_PACKAGE_PATH}/lib/${PLATFORM_FOLDER}/Release/${CPU_ARCH}/")
59+
set(JSI_CPP "${V8JSI_PACKAGE_PATH}/build/native/jsi/jsi/jsi.cpp")
60+
set(ADDITIONAL_LIBRARIES "v8jsi.dll.lib")
61+
elseif(NAPI_JAVASCRIPT_ENGINE STREQUAL "V8")
62+
set_cpu_platform_arch()
63+
set(V8_VERSION "8.4.371.15")
64+
download_nuget()
65+
set(V8_PACKAGE_PATH "${NUGET_PATH}/packages/v8-v142-${CPU_ARCH}.${V8_VERSION}")
66+
set(V8_PACKAGE_PATH "${NUGET_PATH}/packages/v8-v142-${CPU_ARCH}.${V8_VERSION}")
67+
set(V8_REDIST_PACKAGE_PATH "${NUGET_PATH}/packages/v8.redist-v142-${CPU_ARCH}.${V8_VERSION}")
68+
69+
add_library(v8_libbase SHARED IMPORTED)
70+
set_target_properties(v8_libbase PROPERTIES IMPORTED_IMPLIB "${V8_PACKAGE_PATH}/lib/Release/v8_libbase.dll.lib")
71+
add_library(v8_libplatform SHARED IMPORTED)
72+
set_target_properties(v8_libplatform PROPERTIES IMPORTED_IMPLIB "${V8_PACKAGE_PATH}/lib/Release/v8_libplatform.dll.lib")
73+
add_library(v8 SHARED IMPORTED)
74+
set_target_properties(v8 PROPERTIES IMPORTED_IMPLIB "${V8_PACKAGE_PATH}/lib/Release/v8.dll.lib")
75+
target_link_libraries(v8 INTERFACE v8_libbase INTERFACE v8_libplatform)
76+
target_include_directories(v8 INTERFACE "${V8_PACKAGE_PATH}/include")
77+
78+
set(V8_DIST
79+
"${V8_REDIST_PACKAGE_PATH}/lib/Release/icudtl.dat"
80+
"${V8_REDIST_PACKAGE_PATH}/lib/Release/icui18n.dll"
81+
"${V8_REDIST_PACKAGE_PATH}/lib/Release/icuuc.dll"
82+
"${V8_REDIST_PACKAGE_PATH}/lib/Release/v8.dll"
83+
"${V8_REDIST_PACKAGE_PATH}/lib/Release/v8_libbase.dll"
84+
"${V8_REDIST_PACKAGE_PATH}/lib/Release/v8_libplatform.dll"
85+
"${V8_REDIST_PACKAGE_PATH}/lib/Release/zlib.dll")
86+
87+
# only 1 imported location per library -> Adding 1 library per file
88+
foreach(V8FILE ${V8_DIST})
89+
get_filename_component(V8FILE_NAME "${V8FILE}" NAME_WE)
90+
add_library("v8::${V8FILE_NAME}" SHARED IMPORTED)
91+
set_target_properties("v8::${V8FILE_NAME}" PROPERTIES IMPORTED_IMPLIB "${V8_PACKAGE_PATH}/lib/Release/v8_libbase.dll.lib")
92+
set_target_properties("v8::${V8FILE_NAME}" PROPERTIES IMPORTED_LOCATION ${V8FILE})
93+
endforeach()
94+
95+
set(ADDITIONAL_LIBRARIES
96+
v8
97+
v8inspector
98+
llhttp
99+
v8::icudtl
100+
v8::icui18n
101+
v8::icuuc
102+
v8::v8
103+
v8::v8_libbase
104+
v8::v8_libplatform
105+
v8::zlib)
106+
107+
if(CPU_ARCH STREQUAL "x64")
108+
# Enable V8 Pointer Compression
109+
# https://v8.dev/blog/pointer-compression
110+
# https://stackoverflow.com/q/62921373
111+
set(NAPI_DEFINITIONS PUBLIC V8_COMPRESS_POINTERS)
112+
endif()
113+
endif()
114+
115+
add_executable(TestInstall ${LOCAL_SCRIPTS} ${NPM_SCRIPTS} ${TEST_INSTALL_APP} ${HEADERS} ${JSI_CPP})
116+
117+
# for napi
118+
target_compile_definitions(TestInstall PUBLIC NODE_ADDON_API_DISABLE_DEPRECATED)
119+
target_compile_definitions(TestInstall PUBLIC NODE_ADDON_API_DISABLE_NODE_SPECIFIC)
120+
121+
set(INSTALL_LIBS_DIR "${BINARY_DIR}/install/lib")
122+
target_include_directories(TestInstall PRIVATE "${BINARY_DIR}/install/include")
123+
target_link_directories(TestInstall PRIVATE ${INSTALL_LIBS_DIR} ${V8JSI_LIB_PATH_RELEASE})
124+
125+
target_link_libraries(TestInstall
126+
AppRuntime
127+
arcana
128+
astc-encoder
129+
bgfx
130+
bimg
131+
bx
132+
Canvas
133+
Console
134+
edtaa3
135+
etc1
136+
etc2
137+
ExternalTexture
138+
GenericCodeGen
139+
glslang
140+
Graphics
141+
iqa
142+
JsRuntime
143+
MachineIndependent
144+
napi
145+
NativeCamera
146+
NativeCapture
147+
NativeEngine
148+
NativeInput
149+
NativeOptimizations
150+
NativeTracing
151+
NativeXr
152+
nvtt
153+
OGLCompiler
154+
openxr_loader
155+
OSDependent
156+
pvrtc
157+
ScriptLoader
158+
spirv-cross-core
159+
spirv-cross-glsl
160+
spirv-cross-hlsl
161+
SPIRV
162+
squish
163+
tinyexr
164+
UrlLib
165+
Window
166+
XMLHttpRequest
167+
chakrart
168+
d3d11
169+
d3d12
170+
d3dcompiler
171+
Pathcch
172+
${ADDITIONAL_LIBRARIES}
173+
)
174+
175+
# See https://gitlab.kitware.com/cmake/cmake/-/issues/23543
176+
# If we can set minimum required to 3.26+, then we can use the `copy -t` syntax instead.
177+
add_custom_command(TARGET TestInstall POST_BUILD
178+
COMMAND ${CMAKE_COMMAND} -E $<IF:$<BOOL:$<TARGET_RUNTIME_DLLS:TestInstall>>,copy,true> $<TARGET_RUNTIME_DLLS:TestInstall> $<TARGET_FILE_DIR:TestInstall> COMMAND_EXPAND_LISTS)

Install/Test/nuget.config

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<configuration>
3+
<config>
4+
<add key="repositoryPath" value="packages" />
5+
</config>
6+
<packageSources>
7+
<clear />
8+
<add key="Nuget.org" value="https://api.nuget.org/v3/index.json" />
9+
</packageSources>
10+
<disabledPackageSources>
11+
<clear />
12+
</disabledPackageSources>
13+
</configuration>

Install/Test/packages.config

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<packages>
3+
<package id="v8.redist-v142-x64" version="8.4.371.15" targetFramework="native" />
4+
<package id="v8.redist-v142-x86" version="8.4.371.15" targetFramework="native" />
5+
<package id="v8.symbols-v142-x64" version="8.4.371.15" targetFramework="native" />
6+
<package id="v8.symbols-v142-x86" version="8.4.371.15" targetFramework="native" />
7+
<package id="v8-v142-x64" version="8.4.371.15" targetFramework="native" />
8+
<package id="v8-v142-x86" version="8.4.371.15" targetFramework="native" />
9+
</packages>

0 commit comments

Comments
 (0)