Skip to content

Commit 900a5dd

Browse files
authored
Vulkan System and Shaders Formulae (#446)
1 parent 353afb8 commit 900a5dd

File tree

1 file changed

+157
-0
lines changed

1 file changed

+157
-0
lines changed

apothecary/formulas/shaderc.sh

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
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

Comments
 (0)