xref: /aosp_15_r20/external/skia/docker/skia-release/Dockerfile (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker# Dockerfile for building Skia in release mode, using 3rd party libs from DEPS, with SwiftShader.
2*c8dee2aaSAndroid Build Coastguard WorkerFROM gcr.io/skia-public/skia-build-tools:latest
3*c8dee2aaSAndroid Build Coastguard Worker
4*c8dee2aaSAndroid Build Coastguard Worker# Sometimes update_depot_tools fails (e.g. from a pre-goma-deletion commit).
5*c8dee2aaSAndroid Build Coastguard WorkerRUN cd /tmp/depot_tools && git pull && update_depot_tools
6*c8dee2aaSAndroid Build Coastguard Worker
7*c8dee2aaSAndroid Build Coastguard WorkerRUN cd /tmp \
8*c8dee2aaSAndroid Build Coastguard Worker  && git clone https://swiftshader.googlesource.com/SwiftShader swiftshader
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Worker# Checkout Skia.
11*c8dee2aaSAndroid Build Coastguard WorkerRUN mkdir -p /tmp/skia \
12*c8dee2aaSAndroid Build Coastguard Worker  && cd /tmp/skia \
13*c8dee2aaSAndroid Build Coastguard Worker  && fetch skia
14*c8dee2aaSAndroid Build Coastguard Worker
15*c8dee2aaSAndroid Build Coastguard Worker# Set fake identity for git rebase. See thread in
16*c8dee2aaSAndroid Build Coastguard Worker# https://skia-review.googlesource.com/c/buildbot/+/286537/5/docker/Dockerfile#46
17*c8dee2aaSAndroid Build Coastguard WorkerRUN cd /tmp/skia/skia \
18*c8dee2aaSAndroid Build Coastguard Worker    && git config user.email "[email protected]" \
19*c8dee2aaSAndroid Build Coastguard Worker    && git config user.name "Skia"
20*c8dee2aaSAndroid Build Coastguard Worker
21*c8dee2aaSAndroid Build Coastguard Worker# HASH must be specified.
22*c8dee2aaSAndroid Build Coastguard WorkerARG HASH
23*c8dee2aaSAndroid Build Coastguard WorkerRUN if [ -z "${HASH}" ] ; then echo "HASH must be specified as a --build-arg"; exit 1; fi
24*c8dee2aaSAndroid Build Coastguard Worker
25*c8dee2aaSAndroid Build Coastguard WorkerRUN cd /tmp/skia/skia \
26*c8dee2aaSAndroid Build Coastguard Worker  && git fetch \
27*c8dee2aaSAndroid Build Coastguard Worker  && git reset --hard ${HASH}
28*c8dee2aaSAndroid Build Coastguard Worker
29*c8dee2aaSAndroid Build Coastguard Worker# If patch ref is specified then update the ref to patch in a CL.
30*c8dee2aaSAndroid Build Coastguard WorkerARG PATCH_REF
31*c8dee2aaSAndroid Build Coastguard WorkerRUN if [ ! -z "${PATCH_REF}" ] ; then cd /tmp/skia/skia \
32*c8dee2aaSAndroid Build Coastguard Worker    && git fetch https://skia.googlesource.com/skia ${PATCH_REF} \
33*c8dee2aaSAndroid Build Coastguard Worker    && git checkout FETCH_HEAD \
34*c8dee2aaSAndroid Build Coastguard Worker    && git rebase ${HASH}; fi
35*c8dee2aaSAndroid Build Coastguard Worker
36*c8dee2aaSAndroid Build Coastguard Worker# Check out skia but delete large third_party checkouts we don't actually need
37*c8dee2aaSAndroid Build Coastguard Worker# to keep the docker image smaller.
38*c8dee2aaSAndroid Build Coastguard WorkerRUN cd /tmp/skia/skia \
39*c8dee2aaSAndroid Build Coastguard Worker  && gclient sync \
40*c8dee2aaSAndroid Build Coastguard Worker  && ./bin/fetch-gn \
41*c8dee2aaSAndroid Build Coastguard Worker  && ./bin/fetch-ninja \
42*c8dee2aaSAndroid Build Coastguard Worker  && rm -r third_party/externals/dawn \
43*c8dee2aaSAndroid Build Coastguard Worker           third_party/externals/icu4x \
44*c8dee2aaSAndroid Build Coastguard Worker           third_party/externals/opengl-registry \
45*c8dee2aaSAndroid Build Coastguard Worker           third_party/externals/perfetto \
46*c8dee2aaSAndroid Build Coastguard Worker           third_party/externals/swiftshader \
47*c8dee2aaSAndroid Build Coastguard Worker           third_party/externals/unicodetools
48*c8dee2aaSAndroid Build Coastguard Worker
49*c8dee2aaSAndroid Build Coastguard Worker# Write args.gn.
50*c8dee2aaSAndroid Build Coastguard WorkerRUN mkdir -p /tmp/skia/skia/out/Static
51*c8dee2aaSAndroid Build Coastguard WorkerRUN echo '  \n\
52*c8dee2aaSAndroid Build Coastguard Workercc = "clang"  \n\
53*c8dee2aaSAndroid Build Coastguard Workercxx = "clang++"  \n\
54*c8dee2aaSAndroid Build Coastguard Workerskia_use_egl = true  \n\
55*c8dee2aaSAndroid Build Coastguard Workeris_debug = false  \n\
56*c8dee2aaSAndroid Build Coastguard Workerskia_enable_fontmgr_fontconfig = true \n\
57*c8dee2aaSAndroid Build Coastguard Workerskia_use_perfetto = false \n\
58*c8dee2aaSAndroid Build Coastguard Workerskia_use_libgrapheme = false \n\
59*c8dee2aaSAndroid Build Coastguard Workerskia_use_icu4x = false \n\
60*c8dee2aaSAndroid Build Coastguard Workerskia_use_system_freetype2 = false  \n\
61*c8dee2aaSAndroid Build Coastguard Workerlink_pool_depth=2  \n\
62*c8dee2aaSAndroid Build Coastguard Workerextra_cflags = [  \n\
63*c8dee2aaSAndroid Build Coastguard Worker  "-I/tmp/swiftshader/include",  \n\
64*c8dee2aaSAndroid Build Coastguard Worker  "-DGR_EGL_TRY_GLES3_THEN_GLES2",  \n\
65*c8dee2aaSAndroid Build Coastguard Worker  "-g0",  \n\
66*c8dee2aaSAndroid Build Coastguard Worker]  \n\
67*c8dee2aaSAndroid Build Coastguard Workerextra_ldflags = [  \n\
68*c8dee2aaSAndroid Build Coastguard Worker  "-L/usr/local/lib",  \n\
69*c8dee2aaSAndroid Build Coastguard Worker  "-Wl,-rpath",  \n\
70*c8dee2aaSAndroid Build Coastguard Worker  "-Wl,/usr/local/lib"  \n\
71*c8dee2aaSAndroid Build Coastguard Worker] ' > /tmp/skia/skia/out/Static/args.gn
72*c8dee2aaSAndroid Build Coastguard Worker
73*c8dee2aaSAndroid Build Coastguard WorkerWORKDIR /tmp/skia/skia
74*c8dee2aaSAndroid Build Coastguard Worker# Build Skia.
75*c8dee2aaSAndroid Build Coastguard WorkerRUN ./bin/gn gen out/Static
76*c8dee2aaSAndroid Build Coastguard WorkerRUN git rev-parse HEAD > VERSION
77*c8dee2aaSAndroid Build Coastguard WorkerRUN ./bin/ninja -C out/Static fiddle
78*c8dee2aaSAndroid Build Coastguard Worker# Cleanup .git directories because they are not needed and take up space.
79*c8dee2aaSAndroid Build Coastguard WorkerRUN find . -name .git -print0 | xargs -0 rm -rf
80*c8dee2aaSAndroid Build Coastguard WorkerRUN chown -R skia:skia .
81*c8dee2aaSAndroid Build Coastguard Worker# obj is readable only by the skia user. It needs additional
82*c8dee2aaSAndroid Build Coastguard Worker# permissions to be accessible for CI (see https://review.skia.org/487217).
83*c8dee2aaSAndroid Build Coastguard WorkerRUN chmod 755 -R out/Static/obj
84*c8dee2aaSAndroid Build Coastguard Worker
85*c8dee2aaSAndroid Build Coastguard WorkerFROM gcr.io/skia-public/skia-build-tools:latest
86*c8dee2aaSAndroid Build Coastguard WorkerCOPY --from=0 /tmp/skia/skia /tmp/skia/skia
87*c8dee2aaSAndroid Build Coastguard WorkerWORKDIR /tmp/skia/skia