|
1 | | -# Adapted from: https://github.com/humanmade/alpine-v8 |
2 | | -ARG v8_version=11.9.169.7 |
3 | | -ARG GN_COMMIT=cc28efe62ef0c2fb32455f414a29c4a55bb7fbc4 |
| 1 | +FROM alpine:3.16 |
| 2 | + |
| 3 | +ARG NODE_VERSION=22.18.0 |
| 4 | +ARG BUILD_VERSION=bca39698b291b392f0b4336857caf929c603ada3 |
| 5 | +ARG GN_VERSION=59c4bb920542ee903ee1df39097ae024e2e8226f |
| 6 | + |
| 7 | +ENV GYP_GENERATORS=ninja |
| 8 | +ENV pkgdir=/package |
4 | 9 |
|
5 | | -# STEP 1 |
6 | | -# Build GN for alpine |
7 | | -FROM alpine:3.16 as gn-builder |
8 | | -ARG GN_COMMIT |
9 | 10 | RUN \ |
10 | | - apk add --update --virtual .gn-build-dependencies alpine-sdk binutils-gold clang curl git llvm13 ninja python3 tar xz && \ |
11 | | - PATH=$PATH:/usr/lib/llvm9/bin && \ |
12 | | - cp -f /usr/bin/ld.gold /usr/bin/ld && \ |
13 | | - git clone https://gn.googlesource.com/gn /tmp/gn && \ |
14 | | - git -C /tmp/gn checkout ${GN_COMMIT} && \ |
15 | | - cd /tmp/gn && \ |
| 11 | + apk add --update git alpine-sdk binutils-gold clang curl git llvm13 ninja python3 tar xz glib-dev icu-dev libstdc++ linux-headers make &&\ |
| 12 | + ln -s /usr/bin/python3 /usr/bin/python |
| 13 | + |
| 14 | +RUN \ |
| 15 | + git clone https://gn.googlesource.com/gn && \ |
| 16 | + cd gn && \ |
| 17 | + git checkout ${GN_VERSION} && \ |
16 | 18 | python3 build/gen.py && \ |
17 | 19 | ninja -C out && \ |
18 | | - cp -f /tmp/gn/out/gn /usr/local/bin/gn && \ |
19 | | - apk del .gn-build-dependencies && \ |
20 | | - rm -rf /tmp/* /var/tmp/* /var/cache/apk/* |
| 20 | + cp out/gn /usr/local/bin/gn |
21 | 21 |
|
| 22 | +RUN \ |
| 23 | + curl -sSL https://github.com/nodejs/node/archive/refs/tags/v${NODE_VERSION}.tar.gz -o node.tar.gz && \ |
| 24 | + mkdir -p /v8 &&\ |
| 25 | + tar xf node.tar.gz -C /v8 --strip-components=3 node-22.18.0/deps/v8 |
22 | 26 |
|
23 | | -# STEP 2 |
24 | | -# Use depot_tools to fetch the V8 source and dependencies |
25 | | -# This requires glibc so we use debian tools |
26 | | -FROM debian:10 as source |
27 | | -ARG v8_version |
28 | 27 | RUN \ |
29 | | - set -x && \ |
30 | | - sed -i.bak 's@http://deb.debian.org@http://archive.debian.org@g' /etc/apt/sources.list && \ |
31 | | - apt-get update && \ |
32 | | - apt-get install -y git curl python3 && \ |
33 | | - git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git /tmp/depot_tools && \ |
34 | | - PATH=$PATH:/tmp/depot_tools && \ |
35 | | - cd /tmp && \ |
36 | | - fetch --nohooks v8 && \ |
37 | | - cd /tmp/v8 && \ |
38 | | - gclient sync --nohooks -D --force --reset && \ |
39 | | - gclient sync --revision ${v8_version} && \ |
40 | | - apt-get remove --purge -y git curl python3 && \ |
41 | | - apt-get autoremove -y && \ |
42 | | - rm -rf /var/lib/apt/lists/* |
| 28 | + git clone https://chromium.googlesource.com/chromium/src/build.git /build &&\ |
| 29 | + git -C /build checkout ${BUILD_VERSION} &&\ |
| 30 | + rm -Rf /v8/build &&\ |
| 31 | + ln -sf /build /v8/build |
43 | 32 |
|
| 33 | +RUN \ |
| 34 | + echo "checkout_google_benchmark = false" > /v8/build/config/gclient_args.gni |
44 | 35 |
|
45 | | -# STEP 3 |
46 | | -# Build V8 for alpine |
47 | | -FROM alpine:3.16 as v8 |
48 | | -COPY --from=source /tmp/v8 /tmp/v8 |
49 | | -COPY --from=gn-builder /usr/local/bin/gn /tmp/v8/buildtools/linux64/gn |
50 | 36 | RUN \ |
51 | | - apk add --update --virtual .v8-build-dependencies curl g++ gcc glib-dev icu-dev libstdc++ linux-headers make ninja python3 tar xz && \ |
52 | | - ln -s /usr/bin/python3 /usr/bin/python && \ |
53 | | - cd /tmp/v8 && \ |
54 | | - ./tools/dev/v8gen.py x64.release -- \ |
55 | | - binutils_path=\"/usr/bin\" \ |
56 | | - target_os=\"linux\" \ |
57 | | - target_cpu=\"x64\" \ |
58 | | - v8_target_cpu=\"x64\" \ |
59 | | - v8_enable_future=true \ |
60 | | - is_official_build=false \ |
61 | | - is_cfi=false \ |
62 | | - is_clang=false \ |
63 | | - is_debug=false \ |
64 | | - use_custom_libcxx=false \ |
65 | | - use_sysroot=false \ |
66 | | - use_gold=false \ |
67 | | - use_allocator_shim=false \ |
68 | | - treat_warnings_as_errors=false \ |
69 | | - symbol_level=0 \ |
70 | | - strip_debug_info=true \ |
71 | | - v8_monolithic=true \ |
72 | | - v8_use_external_startup_data=false \ |
73 | | - v8_enable_i18n_support=false \ |
74 | | - v8_enable_gdbjit=false \ |
75 | | - v8_static_library=true \ |
76 | | - v8_experimental_extra_library_files=[] \ |
77 | | - v8_extra_library_files=[] && \ |
78 | | - ninja -C out.gn/x64.release -j $(getconf _NPROCESSORS_ONLN) "v8_monolith" "d8" && \ |
79 | | - find /tmp/v8/out.gn/x64.release -name '*.a' |
| 37 | + cd /usr/bin &&\ |
| 38 | + ln -s g++ $(uname -m)-linux-gnu-g++ &&\ |
| 39 | + ln -s gcc $(uname -m)-linux-gnu-gcc &&\ |
| 40 | + ln -s ar $(uname -m)-linux-gnu-ar |
| 41 | + |
| 42 | +# Patch from https://github.com/nodejs/node/issues/55596 |
| 43 | +COPY 55596.diff /tmp/55596.diff |
| 44 | +RUN patch -p2 -i /tmp/55596.diff |
| 45 | + |
| 46 | +RUN cd /v8 &&\ |
| 47 | + gn gen v8.static -vv --fail-on-unused-args \ |
| 48 | + --args='v8_monolithic=true \ |
| 49 | + v8_static_library=true \ |
| 50 | + v8_enable_sandbox=false \ |
| 51 | + is_clang=false \ |
| 52 | + is_asan=false \ |
| 53 | + use_gold=false \ |
| 54 | + is_debug=false \ |
| 55 | + is_official_build=false \ |
| 56 | + treat_warnings_as_errors=false \ |
| 57 | + clang_use_chrome_plugins=false \ |
| 58 | + v8_enable_i18n_support=false \ |
| 59 | + v8_use_external_startup_data=false \ |
| 60 | + use_custom_libcxx=false \ |
| 61 | + use_sysroot=false' |
| 62 | + |
| 63 | +RUN cd /v8 && ninja -C v8.static -j2 "v8_monolith" "d8" |
80 | 64 |
|
81 | | -# STEP 4 |
82 | | -# Create package archive |
83 | | -ARG v8_version |
84 | | -ENV pkgdir /package |
85 | | -RUN cd /tmp/v8 && \ |
| 65 | +RUN cd /v8 &&\ |
86 | 66 | install -d ${pkgdir}v8 && \ |
87 | 67 | install -d ${pkgdir}/v8/lib && \ |
88 | | - install -Dm755 out.gn/x64.release/obj/libv8_monolith.a ${pkgdir}/v8/lib/libv8_monolith.a && \ |
| 68 | + install -Dm755 v8.static/obj/libv8_monolith.a ${pkgdir}/v8/lib/libv8_monolith.a && \ |
89 | 69 | install -d ${pkgdir}/v8/include && \ |
90 | 70 | install -Dm644 include/*.h ${pkgdir}/v8/include && \ |
91 | 71 | install -d ${pkgdir}/v8/include/cppgc && \ |
|
0 commit comments