diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..fdb9cc5 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,26 @@ +name: build +run-name: Build libcurl.js +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: download repo + uses: actions/checkout@v4 + + - name: install deps + run: | + sudo apt-get update + sudo apt-get install -y make cmake emscripten autoconf automake libtool pkg-config wget xxd + + - name: run build + working-directory: ./client + run: ./build.sh all + + - name: upload img + uses: actions/upload-artifact@v4 + with: + name: out + path: client/out/* + compression-level: 9 \ No newline at end of file diff --git a/client/build.sh b/client/build.sh index 299ee64..c9e1a53 100755 --- a/client/build.sh +++ b/client/build.sh @@ -3,19 +3,21 @@ set -e #path definitions -INCLUDE_DIR="build/curl-wasm/include/" -LIB_DIR="build/curl-wasm/lib/" -OUT_FILE="out/libcurl.js" -ES6_FILE="out/libcurl_module.mjs" -MODULE_FILE="out/emscripten_compiled.js" -COMPILED_FILE="out/emscripten_compiled.wasm" -WASM_FILE="out/libcurl.wasm" - +OUT_DIR="${OUT_DIR:=out}" +BUILD_DIR="build" C_DIR="libcurl" FRAGMENTS_DIR="fragments" JAVSCRIPT_DIR="javascript" WISP_CLIENT="wisp_client" +INCLUDE_DIR="$BUILD_DIR/curl-wasm/include/" +LIB_DIR="$BUILD_DIR/curl-wasm/lib/" +OUT_FILE="$OUT_DIR/libcurl.js" +ES6_FILE="$OUT_DIR/libcurl.mjs" +MODULE_FILE="$OUT_DIR/emscripten_compiled.js" +COMPILED_FILE="$OUT_DIR/emscripten_compiled.wasm" +WASM_FILE="$OUT_DIR/libcurl.wasm" + #read exported functions EXPORTED_FUNCS="" for func in $(cat exported_funcs.txt); do @@ -28,6 +30,22 @@ RUNTIME_METHODS="addFunction,removeFunction,allocate,ALLOC_NORMAL" COMPILER_OPTIONS="-o $MODULE_FILE -lcurl -lssl -lcrypto -lcjson -lz -lbrotlidec -lbrotlicommon -lnghttp2 -I $INCLUDE_DIR -L $LIB_DIR" EMSCRIPTEN_OPTIONS="-lwebsocket.js -sASSERTIONS=1 -sLLD_REPORT_UNDEFINED -sALLOW_TABLE_GROWTH -sALLOW_MEMORY_GROWTH -sEXPORTED_FUNCTIONS=$EXPORTED_FUNCS -sEXPORTED_RUNTIME_METHODS=$RUNTIME_METHODS" +#clean output dir +rm -rf $OUT_DIR +mkdir -p $OUT_DIR + +if [[ "$*" == *"all"* ]]; then + mkdir -p $OUT_DIR/release + mkdir -p $OUT_DIR/single_file + OUT_DIR=$OUT_DIR/release ./build.sh release + OUT_DIR=$OUT_DIR/single_file ./build.sh release single_file + mv $OUT_DIR/release/* $OUT_DIR + mv $OUT_DIR/single_file/* $OUT_DIR + rm -rf $OUT_DIR/release + rm -rf $OUT_DIR/single_file + exit 0 +fi + if [[ "$*" == *"release"* ]]; then COMPILER_OPTIONS="-Oz -flto $COMPILER_OPTIONS" echo "note: building with release optimizations" @@ -37,6 +55,8 @@ fi if [[ "$*" == *"single_file"* ]]; then EMSCRIPTEN_OPTIONS="-sSINGLE_FILE $EMSCRIPTEN_OPTIONS" + OUT_FILE="$OUT_DIR/libcurl_full.js" + ES6_FILE="$OUT_DIR/libcurl_full.mjs" echo "note: building as a single js file" fi @@ -44,10 +64,6 @@ fi tools/all_deps.sh tools/generate_cert.sh -#clean output dir -rm -rf out -mkdir -p out - #compile the main c file COMPILE_CMD="emcc $C_DIR/*.c $COMPILER_OPTIONS $EMSCRIPTEN_OPTIONS" echo $COMPILE_CMD