Skip to content

Commit 154831b

Browse files
authored
Add smoke test and CI yaml (#141)
Adding CI yaml. Adding smoke-test.js Improve the build scripts
1 parent 33038e5 commit 154831b

File tree

4 files changed

+218
-78
lines changed

4 files changed

+218
-78
lines changed

.github/workflows/ci.yml

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
name: Continuous Integration for PR
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
8+
jobs:
9+
# Build job
10+
build:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- name: Checkout
14+
uses: actions/checkout@v4
15+
16+
- name: get emsdk
17+
run: |
18+
sudo apt-get update
19+
sudo apt-get install -y ninja-build
20+
git clone https://github.com/emscripten-core/emsdk.git
21+
sed -i 's/\r$//' emsdk/emsdk emsdk/emsdk_env.sh
22+
23+
- name: get slang head commit
24+
run: |
25+
git clone https://github.com/shader-slang/slang.git slang-repo
26+
git -C slang-repo rev-parse HEAD > key.txt
27+
28+
- name: get spirv-tool head commit
29+
run: |
30+
git clone https://github.com/KhronosGroup/SPIRV-Tools.git spirv-tools
31+
pushd spirv-tools
32+
git checkout vulkan-sdk-1.3.290.0
33+
popd
34+
git -C spirv-tools rev-parse HEAD > key-spirv-tool.txt
35+
36+
- name: restore slang-wasm
37+
id: cache_slang
38+
uses: actions/cache/restore@v4
39+
with:
40+
path: |
41+
./slang-wasm.wasm.gz
42+
./slang-wasm.js
43+
./slang-wasm.d.ts
44+
key: ${{hashFiles('key.txt')}}
45+
46+
- name: restore spirv-tools
47+
id: cache_spirv_tools
48+
uses: actions/cache/restore@v4
49+
with:
50+
path: |
51+
./spirv-tools.wasm
52+
./spirv-tools.js
53+
./spirv-tools.d.ts
54+
key: ${{hashFiles('key-spirv-tool.txt')}}
55+
56+
- name: slang-wasm build
57+
if: steps.cache_slang.outputs.cache-hit != 'true'
58+
run: |
59+
sed -i 's/\r$//' ./slang-wasm-build.sh
60+
/bin/bash -x ./slang-wasm-build.sh
61+
62+
- name: save slang-wasm
63+
if: always() && steps.cache_slang.outputs.cache-hit != 'true'
64+
uses: actions/cache/save@v4
65+
with:
66+
path: |
67+
./slang-wasm.wasm.gz
68+
./slang-wasm.js
69+
./slang-wasm.d.ts
70+
key: ${{hashFiles('key.txt')}}
71+
72+
- name: spirv-tools-wasm build
73+
if: steps.cache_spirv_tools.outputs.cache-hit != 'true'
74+
run: |
75+
sed -i 's/\r$//' ./spirv-tool-wasm-build.sh
76+
/bin/bash -x ./spirv-tool-wasm-build.sh
77+
78+
- name: save spirv-tools-wasm
79+
if: always() && steps.cache_spirv_tools.outputs.cache-hit != 'true'
80+
uses: actions/cache/save@v4
81+
with:
82+
path: |
83+
./spirv-tools.wasm
84+
./spirv-tools.js
85+
./spirv-tools.d.ts
86+
key: ${{hashFiles('key-spirv-tool.txt')}}
87+
88+
- name: Build
89+
run: |
90+
cp ./slang-wasm.wasm.gz ./slang-wasm.js ./slang-wasm.d.ts ./src/
91+
cp ./spirv-tools.wasm ./spirv-tools.js ./spirv-tools.d.ts ./src/
92+
npm install
93+
npm run build
94+
95+
- name: Upload export artifact
96+
uses: actions/upload-artifact@v4
97+
with:
98+
name: site-artifact
99+
path: ./dist/
100+
compression-level: 1
101+
102+
- name: Smoke test
103+
run: |
104+
pushd emsdk
105+
/bin/sh ./emsdk install latest
106+
/bin/sh ./emsdk activate latest
107+
source ./emsdk_env.sh
108+
popd
109+
gzip -d src/slang-wasm.wasm.gz
110+
cp src/slang-wasm.wasm ./
111+
cp slang-repo/tests/wasm/smoke/smoke-test.js slang-repo/
112+
node slang-repo/smoke-test.js src/slang/rand_float.slang computeMain
113+
114+
- name: Cleanup workspace
115+
run: |
116+
rm -rf slang-repo emsdk spirv-tools
117+
rm ./slang-wasm.wasm.gz ./slang-wasm.js ./slang-wasm.d.ts ./spirv-tools.wasm ./spirv-tools.js ./spirv-tools.d.ts

.github/workflows/jekyll-gh-pages.yml

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,16 @@ jobs:
3333
run: |
3434
sudo apt-get update
3535
sudo apt-get install -y ninja-build
36-
mkdir slang-repo
37-
pushd slang-repo
38-
git clone https://github.com/shader-slang/slang.git
39-
popd
40-
echo "$(git -C slang-repo/slang rev-parse HEAD)" >> key.txt
36+
git clone https://github.com/shader-slang/slang.git slang-repo
37+
git -C slang-repo rev-parse HEAD > key.txt
4138
4239
- name: get spirv-tool head commit
4340
run: |
4441
git clone https://github.com/KhronosGroup/SPIRV-Tools.git spirv-tools
4542
pushd spirv-tools
4643
git checkout vulkan-sdk-1.3.290.0
4744
popd
48-
echo "$(git -C spirv-tools rev-parse HEAD)" >> key-spirv-tool.txt
45+
git -C spirv-tools rev-parse HEAD > key-spirv-tool.txt
4946
5047
- name: restore slang-wasm
5148
id: cache_slang
@@ -70,9 +67,8 @@ jobs:
7067
- name: slang-wasm build
7168
if: steps.cache_slang.outputs.cache-hit != 'true'
7269
run: |
73-
sed -i -e 's/\r$//' ./slang-wasm-build.sh
74-
chmod +x ./slang-wasm-build.sh
75-
./slang-wasm-build.sh
70+
sed -i 's/\r$//' ./slang-wasm-build.sh
71+
/bin/bash -x ./slang-wasm-build.sh
7672
7773
- name: save slang-wasm
7874
if: always() && steps.cache_slang.outputs.cache-hit != 'true'
@@ -87,9 +83,8 @@ jobs:
8783
- name: spirv-tools-wasm build
8884
if: steps.cache_spirv_tools.outputs.cache-hit != 'true'
8985
run: |
90-
sed -i -e 's/\r$//' ./spirv-tool-wasm-build.sh
91-
chmod +x ./spirv-tool-wasm-build.sh
92-
./spirv-tool-wasm-build.sh
86+
sed -i 's/\r$//' ./spirv-tool-wasm-build.sh
87+
/bin/bash -x ./spirv-tool-wasm-build.sh
9388
9489
- name: save spirv-tools-wasm
9590
if: always() && steps.cache_spirv_tools.outputs.cache-hit != 'true'
@@ -116,7 +111,7 @@ jobs:
116111
with:
117112
name: site-artifact
118113
path: ./dist/
119-
compression-level: 1
114+
compression-level: 1
120115

121116
# Deployment job
122117
deploy:

slang-wasm-build.sh

Lines changed: 77 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,96 @@
11
#!/bin/bash
22

3-
sudo apt-get install -y ninja-build
4-
5-
if [ ! -d emsdk ]; then
6-
git clone https://github.com/emscripten-core/emsdk.git
3+
echo "[$(date)] Version checking ..."
4+
for requiredUtil in cmake ninja node tsc
5+
do
6+
# When the version of Node is too old, tsc may fail.
7+
# We want to stop when it is the case.
8+
if ! $requiredUtil --version
9+
then
10+
echo "Error: a required tool is not found: $requiredUtil"
11+
exit 1
12+
fi
13+
done
14+
15+
echo "[$(date)] Sync emsdk repo ..."
16+
if [ ! -d emsdk ]
17+
then
18+
git clone https://github.com/emscripten-core/emsdk.git
719
fi
820

921
pushd emsdk
10-
11-
./emsdk install latest
12-
./emsdk activate latest
13-
source ./emsdk_env.sh
14-
22+
sed -i 's/\r$//' emsdk emsdk_env.sh
23+
/bin/sh ./emsdk install latest
24+
/bin/sh ./emsdk activate latest
25+
source ./emsdk_env.sh
1526
popd
1627

17-
# slang-repo was created in previous step
18-
pushd ./slang-repo
28+
echo "[$(date)] Sync slang repo ..."
29+
if [ ! -d slang-repo ]
30+
then
31+
git clone https://github.com/shader-slang/slang.git slang-repo
32+
fi
1933

20-
# slang was created in previous step
21-
pushd slang
34+
pushd slang-repo
2235
git submodule update --init --recursive
2336

24-
echo "if(EMSCRIPTEN)
25-
slang_add_target(
26-
.
27-
EXECUTABLE
28-
EXCLUDE_FROM_ALL
29-
USE_FEWER_WARNINGS
30-
LINK_WITH_PRIVATE
31-
miniz
32-
lz4_static
33-
slang
34-
core
35-
compiler-core
36-
slang-capability-defs
37-
slang-capability-lookup
38-
slang-fiddle-output
39-
slang-lookup-tables
40-
INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/include .
41-
)
42-
# To generate binding code
43-
target_link_options(slang-wasm PUBLIC
44-
\"--bind\"
45-
--emit-tsd \"$<TARGET_FILE_DIR:slang-wasm>/slang-wasm.d.ts\"
46-
-sMODULARIZE=1
47-
-sEXPORT_ES6=1
48-
-sEXPORTED_RUNTIME_METHODS=['FS']
49-
)
50-
endif()" > "source/slang-wasm/CMakeLists.txt"
51-
52-
cmake --workflow --preset generators --fresh
53-
mkdir generators
54-
cmake --install build --prefix generators --component generators
37+
# The `,` syntax in sed specifies a range from the line that starts
38+
# with `target_link_options(` to the line that has just a `)` (possibly indented).
39+
#
40+
# /start/,/end/c\ ... replaces the block.
41+
#
42+
sed -i '/^[[:space:]]*target_link_options(/,/^[[:space:]]*)/c\
43+
target_link_options(slang-wasm PUBLIC\
44+
\"--bind\"\
45+
--emit-tsd \"$<TARGET_FILE_DIR:slang-wasm>/slang-wasm.d.ts\"\
46+
-sMODULARIZE=1\
47+
-sEXPORT_ES6=1\
48+
-sEXPORTED_RUNTIME_METHODS=['FS']\
49+
)' "source/slang-wasm/CMakeLists.txt"
50+
51+
if ! grep -q slang-wasm.d.ts "source/slang-wasm/CMakeLists.txt"
52+
then
53+
echo "Error: failed to override CMake option in source/slang-wasm/CMakeLists.txt"
54+
exit 1
55+
fi
5556

56-
emcmake cmake -DSLANG_GENERATORS_PATH=generators/bin --preset emscripten -DSLANG_SLANG_LLVM_FLAVOR=DISABLE -DSLANG_ENABLE_SPLIT_DEBUG_INFO=FALSE
57-
cmake --build --preset emscripten --target slang-wasm
57+
echo "[$(date)] Setup generator configuration ..."
58+
if ! cmake --workflow --preset generators --fresh
59+
then
60+
echo "Error: CMake configuration failed."
61+
exit 1
62+
fi
5863

59-
cmakeRet=$?
60-
popd
64+
echo "[$(date)] Build generators ..."
65+
mkdir generators
66+
if ! cmake --install build --prefix generators --component generators
67+
then
68+
echo "Error: CMake build for generators failed."
69+
exit 1
70+
fi
6171

62-
popd
72+
echo "[$(date)] Setup slang-wasm configuration ..."
73+
if ! emcmake cmake -DSLANG_GENERATORS_PATH=generators/bin --preset emscripten -DSLANG_ENABLE_RELEASE_LTO=OFF
74+
then
75+
echo "Error: emcmake failed."
76+
exit 1
77+
fi
78+
79+
cp build/CMakeCache.txt ../../CMakeCache.txt
80+
cp build.em/CMakeCache.txt ../../CMakeCache.em.txt
6381

64-
if [ $cmakeRet -ne 0 ]; then
65-
exit -1;
82+
echo "[$(date)] Build slang as wasm ..."
83+
if ! cmake --build --preset emscripten --target slang-wasm
84+
then
85+
echo "Build with CMake failed."
86+
exit 1
6687
fi
6788

68-
cp slang-repo/slang/build.em/Release/bin/* ./
69-
cp slang-repo/slang/build.em/Release/bin/* ./
70-
gzip -c slang-wasm.wasm > slang-wasm.wasm.gz
89+
popd
7190

72-
rm key.txt
73-
echo "$(git -C ./slang-repo/slang rev-parse HEAD)" >> key.txt
91+
cp slang-repo/build.em/Release/bin/* ./
92+
gzip -c slang-wasm.wasm > slang-wasm.wasm.gz
7493

94+
git -C ./slang-repo rev-parse HEAD > key.txt
7595
echo "key: $(cat key.txt)"
96+

spirv-tool-wasm-build.sh

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
11
#!/bin/bash
22

3-
if [ ! -d emsdk ]; then
3+
if [ ! -d emsdk ]
4+
then
45
git clone https://github.com/emscripten-core/emsdk.git emsdk
56
fi
67

78
pushd emsdk
8-
9-
./emsdk install latest
10-
./emsdk activate latest
11-
source ./emsdk_env.sh
12-
9+
sed -i 's/\r$//' emsdk emsdk_env.sh
10+
/bin/sh ./emsdk install latest
11+
/bin/sh ./emsdk activate latest
12+
source ./emsdk_env.sh
1313
popd
1414

15+
if [ ! -d spirv-tools ]
16+
then
17+
git clone https://github.com/KhronosGroup/SPIRV-Tools.git spirv-tools
18+
fi
19+
1520
pushd spirv-tools
1621
git checkout vulkan-sdk-1.3.290.0
1722

1823
python3 utils/git-sync-deps
1924

20-
sed -i '52i -s EXPORT_ES6 \\' ./source/wasm/build.sh
21-
echo $(cat ./source/wasm/build.sh)
22-
./source/wasm/build.sh
25+
# add an additional option to emcc command
26+
sed -i 's/\r$//' source/wasm/build.sh
27+
sed -i 's/-s MODULARIZE \\/-s MODULARIZE -s EXPORT_ES6 \\/' source/wasm/build.sh
28+
29+
bash -x source/wasm/build.sh
2330

2431
cp out/web/spirv-tools.wasm ../
2532
cp out/web/spirv-tools.js ../

0 commit comments

Comments
 (0)