Don Turner | 34a4d91 | 2017-10-19 21:38:19 +0100 | [diff] [blame] | 1 | # Copyright 2017 The Android Open Source Project |
| 2 | # |
| 3 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | # you may not use this file except in compliance with the License. |
| 5 | # You may obtain a copy of the License at |
| 6 | # |
| 7 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | # |
| 9 | # Unless required by applicable law or agreed to in writing, software |
| 10 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | # See the License for the specific language governing permissions and |
| 13 | # limitations under the License. |
| 14 | |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 15 | # Script to build Oboe for multiple Android ABIs and prepare them for distribution via CDep |
Don Turner | 1f6dcad | 2017-09-12 20:34:36 +0100 | [diff] [blame] | 16 | # |
| 17 | # Ensure that ANDROID_NDK environment variable is set to your Android NDK location |
| 18 | # e.g. /Library/Android/sdk/ndk-bundle |
Don Turner | 34a4d91 | 2017-10-19 21:38:19 +0100 | [diff] [blame] | 19 | |
| 20 | #!/bin/bash |
| 21 | |
Don Turner | 1f6dcad | 2017-09-12 20:34:36 +0100 | [diff] [blame] | 22 | if [ -z "$ANDROID_NDK" ]; then |
| 23 | echo "Please set ANDROID_NDK to the Android NDK folder" |
| 24 | exit 1 |
| 25 | fi |
| 26 | |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 27 | # Directories, paths and filenames |
| 28 | BUILD_DIR=build |
| 29 | CDEP_UPLOAD_DIR=${BUILD_DIR}/upload |
| 30 | CDEP_UPLOAD_PATH=`pwd`/${CDEP_UPLOAD_DIR} |
| 31 | CDEP_MANIFEST_FILE=${CDEP_UPLOAD_PATH}/cdep-manifest.yml |
| 32 | |
| 33 | ANDROID_SYSTEM_VERSION=26 |
| 34 | |
| 35 | mkdir -p ${CDEP_UPLOAD_DIR} |
| 36 | |
| 37 | # Zip the headers |
| 38 | zip -r ${CDEP_UPLOAD_DIR}/oboe-headers.zip include/ |
| 39 | |
| 40 | # Make the CDep package descriptor |
| 41 | printf "%s\r\n" "coordinate:" > ${CDEP_MANIFEST_FILE} |
| 42 | printf " %s\r\n" "groupId: com.github.google" >> ${CDEP_MANIFEST_FILE} |
| 43 | printf " %s\r\n" "artifactId: oboe" >> ${CDEP_MANIFEST_FILE} |
| 44 | printf " %s\r\n" "version: 0.9.0" >> ${CDEP_MANIFEST_FILE} |
| 45 | printf "%s\r\n" "license:" >> ${CDEP_MANIFEST_FILE} |
| 46 | printf " %s\r\n" "url: https://raw.githubusercontent.com/google/oboe/master/LICENSE" \ |
| 47 | >> ${CDEP_MANIFEST_FILE} |
| 48 | |
| 49 | printf "%s\r\n" "interfaces:" >> ${CDEP_MANIFEST_FILE} |
| 50 | printf " %s\r\n" "headers:" >> ${CDEP_MANIFEST_FILE} |
| 51 | printf " %s\r\n" "file: oboe-headers.zip" >> ${CDEP_MANIFEST_FILE} |
| 52 | printf " %s\r\n" "include: include" >> ${CDEP_MANIFEST_FILE} |
| 53 | |
| 54 | printf " sha256: " >> ${CDEP_MANIFEST_FILE} |
| 55 | shasum -a 256 ${CDEP_UPLOAD_DIR}/oboe-headers.zip | awk '{print $1}' >> ${CDEP_MANIFEST_FILE} |
| 56 | |
| 57 | printf " size: " >> ${CDEP_MANIFEST_FILE} |
| 58 | ls -l ${CDEP_UPLOAD_DIR}/oboe-headers.zip | awk '{print $5}' >> ${CDEP_MANIFEST_FILE} |
| 59 | printf "%s\r\n" "android:" >> ${CDEP_MANIFEST_FILE} |
| 60 | printf " %s\r\n" "archives:" >> ${CDEP_MANIFEST_FILE} |
| 61 | |
Don Turner | 1f6dcad | 2017-09-12 20:34:36 +0100 | [diff] [blame] | 62 | CMAKE_ARGS="-H. \ |
| 63 | -DCMAKE_BUILD_TYPE=RelWithDebInfo \ |
| 64 | -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \ |
| 65 | -DCMAKE_SYSTEM_NAME=Android \ |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 66 | -DCMAKE_SYSTEM_VERSION=${ANDROID_SYSTEM_VERSION} \ |
Don Turner | 1f6dcad | 2017-09-12 20:34:36 +0100 | [diff] [blame] | 67 | -DCMAKE_ANDROID_STL_TYPE=c++_static \ |
| 68 | -DCMAKE_ANDROID_NDK=$ANDROID_NDK \ |
| 69 | -DCMAKE_INSTALL_PREFIX=." |
| 70 | |
| 71 | function build_oboe { |
| 72 | |
| 73 | ABI=$1 |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 74 | ABI_BUILD_DIR=build/${ABI} |
| 75 | STAGING_DIR=staging |
Don Turner | 1f6dcad | 2017-09-12 20:34:36 +0100 | [diff] [blame] | 76 | |
| 77 | echo "Building Oboe for ${ABI}" |
| 78 | |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 79 | mkdir -p ${ABI_BUILD_DIR} ${ABI_BUILD_DIR}/${STAGING_DIR} |
Don Turner | 1f6dcad | 2017-09-12 20:34:36 +0100 | [diff] [blame] | 80 | |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 81 | cmake -B${ABI_BUILD_DIR} \ |
Don Turner | 1f6dcad | 2017-09-12 20:34:36 +0100 | [diff] [blame] | 82 | -DCMAKE_ANDROID_ARCH_ABI=${ABI} \ |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 83 | -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${STAGING_DIR}/lib/${ABI} \ |
Don Turner | 1f6dcad | 2017-09-12 20:34:36 +0100 | [diff] [blame] | 84 | ${CMAKE_ARGS} |
| 85 | |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 86 | pushd ${ABI_BUILD_DIR} |
| 87 | make -j5 |
| 88 | |
| 89 | echo "Creating CDep package for ${ABI} ABI" |
| 90 | pushd ${STAGING_DIR} |
| 91 | |
| 92 | zip -r ${CDEP_UPLOAD_PATH}/oboe-${ABI}.zip . |
| 93 | |
| 94 | # Output the library SHA and size into the CDep manifest |
| 95 | printf " %s\r\n" "- file: oboe-${ABI}.zip" >> ${CDEP_MANIFEST_FILE} |
| 96 | |
| 97 | printf " sha256: " >> ${CDEP_MANIFEST_FILE} |
| 98 | shasum -a 256 ${CDEP_UPLOAD_PATH}/oboe-${ABI}.zip | awk '{print $1}' >> ${CDEP_MANIFEST_FILE} |
| 99 | |
| 100 | printf " size: " >> ${CDEP_MANIFEST_FILE} |
| 101 | ls -l ${CDEP_UPLOAD_PATH}/oboe-${ABI}.zip | awk '{print $5}' >> ${CDEP_MANIFEST_FILE} |
| 102 | |
| 103 | printf " %s\r\n" " abi: ${ABI}" >> ${CDEP_MANIFEST_FILE} |
| 104 | printf " %s\r\n" " platform: ${ANDROID_SYSTEM_VERSION}" >> ${CDEP_MANIFEST_FILE} |
| 105 | printf " libs: [liboboe.a]\r\n" >> ${CDEP_MANIFEST_FILE} |
| 106 | |
| 107 | popd |
Don Turner | 1f6dcad | 2017-09-12 20:34:36 +0100 | [diff] [blame] | 108 | popd |
| 109 | } |
| 110 | |
| 111 | build_oboe armeabi |
| 112 | build_oboe armeabi-v7a |
| 113 | build_oboe arm64-v8a |
| 114 | build_oboe x86 |
| 115 | build_oboe x86_64 |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 116 | build_oboe mips |
Don Turner | 1f6dcad | 2017-09-12 20:34:36 +0100 | [diff] [blame] | 117 | |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 118 | # Currently unsupported ABIs |
Don Turner | 1f6dcad | 2017-09-12 20:34:36 +0100 | [diff] [blame] | 119 | # build_oboe mips64 |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 120 | |
| 121 | # Output a code example |
| 122 | printf "%s\r\n" "example: |" >> ${CDEP_MANIFEST_FILE} |
| 123 | printf "%s\r\n" " #include <oboe/Oboe.h>" >> ${CDEP_MANIFEST_FILE} |
| 124 | printf "%s\r\n" " void openStream() {" >> ${CDEP_MANIFEST_FILE} |
Don Turner | 379e8e5 | 2017-11-29 15:49:29 +0000 | [diff] [blame] | 125 | printf "%s\r\n" " AudioStreamBuilder builder;" >> ${CDEP_MANIFEST_FILE} |
| 126 | printf "%s\r\n" " AudioStream *stream;" >> ${CDEP_MANIFEST_FILE} |
Don Turner | 6ef7e0c | 2017-10-24 13:19:18 +0100 | [diff] [blame] | 127 | printf "%s\r\n" " builder.openStream(&stream);" >> ${CDEP_MANIFEST_FILE} |
| 128 | printf "%s\r\n" " }" >> ${CDEP_MANIFEST_FILE} |
| 129 | |
| 130 | |
| 131 | # Test package integrity |
| 132 | pushd ${BUILD_DIR} |
| 133 | git clone https://github.com/jomof/cdep-redist.git |
| 134 | cdep-redist/cdep wrapper |
| 135 | ./cdep fetch ${CDEP_UPLOAD_PATH}/cdep-manifest.yml |
| 136 | |
| 137 | # Create the example project |
| 138 | printf "%s\r\n" "builders: [cmake, cmakeExamples, ndk-build]" > cdep.yml |
| 139 | printf "%s\r\n" "dependencies:" >> cdep.yml |
| 140 | printf "%s\r\n" "- compile: ${CDEP_UPLOAD_PATH}/cdep-manifest.yml" >> cdep.yml |
| 141 | ./cdep |
| 142 | |
| 143 | # Build the example project |
| 144 | |
| 145 | cmake \ |
| 146 | -H.cdep/examples/cmake/ \ |
| 147 | -Bbuild/examples \ |
| 148 | -DCMAKE_BUILD_TYPE=RelWithDebInfo \ |
| 149 | -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \ |
| 150 | -DCMAKE_SYSTEM_NAME=Android \ |
| 151 | -DCMAKE_SYSTEM_VERSION=${ANDROID_SYSTEM_VERSION} \ |
| 152 | -DCMAKE_ANDROID_STL_TYPE=c++_static \ |
| 153 | -DCMAKE_ANDROID_NDK=${ANDROID_NDK} \ |
| 154 | -DCMAKE_ANDROID_ARCH_ABI=armeabi \ |
| 155 | -DCMAKE_CXX_FLAGS="-Werror -Wall -std=c++11" |
| 156 | |
| 157 | cmake --build build/examples |
| 158 | |
| 159 | popd |
| 160 | |