aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred SUmner <jarred@jarredsumner.com> 2022-07-21 16:57:43 -0700
committerGravatar Jarred SUmner <jarred@jarredsumner.com> 2022-07-21 16:58:07 -0700
commit588669ea6ab9a73ba3ca7fd8c1ba9d11ebcbb0f3 (patch)
tree83b09ca61b58f35e5fe1c06002515f3b9e3c8fad
parente6c58ae4f236b0fbad27d0c8a029224d05eca9a9 (diff)
downloadbun-588669ea6ab9a73ba3ca7fd8c1ba9d11ebcbb0f3.tar.gz
bun-588669ea6ab9a73ba3ca7fd8c1ba9d11ebcbb0f3.tar.zst
bun-588669ea6ab9a73ba3ca7fd8c1ba9d11ebcbb0f3.zip
Redo the dockerfile
-rw-r--r--.docker/build-base-images.sh4
-rw-r--r--.docker/build-base.sh10
-rw-r--r--Dockerfile223
-rw-r--r--Dockerfile.base159
-rw-r--r--Makefile29
5 files changed, 203 insertions, 222 deletions
diff --git a/.docker/build-base-images.sh b/.docker/build-base-images.sh
index 396017e81..55984471f 100644
--- a/.docker/build-base-images.sh
+++ b/.docker/build-base-images.sh
@@ -6,10 +6,10 @@ export DOCKER_BUILDKIT=1
docker login --username bunbunbunbun
-docker build -f Dockerfile.base -t bunbunbunbun/bun-test-base --target bun-test-base . --platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH
+# docker build -f Dockerfile.base -t bunbunbunbun/bun-test-base --target bun-test-base . --platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH
docker build -f Dockerfile.base -t bunbunbunbun/bun-base-with-zig-and-webkit --target bun-base-with-zig-and-webkit . --platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH
docker build -f Dockerfile.base -t bunbunbunbun/bun-base --target bun-base --platform=linux/$BUILDARCH . --build-arg BUILDARCH=$BUILDARCH
-docker push bunbunbunbun/bun-test-base:latest
+# docker push bunbunbunbun/bun-test-base:latest
docker push bunbunbunbun/bun-base-with-zig-and-webkit:latest
docker push bunbunbunbun/bun-base:latest
diff --git a/.docker/build-base.sh b/.docker/build-base.sh
index f22410371..3a9f097e8 100644
--- a/.docker/build-base.sh
+++ b/.docker/build-base.sh
@@ -4,10 +4,10 @@ set -euxo pipefail
export DOCKER_BUILDKIT=1
-docker buildx build \
- -t bunbunbunbun/bun-test-base:latest -f Dockerfile.base \
- --target bun-test-base \
- --platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH .
+# docker buildx build \
+# -t bunbunbunbun/bun-test-base:latest -f Dockerfile.base \
+# --target bun-test-base \
+# --platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH .
docker buildx build \
--target bun-base \
-f Dockerfile.base \
@@ -19,6 +19,6 @@ docker buildx build \
--target bun-base-with-zig-and-webkit \
--platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH .
-docker push bunbunbunbun/bun-test-base:latest
+# docker push bunbunbunbun/bun-test-base:latest
docker push bunbunbunbun/bun-base:latest
docker push bunbunbunbun/bun-base-with-zig-and-webkit:latest
diff --git a/Dockerfile b/Dockerfile
index 311d54e55..344d6e323 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,8 @@
FROM bunbunbunbun/bun-base:latest as lolhtml
+RUN install_packages build-essential && curl https://sh.rustup.rs -sSf | sh -s -- -y
+
ARG DEBIAN_FRONTEND=noninteractive
ARG GITHUB_WORKSPACE=/build
ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig
@@ -13,7 +15,7 @@ ARG BUN_DIR=${GITHUB_WORKSPACE}/bun
COPY Makefile ${BUN_DIR}/Makefile
COPY src/deps/lol-html ${BUN_DIR}/src/deps/lol-html
-RUN cd ${BUN_DIR} && \
+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
@@ -68,7 +70,7 @@ COPY src/deps/libarchive ${BUN_DIR}/src/deps/libarchive
WORKDIR $BUN_DIR
-RUN cd $BUN_DIR && \
+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
@@ -87,9 +89,7 @@ COPY src/deps/tinycc ${BUN_DIR}/src/deps/tinycc
WORKDIR $BUN_DIR
-RUN cd $BUN_DIR && \
- make tinycc && rm -rf src/deps/tinycc Makefile
-
+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
@@ -126,7 +126,7 @@ COPY src/deps/boringssl ${BUN_DIR}/src/deps/boringssl
WORKDIR $BUN_DIR
-RUN make boringssl && rm -rf src/deps/boringssl Makefile
+RUN install_packages golang && make boringssl && rm -rf src/deps/boringssl Makefile
FROM bunbunbunbun/bun-base:latest as base64
@@ -253,6 +253,56 @@ COPY ./package.json ${BUN_DIR}/package.json
COPY ./misctools ${BUN_DIR}/misctools
COPY Makefile ${BUN_DIR}/Makefile
+
+FROM prepare_release as compile_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
+
+COPY Makefile ${BUN_DIR}/Makefile
+
+WORKDIR $BUN_DIR
+
+ENV JSC_BASE_DIR=${WEBKIT_DIR}
+ENV LIB_ICU_PATH=${WEBKIT_DIR}/lib
+ARG TRIPLET=x86_64-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} && \
+ make bun-release-copy-obj
+
+FROM scratch as build_release_obj
+
+COPY --from=compile_release_obj /tmp/*.o /
+
+FROM prepare_release as compile_cpp
+
+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
+
+COPY Makefile ${BUN_DIR}/Makefile
+
+WORKDIR $BUN_DIR
+
+ENV JSC_BASE_DIR=${WEBKIT_DIR}
+ENV LIB_ICU_PATH=${WEBKIT_DIR}/lib
+
COPY --from=lolhtml ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
COPY --from=mimalloc ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/
COPY --from=libarchive ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
@@ -264,13 +314,11 @@ COPY --from=libbacktrace ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
COPY --from=zlib ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
COPY --from=tinycc ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
COPY --from=base64 ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
-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
-WORKDIR ${BUN_DIR}
+RUN cd $BUN_DIR && mkdir -p src/bun.js/bindings-obj && rm -rf $HOME/.cache zig-cache && mkdir -p $BUN_RELEASE_DIR && \
+ make jsc-bindings-mac -j10 && mv src/bun.js/bindings-obj/* /tmp
-
-FROM prepare_release as build_release
+FROM prepare_release as sqlite
ARG DEBIAN_FRONTEND=noninteractive
ARG GITHUB_WORKSPACE=/build
@@ -285,17 +333,16 @@ COPY Makefile ${BUN_DIR}/Makefile
WORKDIR $BUN_DIR
-RUN cd $BUN_DIR && mkdir -p src/bun.js/bindings-obj && rm -rf $HOME/.cache zig-cache && make \
- sqlite api \
- analytics \
- bun_error \
- fallback_decoder && rm -rf $HOME/.cache zig-cache && \
- mkdir -p $BUN_RELEASE_DIR && \
- make jsc-bindings-mac -j10 && \
- make release copy-to-bun-release-dir && \
- rm -rf $HOME/.cache zig-cache misctools package.json build-id completions build.zig $(BUN_DIR)/packages
+ENV JSC_BASE_DIR=${WEBKIT_DIR}
+ENV LIB_ICU_PATH=${WEBKIT_DIR}/lib
-FROM prepare_release as build_unit
+RUN cd $BUN_DIR && make sqlite
+
+FROM scratch as build_release_cpp
+
+COPY --from=compile_cpp /tmp/*.o /
+
+FROM prepare_release as build_release
ARG DEBIAN_FRONTEND=noninteractive
ARG GITHUB_WORKSPACE=/build
@@ -306,20 +353,32 @@ 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
+
WORKDIR $BUN_DIR
-ENV PATH "$ZIG_PATH:$PATH"
+ENV JSC_BASE_DIR=${WEBKIT_DIR}
+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
+COPY --from=lolhtml ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
+COPY --from=mimalloc ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/
+COPY --from=libarchive ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
+COPY --from=picohttp ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/
+COPY --from=boringssl ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
+COPY --from=uws ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
+COPY --from=uws ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/
+COPY --from=libbacktrace ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
+COPY --from=zlib ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
+COPY --from=tinycc ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
+COPY --from=base64 ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/
+COPY --from=sqlite ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/
+COPY --from=build_release_obj /*.o /tmp
+COPY --from=build_release_cpp /*.o ${BUN_DIR}/src/bun.js/bindings-obj/
-FROM bunbunbunbun/bun-base-with-zig-and-webkit:latest as bun.devcontainer
+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
@@ -330,37 +389,25 @@ ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release
ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps
ARG BUN_DIR=${GITHUB_WORKSPACE}/bun
-ENV WEBKIT_OUT_DIR ${WEBKIT_DIR}
-ENV PATH "$ZIG_PATH:$PATH"
-ENV JSC_BASE_DIR $WEBKIT_OUT_DIR
-ENV LIB_ICU_PATH ${GITHUB_WORKSPACE}/icu/source/lib
-ENV BUN_RELEASE_DIR ${BUN_RELEASE_DIR}
-ENV PATH "${GITHUB_WORKSPACE}/packages/bun-linux-x64:${GITHUB_WORKSPACE}/packages/bun-linux-aarch64:${GITHUB_WORKSPACE}/packages/debug-bun-linux-x64:${GITHUB_WORKSPACE}/packages/debug-bun-linux-aarch64:$PATH"
-ENV PATH "/home/ubuntu/zls/zig-out/bin:$PATH"
-
-ENV BUN_INSTALL /home/ubuntu/.bun
-ENV XDG_CONFIG_HOME /home/ubuntu/.config
+WORKDIR $BUN_DIR
-RUN apt-get -y update && update-alternatives --install /usr/bin/lldb lldb /usr/bin/lldb-13 90
+ENV PATH "$ZIG_PATH:$PATH"
+ENV LIB_ICU_PATH "${WEBKIT_DIR}/lib"
-COPY .devcontainer/workspace.code-workspace $GITHUB_WORKSPACE/workspace.code-workspace
-COPY .devcontainer/zls.json $GITHUB_WORKSPACE/workspace.code-workspace
-COPY .devcontainer/limits.conf /etc/security/limits.conf
-COPY ".devcontainer/scripts/" /scripts/
-COPY ".devcontainer/scripts/getting-started.sh" $GITHUB_WORKSPACE/getting-started.sh
-RUN mkdir -p /home/ubuntu/.bun /home/ubuntu/.config $GITHUB_WORKSPACE/bun && \
- bash /scripts/common-debian.sh && \
- bash /scripts/github.sh && \
- bash /scripts/nice.sh && \
- bash /scripts/zig-env.sh
-COPY .devcontainer/zls.json /home/ubuntu/.config/zls.json
+CMD make jsc-bindings-headers \
+ api \
+ analytics \
+ bun_error \
+ fallback_decoder \
+ jsc-bindings-mac -j10 && \
+ make \
+ run-all-unit-tests
-FROM ubuntu:20.04 as release_with_debug_info
+FROM alpine:latest as release_with_debug_info
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
@@ -380,7 +427,7 @@ WORKDIR /opt/bun
ENTRYPOINT [ "/opt/bun/bin/bun" ]
-FROM ubuntu:20.04 as release
+FROM alpine:latest as release
ARG DEBIAN_FRONTEND=noninteractive
ARG GITHUB_WORKSPACE=/build
@@ -398,49 +445,49 @@ 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 /opt/bun
WORKDIR /opt/bun
ENTRYPOINT [ "/opt/bun/bin/bun" ]
-FROM bunbunbunbun/bun-test-base as test_base
+# FROM bunbunbunbun/bun-test-base as test_base
-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 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 BUILDARCH=amd64
-RUN groupadd -r chromium && useradd -d ${BUN_DIR} -M -r -g chromium -G audio,video chromium \
- && mkdir -p /home/chromium/Downloads && chown -R chromium:chromium /home/chromium
+# ARG BUILDARCH=amd64
+# RUN groupadd -r chromium && useradd -d ${BUN_DIR} -M -r -g chromium -G audio,video chromium \
+# && mkdir -p /home/chromium/Downloads && chown -R chromium:chromium /home/chromium
-USER chromium
-WORKDIR $BUN_DIR
+# USER chromium
+# WORKDIR $BUN_DIR
-ENV NPM_CLIENT bun
-ENV PATH "${BUN_DIR}/packages/bun-linux-x64:${BUN_DIR}/packages/bun-linux-aarch64:$PATH"
-ENV CI 1
-ENV BROWSER_EXECUTABLE /usr/bin/chromium
+# ENV NPM_CLIENT bun
+# ENV PATH "${BUN_DIR}/packages/bun-linux-x64:${BUN_DIR}/packages/bun-linux-aarch64:$PATH"
+# ENV CI 1
+# ENV BROWSER_EXECUTABLE /usr/bin/chromium
-COPY ./test ${BUN_DIR}/test
-COPY Makefile ${BUN_DIR}/Makefile
-COPY package.json ${BUN_DIR}/package.json
-COPY .docker/run-test.sh ${BUN_DIR}/run-test.sh
-COPY ./bun.lockb ${BUN_DIR}/bun.lockb
+# COPY ./test ${BUN_DIR}/test
+# COPY Makefile ${BUN_DIR}/Makefile
+# COPY package.json ${BUN_DIR}/package.json
+# COPY .docker/run-test.sh ${BUN_DIR}/run-test.sh
+# COPY ./bun.lockb ${BUN_DIR}/bun.lockb
-# # We don't want to worry about architecture differences in this image
-COPY --from=release /opt/bun/bin/bun ${BUN_DIR}/packages/bun-linux-aarch64/bun
-COPY --from=release /opt/bun/bin/bun ${BUN_DIR}/packages/bun-linux-x64/bun
+# # # We don't want to worry about architecture differences in this image
+# COPY --from=release /opt/bun/bin/bun ${BUN_DIR}/packages/bun-linux-aarch64/bun
+# COPY --from=release /opt/bun/bin/bun ${BUN_DIR}/packages/bun-linux-x64/bun
-USER root
-RUN chgrp -R chromium ${BUN_DIR} && chmod g+rwx ${BUN_DIR} && chown -R chromium:chromium ${BUN_DIR}
-USER chromium
+# USER root
+# RUN chgrp -R chromium ${BUN_DIR} && chmod g+rwx ${BUN_DIR} && chown -R chromium:chromium ${BUN_DIR}
+# USER chromium
-CMD [ "bash", "run-test.sh" ]
+# CMD [ "bash", "run-test.sh" ]
-FROM release \ No newline at end of file
+# FROM release \ No newline at end of file
diff --git a/Dockerfile.base b/Dockerfile.base
index 38a34c6ef..538b71358 100644
--- a/Dockerfile.base
+++ b/Dockerfile.base
@@ -1,147 +1,74 @@
-FROM ubuntu:18.04 as bun-base-with-args
+FROM bitnami/minideb:bullseye as bun-base
-FROM bun-base-with-args as bun-base
+RUN install_packages ca-certificates curl wget lsb-release software-properties-common gnupg gnupg1 gnupg2
-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 ${GITHUB_WORKSPACE}
-
-RUN apt-get update && \
- apt-get install --no-install-recommends -y wget gnupg2 curl lsb-release wget software-properties-common && \
- add-apt-repository ppa:longsleep/golang-backports && \
- wget https://apt.llvm.org/llvm.sh --no-check-certificate && \
+RUN wget https://apt.llvm.org/llvm.sh && \
chmod +x llvm.sh && \
- ./llvm.sh 13 && \
- curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && \
- apt-get update && \
- apt-get install --no-install-recommends -y \
- ca-certificates \
- curl \
- gnupg2 \
- software-properties-common \
+ ./llvm.sh 13
+
+RUN install_packages \
cmake \
- build-essential \
+ curl \
+ file \
git \
- libssl-dev \
+ gnupg \
+ libc-dev \
+ libxml2 \
+ libxml2-dev \
+ make \
+ ninja-build \
+ perl \
+ python3 \
+ rsync \
ruby \
- liblld-13-dev \
- libclang-13-dev \
- nodejs \
- gcc \
- g++ \
- clang-13 \
- clang-format-13 \
- libc++-13-dev \
- libc++abi-13-dev \
- lld-13 \
- libicu-dev \
- wget \
- rustc \
- cargo \
unzip \
- tar \
- golang-go ninja-build pkg-config automake autoconf libtool curl && \
- update-alternatives --install /usr/bin/cc cc /usr/bin/clang-13 90 && \
- update-alternatives --install /usr/bin/cpp cpp /usr/bin/clang++-13 90 && \
- update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-13 90 && \
- npm install -g esbuild
+ bash tar gzip
-ENV CC=clang-13
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 BUILDARCH=amd64
-
-
-WORKDIR $GITHUB_WORKSPACE
-
-ENV WEBKIT_OUT_DIR ${WEBKIT_DIR}
-
-ENV JSC_BASE_DIR $WEBKIT_OUT_DIR
-ENV LIB_ICU_PATH ${GITHUB_WORKSPACE}/icu/source/lib
-ENV BUN_RELEASE_DIR ${BUN_RELEASE_DIR}
-ENV BUN_DEPS_OUT_DIR ${BUN_DEPS_OUT_DIR}
-
-RUN cd / && mkdir -p $BUN_RELEASE_DIR $BUN_DEPS_OUT_DIR ${BUN_DIR} ${BUN_DEPS_OUT_DIR}
-
-LABEL org.opencontainers.image.title="bun base image ${BUILDARCH} (glibc)"
-LABEL org.opencontainers.image.source=https://github.com/jarred-sumner/bun
-
-
-FROM bun-base as bun-base-with-zig-and-webkit
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 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 cd $GITHUB_WORKSPACE && \
- curl -o zig-linux-$BUILDARCH.zip -L https://github.com/Jarred-Sumner/zig/releases/download/jul1/zig-linux-$BUILDARCH.zip && \
- unzip -q zig-linux-$BUILDARCH.zip && \
+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 cd $GITHUB_WORKSPACE && \
- curl -o bun-webkit-linux-$BUILDARCH.tar.gz -L https://github.com/Jarred-Sumner/WebKit/releases/download/jul4/bun-webkit-linux-$BUILDARCH.tar.gz && \
- tar -xzf bun-webkit-linux-$BUILDARCH.tar.gz && \
+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 && \
+ tar -xvzf bun-webkit-linux-$BUILDARCH.tar.gz && \
+ ls && \
+ echo $(pwd) && \
rm bun-webkit-linux-$BUILDARCH.tar.gz && \
cat $WEBKIT_OUT_DIR/include/cmakeconfig.h > /dev/null
-RUN cd $GITHUB_WORKSPACE && \
- curl -o icu4c-66_1-src.tgz -L https://github.com/unicode-org/icu/releases/download/release-66-1/icu4c-66_1-src.tgz && \
- tar -xzf icu4c-66_1-src.tgz && \
- rm icu4c-66_1-src.tgz && \
- cd icu/source && \
- ./configure --enable-static --disable-shared && \
- make -j$(nproc)
-
-ENV ZIG "${ZIG_PATH}/zig"
-
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 debian:bullseye-slim as bun-test-base
-# Original creator:
-# LABEL maintainer "Jessie Frazelle <jess@linux.com>"
-
-# Install Chromium
-# Yes, including the Google API Keys sucks but even debian does the same: https://packages.debian.org/stretch/amd64/chromium/filelist
-RUN apt-get update && apt-get install -y \
- chromium \
- chromium-l10n \
- fonts-liberation \
- fonts-roboto \
- hicolor-icon-theme \
- libcanberra-gtk-module \
- libexif-dev \
- libgl1-mesa-dri \
- libgl1-mesa-glx \
- libpangox-1.0-0 \
- libv4l-0 \
- fonts-symbola \
- bash \
- make \
- psmisc \
- curl \
- --no-install-recommends \
- && rm -rf /var/lib/apt/lists/* \
- && mkdir -p /etc/chromium.d/ \
- && /bin/echo -e 'export GOOGLE_API_KEY="AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k"\nexport GOOGLE_DEFAULT_CLIENT_ID="811574891467.apps.googleusercontent.com"\nexport GOOGLE_DEFAULT_CLIENT_SECRET="kdloedMFGdGla2P1zacGjAQh"' > /etc/chromium.d/googleapikeys && \
- curl -L https://deb.nodesource.com/setup_16.x | bash - && \
- apt-get update && \
- apt-get install -y nodejs npm
-
diff --git a/Makefile b/Makefile
index 4dfc91dc8..b52b1f3b6 100644
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,8 @@ ifeq ($(ARCH_NAME_RAW),aarch64)
ARCH_NAME_RAW = arm64
endif
-MARCH_NATIVE = -mtune=native
+CPU_TARGET ?= native
+MARCH_NATIVE = -mtune=$(CPU_TARGET)
ARCH_NAME :=
DOCKER_BUILDARCH =
@@ -18,13 +19,13 @@ ifeq ($(ARCH_NAME_RAW),arm64)
DOCKER_BUILDARCH = arm64
BREW_PREFIX_PATH = /opt/homebrew
MIN_MACOS_VERSION ?= 11.0
- MARCH_NATIVE = -mtune=native
+ MARCH_NATIVE = -mtune=$(CPU_TARGET)
else
ARCH_NAME = x64
DOCKER_BUILDARCH = amd64
BREW_PREFIX_PATH = /usr/local
MIN_MACOS_VERSION ?= 10.14
- MARCH_NATIVE = -march=native -mtune=native
+ MARCH_NATIVE = -march=$(CPU_TARGET) -mtune=$(CPU_TARGET)
endif
AR=
@@ -118,7 +119,7 @@ endif
ifeq ($(OS_NAME),linux)
LIBICONV_PATH =
-AR=llvm-ar-13
+AR = $(shell which llvm-ar-13 || which llvm-ar || which ar)
endif
OPTIMIZATION_LEVEL=-O3 $(MARCH_NATIVE)
@@ -541,7 +542,7 @@ init-submodules:
git submodule update --init --recursive --progress --depth=1
build-obj:
- $(ZIG) build obj -Drelease-fast
+ $(ZIG) build obj -Drelease-fast -Dcpu="$(CPU_TARGET)"
dev-build-obj-wasm:
$(ZIG) build bun-wasm -Dtarget=wasm32-freestanding --prominent-compile-errors
@@ -614,8 +615,6 @@ sign-macos-aarch64:
cls:
@echo "\n\n---\n\n"
-release: all-js jsc-bindings-mac build-obj cls bun-link-lld-release bun-link-lld-release-dsym release-bin-entitlements
-release-safe: all-js jsc-bindings-mac build-obj-safe cls bun-link-lld-release bun-link-lld-release-dsym release-bin-entitlements
jsc-check:
@ls $(JSC_BASE_DIR) >/dev/null 2>&1 || (echo "Failed to access WebKit build. Please compile the WebKit submodule using the Dockerfile at $(shell pwd)/src/javascript/WebKit/Dockerfile and then copy from /output in the Docker container to $(JSC_BASE_DIR). You can override the directory via JSC_BASE_DIR. \n\n DOCKER_BUILDKIT=1 docker build -t bun-webkit $(shell pwd)/src/bun.js/WebKit -f $(shell pwd)/src/bun.js/WebKit/Dockerfile --progress=plain\n\n docker container create bun-webkit\n\n # Get the container ID\n docker container ls\n\n docker cp DOCKER_CONTAINER_ID_YOU_JUST_FOUND:/output $(JSC_BASE_DIR)" && exit 1)
@@ -624,6 +623,12 @@ jsc-check:
all-js: runtime_js fallback_decoder bun_error node-fallbacks
+prerelease: api analytics all-js
+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
+release-safe: prerelease release-safe-only
+
fmt-cpp:
cd src/bun.js/bindings && clang-format *.cpp *.h -i
@@ -1218,6 +1223,10 @@ bun-link-lld-release:
rm -rf $(BUN_RELEASE_BIN).dSYM
cp $(BUN_RELEASE_BIN) $(BUN_RELEASE_BIN)-profile
+bun-release-copy-obj:
+ cp $(BUN_RELEASE_BIN).o /tmp/bun-$(PACKAGE_JSON_VERSION).o
+ cp $(BUN_RELEASE_BIN).o /tmp/bun-current.o
+
bun-link-lld-release-no-lto:
$(CXX) $(BUN_LLD_FLAGS_FAST) $(SYMBOLS) \
$(BUN_RELEASE_BIN).o \
@@ -1229,23 +1238,21 @@ bun-link-lld-release-no-lto:
ifeq ($(OS_NAME),darwin)
-bun-link-lld-release-dsym:
+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\*
- cp $(BUN_RELEASE_BIN).o /tmp/bun-$(PACKAGE_JSON_VERSION).o
copy-to-bun-release-dir-dsym:
gzip --keep -c $(PACKAGE_DIR)/bun.dSYM > $(BUN_RELEASE_DIR)/bun.dSYM.gz
endif
ifeq ($(OS_NAME),linux)
-bun-link-lld-release-dsym:
+bun-link-lld-release-dsym: bun-release-copy-obj
mv $(BUN_RELEASE_BIN).o /tmp/bun-$(PACKAGE_JSON_VERSION).o
copy-to-bun-release-dir-dsym:
endif
-
bun-relink: bun-relink-copy bun-link-lld-release bun-link-lld-release-dsym
bun-relink-fast: bun-relink-copy bun-link-lld-release-no-lto