From c6548eac8ea6c9c6faf464d7dda9b6ec81123e5d Mon Sep 17 00:00:00 2001 From: yoshihitoh Date: Mon, 29 Jun 2020 10:51:50 +0900 Subject: [PATCH 1/3] Rename static vars to avoid redefinition error. --- lib/common/pool.c | 8 ++++---- lib/dictBuilder/cover.c | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/common/pool.c b/lib/common/pool.c index aa4b4de0..fca2f65b 100644 --- a/lib/common/pool.c +++ b/lib/common/pool.c @@ -301,7 +301,7 @@ int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque) struct POOL_ctx_s { int dummy; }; -static POOL_ctx g_ctx; +static POOL_ctx g_poolCtx; POOL_ctx* POOL_create(size_t numThreads, size_t queueSize) { return POOL_create_advanced(numThreads, queueSize, ZSTD_defaultCMem); @@ -311,11 +311,11 @@ POOL_ctx* POOL_create_advanced(size_t numThreads, size_t queueSize, ZSTD_customM (void)numThreads; (void)queueSize; (void)customMem; - return &g_ctx; + return &g_poolCtx; } void POOL_free(POOL_ctx* ctx) { - assert(!ctx || ctx == &g_ctx); + assert(!ctx || ctx == &g_poolCtx); (void)ctx; } @@ -337,7 +337,7 @@ int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque) { size_t POOL_sizeof(POOL_ctx* ctx) { if (ctx==NULL) return 0; /* supports sizeof NULL */ - assert(ctx == &g_ctx); + assert(ctx == &g_poolCtx); return sizeof(*ctx); } diff --git a/lib/dictBuilder/cover.c b/lib/dictBuilder/cover.c index e37955a0..12de1074 100644 --- a/lib/dictBuilder/cover.c +++ b/lib/dictBuilder/cover.c @@ -224,7 +224,7 @@ typedef struct { } COVER_ctx_t; /* We need a global context for qsort... */ -static COVER_ctx_t *g_ctx = NULL; +static COVER_ctx_t *g_coverCtx = NULL; /*-************************************* * Helper functions @@ -267,11 +267,11 @@ static int COVER_cmp8(COVER_ctx_t *ctx, const void *lp, const void *rp) { /** * Same as COVER_cmp() except ties are broken by pointer value - * NOTE: g_ctx must be set to call this function. A global is required because + * NOTE: g_coverCtx must be set to call this function. A global is required because * qsort doesn't take an opaque pointer. */ static int WIN_CDECL COVER_strict_cmp(const void *lp, const void *rp) { - int result = COVER_cmp(g_ctx, lp, rp); + int result = COVER_cmp(g_coverCtx, lp, rp); if (result == 0) { result = lp < rp ? -1 : 1; } @@ -281,7 +281,7 @@ static int WIN_CDECL COVER_strict_cmp(const void *lp, const void *rp) { * Faster version for d <= 8. */ static int WIN_CDECL COVER_strict_cmp8(const void *lp, const void *rp) { - int result = COVER_cmp8(g_ctx, lp, rp); + int result = COVER_cmp8(g_coverCtx, lp, rp); if (result == 0) { result = lp < rp ? -1 : 1; } @@ -612,7 +612,7 @@ static size_t COVER_ctx_init(COVER_ctx_t *ctx, const void *samplesBuffer, /* qsort doesn't take an opaque pointer, so pass as a global. * On OpenBSD qsort() is not guaranteed to be stable, their mergesort() is. */ - g_ctx = ctx; + g_coverCtx = ctx; #if defined(__OpenBSD__) mergesort(ctx->suffix, ctx->suffixSize, sizeof(U32), (ctx->d <= 8 ? &COVER_strict_cmp8 : &COVER_strict_cmp)); From a035654ab804afb5883dd84155f9f812fe5bb0ed Mon Sep 17 00:00:00 2001 From: yoshihitoh Date: Wed, 1 Jul 2020 01:40:15 +0900 Subject: [PATCH 2/3] Enable docker based Emscripten build on single file library test if emcc is not available. --- .../single_file_libs/build_decoder_test.sh | 68 ++++++++++++++----- .../single_file_libs/build_library_test.sh | 68 ++++++++++++++----- 2 files changed, 104 insertions(+), 32 deletions(-) diff --git a/contrib/single_file_libs/build_decoder_test.sh b/contrib/single_file_libs/build_decoder_test.sh index 74e3f1c5..2ed25bce 100755 --- a/contrib/single_file_libs/build_decoder_test.sh +++ b/contrib/single_file_libs/build_decoder_test.sh @@ -6,6 +6,56 @@ OUT_FILE="tempbin" # Optional temporary compiled WebAssembly OUT_WASM="temp.wasm" +# Source files to compile using Emscripten. +IN_FILES="examples/emscripten.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 \ + trzeci/emscripten \ + 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_decoder.sh # Did combining work? @@ -35,21 +85,7 @@ if [ $retVal -ne 0 ]; then fi echo "Running simple.c: PASSED" -# Is Emscripten available? -which emcc > /dev/null -if [ $? -ne 0 ]; then - echo "(Skipping Emscripten test)" -else - # Compile the Emscripten example - CC_FLAGS="-Wall -Wextra -Werror -Os -g0 -flto --llvm-lto 3 -lGL -DNDEBUG=1" - emcc $CC_FLAGS -s WASM=1 -o $OUT_WASM examples/emscripten.c - # Did compilation work? - if [ $? -ne 0 ]; then - echo "Compiling emscripten.c: FAILED" - exit 1 - fi - echo "Compiling emscripten.c: PASSED" - rm -f $OUT_WASM -fi +# Try Emscripten build if emcc or docker command is available. +try_emscripten_build exit 0 diff --git a/contrib/single_file_libs/build_library_test.sh b/contrib/single_file_libs/build_library_test.sh index 3b8b16a0..54b3eae2 100755 --- a/contrib/single_file_libs/build_library_test.sh +++ b/contrib/single_file_libs/build_library_test.sh @@ -9,6 +9,56 @@ 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 \ + trzeci/emscripten \ + 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? @@ -41,21 +91,7 @@ if [ $retVal -ne 0 ]; then fi echo "Running roundtrip.c: PASSED" -# Is Emscripten available? -which emcc > /dev/null -if [ $? -ne 0 ]; then - echo "(Skipping Emscripten test)" -else - # 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 zstd.c examples/roundtrip.c - # Did compilation work? - if [ $? -ne 0 ]; then - echo "Compiling emscripten.c: FAILED" - exit 1 - fi - echo "Compiling emscripten.c: PASSED" - rm -f $OUT_WASM -fi +# Try Emscripten build if emcc or docker command is available. +try_emscripten_build exit 0 From bc5fe33243cdf4fe7fc3b7f5c6c0c1a6d886ac5e Mon Sep 17 00:00:00 2001 From: yoshihitoh Date: Tue, 7 Jul 2020 19:10:12 +0900 Subject: [PATCH 3/3] Change Emscripten docker image to the official one which is used for testing the single-file feature. --- contrib/single_file_libs/build_decoder_test.sh | 2 +- contrib/single_file_libs/build_library_test.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/single_file_libs/build_decoder_test.sh b/contrib/single_file_libs/build_decoder_test.sh index 2ed25bce..13f52bd6 100755 --- a/contrib/single_file_libs/build_decoder_test.sh +++ b/contrib/single_file_libs/build_decoder_test.sh @@ -28,7 +28,7 @@ emscripten_docker_build() { docker container run --rm \ --volume $PWD:/code \ --workdir /code \ - trzeci/emscripten \ + emscripten/emsdk:latest \ emcc $CC_FLAGS -s WASM=1 -I. -o $OUT_WASM $IN_FILES # Did compilation work? if [ $? -ne 0 ]; then diff --git a/contrib/single_file_libs/build_library_test.sh b/contrib/single_file_libs/build_library_test.sh index 54b3eae2..367b8de7 100755 --- a/contrib/single_file_libs/build_library_test.sh +++ b/contrib/single_file_libs/build_library_test.sh @@ -31,7 +31,7 @@ emscripten_docker_build() { docker container run --rm \ --volume $PWD:/code \ --workdir /code \ - trzeci/emscripten \ + emscripten/emsdk:latest \ emcc $CC_FLAGS -s WASM=1 -I. -o $OUT_WASM $IN_FILES # Did compilation work? if [ $? -ne 0 ]; then