Home | History | Annotate | Download | only in build-android
      1 #!/bin/bash
      2 # Update source for glslang, spirv-tools, shaderc
      3 
      4 # Copyright 2016 The Android Open Source Project
      5 # Copyright (C) 2015 Valve Corporation
      6 #
      7 # Licensed under the Apache License, Version 2.0 (the "License");
      8 # you may not use this file except in compliance with the License.
      9 # You may obtain a copy of the License at
     10 #
     11 #      http://www.apache.org/licenses/LICENSE-2.0
     12 #
     13 # Unless required by applicable law or agreed to in writing, software
     14 # distributed under the License is distributed on an "AS IS" BASIS,
     15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16 # See the License for the specific language governing permissions and
     17 # limitations under the License.
     18 
     19 set -e
     20 
     21 ANDROIDBUILDDIR=$PWD
     22 BUILDDIR=$ANDROIDBUILDDIR
     23 BASEDIR=$BUILDDIR/third_party
     24 
     25 GLSLANG_REVISION=$(cat $ANDROIDBUILDDIR/glslang_revision_android)
     26 SPIRV_TOOLS_REVISION=$(cat $ANDROIDBUILDDIR/spirv-tools_revision_android)
     27 SPIRV_HEADERS_REVISION=$(cat $ANDROIDBUILDDIR/spirv-headers_revision_android)
     28 SHADERC_REVISION=$(cat $ANDROIDBUILDDIR/shaderc_revision_android)
     29 
     30 echo "GLSLANG_REVISION=$GLSLANG_REVISION"
     31 echo "SPIRV_TOOLS_REVISION=$SPIRV_TOOLS_REVISION"
     32 echo "SPIRV_HEADERS_REVISION=$SPIRV_HEADERS_REVISION"
     33 echo "SHADERC_REVISION=$SHADERC_REVISION"
     34 
     35 GLSLANG_URL=$(cat $ANDROIDBUILDDIR/glslang_url_android)
     36 SPIRV_TOOLS_URL=$(cat $ANDROIDBUILDDIR/spirv-tools_url_android)
     37 SPIRV_HEADERS_URL=$(cat $ANDROIDBUILDDIR/spirv-headers_url_android)
     38 SHADERC_URL=$(cat $ANDROIDBUILDDIR/shaderc_url_android)
     39 
     40 echo "GLSLANG_URL=$GLSLANG_URL"
     41 echo "SPIRV_TOOL_URLS_=$SPIRV_TOOLS_URL"
     42 echo "SPIRV_HEADERS_URL=$SPIRV_HEADERS_URL"
     43 echo "SHADERC_URL=$SHADERC_URL"
     44 
     45 if [[ $(uname) == "Linux" ]]; then
     46     cores="$(nproc || echo 4)"
     47 elif [[ $(uname) == "Darwin" ]]; then
     48     cores=$(sysctl -n hw.ncpu)
     49 fi
     50 
     51 #
     52 # Parse parameters
     53 #
     54 
     55 function printUsage {
     56    echo "Supported parameters are:"
     57    echo "    --abi <abi> (optional)"
     58    echo "    --no-build (optional)"
     59    echo
     60    echo "i.e. ${0##*/} --abi arm64-v8a \\"
     61    exit 1
     62 }
     63 
     64 while [[ $# -gt 0 ]]
     65 do
     66     case $1 in
     67         --abi)
     68             abi="$2"
     69             shift 2
     70             ;;
     71         --no-build)
     72             nobuild=1
     73             shift 1
     74             ;;
     75         *)
     76             # unknown option
     77             echo Unknown option: $1
     78             echo
     79             printUsage
     80             exit 1
     81             ;;
     82     esac
     83 done
     84 
     85 echo abi=$abi
     86 if [[ -z $abi ]]
     87 then
     88     echo No abi provided, so building for all supported abis.
     89 fi
     90 
     91 echo no-build=$nobuild
     92 if [[ $nobuild ]]
     93 then
     94     echo Skipping build.
     95 fi
     96 
     97 function create_glslang () {
     98    rm -rf $BASEDIR/shaderc/third_party/glslang
     99    echo "Creating local glslang repository ($BASEDIR/glslang)."
    100    mkdir -p $BASEDIR/shaderc/third_party/glslang
    101    cd $BASEDIR/shaderc/third_party/glslang
    102    git clone $GLSLANG_URL .
    103    git checkout $GLSLANG_REVISION
    104 }
    105 
    106 function update_glslang () {
    107    echo "Updating $BASEDIR/shaderc/third_party/glslang"
    108    cd $BASEDIR/shaderc/third_party/glslang
    109    if [[ $(git config --get remote.origin.url) != $GLSLANG_URL ]]; then
    110       echo "glslang URL mismatch, recreating local repo"
    111       create_glslang
    112       return
    113    fi
    114    git fetch --all
    115    git checkout $GLSLANG_REVISION
    116 }
    117 
    118 function create_spirv-tools () {
    119    rm -rf $BASEDIR/shaderc/third_party/spirv-tools
    120    echo "Creating local spirv-tools repository ($BASEDIR/shaderc/third_party/spirv-tools)."
    121    mkdir -p $BASEDIR/shaderc/third_party/spirv-tools
    122    cd $BASEDIR/shaderc/third_party/spirv-tools
    123    git clone $SPIRV_TOOLS_URL .
    124    git checkout $SPIRV_TOOLS_REVISION
    125 }
    126 
    127 function update_spirv-tools () {
    128    echo "Updating $BASEDIR/shaderc/third_party/spirv-tools"
    129    cd $BASEDIR/shaderc/third_party/spirv-tools
    130    if [[ $(git config --get remote.origin.url) != $SPIRV_TOOLS_URL ]]; then
    131       echo "spirv-tools URL mismatch, recreating local repo"
    132       create_spirv-tools
    133       return
    134    fi
    135    git fetch --all
    136    git checkout $SPIRV_TOOLS_REVISION
    137 }
    138 
    139 function create_spirv-headers () {
    140    rm -rf $BASEDIR/shaderc/third_party/spirv-tools/external/spirv-headers
    141    echo "Creating local spirv-headers repository ($BASEDIR/shaderc/third_party/spirv-tools/external/spirv-headers)."
    142    mkdir -p $BASEDIR/shaderc/third_party/spirv-tools/external/spirv-headers
    143    cd $BASEDIR/shaderc/third_party/spirv-tools/external/spirv-headers
    144    git clone $SPIRV_HEADERS_URL .
    145    git checkout $SPIRV_HEADERS_REVISION
    146 }
    147 
    148 function update_spirv-headers () {
    149    echo "Updating $BASEDIR/shaderc/third_party/spirv-tools/external/spirv-headers"
    150    cd $BASEDIR/shaderc/third_party/spirv-tools/external/spirv-headers
    151    if [[ $(git config --get remote.origin.url) != $SPIRV_HEADERS_URL ]]; then
    152       echo "spirv-headers URL mismatch, recreating local repo"
    153       create_spirv-headers
    154       return
    155    fi
    156    git fetch --all
    157    git checkout $SPIRV_HEADERS_REVISION
    158 }
    159 
    160 function create_shaderc () {
    161    rm -rf $BASEDIR/shaderc
    162    echo "Creating local shaderc repository ($BASEDIR/shaderc)."
    163    mkdir -p $BASEDIR/shaderc
    164    cd $BASEDIR/shaderc
    165    git clone $SHADERC_URL .
    166    git checkout $SHADERC_REVISION
    167 }
    168 
    169 function update_shaderc () {
    170    echo "Updating $BASEDIR/shaderc"
    171    cd $BASEDIR/shaderc
    172    if [[ $(git config --get remote.origin.url) != $SHADERC_URL ]]; then
    173       echo "shaderc URL mismatch, recreating local repo"
    174       create_shaderc
    175       return
    176    fi
    177    git fetch --all
    178    git checkout $SHADERC_REVISION
    179 }
    180 
    181 function build_shaderc () {
    182    echo "Building $BASEDIR/shaderc"
    183    cd $BASEDIR/shaderc/android_test
    184    if [[ $abi ]]; then
    185       ndk-build NDK_APPLICATION_MK=../../../jni/shaderc/Application.mk THIRD_PARTY_PATH=../third_party APP_ABI=$abi -j $cores;
    186    else
    187       ndk-build NDK_APPLICATION_MK=../../../jni/shaderc/Application.mk THIRD_PARTY_PATH=../third_party -j $cores;
    188    fi
    189 }
    190 
    191 if [ ! -d "$BASEDIR/shaderc" -o ! -d "$BASEDIR/shaderc/.git" ]; then
    192      create_shaderc
    193 fi
    194 update_shaderc
    195 
    196 if [ ! -d "$BASEDIR/shaderc/third_party/glslang" -o ! -d "$BASEDIR/shaderc/third_party/glslang/.git" -o -d "$BASEDIR/shaderc/third_party/glslang/.svn" ]; then
    197    create_glslang
    198 fi
    199 update_glslang
    200 
    201 if [ ! -d "$BASEDIR/shaderc/third_party/spirv-tools" -o ! -d "$BASEDIR/shaderc/third_party/spirv-tools/.git" ]; then
    202    create_spirv-tools
    203 fi
    204 update_spirv-tools
    205 
    206 if [ ! -d "$BASEDIR/shaderc/third_party/spirv-tools/external/spirv-headers" -o ! -d "$BASEDIR/shaderc/third_party/spirv-tools/external/spirv-headers/.git" ]; then
    207    create_spirv-headers
    208 fi
    209 update_spirv-headers
    210 
    211 if [[ -z $nobuild ]]
    212 then
    213 build_shaderc
    214 fi
    215 
    216 echo ""
    217 echo "${0##*/} finished."
    218 
    219