diff options
-rw-r--r-- | Android.bp.in | 47 | ||||
-rw-r--r-- | Android.mk | 1 | ||||
-rw-r--r-- | README.android | 12 | ||||
-rw-r--r-- | README.updating | 60 | ||||
-rwxr-xr-x | generate_config.sh | 126 | ||||
-rwxr-xr-x | update_libaom.sh | 154 |
6 files changed, 400 insertions, 0 deletions
diff --git a/Android.bp.in b/Android.bp.in new file mode 100644 index 0000000..387d55f --- /dev/null +++ b/Android.bp.in @@ -0,0 +1,47 @@ +cc_library_static { + name: "libaom", + vendor_available: true, + cflags: [ + "-O3", + ], + + export_include_dirs: [ + "libaom", + ], + + local_include_dirs: [ + "libaom/third_party/libwebm/", + ], + + arch: { + arm64: { + local_include_dirs: [ + "config/arm64/", + ], + srcs: libaom_arm64_c_srcs, + }, + + arm: { + local_include_dirs: [ + "config/arm/", + ], + srcs: libaom_arm_c_srcs, + }, + + x86_64: { + local_include_dirs: [ + "config/x86_64/", + ], + srcs: libaom_x86_c_srcs, + }, + + x86: { + local_include_dirs: [ + "config/x86/", + ], + srcs: libaom_x86_64_c_srcs, + }, + + }, + +} diff --git a/Android.mk b/Android.mk new file mode 100644 index 0000000..612c879 --- /dev/null +++ b/Android.mk @@ -0,0 +1 @@ +#Empty Android.mk to shadow third_party/libwebm/Android.mk diff --git a/README.android b/README.android new file mode 100644 index 0000000..9f36ce9 --- /dev/null +++ b/README.android @@ -0,0 +1,12 @@ +Name: libaom +URL: https://aomedia.googlesource.com +Version: v1.0.0 +License: BSD +License File: libaom/LICENSE + +See README.updating to learn how to pull in upstream updates +Note that we should NOT be modifying the ./libaom subdirectory as it will +be overwritten with the next execution of this script. + +Below this line is automatically generated. Do not test your luck. +======== diff --git a/README.updating b/README.updating new file mode 100644 index 0000000..41ada56 --- /dev/null +++ b/README.updating @@ -0,0 +1,60 @@ +Description: +Contains the sources used to compile libaom. + +The libaom source is from webmproject.org: + https://aomedia.googlesource.com/aom + +Notes on updating libaom source code: + +Please follow these steps to update libvpx source code: + +1. Update libaom source tree. Look for "Current HEAD: <hash>" output to update + README.android. Look for "git log from upstream: <git log>" output to add + to the commit message. + + ./update_libaom.sh [branch name] + + [the script will automatically update README.android with the git HEAD information + and will also prepare a commit message for your use in a file "commit-message-yyyymmdd.hhmmss" + +2. Generate updated config files. + + ./generate_config.sh + + This requires some local x86, x86_64, arm, and arm64 tools. + The x86 and x86_64 tools are generally present on our development machines + The arm and arm64 tools can be installed with apt-get (Note that these + are just generic arm and arm64 tools, not the android-specific tools) + + apt-get install g++-arm-linux-gnueabihf + apt-get install g++-aarch64-linux-gnu + +3. Update README.android file with any Version, Date, Branch, or Commit changes. The + version is in the file source/config/aom_version.h + + [the Date, Branch, and Commit information is automatically updated in README.android as + part of the update_libaom.sh script you ran in step #1] + +4. Commit the changes. The commit message should look like this and is printed + by update_libaom.sh: + libaom: Pull from upstream + + Current HEAD: <hash> + + git log from upstream: + a6b2070 <git commit message 1> + 08dabbc <git commit message 2> + c29fb02 <git commit message 3> + + [A commit message will be present in a file "commit-message-yyyymmdd.hhmmss" after + you run the update_libaom.sh command] + +Tools needed to build libaom: + +- generate_config.sh + +Generate config files that contain the source list for each platform. +Configuration for the build is taken from aom_config.h for each platform. + +- arm and arm64 GNU compilation tools; the apt-get install lines are listed in step #2 above. + diff --git a/generate_config.sh b/generate_config.sh new file mode 100755 index 0000000..7eb77b1 --- /dev/null +++ b/generate_config.sh @@ -0,0 +1,126 @@ +#!/bin/bash -e +# +#Copyright (C) 2018 The Android Open Source Project +# +#Licensed under the Apache License, Version 2.0 (the "License"); +#you may not use this file except in compliance with the License. +#You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +#Unless required by applicable law or agreed to in writing, software +#distributed under the License is distributed on an "AS IS" BASIS, +#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#See the License for the specific language governing permissions and +#limitations under the License. + + +# This script is used to generate files in the <platform> directories needed to +# build libaom. Every time libaom source code is updated run this script. +# +# $ ./generate_config.sh +# +# And this will update all the config files needed. + +BASE_DIR=$(pwd) +LIBAOM_SRC_DIR="libaom" +LIBAOM_CONFIG_DIR="config" +TEMP_DIR="$LIBAOM_SRC_DIR.temp" +ARCH_x86="x86" +ARCH_x86_64="x86_64" +ARCH_ARM="arm" +ARCH_ARM_64="arm64" + +# Clean files from previous make. +function make_clean { + make clean > /dev/null + rm -f libaom_srcs.txt +} + +# Extract a list of C sources from a libaom_srcs.txt file +# $1 - path to libaom_srcs.txt +function libaom_srcs_txt_to_c_srcs { + ##grep "CMakeFiles" $1 | grep -v "aom_config.c"| grep -v "gen_src" | grep -v "encoder" | grep -v "mkvmuxer" | grep -v "hdr_util" | sed 's/.*dir/"libaom/' | sed 's/.o$/",/' | sort + grep "CMakeFiles" $1 | grep -v "aom_config.c"| grep -v "gen_src" | grep -v "encoder" | grep -v "mkvmuxer" | grep -v "hdr_util" | sed 's/.*dir/ "libaom/' | sed 's/.o$/",/' | sort +} + +# Convert a list of sources to a blueprint file containing a variable +# assignment. +# $1 - arch type +function gen_bp_srcs { + ( + varprefix=libaom_${1//-/_} + echo "${varprefix}_c_srcs = [" + libaom_srcs_txt_to_c_srcs libaom_srcs_$1.txt + echo "\"$LIBAOM_CONFIG_DIR/$1/$LIBAOM_CONFIG_DIR/aom_config.c\"," + echo "]" + echo + ) > $BASE_DIR/$TEMP_DIR/config_$1.bp +} + + +# Generate and copy config folder to $BASE_DIR/$LIBAOM_CONFIG_DIR/$1/$LIBAOM_CONFIG_DIR +# $1 - arch type +function libaom_gen_config { + mkdir $LIBAOM_CONFIG_DIR/$1 + mkdir $TEMP_DIR/$1/ + cd $TEMP_DIR/$1/ + + if [ $1 == $ARCH_x86_64 ]; then + cmake $BASE_DIR/$LIBAOM_SRC_DIR -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=0 -DCONFIG_LIBYUV=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_SH="CMAKE_SH-NOTFOUND" -G "Unix Makefiles" -DENABLE_AVX=0 -DENABLE_AVX2=0 -DENABLE_SSE4_1=0 -DENABLE_SSE4_2=0 -DENABLE_SSSE3=0 -DENABLE_SSE3=0 > /dev/null + make aom aom_common_app_util aom_decoder_app_util > libaom_srcs_$1.txt + + elif [ $1 == $ARCH_x86 ]; then + cmake $BASE_DIR/$LIBAOM_SRC_DIR -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=0 -DCONFIG_LIBYUV=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_SH="CMAKE_SH-NOTFOUND" -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=$BASE_DIR/$LIBAOM_SRC_DIR/build/cmake/toolchains/x86-linux.cmake -DENABLE_AVX=0 -DENABLE_AVX2=0 -DENABLE_SSE4_1=0 -DENABLE_SSE4_2=0 -DENABLE_SSSE3=0 -DENABLE_SSE3=0 + make aom aom_common_app_util aom_decoder_app_util > libaom_srcs_$1.txt + + elif [ $1 == $ARCH_ARM ]; then + cmake $BASE_DIR/$LIBAOM_SRC_DIR -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=0 -DCONFIG_LIBYUV=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_SH="CMAKE_SH-NOTFOUND" -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=$BASE_DIR/$LIBAOM_SRC_DIR/build/cmake/toolchains/armv7-linux-gcc.cmake -DCROSS=arm-linux-gnueabihf- + make aom aom_common_app_util aom_decoder_app_util webm > libaom_srcs_$1.txt + + elif [ $1 == $ARCH_ARM_64 ]; then + cmake $BASE_DIR/$LIBAOM_SRC_DIR -DCONFIG_AV1_ENCODER=0 -DCONFIG_LOWBITDEPTH=0 -DCONFIG_LIBYUV=0 -DCMAKE_BUILD_TYPE=Release -DCMAKE_SH="CMAKE_SH-NOTFOUND" -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=$BASE_DIR/$LIBAOM_SRC_DIR/build/cmake/toolchains/arm64-linux-gcc.cmake -DCROSS=aarch64-linux-gnu- + make aom aom_common_app_util aom_decoder_app_util webm > libaom_srcs_$1.txt + + else + echo "Architecture not supported." + fi + + gen_bp_srcs $1 + + rm $LIBAOM_CONFIG_DIR/*.cmake + cp -R $LIBAOM_CONFIG_DIR $BASE_DIR/$LIBAOM_CONFIG_DIR/$1 + cd $BASE_DIR +} + +# Remove the temporary directory in case it already exists and create a new temporary diretory. +if [ -d "$TEMP_DIR" ]; then + rm -rf $TEMP_DIR +fi + +mkdir $TEMP_DIR + +# Remove the config folder in case it already exists and create a new config folder. +if [ -d "$LIBAOM_CONFIG_DIR" ]; then + rm -rf $LIBAOM_CONFIG_DIR +fi + +mkdir $LIBAOM_CONFIG_DIR + +libaom_gen_config $ARCH_ARM_64 +libaom_gen_config $ARCH_ARM +libaom_gen_config $ARCH_x86_64 +libaom_gen_config $ARCH_x86 + +cd $BASE_DIR/$TEMP_DIR/ +( + echo "// THIS FILE IS AUTOGENERATED, DO NOT EDIT" + echo "// Generated from Android.bp.in, run ./generate_config.sh to regenerate" + echo + cat config_*.bp + cat $BASE_DIR/Android.bp.in +) > $BASE_DIR/Android.bp + +cd $BASE_DIR +rm -r $BASE_DIR/$TEMP_DIR/ + diff --git a/update_libaom.sh b/update_libaom.sh new file mode 100755 index 0000000..69fa6db --- /dev/null +++ b/update_libaom.sh @@ -0,0 +1,154 @@ +#!/bin/bash -e +# +# Copyright (c) 2012 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# This tool is used to update libaom source code to a revision of the upstream +# repository. + +# Usage: +# +# $ ./update_libaom.sh [branch | revision | file or url containing a revision] +# When specifying a branch it may be necessary to prefix with origin/ + +# Tools required for running this tool: +# +# 1. Linux / Mac +# 2. git + +export LC_ALL=C + +# Location for the remote git repository. +GIT_REPO="https://aomedia.googlesource.com/aom" + +# Update to TOT by default. +GIT_BRANCH="origin/master" + +# Relative path of target checkout. +LIBAOM_SRC_DIR="libaom" + +BASE_DIR=`pwd` + +if [ -n "$1" ]; then + GIT_BRANCH="$1" + if [ -f "$1" ]; then + GIT_BRANCH=$(<"$1") + elif [[ $1 = http* ]]; then + GIT_BRANCH=`curl $1` + fi +fi + +prev_hash="$(egrep "^Commit: [[:alnum:]]" README.android | awk '{ print $2 }')" +echo "prev_hash:$prev_hash" + +rm -rf $LIBAOM_SRC_DIR +# be robust in the face of errors (meaning don't overwrite the wrong place) +mkdir $LIBAOM_SRC_DIR || exit 1 +cd $LIBAOM_SRC_DIR || exit 1 + +# Start a local git repo. +git clone $GIT_REPO . + +# Switch the content to the desired revision. +git checkout -b tot $GIT_BRANCH + +add="$(git diff-index --diff-filter=A $prev_hash | \ +tr -s [:blank:] ' ' | cut -f6 -d\ )" +delete="$(git diff-index --diff-filter=D $prev_hash | \ +tr -s [:blank:] ' ' | cut -f6 -d\ )" + +# Get the current commit hash. +hash=$(git log -1 --format="%H") + +# README reminder. +( + # keep meta info / header + sed -n '0,/^====/p' < ../README.android + + # sed kept it in there + #echo "========" + + echo "Date: $(date +"%A %B %d %Y")" + echo "Branch: $GIT_BRANCH" + echo "Commit: $hash" + echo "" +) > ../update.$$-README.android +cat ../update.$$-README.android +mv ../update.$$-README.android ../README.android + +# Commit message header. +COMMIT_MSG=../commit-message-`date +"%Y%m%d.%H%M%S"` +( + echo "libaom: Pull from upstream" + echo "" + + # Output the current commit hash. + echo "Prev HEAD: $prev_hash" + echo "New HEAD: $hash" + echo "" + + # Output log for upstream from current hash. + if [ -n "$prev_hash" ]; then + echo "git log from upstream:" + pretty_git_log="$(git log \ + --no-merges \ + --topo-order \ + --pretty="%h %s" \ + --max-count=20 \ + $prev_hash..$hash)" + if [ -z "$pretty_git_log" ]; then + echo "No log found. Checking for reverts." + pretty_git_log="$(git log \ + --no-merges \ + --topo-order \ + --pretty="%h %s" \ + --max-count=20 \ + $hash..$prev_hash)" + fi + echo "$pretty_git_log" + # If it makes it to 20 then it's probably skipping even more. + if [ `echo "$pretty_git_log" | wc -l` -eq 20 ]; then + echo "<...>" + fi + else + # no previous hash + echo "git log from upstream:" + pretty_git_log="$(git log \ + --no-merges \ + --topo-order \ + --pretty="%h %s" \ + --max-count=20)" + if [ -z "$pretty_git_log" ]; then + echo "No log found. Checking for reverts." + fi + echo "$pretty_git_log" + # If it makes it to 20 then it's probably skipping even more. + if [ `echo "$pretty_git_log" | wc -l` -eq 20 ]; then + echo "<...>" + fi + fi +) > ${COMMIT_MSG} + +# Tell user about it +echo "Commit message: (stored in ./${COMMIT_MSG})" +echo "===============" +cat ${COMMIT_MSG} +echo "" +echo "===============" + +# Git is useless now, remove the local git repo. +rm -rf .git .gitignore .gitattributes + +# Add and remove files. +echo "$add" | xargs -I {} git add {} +echo "$delete" | xargs -I {} git rm --ignore-unmatch {} + +# Find empty directories and remove them. +find . -type d -empty -exec git rm {} \; + +chmod 755 build/cmake/*.sh build/cmake/*.pl + +# not even sure why we're doing a chdir here as the last thing in the script +# it isn't going to make any difference semantically. +cd $BASE_DIR || exit 1 |