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