1*c8dee2aaSAndroid Build Coastguard Worker#!/bin/bash 2*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2021 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 Worker# This expects the environment variable EMSDK to be set 11*c8dee2aaSAndroid Build Coastguard Workerif [[ ! -d $EMSDK ]]; then 12*c8dee2aaSAndroid Build Coastguard Worker cat >&2 << "EOF" 13*c8dee2aaSAndroid Build Coastguard WorkerBe sure to set the EMSDK environment variable to the location of Emscripten SDK: 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker https://emscripten.org/docs/getting_started/downloads.html 16*c8dee2aaSAndroid Build Coastguard WorkerEOF 17*c8dee2aaSAndroid Build Coastguard Worker exit 1 18*c8dee2aaSAndroid Build Coastguard Workerfi 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker# Navigate to SKIA_HOME from where this file is located. 21*c8dee2aaSAndroid Build Coastguard Workerpushd $BASE_DIR/../.. 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Workerif [[ $@ == *debug* ]]; then 24*c8dee2aaSAndroid Build Coastguard Worker echo "Building a Debug build" 25*c8dee2aaSAndroid Build Coastguard Worker DEBUG=true 26*c8dee2aaSAndroid Build Coastguard Worker EXTRA_CFLAGS="\"-DSK_DEBUG\", \"-DGPU_TEST_UTILS\", " 27*c8dee2aaSAndroid Build Coastguard Worker RELEASE_CONF="-O1 --js-opts 0 -s DEMANGLE_SUPPORT=1 -frtti -s ASSERTIONS=1 -s GL_ASSERTIONS=1 -g \ 28*c8dee2aaSAndroid Build Coastguard Worker -DSK_DEBUG" 29*c8dee2aaSAndroid Build Coastguard Worker BUILD_DIR=${BUILD_DIR:="out/tskit_debug"} 30*c8dee2aaSAndroid Build Coastguard Workerelse 31*c8dee2aaSAndroid Build Coastguard Worker echo "Building a release build" 32*c8dee2aaSAndroid Build Coastguard Worker DEBUG=false 33*c8dee2aaSAndroid Build Coastguard Worker BUILD_DIR=${BUILD_DIR:="out/tskit"} 34*c8dee2aaSAndroid Build Coastguard Worker RELEASE_CONF="-O3 --closure 1 -DSK_RELEASE" 35*c8dee2aaSAndroid Build Coastguard Worker EXTRA_CFLAGS="\"-DSK_RELEASE\", \"-DGPU_TEST_UTILS\", " 36*c8dee2aaSAndroid Build Coastguard Workerfi 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard WorkerEXTENSION_OPT="--pre-js $BASE_DIR/build/extension.js \ 39*c8dee2aaSAndroid Build Coastguard Worker$BASE_DIR/bindings/extension.cpp 40*c8dee2aaSAndroid Build Coastguard Worker" 41*c8dee2aaSAndroid Build Coastguard Workerif [[ $@ = *no_ext* ]] ; then 42*c8dee2aaSAndroid Build Coastguard Worker echo "disabling extension" 43*c8dee2aaSAndroid Build Coastguard Worker EXTENSION_OPT="" 44*c8dee2aaSAndroid Build Coastguard Workerfi 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Workermkdir -p $BUILD_DIR 47*c8dee2aaSAndroid Build Coastguard Worker# sometimes the .a files keep old symbols around - cleaning them out makes sure 48*c8dee2aaSAndroid Build Coastguard Worker# we get a fresh build. 49*c8dee2aaSAndroid Build Coastguard Workerrm -f $BUILD_DIR/*.a 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Workersource $EMSDK/emsdk_env.sh 52*c8dee2aaSAndroid Build Coastguard WorkerEMCC=`which emcc` 53*c8dee2aaSAndroid Build Coastguard WorkerEMCXX=`which em++` 54*c8dee2aaSAndroid Build Coastguard WorkerEMAR=`which emar` 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Workerexport EMCC_CLOSURE_ARGS="--externs $BASE_DIR/build/externs.js " 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard WorkerEMCC_DEBUG=1 ${EMCXX} \ 59*c8dee2aaSAndroid Build Coastguard Worker $RELEASE_CONF \ 60*c8dee2aaSAndroid Build Coastguard Worker -I. \ 61*c8dee2aaSAndroid Build Coastguard Worker -std=c++17 \ 62*c8dee2aaSAndroid Build Coastguard Worker --bind \ 63*c8dee2aaSAndroid Build Coastguard Worker --no-entry \ 64*c8dee2aaSAndroid Build Coastguard Worker --pre-js $BASE_DIR/build/load.js \ 65*c8dee2aaSAndroid Build Coastguard Worker --pre-js $BASE_DIR/build/memory.js \ 66*c8dee2aaSAndroid Build Coastguard Worker --pre-js $BASE_DIR/build/core.js \ 67*c8dee2aaSAndroid Build Coastguard Worker $BASE_DIR/bindings/core.cpp \ 68*c8dee2aaSAndroid Build Coastguard Worker $EXTENSION_OPT \ 69*c8dee2aaSAndroid Build Coastguard Worker -s ALLOW_MEMORY_GROWTH=1 \ 70*c8dee2aaSAndroid Build Coastguard Worker -s EXPORT_NAME="InitTSKit" \ 71*c8dee2aaSAndroid Build Coastguard Worker -s EXPORTED_FUNCTIONS=['_malloc','_free'] \ 72*c8dee2aaSAndroid Build Coastguard Worker -s FORCE_FILESYSTEM=0 \ 73*c8dee2aaSAndroid Build Coastguard Worker -s FILESYSTEM=0 \ 74*c8dee2aaSAndroid Build Coastguard Worker -s MODULARIZE=1 \ 75*c8dee2aaSAndroid Build Coastguard Worker -s NO_EXIT_RUNTIME=1 \ 76*c8dee2aaSAndroid Build Coastguard Worker -s INITIAL_MEMORY=256MB \ 77*c8dee2aaSAndroid Build Coastguard Worker -s WASM=1 \ 78*c8dee2aaSAndroid Build Coastguard Worker -o $BUILD_DIR/tskit.js 79