1+ #! /bin/bash
2+ #
3+ # ShaderC
4+ # tgfrerer
5+ # compiling GLSL shader code into SPIR-V
6+ #
7+ # compile this with ./apothecary -a 64 update shaderc
8+ # compile for windows visual studio: ./apothecary -a 64 -t vs update shaderc
9+ #
10+ # uses a CMake build system
11+
12+ FORMULA_TYPES=( " vs" " linux64" )
13+
14+ # define the shaderc version by sha
15+ # Known good version is from: https://github.com/google/shaderc/blob/known-good/known_good.json
16+ VER=ff84893dd52d28f0b1737d2635733d952013bd9c
17+ # v2024.3
18+
19+ # tools for git use
20+ GIT_URL=https://github.com/google/shaderc
21+ GIT_TAG=$VER
22+
23+ # download the source code and unpack it into LIB_NAME
24+ function download() {
25+ curl -Lk $GIT_URL /archive/$GIT_TAG .tar.gz -o shaderc-$GIT_TAG .tar.gz
26+ tar -xf shaderc-$GIT_TAG .tar.gz
27+ mv shaderc-$GIT_TAG shaderc
28+ rm shaderc* .tar.gz
29+ }
30+
31+ # prepare the build environment, executed inside the lib src dir
32+ function prepare() {
33+ pushd third_party
34+
35+ # load shaderc dependencies at known good revisions
36+ # we know working configurations from this file:
37+ # https://github.com/google/shaderc/blob/known-good/known_good.json
38+
39+ if [[ ! -d " glslang" ]]; then
40+ git clone https://github.com/KhronosGroup/glslang.git glslang
41+ pushd glslang
42+ git checkout 46ef757e048e760b46601e6e77ae0cb72c97bd2f
43+ popd
44+ fi
45+
46+ if [[ ! -d " spirv-tools" ]]; then
47+ echo " Cloning SPIRV-Tools repository..."
48+ git clone https://github.com/KhronosGroup/SPIRV-Tools.git spirv-tools
49+ pushd spirv-tools
50+ git checkout 01c8438ee4ac52c248119b7e03e0b021f853b51a
51+ popd
52+ fi
53+
54+ if [[ ! -d " spirv-tools/external/spirv-headers" ]]; then
55+ git clone https://github.com/KhronosGroup/SPIRV-Headers.git spirv-tools/external/spirv-headers # rev: db5cf6176137003ca4c25df96f7c0649998c3499
56+ pushd spirv-tools/external/spirv-headers
57+ git checkout 2a9b6f951c7d6b04b6c21fe1bf3f475b68b84801
58+ popd
59+ fi
60+
61+ popd
62+ }
63+
64+ # executed inside the lib src dir
65+ function build() {
66+ rm -f CMakeCache.txt
67+ LIBS_ROOT=$( realpath $LIBS_DIR )
68+
69+ if [ " $TYPE " == " vs" ] ; then
70+
71+ echo " building $TYPE | $ARCH | $VS_VER | vs: $VS_VER_GEN "
72+ echo " --------------------"
73+ GENERATOR_NAME=" Visual Studio ${VS_VER_GEN} "
74+
75+ mkdir -p " build_${TYPE} _${PLATFORM} "
76+ cd " build_${TYPE} _${PLATFORM} "
77+ find ./ -name " *.o" -type f -delete
78+ rm -f CMakeCache.txt || true
79+ DEFS="
80+ -DCMAKE_C_STANDARD=${C_STANDARD} \
81+ -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \
82+ -DCMAKE_CXX_STANDARD_REQUIRED=ON \
83+ -DCMAKE_CXX_EXTENSIONS=OFF \
84+ -DBUILD_SHARED_LIBS=ON \
85+ -Dgtest_disable_pthreads=ON -DSHADERC_SKIP_TESTS=ON -DSHADERC_ENABLE_SHARED_CRT=ON"
86+
87+ cmake .. ${DEFS} \
88+ -A " ${PLATFORM} " \
89+ ${CMAKE_WIN_SDK} \
90+ -G " ${GENERATOR_NAME} " \
91+ -DCMAKE_BUILD_TYPE=Release \
92+ -DCMAKE_INSTALL_PREFIX=Release \
93+ -DCMAKE_INSTALL_LIBDIR=" lib" \
94+ -DCMAKE_CXX_FLAGS=" -DUSE_PTHREADS=1 ${VS_C_FLAGS} ${FLAGS_RELEASE} " \
95+ -DCMAKE_C_FLAGS=" -DUSE_PTHREADS=1 ${VS_C_FLAGS} ${FLAGS_RELEASE} " \
96+ -DCMAKE_CXX_FLAGS_RELEASE=" -DUSE_PTHREADS=1 ${VS_C_FLAGS} ${FLAGS_RELEASE} ${EXCEPTION_FLAGS} " \
97+ -DCMAKE_C_FLAGS_RELEASE=" -DUSE_PTHREADS=1 ${VS_C_FLAGS} ${FLAGS_RELEASE} ${EXCEPTION_FLAGS} " \
98+ -DCMAKE_PREFIX_PATH=" ${LIBS_ROOT} "
99+ cmake --build . --config Release
100+ else
101+ if [ $CROSSCOMPILING -eq 1 ]; then
102+ source ../../${TYPE} _configure.sh
103+ EXTRA_CONFIG=" "
104+ else
105+ EXTRA_CONFIG=" "
106+ fi
107+ # *nix build system
108+
109+ mkdir -p build
110+ cd build
111+
112+ cmake .. -Dgtest_disable_pthreads=ON -DSHADERC_SKIP_TESTS=ON -DSHADERC_ENABLE_SHARED_CRT=ON
113+ # cmake --build . --config Debug -- -j$PARALLEL_MAKE
114+ cmake --build . --config Release -- -j$PARALLEL_MAKE
115+
116+ fi
117+ }
118+
119+ # executed inside the lib src dir, first arg $1 is the dest libs dir root
120+ function copy() {
121+ # prepare headers directory if needed
122+ mkdir -p $1 /include/shaderc
123+
124+ # prepare libs directory if needed
125+ mkdir -p $1 /lib/$TYPE
126+
127+ if [ " $TYPE " == " vs" ] ; then
128+ cp -Rv libshaderc/include/* $1 /include
129+ cp -v " build_${TYPE} _${PLATFORM} /lib/Release/libshaderc_combined.lib" $1 /lib/$TYPE /$PLATFORM /shaderc.lib
130+
131+ else
132+ pwd
133+ # Standard *nix style copy.
134+ # copy headers
135+ cp -Rv libshaderc/include/* $1 /include
136+ # copy lib
137+ cp -v " build_${TYPE} _${PLATFORM} /lib/Release/libshaderc_combined.a" $1 /lib/$TYPE /$PLATFORM /shaderc.a
138+ fi
139+
140+ # copy license file
141+ rm -rf $1 /license # remove any older files if exists
142+ mkdir -p $1 /license
143+ cp -v LICENSE $1 /license/
144+ }
145+
146+ # executed inside the lib src dir
147+ function clean() {
148+ if [ " $TYPE " == " vs" ] ; then
149+ rm -f * .lib
150+ elif [ " $TYPE " == " linux64" ]; then
151+ # statements
152+
153+ cmake --clean .
154+ else
155+ make clean
156+ fi
157+ }
0 commit comments