diff options
-rw-r--r-- | .github/workflows/bun.yml | 274 | ||||
-rw-r--r-- | Dockerfile | 233 | ||||
-rw-r--r-- | Dockerfile.base | 3 | ||||
-rw-r--r-- | Makefile | 17 | ||||
-rw-r--r-- | build.zig | 7 | ||||
-rw-r--r-- | src/base64/bun-base64.c | 2 | ||||
-rw-r--r-- | src/base64/fastavxbase64.c | 2 | ||||
-rw-r--r-- | src/base64/fastavxbase64.h | 3 | ||||
m--------- | src/bun.js/WebKit | 0 | ||||
-rw-r--r-- | src/bun.js/node/syscall.zig | 8 | ||||
-rw-r--r-- | src/cli/upgrade_command.zig | 3 | ||||
-rw-r--r-- | src/env.zig | 2 |
12 files changed, 334 insertions, 220 deletions
diff --git a/.github/workflows/bun.yml b/.github/workflows/bun.yml index 5f2c83e0b..c98669f36 100644 --- a/.github/workflows/bun.yml +++ b/.github/workflows/bun.yml @@ -15,6 +15,8 @@ on: - "examples/**" - "bench/**" - README.* + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: env: REGISTRY: ghcr.io @@ -22,147 +24,155 @@ env: TEST_TAG: bun-test' jobs: - e2e: - runs-on: self-hosted - name: "Integration tests" - if: github.repository_owner == 'oven-sh' + linux-x64: + name: Linux x64 (${{ matrix.cpu }}) + runs-on: linux-amd64 + timeout-minutes: 90 + strategy: + matrix: + cpu: [native, sandybridge] + steps: - - name: Checkout - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Checkout submodules - run: git -c submodule."src/bun.js/WebKit".update=none submodule update --init --recursive --depth=1 --progress -j 8 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - name: Login to Dockerhub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_PASSWORD }} - - name: Pull Base Image - run: bash .docker/pull.sh - - name: Build tests - uses: docker/build-push-action@v2 + run: git -c submodule."src/bun.js/WebKit".update=none submodule update --init --recursive --depth=1 --progress -j $(nproc) + - uses: docker/setup-buildx-action@v2 + id: buildx + with: + install: true + - name: Run + run: | + rm -rf ${{runner.temp}}/release + - name: Build and push + uses: docker/build-push-action@v3 with: context: . - target: test_base - tags: bun-test:latest - load: true + push: false cache-from: type=gha cache-to: type=gha,mode=max - builder: ${{ steps.buildx.outputs.name }} - - name: Run test-with-hmr - env: - BUN_TEST_NAME: test-with-hmr - GITHUB_WORKSPACE: $GITHUB_WORKSPACE - RUNNER_TEMP: ${RUNNER_TEMP} - run: bash .docker/runner.sh - - name: Run test-no-hmr - env: - BUN_TEST_NAME: test-no-hmr - GITHUB_WORKSPACE: $GITHUB_WORKSPACE - RUNNER_TEMP: ${RUNNER_TEMP} - run: bash .docker/runner.sh - - name: Run test-bun-create-next - env: - RUNNER_TEMP: ${RUNNER_TEMP} - BUN_TEST_NAME: test-create-next - GITHUB_WORKSPACE: $GITHUB_WORKSPACE - run: bash .docker/runner.sh - - name: Run test-bun-create-react - env: - RUNNER_TEMP: ${RUNNER_TEMP} - BUN_TEST_NAME: test-create-react - GITHUB_WORKSPACE: $GITHUB_WORKSPACE - run: bash .docker/runner.sh - - name: Run test-bun-run - env: - RUNNER_TEMP: ${RUNNER_TEMP} - BUN_TEST_NAME: test-bun-run - GITHUB_WORKSPACE: $GITHUB_WORKSPACE - run: bash .docker/runner.sh - - name: Run test-bun-install - env: - RUNNER_TEMP: ${RUNNER_TEMP} - BUN_TEST_NAME: test-bun-install - GITHUB_WORKSPACE: $GITHUB_WORKSPACE - run: bash .docker/runner.sh - # This is commented out because zig test does not work on the CI - # Which sucks - # zig-unit-tests: - # runs-on: self-hosted - # name: "Unit tests (Zig)" - # steps: - # - name: Checkout - # uses: actions/checkout@v2 - # - name: Checkout submodules - # run: git -c submodule."src/bun.js/WebKit".update=none submodule update --init --recursive --depth=1 --progress -j 8 - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v1 - # - name: Login to Dockerhub - # uses: docker/login-action@v1 - # with: - # username: ${{ secrets.DOCKERHUB_USERNAME }} - # password: ${{ secrets.DOCKERHUB_PASSWORD }} - # - name: Pull Base Image - # run: bash .docker/pull.sh - # - name: Build tests - # uses: docker/build-push-action@v2 - # with: - # context: . - # target: build_unit - # tags: bun-unit-tests:latest - # load: true - # cache-from: type=gha - # cache-to: type=gha,mode=max - # builder: ${{ steps.buildx.outputs.name }} - # - name: Run tests - # env: - # GITHUB_WORKSPACE: $GITHUB_WORKSPACE - # RUNNER_TEMP: ${RUNNER_TEMP} - # run: bash .docker/unit-tests.sh - release: - runs-on: self-hosted - needs: ["e2e"] - if: github.ref == 'refs/heads/main' - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Checkout submodules - run: git -c submodule."src/bun.js/WebKit".update=none submodule update --init --recursive --depth=1 --progress -j 8 - - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + build-args: | + ARCH=x86_64 + BUILDARCH=amd64 + CPU_TARGET=${{matrix.cpu}} + platforms: linux/amd64 + target: artifact + outputs: type=local,dest=${{runner.temp}}/release + - uses: actions/upload-artifact@v3 + if: ${{ matrix.cpu == 'native' }} + with: + name: bun-linux-amd64 + path: ${{runner.temp}}/release/bun + - uses: actions/upload-artifact@v3 + if: ${{ matrix.cpu == 'sandybridge' }} with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Login to DockerHub - uses: docker/login-action@v1 + name: bun-linux-amd64-generic + path: ${{runner.temp}}/release/bun + - uses: actions/upload-artifact@v3 + if: ${{ matrix.cpu == 'native' }} with: - username: jarredsumner - password: ${{ secrets.DOCKERHUB_ALT }} - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + name: bun-dependencies-linux-amd64 + path: ${{runner.temp}}/release/bun-dependencies + - uses: actions/upload-artifact@v3 + if: ${{ matrix.cpu == 'sandybridge' }} + with: + name: bun-dependencies-linux-amd64-generic + path: ${{runner.temp}}/release/bun-dependencies + - uses: actions/upload-artifact@v3 + if: ${{ matrix.cpu == 'native' }} + with: + name: bun-linux-amd64-profile + path: ${{runner.temp}}/release/bun-profile + - uses: actions/upload-artifact@v3 + if: ${{ matrix.cpu == 'sandybridge' }} + with: + name: bun-linux-amd64-generic-profile + path: ${{runner.temp}}/release/bun-profile + - uses: actions/upload-artifact@v3 + if: ${{ matrix.cpu == 'native' }} + with: + name: bun-obj-linux-amd64 + path: ${{runner.temp}}/release/bun-obj + - uses: actions/upload-artifact@v3 + if: ${{ matrix.cpu == 'sandybridge' }} + with: + name: bun-obj-linux-amd64-generic + path: ${{runner.temp}}/release/bun-obj + linux-aarch64: + name: Linux aarch64 + runs-on: linux-arm64 + timeout-minutes: 90 + steps: + - uses: actions/checkout@v3 + - name: Checkout submodules + run: git -c submodule."src/bun.js/WebKit".update=none submodule update --init --recursive --depth=1 --progress -j $(nproc) + - uses: docker/setup-buildx-action@v2 + id: buildx with: install: true - - name: Pull Base Image - run: bash .docker/pull.sh - - name: Build release image - uses: docker/build-push-action@v2 + - name: Run + run: | + rm -rf ${{runner.temp}}/release + - name: Build and push + uses: docker/build-push-action@v3 with: context: . - target: release - tags: | - ghcr.io/jarred-sumner/bun:${{github.sha}} - ghcr.io/jarred-sumner/bun:edge - jarredsumner/bun:${{github.sha}} - jarredsumner/bun:edge - platforms: | - linux/amd64 - labels: | - org.opencontainers.image.title=bun - org.opencontainers.image.description=bun is a fast bundler, transpiler, JavaScript Runtime environment and package manager for web software. The image is an Ubuntu 20.04 image with bun preinstalled into /opt/bun. - org.opencontainers.image.vendor=bun - org.opencontainers.image.source=https://github.com/oven-sh/bun - org.opencontainers.image.url=https://bun.sh - builder: ${{ steps.buildx.outputs.name }} - push: true + push: false + cache-from: type=gha + cache-to: type=gha,mode=max + build-args: | + ARCH=aarch64 + BUILDARCH=arm64 + CPU_TARGET=native + platforms: linux/arm64 + target: artifact + outputs: type=local,dest=${{runner.temp}}/release + - uses: actions/upload-artifact@v3 + with: + name: bun-linux-aarch64 + path: ${{runner.temp}}/release/bun + - uses: actions/upload-artifact@v3 + with: + name: bun-dependencies-linux-aarch64 + path: ${{runner.temp}}/release/bun-dependencies + - uses: actions/upload-artifact@v3 + with: + name: bun-linux-aarch64-profile + path: ${{runner.temp}}/release/bun-profile + - uses: actions/upload-artifact@v3 + with: + name: bun-obj-linux-aarch64 + path: ${{runner.temp}}/release/bun-obj + + release: + name: release + runs-on: ubuntu-18.04 + timeout-minutes: 90 + needs: + - linux-x64 + - linux-aarch64 + steps: + - uses: actions/download-artifact@v3 + with: + path: ${{runner.temp}}/release + - name: Rename files + run: | + cd ${{runner.temp}}/release + mv bun-linux-amd64-generic bun-linux-amd64-baseline + mv bun-linux-amd64-generic-profile bun-linux-amd64-baseline-profile + + zip -r bun-linux-amd64.zip bun-linux-amd64 + zip -r bun-linux-amd64-baseline.zip bun-linux-amd64-baseline + zip -r bun-linux-amd64-profile.zip bun-linux-amd64-profile + zip -r bun-linux-amd64-baseline-profile.zip bun-linux-amd64-baseline-profile + zip -r bun-linux-aarch64.zip bun-linux-aarch64 + zip -r bun-linux-aarch64-profile.zip bun-linux-aarch64-profile + + - name: Release + uses: softprops/action-gh-release@v1 + with: + prerelease: true + generate_release_notes: true + tag_name: "canary" + name: Canary + files: | + ${{runner.temp}}/release/*.zip diff --git a/Dockerfile b/Dockerfile index 344d6e323..57967e643 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,80 @@ -FROM bunbunbunbun/bun-base:latest as lolhtml +FROM bitnami/minideb:bullseye as bun-base + +RUN install_packages ca-certificates curl wget lsb-release software-properties-common gnupg gnupg1 gnupg2 + +RUN wget https://apt.llvm.org/llvm.sh && \ + chmod +x llvm.sh && \ + ./llvm.sh 13 + +RUN install_packages \ + cmake \ + curl \ + file \ + git \ + gnupg \ + libc-dev \ + libxml2 \ + libxml2-dev \ + make \ + ninja-build \ + perl \ + python3 \ + rsync \ + ruby \ + unzip \ + bash tar gzip + +ENV CXX=clang++-13 +ENV CC=clang-13 + +RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \ + install_packages nodejs && \ + npm install -g esbuild + + +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build + +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG BUILDARCH=amd64 +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig + +ENV WEBKIT_OUT_DIR=${WEBKIT_DIR} +ENV BUILDARCH=${BUILDARCH} +ENV AR=/usr/bin/llvm-ar-13 +ENV ZIG "${ZIG_PATH}/zig" +ENV PATH="$ZIG/bin:$PATH" +ENV LD=lld-13 + +RUN mkdir -p $BUN_DIR $BUN_DEPS_OUT_DIR + +FROM bun-base as bun-base-with-zig-and-webkit + +WORKDIR $GITHUB_WORKSPACE + +RUN curl -o zig-linux-$BUILDARCH.zip -L https://github.com/oven-sh/zig/releases/download/jul1/zig-linux-$BUILDARCH.zip && \ + unzip -q zig-linux-$BUILDARCH.zip && \ + rm zig-linux-$BUILDARCH.zip; + +RUN mkdir -p $WEBKIT_OUT_DIR && cd $WEBKIT_OUT_DIR && cd ../ && \ + curl -o bun-webkit-linux-$BUILDARCH.tar.gz -L https://github.com/oven-sh/WebKit/releases/download/jul4-2/bun-webkit-linux-$BUILDARCH.tar.gz && \ + gunzip bun-webkit-linux-$BUILDARCH.tar.gz && \ + tar -xf bun-webkit-linux-$BUILDARCH.tar && \ + ls && \ + echo $(pwd) && \ + rm bun-webkit-linux-$BUILDARCH.tar && \ + cat $WEBKIT_OUT_DIR/include/cmakeconfig.h > /dev/null + +LABEL org.opencontainers.image.title="bun base image with zig & webkit ${BUILDARCH} (glibc)" +LABEL org.opencontainers.image.source=https://github.com/jarred-sumner/bun + + +FROM bun-base as lolhtml RUN install_packages build-essential && curl https://sh.rustup.rs -sSf | sh -s -- -y @@ -18,7 +93,7 @@ COPY src/deps/lol-html ${BUN_DIR}/src/deps/lol-html RUN export PATH=$PATH:$HOME/.cargo/bin && export CC=$(which clang-13) && cd ${BUN_DIR} && \ make lolhtml && rm -rf src/deps/lol-html Makefile -FROM bunbunbunbun/bun-base:latest as mimalloc +FROM bun-base as mimalloc ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -31,11 +106,13 @@ ARG BUN_DIR=${GITHUB_WORKSPACE}/bun COPY Makefile ${BUN_DIR}/Makefile COPY src/deps/mimalloc ${BUN_DIR}/src/deps/mimalloc +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} RUN cd ${BUN_DIR} && \ make mimalloc && rm -rf src/deps/mimalloc Makefile -FROM bunbunbunbun/bun-base:latest as zlib +FROM bun-base as zlib ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -45,6 +122,8 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} COPY Makefile ${BUN_DIR}/Makefile COPY src/deps/zlib ${BUN_DIR}/src/deps/zlib @@ -54,7 +133,7 @@ WORKDIR $BUN_DIR RUN cd $BUN_DIR && \ make zlib && rm -rf src/deps/zlib Makefile -FROM bunbunbunbun/bun-base:latest as libarchive +FROM bun-base as libarchive ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -64,16 +143,18 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} + +RUN install_packages autoconf automake libtool pkg-config COPY Makefile ${BUN_DIR}/Makefile COPY src/deps/libarchive ${BUN_DIR}/src/deps/libarchive WORKDIR $BUN_DIR +RUN make libarchive && rm -rf src/deps/libarchive Makefile -RUN cd $BUN_DIR && install_packages autoconf automake libtool pkg-config && \ - make libarchive && rm -rf src/deps/libarchive Makefile - -FROM bunbunbunbun/bun-base:latest as tinycc +FROM bun-base as tinycc ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -83,15 +164,12 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun - -COPY Makefile ${BUN_DIR}/Makefile -COPY src/deps/tinycc ${BUN_DIR}/src/deps/tinycc - -WORKDIR $BUN_DIR +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} RUN install_packages libtcc-dev && cp /usr/lib/$(uname -m)-linux-gnu/libtcc.a ${BUN_DEPS_OUT_DIR} -FROM bunbunbunbun/bun-base:latest as libbacktrace +FROM bun-base as libbacktrace ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -101,6 +179,8 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} COPY Makefile ${BUN_DIR}/Makefile COPY src/deps/libbacktrace ${BUN_DIR}/src/deps/libbacktrace @@ -110,7 +190,9 @@ WORKDIR $BUN_DIR RUN cd $BUN_DIR && \ make libbacktrace && rm -rf src/deps/libbacktrace Makefile -FROM bunbunbunbun/bun-base:latest as boringssl +FROM bun-base as boringssl + +RUN install_packages golang ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -120,15 +202,17 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} COPY Makefile ${BUN_DIR}/Makefile COPY src/deps/boringssl ${BUN_DIR}/src/deps/boringssl WORKDIR $BUN_DIR -RUN install_packages golang && make boringssl && rm -rf src/deps/boringssl Makefile +RUN make boringssl && rm -rf src/deps/boringssl Makefile -FROM bunbunbunbun/bun-base:latest as base64 +FROM bun-base as base64 ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -138,6 +222,8 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} COPY Makefile ${BUN_DIR}/Makefile COPY src/base64 ${BUN_DIR}/src/base64 @@ -146,7 +232,7 @@ WORKDIR $BUN_DIR RUN make base64 && rm -rf src/base64 Makefile -FROM bunbunbunbun/bun-base:latest as uws +FROM bun-base as uws ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -156,6 +242,8 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} COPY Makefile ${BUN_DIR}/Makefile COPY src/deps/uws ${BUN_DIR}/src/deps/uws @@ -169,7 +257,7 @@ WORKDIR $BUN_DIR RUN cd $BUN_DIR && \ make uws && rm -rf src/deps/uws Makefile -FROM bunbunbunbun/bun-base:latest as picohttp +FROM bun-base as picohttp ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -179,6 +267,8 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} COPY Makefile ${BUN_DIR}/Makefile COPY src/deps/picohttpparser ${BUN_DIR}/src/deps/picohttpparser @@ -191,7 +281,7 @@ RUN cd $BUN_DIR && \ make picohttp -FROM bunbunbunbun/bun-base-with-zig-and-webkit:latest as identifier_cache +FROM bun-base-with-zig-and-webkit as identifier_cache ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -201,6 +291,8 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} WORKDIR $BUN_DIR @@ -211,7 +303,7 @@ COPY src/js_lexer/identifier_cache.zig ${BUN_DIR}/src/js_lexer/identifier_cache. RUN cd $BUN_DIR && \ make identifier-cache && rm -rf zig-cache Makefile -FROM bunbunbunbun/bun-base-with-zig-and-webkit:latest as node_fallbacks +FROM bun-base-with-zig-and-webkit as node_fallbacks ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -221,6 +313,8 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} WORKDIR $BUN_DIR @@ -230,7 +324,7 @@ COPY src/node-fallbacks ${BUN_DIR}/src/node-fallbacks RUN cd $BUN_DIR && \ make node-fallbacks && rm -rf src/node-fallbacks/node_modules Makefile -FROM bunbunbunbun/bun-base-with-zig-and-webkit:latest as prepare_release +FROM bun-base-with-zig-and-webkit as prepare_release ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -240,7 +334,8 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun - +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} WORKDIR $BUN_DIR @@ -254,6 +349,7 @@ COPY ./misctools ${BUN_DIR}/misctools COPY Makefile ${BUN_DIR}/Makefile + FROM prepare_release as compile_release_obj ARG DEBIAN_FRONTEND=noninteractive @@ -264,6 +360,8 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} COPY Makefile ${BUN_DIR}/Makefile @@ -271,18 +369,33 @@ WORKDIR $BUN_DIR ENV JSC_BASE_DIR=${WEBKIT_DIR} ENV LIB_ICU_PATH=${WEBKIT_DIR}/lib -ARG TRIPLET=x86_64-linux-gnu +ARG ARCH=x86_64 +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} +ARG TRIPLET=${ARCH}-linux-gnu COPY --from=identifier_cache ${BUN_DIR}/src/js_lexer/*.blob ${BUN_DIR}/src/js_lexer/ COPY --from=node_fallbacks ${BUN_DIR}/src/node-fallbacks/out ${BUN_DIR}/src/node-fallbacks/out RUN cd $BUN_DIR && mkdir -p src/bun.js/bindings-obj && rm -rf $HOME/.cache zig-cache && make prerelease && \ mkdir -p $BUN_RELEASE_DIR && \ - $ZIG_PATH/zig build obj -Drelease-fast -Dtarget=${TRIPLET} && \ + $ZIG_PATH/zig build obj -Drelease-fast -Dtarget=${TRIPLET} -Dcpu=$(echo "${CPU_TARGET}" | tr '-' '_') && \ make bun-release-copy-obj FROM scratch as build_release_obj +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} + + COPY --from=compile_release_obj /tmp/*.o / FROM prepare_release as compile_cpp @@ -295,6 +408,8 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} COPY Makefile ${BUN_DIR}/Makefile @@ -352,6 +467,8 @@ ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +ARG CPU_TARGET=native +ENV CPU_TARGET=${CPU_TARGET} COPY Makefile ${BUN_DIR}/Makefile @@ -378,32 +495,9 @@ COPY --from=build_release_cpp /*.o ${BUN_DIR}/src/bun.js/bindings-obj/ RUN cd $BUN_DIR && mkdir -p ${BUN_RELEASE_DIR} && make bun-relink copy-to-bun-release-dir && \ rm -rf $HOME/.cache zig-cache misctools package.json build-id completions build.zig $(BUN_DIR)/packages -FROM prepare_release as build_unit - -ARG DEBIAN_FRONTEND=noninteractive -ARG GITHUB_WORKSPACE=/build -ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig -# Directory extracts to "bun-webkit" -ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit -ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release -ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps -ARG BUN_DIR=${GITHUB_WORKSPACE}/bun -WORKDIR $BUN_DIR -ENV PATH "$ZIG_PATH:$PATH" -ENV LIB_ICU_PATH "${WEBKIT_DIR}/lib" - -CMD make jsc-bindings-headers \ - api \ - analytics \ - bun_error \ - fallback_decoder \ - jsc-bindings-mac -j10 && \ - make \ - run-all-unit-tests - -FROM alpine:latest as release_with_debug_info +FROM scratch as artifact ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -413,21 +507,13 @@ ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun -COPY .devcontainer/limits.conf /etc/security/limits.conf - -ENV BUN_INSTALL /opt/bun -ENV PATH "/opt/bun/bin:$PATH" -ARG BUILDARCH=amd64 -LABEL org.opencontainers.image.title="bun ${BUILDARCH} (glibc)" -LABEL org.opencontainers.image.source=https://github.com/jarred-sumner/bun -COPY --from=build_release ${BUN_RELEASE_DIR}/bun /opt/bun/bin/bun -COPY --from=build_release ${BUN_RELEASE_DIR}/bun-profile /opt/bun/bin/bun-profile - -WORKDIR /opt/bun +COPY --from=build_release ${BUN_RELEASE_DIR}/bun /bun +COPY --from=build_release ${BUN_RELEASE_DIR}/bun-profile /bun-profile +COPY --from=build_release ${BUN_DEPS_OUT_DIR}/* /bun-dependencies +COPY --from=build_release_obj /*.o /bun-obj -ENTRYPOINT [ "/opt/bun/bin/bun" ] -FROM alpine:latest as release +FROM prepare_release as build_unit ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -438,20 +524,23 @@ ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun -COPY .devcontainer/limits.conf /etc/security/limits.conf +WORKDIR $BUN_DIR -ENV BUN_INSTALL /opt/bun -ENV PATH "/opt/bun/bin:$PATH" -ARG BUILDARCH=amd64 -LABEL org.opencontainers.image.title="bun ${BUILDARCH} (glibc)" -LABEL org.opencontainers.image.source=https://github.com/jarred-sumner/bun -COPY --from=build_release ${BUN_RELEASE_DIR}/bun /opt/bun -WORKDIR /opt/bun +ENV PATH "$ZIG_PATH:$PATH" +ENV LIB_ICU_PATH "${WEBKIT_DIR}/lib" + +CMD make jsc-bindings-headers \ + api \ + analytics \ + bun_error \ + fallback_decoder \ + jsc-bindings-mac -j10 && \ + make \ + run-all-unit-tests -ENTRYPOINT [ "/opt/bun/bin/bun" ] -# FROM bunbunbunbun/bun-test-base as test_base +# FROM bun-test-base as test_base # ARG DEBIAN_FRONTEND=noninteractive # ARG GITHUB_WORKSPACE=/build diff --git a/Dockerfile.base b/Dockerfile.base index 538b71358..0bbc6b7d6 100644 --- a/Dockerfile.base +++ b/Dockerfile.base @@ -4,7 +4,7 @@ RUN install_packages ca-certificates curl wget lsb-release software-properties-c RUN wget https://apt.llvm.org/llvm.sh && \ chmod +x llvm.sh && \ - ./llvm.sh 13 + ./llvm.sh 13 RUN install_packages \ cmake \ @@ -59,7 +59,6 @@ WORKDIR $GITHUB_WORKSPACE RUN curl -o zig-linux-$BUILDARCH.zip -L https://github.com/Jarred-Sumner/zig/releases/download/jul1/zig-linux-$BUILDARCH.zip && \ unzip zig-linux-$BUILDARCH.zip && \ rm zig-linux-$BUILDARCH.zip; - RUN mkdir -p $WEBKIT_OUT_DIR && cd $WEBKIT_OUT_DIR && cd ../ && \ curl -o bun-webkit-linux-$BUILDARCH.tar.gz -L https://github.com/oven-sh/WebKit/releases/download/jul4-2/bun-webkit-linux-$BUILDARCH.tar.gz && \ @@ -277,10 +277,11 @@ ICU_FLAGS ?= # TODO: find a way to make this more resilient # Ideally, we could just look up the linker search paths -LIB_ICU_PATH ?= $(BUN_DEPS_DIR) - ifeq ($(OS_NAME),linux) +LIB_ICU_PATH ?= $(JSC_LIB) ICU_FLAGS += $(LIB_ICU_PATH)/libicuuc.a $(LIB_ICU_PATH)/libicudata.a $(LIB_ICU_PATH)/libicui18n.a +else +LIB_ICU_PATH ?= $(BUN_DEPS_DIR) endif ifeq ($(OS_NAME),darwin) @@ -602,7 +603,8 @@ usockets: rm -rf $(BUN_DEPS_DIR)/uws/uSockets/*.o $(BUN_DEPS_DIR)/uws/uSockets/**/*.o $(BUN_DEPS_DIR)/uws/uSockets/*.a $(BUN_DEPS_DIR)/uws/uSockets/*.bc cd $(USOCKETS_DIR) && $(CC) -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc $(EMIT_LLVM_FOR_RELEASE) $(MACOS_MIN_FLAG) -fPIC $(CFLAGS) $(UWS_CC_FLAGS) -save-temps -I$(BUN_DEPS_DIR)/uws/uSockets/src $(UWS_LDFLAGS) -g $(DEFAULT_LINKER_FLAGS) $(PLATFORM_LINKER_FLAGS) $(OPTIMIZATION_LEVEL) -g -c $(wildcard $(USOCKETS_SRC_DIR)/*.c) $(wildcard $(USOCKETS_SRC_DIR)/**/*.c) cd $(USOCKETS_DIR) && $(CXX) -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc $(EMIT_LLVM_FOR_RELEASE) $(MACOS_MIN_FLAG) -fPIC $(CXXFLAGS) $(UWS_CXX_FLAGS) -save-temps -I$(BUN_DEPS_DIR)/uws/uSockets/src $(UWS_LDFLAGS) -g $(DEFAULT_LINKER_FLAGS) $(PLATFORM_LINKER_FLAGS) $(OPTIMIZATION_LEVEL) -g -c $(wildcard $(USOCKETS_SRC_DIR)/*.cpp) $(wildcard $(USOCKETS_SRC_DIR)/**/*.cpp) - cd $(USOCKETS_DIR) && $(AR) rcvs $(BUN_DEPS_OUT_DIR)/libusockets.a *.bc + cd $(USOCKETS_DIR) && $(AR) rcvs $(BUN_DEPS_OUT_DIR)/libusockets.a $(USOCKETS_DIR)/*.{o,bc} + uws: usockets $(CXX) $(BITCODE_OR_SECTIONS) $(EMIT_LLVM_FOR_RELEASE) -fPIC -I$(BUN_DEPS_DIR)/uws/uSockets/src $(CLANG_FLAGS) $(CFLAGS) $(UWS_CXX_FLAGS) $(UWS_LDFLAGS) $(PLATFORM_LINKER_FLAGS) -c -I$(BUN_DEPS_DIR) $(BUN_DEPS_OUT_DIR)/libusockets.a $(BUN_DEPS_DIR)/libuwsockets.cpp -o $(BUN_DEPS_OUT_DIR)/libuwsockets.o @@ -623,7 +625,10 @@ jsc-check: all-js: runtime_js fallback_decoder bun_error node-fallbacks -prerelease: api analytics all-js +ensure-package-dir: + mkdir -p $(PACKAGE_DIR) + +prerelease: api analytics all-js ensure-package-dir release-only: jsc-bindings-mac build-obj cls bun-link-lld-release bun-link-lld-release-dsym release-bin-entitlements release-safe-only: all-js jsc-bindings-mac build-obj-safe cls bun-link-lld-release bun-link-lld-release-dsym release-bin-entitlements release: prerelease release-only @@ -1210,6 +1215,7 @@ bun-link-lld-release-no-jsc: -o $(BUN_RELEASE_BIN) -Wl,-undefined,dynamic_lookup -Wl,-why_load bun-relink-copy: + mkdir -p $(PACKAGE_DIR) cp /tmp/bun-$(PACKAGE_JSON_VERSION).o $(BUN_RELEASE_BIN).o @@ -1240,7 +1246,7 @@ bun-link-lld-release-no-lto: ifeq ($(OS_NAME),darwin) bun-link-lld-release-dsym: bun-release-copy-obj $(DSYMUTIL) -o $(BUN_RELEASE_BIN).dSYM $(BUN_RELEASE_BIN) - -$(STRIP) $(BUN_RELEASE_BIN) --wildcard -K _napi\* + -$(STRIP) -s $(BUN_RELEASE_BIN) --wildcard -K _napi\* copy-to-bun-release-dir-dsym: gzip --keep -c $(PACKAGE_DIR)/bun.dSYM > $(BUN_RELEASE_DIR)/bun.dSYM.gz @@ -1249,6 +1255,7 @@ endif ifeq ($(OS_NAME),linux) bun-link-lld-release-dsym: bun-release-copy-obj mv $(BUN_RELEASE_BIN).o /tmp/bun-$(PACKAGE_JSON_VERSION).o + -$(STRIP) -s $(BUN_RELEASE_BIN) --wildcard -K _napi\* copy-to-bun-release-dir-dsym: endif @@ -239,7 +239,6 @@ pub fn build(b: *std.build.Builder) !void { } else if (target.isLinux()) { target.setGnuLibCVersion(2, 27, 0); } - std.mem.copy( u8, &triplet_buf, @@ -311,6 +310,12 @@ pub fn build(b: *std.build.Builder) !void { "bindgen", false, ); + opts.addOption( + bool, + "baseline", + arch.isX86() and (obj.target.cpu_model == .baseline or + !std.Target.x86.featureSetHas(obj.target.getCpuFeatures(), .avx2)), + ); obj.addOptions("build_options", opts); try addInternalPackages( diff --git a/src/base64/bun-base64.c b/src/base64/bun-base64.c index e11f88da5..6cf11bbe7 100644 --- a/src/base64/bun-base64.c +++ b/src/base64/bun-base64.c @@ -22,7 +22,7 @@ size_t bun_base64_encode(char *dest, const char *src, size_t len) { return chromium_base64_encode(dest, src, len); } -#elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) +#elif defined(__GNUC__) && (defined(__x86_64__) && defined(__AVX2__)) size_t bun_base64_decode(char *dest, const char *src, size_t len, size_t *outlen) { diff --git a/src/base64/fastavxbase64.c b/src/base64/fastavxbase64.c index 47be824b4..305288fde 100644 --- a/src/base64/fastavxbase64.c +++ b/src/base64/fastavxbase64.c @@ -1,4 +1,4 @@ -#if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) +#if defined(__GNUC__) && defined(__x86_64__) && defined(__AVX2__) #include "fastavxbase64.h" #include <stdbool.h> diff --git a/src/base64/fastavxbase64.h b/src/base64/fastavxbase64.h index d1064a5d1..80f097ae8 100644 --- a/src/base64/fastavxbase64.h +++ b/src/base64/fastavxbase64.h @@ -1,4 +1,5 @@ -#if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) + +#if defined(__GNUC__) && defined(__x86_64__) && defined(__AVX2__) #ifndef EXPAVX_B64 #define EXPAVX_B64 diff --git a/src/bun.js/WebKit b/src/bun.js/WebKit -Subproject 7e7774dabf1c2d94fe3604defb3c54a4c989c3b +Subproject 786404fdda33adfee9b484702fa0101fdffbb26 diff --git a/src/bun.js/node/syscall.zig b/src/bun.js/node/syscall.zig index b931e9c0e..4378a4762 100644 --- a/src/bun.js/node/syscall.zig +++ b/src/bun.js/node/syscall.zig @@ -16,27 +16,29 @@ const C = @import("../../global.zig").C; const linux = os.linux; const Maybe = JSC.Maybe; +// On Linux AARCh64, zig is missing stat & lstat syscalls +const use_libc = (Environment.isLinux and Environment.isAarch64) or Environment.isMac; pub const system = if (Environment.isLinux) linux else @import("io").darwin; pub const S = struct { pub usingnamespace if (Environment.isLinux) linux.S else std.os.S; }; const sys = std.os.system; -const statSym = if (Environment.isMac) +const statSym = if (use_libc) C.stat else if (Environment.isLinux) linux.stat else @compileError("STAT"); -const fstatSym = if (Environment.isMac) +const fstatSym = if (use_libc) C.fstat else if (Environment.isLinux) linux.fstat else @compileError("STAT"); -const lstat64 = if (Environment.isMac) +const lstat64 = if (use_libc) C.lstat else if (Environment.isLinux) linux.lstat diff --git a/src/cli/upgrade_command.zig b/src/cli/upgrade_command.zig index a64985bbb..a28749849 100644 --- a/src/cli/upgrade_command.zig +++ b/src/cli/upgrade_command.zig @@ -66,7 +66,8 @@ pub const Version = struct { pub const platform_label = if (Environment.isMac) "darwin" else "linux"; pub const arch_label = if (Environment.isAarch64) "aarch64" else "x64"; pub const triplet = platform_label ++ "-" ++ arch_label; - pub const folder_name = "bun-" ++ triplet; + const suffix = if (Environment.baseline) "-baseline" else ""; + pub const folder_name = "bun-" ++ triplet ++ suffix; pub const zip_filename = folder_name ++ ".zip"; const current_version: string = "bun-v" ++ Global.package_json_version; diff --git a/src/env.zig b/src/env.zig index 0e4cbc414..aa0a6de86 100644 --- a/src/env.zig +++ b/src/env.zig @@ -25,4 +25,4 @@ pub const isX86 = @import("builtin").target.cpu.arch.isX86(); pub const isX64 = @import("builtin").target.cpu.arch == .x86_64; pub const allow_assert = isDebug or isTest; pub const analytics_url = if (isDebug) "http://localhost:4000/events" else "http://i.bun.sh/events"; -pub const simd = isX86 or isAarch64; +pub const baseline = @import("build_options").baseline; |