aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/bun.yml274
-rw-r--r--Dockerfile233
-rw-r--r--Dockerfile.base3
-rw-r--r--Makefile17
-rw-r--r--build.zig7
-rw-r--r--src/base64/bun-base64.c2
-rw-r--r--src/base64/fastavxbase64.c2
-rw-r--r--src/base64/fastavxbase64.h3
m---------src/bun.js/WebKit0
-rw-r--r--src/bun.js/node/syscall.zig8
-rw-r--r--src/cli/upgrade_command.zig3
-rw-r--r--src/env.zig2
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 && \
diff --git a/Makefile b/Makefile
index b52b1f3b6..7d1a25739 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/build.zig b/build.zig
index a6a3bc96d..bffa8eefe 100644
--- a/build.zig
+++ b/build.zig
@@ -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;