xref: /aosp_15_r20/external/skia/modules/pathkit/compile.sh (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker#!/bin/bash
2*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2018 Google LLC
3*c8dee2aaSAndroid Build Coastguard Worker#
4*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker
7*c8dee2aaSAndroid Build Coastguard Workerset -ex
8*c8dee2aaSAndroid Build Coastguard Worker
9*c8dee2aaSAndroid Build Coastguard WorkerBASE_DIR=`cd $(dirname ${BASH_SOURCE[0]}) && pwd`
10*c8dee2aaSAndroid Build Coastguard WorkerHTML_SHELL=$BASE_DIR/shell.html
11*c8dee2aaSAndroid Build Coastguard WorkerBUILD_DIR=${BUILD_DIR:="out/pathkit"}
12*c8dee2aaSAndroid Build Coastguard Workermkdir -p $BUILD_DIR
13*c8dee2aaSAndroid Build Coastguard Worker# sometimes the .a files keep old symbols around - cleaning them out makes sure
14*c8dee2aaSAndroid Build Coastguard Worker# we get a fresh build.
15*c8dee2aaSAndroid Build Coastguard Workerrm -f $BUILD_DIR/*.a
16*c8dee2aaSAndroid Build Coastguard Worker
17*c8dee2aaSAndroid Build Coastguard Worker# This expects the environment variable EMSDK to be set
18*c8dee2aaSAndroid Build Coastguard Workerif [[ ! -d $EMSDK ]]; then
19*c8dee2aaSAndroid Build Coastguard Worker  echo "Be sure to set the EMSDK environment variable."
20*c8dee2aaSAndroid Build Coastguard Worker  exit 1
21*c8dee2aaSAndroid Build Coastguard Workerfi
22*c8dee2aaSAndroid Build Coastguard Worker
23*c8dee2aaSAndroid Build Coastguard Worker# Navigate to SKIA_HOME from where this file is located.
24*c8dee2aaSAndroid Build Coastguard Workerpushd $BASE_DIR/../..
25*c8dee2aaSAndroid Build Coastguard Worker
26*c8dee2aaSAndroid Build Coastguard Workerecho "Putting output in $BUILD_DIR (pwd = `pwd`)"
27*c8dee2aaSAndroid Build Coastguard Worker
28*c8dee2aaSAndroid Build Coastguard Worker# Run this from $SKIA_HOME, not from the directory this file is in.
29*c8dee2aaSAndroid Build Coastguard Workerif [[ ! -d ./src ]]; then
30*c8dee2aaSAndroid Build Coastguard Worker  echo "Cannot locate Skia source. Is the source checkout okay? Exiting."
31*c8dee2aaSAndroid Build Coastguard Worker  exit 1
32*c8dee2aaSAndroid Build Coastguard Workerfi
33*c8dee2aaSAndroid Build Coastguard Worker
34*c8dee2aaSAndroid Build Coastguard Workerif [[ $@ == *help* ]]; then
35*c8dee2aaSAndroid Build Coastguard Worker  echo "By default, this script builds a production WASM build of PathKit."
36*c8dee2aaSAndroid Build Coastguard Worker  echo ""
37*c8dee2aaSAndroid Build Coastguard Worker  echo "It is put in ${BUILD_DIR}, configured by the BUILD_DIR environment"
38*c8dee2aaSAndroid Build Coastguard Worker  echo "variable. Additionally, the EMSDK environment variable must be set."
39*c8dee2aaSAndroid Build Coastguard Worker  echo "This script takes several optional parameters:"
40*c8dee2aaSAndroid Build Coastguard Worker  echo "  test = Make a build suitable for running tests or profiling"
41*c8dee2aaSAndroid Build Coastguard Worker  echo "  debug = Make a build suitable for debugging (defines SK_DEBUG)"
42*c8dee2aaSAndroid Build Coastguard Worker  echo "  asm.js = Build for asm.js instead of WASM (very experimental)"
43*c8dee2aaSAndroid Build Coastguard Worker  echo "  serve = starts a webserver allowing a user to navigate to"
44*c8dee2aaSAndroid Build Coastguard Worker  echo "          localhost:8000/pathkit.html to view the demo page."
45*c8dee2aaSAndroid Build Coastguard Worker  exit 0
46*c8dee2aaSAndroid Build Coastguard Workerfi
47*c8dee2aaSAndroid Build Coastguard Worker
48*c8dee2aaSAndroid Build Coastguard Worker
49*c8dee2aaSAndroid Build Coastguard Worker# Use -O0 for larger builds (but generally quicker)
50*c8dee2aaSAndroid Build Coastguard Worker# Use -Oz for (much slower, but smaller/faster) production builds
51*c8dee2aaSAndroid Build Coastguard Workerexport EMCC_CLOSURE_ARGS="--externs $BASE_DIR/externs.js "
52*c8dee2aaSAndroid Build Coastguard WorkerRELEASE_CONF="-Oz --closure 1 -DSK_RELEASE"
53*c8dee2aaSAndroid Build Coastguard Worker# It is very important for the -DSK_RELEASE/-DSK_DEBUG to match on the libskia.a, otherwise
54*c8dee2aaSAndroid Build Coastguard Worker# things like SKDEBUGCODE are sometimes compiled in and sometimes not, which can cause headaches
55*c8dee2aaSAndroid Build Coastguard Worker# like sizeof() mismatching between .cpp files and .h files.
56*c8dee2aaSAndroid Build Coastguard WorkerEXTRA_CFLAGS="\"-DSK_RELEASE\""
57*c8dee2aaSAndroid Build Coastguard Workerif [[ $@ == *test* ]]; then
58*c8dee2aaSAndroid Build Coastguard Worker  echo "Building a Testing/Profiling build"
59*c8dee2aaSAndroid Build Coastguard Worker  RELEASE_CONF="-O2 --profiling -DPATHKIT_TESTING -DSK_RELEASE"
60*c8dee2aaSAndroid Build Coastguard Workerelif [[ $@ == *debug* ]]; then
61*c8dee2aaSAndroid Build Coastguard Worker  echo "Building a Debug build"
62*c8dee2aaSAndroid Build Coastguard Worker  EXTRA_CFLAGS="\"-DSK_DEBUG\""
63*c8dee2aaSAndroid Build Coastguard Worker  RELEASE_CONF="-O0 --js-opts 0 -sSAFE_HEAP=1 -sASSERTIONS=1 -g3 -DPATHKIT_TESTING -DSK_DEBUG"
64*c8dee2aaSAndroid Build Coastguard Workerfi
65*c8dee2aaSAndroid Build Coastguard Worker
66*c8dee2aaSAndroid Build Coastguard WorkerWASM_CONF="-sWASM=1"
67*c8dee2aaSAndroid Build Coastguard Workerif [[ $@ == *asm.js* ]]; then
68*c8dee2aaSAndroid Build Coastguard Worker  echo "Building with asm.js instead of WASM"
69*c8dee2aaSAndroid Build Coastguard Worker  WASM_CONF="-sWASM=0 -sALLOW_MEMORY_GROWTH=1"
70*c8dee2aaSAndroid Build Coastguard Workerfi
71*c8dee2aaSAndroid Build Coastguard Worker
72*c8dee2aaSAndroid Build Coastguard WorkerOUTPUT="-o $BUILD_DIR/pathkit.js"
73*c8dee2aaSAndroid Build Coastguard Worker
74*c8dee2aaSAndroid Build Coastguard Workersource $EMSDK/emsdk_env.sh
75*c8dee2aaSAndroid Build Coastguard WorkerEMCXX=`which em++`
76*c8dee2aaSAndroid Build Coastguard Worker
77*c8dee2aaSAndroid Build Coastguard Worker./bin/fetch-ninja
78*c8dee2aaSAndroid Build Coastguard WorkerNINJA=third_party/ninja/ninja
79*c8dee2aaSAndroid Build Coastguard Worker
80*c8dee2aaSAndroid Build Coastguard Workerecho "Compiling bitcode"
81*c8dee2aaSAndroid Build Coastguard Worker
82*c8dee2aaSAndroid Build Coastguard Worker./bin/fetch-gn
83*c8dee2aaSAndroid Build Coastguard Worker
84*c8dee2aaSAndroid Build Coastguard Worker./bin/gn gen ${BUILD_DIR} \
85*c8dee2aaSAndroid Build Coastguard Worker  --args="skia_emsdk_dir=\"${EMSDK}\" \
86*c8dee2aaSAndroid Build Coastguard Worker  extra_cflags=[
87*c8dee2aaSAndroid Build Coastguard Worker    \"-sMAIN_MODULE=1\",
88*c8dee2aaSAndroid Build Coastguard Worker    ${EXTRA_CFLAGS}
89*c8dee2aaSAndroid Build Coastguard Worker  ] \
90*c8dee2aaSAndroid Build Coastguard Worker  is_debug=false \
91*c8dee2aaSAndroid Build Coastguard Worker  is_official_build=true \
92*c8dee2aaSAndroid Build Coastguard Worker  is_trivial_abi=true \
93*c8dee2aaSAndroid Build Coastguard Worker  is_component_build=false \
94*c8dee2aaSAndroid Build Coastguard Worker  werror=true \
95*c8dee2aaSAndroid Build Coastguard Worker  target_cpu=\"wasm\" "
96*c8dee2aaSAndroid Build Coastguard Worker
97*c8dee2aaSAndroid Build Coastguard Worker${NINJA} -C ${BUILD_DIR} libpathkit.a
98*c8dee2aaSAndroid Build Coastguard Worker
99*c8dee2aaSAndroid Build Coastguard Workerecho "Generating WASM"
100*c8dee2aaSAndroid Build Coastguard Worker
101*c8dee2aaSAndroid Build Coastguard Worker${EMCXX} $RELEASE_CONF -std=c++17 \
102*c8dee2aaSAndroid Build Coastguard Worker-I. \
103*c8dee2aaSAndroid Build Coastguard Worker--bind \
104*c8dee2aaSAndroid Build Coastguard Worker--no-entry \
105*c8dee2aaSAndroid Build Coastguard Worker--pre-js $BASE_DIR/helper.js \
106*c8dee2aaSAndroid Build Coastguard Worker--pre-js $BASE_DIR/chaining.js \
107*c8dee2aaSAndroid Build Coastguard Worker-fno-rtti -fno-exceptions -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 \
108*c8dee2aaSAndroid Build Coastguard Worker"-DSK_TRIVIAL_ABI=[[clang::trivial_abi]]" \
109*c8dee2aaSAndroid Build Coastguard Worker$WASM_CONF \
110*c8dee2aaSAndroid Build Coastguard Worker-sERROR_ON_UNDEFINED_SYMBOLS=1 \
111*c8dee2aaSAndroid Build Coastguard Worker-sEXPORT_NAME="PathKitInit" \
112*c8dee2aaSAndroid Build Coastguard Worker-sMODULARIZE=1 \
113*c8dee2aaSAndroid Build Coastguard Worker-sNO_EXIT_RUNTIME=1 \
114*c8dee2aaSAndroid Build Coastguard Worker-sNO_FILESYSTEM=1 \
115*c8dee2aaSAndroid Build Coastguard Worker-sDYNAMIC_EXECUTION=0 \
116*c8dee2aaSAndroid Build Coastguard Worker-sINITIAL_MEMORY=32MB \
117*c8dee2aaSAndroid Build Coastguard Worker-sALLOW_MEMORY_GROWTH=1 \
118*c8dee2aaSAndroid Build Coastguard Worker-sSTRICT=1 \
119*c8dee2aaSAndroid Build Coastguard Worker$OUTPUT \
120*c8dee2aaSAndroid Build Coastguard Worker$BASE_DIR/pathkit_wasm_bindings.cpp \
121*c8dee2aaSAndroid Build Coastguard Worker${BUILD_DIR}/libpathkit.a
122*c8dee2aaSAndroid Build Coastguard Worker
123*c8dee2aaSAndroid Build Coastguard Worker
124