xref: /aosp_15_r20/external/libwebm/infra/compile.sh (revision 103e46e4cd4b6efcf6001f23fa8665fb110abf8d)
1*103e46e4SHarish Mahendrakar#!/bin/bash
2*103e46e4SHarish Mahendrakar# Copyright (c) 2021, Google Inc. All rights reserved.
3*103e46e4SHarish Mahendrakar#
4*103e46e4SHarish Mahendrakar# Redistribution and use in source and binary forms, with or without
5*103e46e4SHarish Mahendrakar# modification, are permitted provided that the following conditions are
6*103e46e4SHarish Mahendrakar# met:
7*103e46e4SHarish Mahendrakar#
8*103e46e4SHarish Mahendrakar#   * Redistributions of source code must retain the above copyright
9*103e46e4SHarish Mahendrakar#     notice, this list of conditions and the following disclaimer.
10*103e46e4SHarish Mahendrakar#
11*103e46e4SHarish Mahendrakar#   * Redistributions in binary form must reproduce the above copyright
12*103e46e4SHarish Mahendrakar#     notice, this list of conditions and the following disclaimer in
13*103e46e4SHarish Mahendrakar#     the documentation and/or other materials provided with the
14*103e46e4SHarish Mahendrakar#     distribution.
15*103e46e4SHarish Mahendrakar#
16*103e46e4SHarish Mahendrakar#   * Neither the name of Google nor the names of its contributors may
17*103e46e4SHarish Mahendrakar#     be used to endorse or promote products derived from this software
18*103e46e4SHarish Mahendrakar#     without specific prior written permission.
19*103e46e4SHarish Mahendrakar#
20*103e46e4SHarish Mahendrakar# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21*103e46e4SHarish Mahendrakar# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22*103e46e4SHarish Mahendrakar# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23*103e46e4SHarish Mahendrakar# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24*103e46e4SHarish Mahendrakar# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25*103e46e4SHarish Mahendrakar# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26*103e46e4SHarish Mahendrakar# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27*103e46e4SHarish Mahendrakar# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28*103e46e4SHarish Mahendrakar# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29*103e46e4SHarish Mahendrakar# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30*103e46e4SHarish Mahendrakar# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31*103e46e4SHarish Mahendrakar
32*103e46e4SHarish Mahendrakarset -e
33*103e46e4SHarish Mahendrakarshopt -s inherit_errexit
34*103e46e4SHarish Mahendrakar
35*103e46e4SHarish MahendrakarLIBWEBM_ROOT="$(realpath "$(dirname "$0")/..")"
36*103e46e4SHarish Mahendrakarreadonly LIBWEBM_ROOT
37*103e46e4SHarish Mahendrakarreadonly WORKSPACE=${WORKSPACE:-"$(mktemp -d -t webm.XXX)"}
38*103e46e4SHarish Mahendrakar
39*103e46e4SHarish Mahendrakar# shellcheck source=infra/common.sh
40*103e46e4SHarish Mahendrakarsource "${LIBWEBM_ROOT}/infra/common.sh"
41*103e46e4SHarish Mahendrakar
42*103e46e4SHarish Mahendrakarusage() {
43*103e46e4SHarish Mahendrakar  cat << EOF
44*103e46e4SHarish MahendrakarUsage: compile.sh BUILD_TYPE TARGET
45*103e46e4SHarish MahendrakarOptions:
46*103e46e4SHarish MahendrakarBUILD_TYPE  supported build type (static, static-debug)
47*103e46e4SHarish MahendrakarTARGET      supported target platform compilation: (native, native-clang,
48*103e46e4SHarish Mahendrakar            clang-i686, i686-w64-mingw32, x86_64-w64-mingw32,
49*103e46e4SHarish Mahendrakar            native-Makefile.unix)
50*103e46e4SHarish MahendrakarEnvironment variables:
51*103e46e4SHarish MahendrakarWORKSPACE   directory where the build is done
52*103e46e4SHarish MahendrakarEOF
53*103e46e4SHarish Mahendrakar}
54*103e46e4SHarish Mahendrakar
55*103e46e4SHarish Mahendrakar#######################################
56*103e46e4SHarish Mahendrakar# Setup ccache for toolchain.
57*103e46e4SHarish Mahendrakar#######################################
58*103e46e4SHarish Mahendrakarsetup_ccache() {
59*103e46e4SHarish Mahendrakar  if command -v ccache 2> /dev/null; then
60*103e46e4SHarish Mahendrakar    export CCACHE_CPP2=yes
61*103e46e4SHarish Mahendrakar    export PATH="/usr/lib/ccache:${PATH}"
62*103e46e4SHarish Mahendrakar  fi
63*103e46e4SHarish Mahendrakar}
64*103e46e4SHarish Mahendrakar
65*103e46e4SHarish Mahendrakar################################################################################
66*103e46e4SHarish Mahendrakarecho "Building libwebm in ${WORKSPACE}"
67*103e46e4SHarish Mahendrakar
68*103e46e4SHarish Mahendrakarif [[ ! -d "${WORKSPACE}" ]]; then
69*103e46e4SHarish Mahendrakar  log_err "${WORKSPACE} directory does not exist"
70*103e46e4SHarish Mahendrakar  exit 1
71*103e46e4SHarish Mahendrakarfi
72*103e46e4SHarish Mahendrakar
73*103e46e4SHarish MahendrakarBUILD_TYPE=${1:?"Build type not defined.$(
74*103e46e4SHarish Mahendrakar  echo
75*103e46e4SHarish Mahendrakar  usage
76*103e46e4SHarish Mahendrakar)"}
77*103e46e4SHarish MahendrakarTARGET=${2:?"Target not defined.$(
78*103e46e4SHarish Mahendrakar  echo
79*103e46e4SHarish Mahendrakar  usage
80*103e46e4SHarish Mahendrakar)"}
81*103e46e4SHarish MahendrakarBUILD_DIR="${WORKSPACE}/build-${BUILD_TYPE}"
82*103e46e4SHarish Mahendrakar
83*103e46e4SHarish Mahendrakartrap cleanup EXIT
84*103e46e4SHarish Mahendrakarsetup_ccache
85*103e46e4SHarish Mahendrakarmake_build_dir "${BUILD_DIR}"
86*103e46e4SHarish Mahendrakar
87*103e46e4SHarish Mahendrakarcase "${TARGET}" in
88*103e46e4SHarish Mahendrakar  native-Makefile.unix)
89*103e46e4SHarish Mahendrakar    make -C "${LIBWEBM_ROOT}" -f Makefile.unix
90*103e46e4SHarish Mahendrakar    ;;
91*103e46e4SHarish Mahendrakar  *)
92*103e46e4SHarish Mahendrakar    opts=()
93*103e46e4SHarish Mahendrakar    case "${BUILD_TYPE}" in
94*103e46e4SHarish Mahendrakar      static) opts+=("-DCMAKE_BUILD_TYPE=Release") ;;
95*103e46e4SHarish Mahendrakar      *debug) opts+=("-DCMAKE_BUILD_TYPE=Debug") ;;
96*103e46e4SHarish Mahendrakar      *)
97*103e46e4SHarish Mahendrakar        log_err "${BUILD_TYPE} build type not supported"
98*103e46e4SHarish Mahendrakar        usage
99*103e46e4SHarish Mahendrakar        exit 1
100*103e46e4SHarish Mahendrakar        ;;
101*103e46e4SHarish Mahendrakar    esac
102*103e46e4SHarish Mahendrakar
103*103e46e4SHarish Mahendrakar    TOOLCHAIN_FILE_FLAG="-DCMAKE_TOOLCHAIN_FILE=${LIBWEBM_ROOT}/build"
104*103e46e4SHarish Mahendrakar    case "${TARGET}" in
105*103e46e4SHarish Mahendrakar      native-clang) opts+=("-DCMAKE_CXX_COMPILER=clang++") ;;
106*103e46e4SHarish Mahendrakar      clang-i686)
107*103e46e4SHarish Mahendrakar        opts+=("-DCMAKE_CXX_COMPILER=clang++")
108*103e46e4SHarish Mahendrakar        opts+=("-DCMAKE_CXX_FLAGS=-m32")
109*103e46e4SHarish Mahendrakar        ;;
110*103e46e4SHarish Mahendrakar      native) ;; # No additional flags needed.
111*103e46e4SHarish Mahendrakar      i686-w64-mingw32)
112*103e46e4SHarish Mahendrakar        opts+=("${TOOLCHAIN_FILE_FLAG}/x86-mingw-gcc.cmake")
113*103e46e4SHarish Mahendrakar        ;;
114*103e46e4SHarish Mahendrakar      x86_64-w64-mingw32)
115*103e46e4SHarish Mahendrakar        opts+=("${TOOLCHAIN_FILE_FLAG}/x86_64-mingw-gcc.cmake")
116*103e46e4SHarish Mahendrakar        ;;
117*103e46e4SHarish Mahendrakar      *)
118*103e46e4SHarish Mahendrakar        log_err "${TARGET} TARGET not supported"
119*103e46e4SHarish Mahendrakar        usage
120*103e46e4SHarish Mahendrakar        exit 1
121*103e46e4SHarish Mahendrakar        ;;
122*103e46e4SHarish Mahendrakar    esac
123*103e46e4SHarish Mahendrakar    pushd "${BUILD_DIR}"
124*103e46e4SHarish Mahendrakar    cmake "${LIBWEBM_ROOT}" "${opts[@]}"
125*103e46e4SHarish Mahendrakar    make -j4 VERBOSE=1
126*103e46e4SHarish Mahendrakar    popd
127*103e46e4SHarish Mahendrakar    ;;
128*103e46e4SHarish Mahendrakaresac
129