98 lines
2.2 KiB
Bash
Executable File
98 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Where to find the sources (only used to copy zstd.h)
|
|
ZSTD_SRC_ROOT="../../lib"
|
|
|
|
# Temporary compiled binary
|
|
OUT_FILE="tempbin"
|
|
|
|
# Optional temporary compiled WebAssembly
|
|
OUT_WASM="temp.wasm"
|
|
|
|
# Source files to compile using Emscripten.
|
|
IN_FILES="zstd.c examples/roundtrip.c"
|
|
|
|
# Emscripten build using emcc.
|
|
emscripten_emcc_build() {
|
|
# Compile the the same example as above
|
|
CC_FLAGS="-Wall -Wextra -Werror -Os -g0 -flto"
|
|
emcc $CC_FLAGS -s WASM=1 -I. -o $OUT_WASM $IN_FILES
|
|
# Did compilation work?
|
|
if [ $? -ne 0 ]; then
|
|
echo "Compiling ${IN_FILES}: FAILED"
|
|
exit 1
|
|
fi
|
|
echo "Compiling ${IN_FILES}: PASSED"
|
|
rm -f $OUT_WASM
|
|
}
|
|
|
|
# Emscripten build using docker.
|
|
emscripten_docker_build() {
|
|
docker container run --rm \
|
|
--volume $PWD:/code \
|
|
--workdir /code \
|
|
emscripten/emsdk:latest \
|
|
emcc $CC_FLAGS -s WASM=1 -I. -o $OUT_WASM $IN_FILES
|
|
# Did compilation work?
|
|
if [ $? -ne 0 ]; then
|
|
echo "Compiling ${IN_FILES} (using docker): FAILED"
|
|
exit 1
|
|
fi
|
|
echo "Compiling ${IN_FILES} (using docker): PASSED"
|
|
rm -f $OUT_WASM
|
|
}
|
|
|
|
# Try Emscripten build using emcc or docker.
|
|
try_emscripten_build() {
|
|
which emcc > /dev/null
|
|
if [ $? -eq 0 ]; then
|
|
emscripten_emcc_build
|
|
return $?
|
|
fi
|
|
|
|
which docker > /dev/null
|
|
if [ $? -eq 0 ]; then
|
|
emscripten_docker_build
|
|
return $?
|
|
fi
|
|
|
|
echo "(Skipping Emscripten test)"
|
|
}
|
|
|
|
# Amalgamate the sources
|
|
./create_single_file_library.sh
|
|
# Did combining work?
|
|
if [ $? -ne 0 ]; then
|
|
echo "Single file library creation script: FAILED"
|
|
exit 1
|
|
fi
|
|
echo "Single file library creation script: PASSED"
|
|
|
|
# Copy the header to here (for the tests)
|
|
cp "$ZSTD_SRC_ROOT/zstd.h" zstd.h
|
|
|
|
# Compile the generated output
|
|
cc -Wall -Wextra -Werror -pthread -I. -Os -g0 -o $OUT_FILE zstd.c examples/roundtrip.c
|
|
# Did compilation work?
|
|
if [ $? -ne 0 ]; then
|
|
echo "Compiling roundtrip.c: FAILED"
|
|
exit 1
|
|
fi
|
|
echo "Compiling roundtrip.c: PASSED"
|
|
|
|
# Run then delete the compiled output
|
|
./$OUT_FILE
|
|
retVal=$?
|
|
rm -f $OUT_FILE
|
|
# Did the test work?
|
|
if [ $retVal -ne 0 ]; then
|
|
echo "Running roundtrip.c: FAILED"
|
|
exit 1
|
|
fi
|
|
echo "Running roundtrip.c: PASSED"
|
|
|
|
# Try Emscripten build if emcc or docker command is available.
|
|
try_emscripten_build
|
|
|
|
exit 0
|