| #!/bin/bash |
| |
| # Invoke this from the root of an internal Android tree. It will create |
| # links to build swiftshader as vendor code in vendor/swiftshader |
| |
| set -o errexit |
| |
| pushd $(dirname "$0") > /dev/null 2>&1 |
| SOURCE_DIR="$(pwd)" |
| popd > /dev/null 2>&1 |
| |
| # The Android build configurations to use. There should be one representative |
| # configuration per TARGET_ARCH, ideally the primary user of SwiftShader |
| |
| CONFIGS=gce_x86-userdebug |
| |
| SOURCE_DIR_LINKED="$(pwd)/vendor/transgaming/swiftshader-src" |
| OBJECT_DIR="$(pwd)/vendor/transgaming/swiftshader" |
| |
| JOBS=$(grep '^processor' /proc/cpuinfo | wc -l) |
| |
| # Doing this first verifies that we're at the top of the tree |
| |
| . build/envsetup.sh |
| |
| # It's ok to reference gce_x86 here. The java version is controlled by |
| # the branch, not the device. The config file lives in gce_x86 because |
| # it's a repository that we control |
| |
| . device/google/gce_x86/configure_java.sh |
| |
| # Ensure that our source links are correct by throwing away anthing that is |
| # already linked and linking again |
| |
| rm -rf "${SOURCE_DIR_LINKED}" |
| mkdir -p "${SOURCE_DIR_LINKED}" |
| ln -s "${SOURCE_DIR}/.dir-locals.el" "${SOURCE_DIR_LINKED}" |
| |
| # Android JB needs some encouragement to find the makefiles |
| echo 'include $(call all-subdir-makefiles)' > "${SOURCE_DIR_LINKED}/Android.mk" |
| |
| IFS=$'\n' |
| for i in $(find "${SOURCE_DIR}/src" -name Android.mk -print); do |
| ln -s "$(dirname "${i}" )" "${SOURCE_DIR_LINKED}" |
| done |
| unset IFS |
| |
| # Build for each configuration in the list |
| |
| for config in ${CONFIGS}; do |
| lunch ${config} |
| |
| # Get the actual architecture from the build configuration |
| |
| TARGET_ARCH=$(get_build_var TARGET_ARCH) |
| |
| rm -rf ${OBJECT_DIR}/${TARGET_ARCH} |
| make -j ${JOBS} \ |
| showcommands \ |
| libEGL_swiftshader_vendor_debug \ |
| libEGL_swiftshader_vendor_release \ |
| libGLESv1_CM_swiftshader_vendor_debug \ |
| libGLESv1_CM_swiftshader_vendor_release \ |
| libGLESv2_swiftshader_vendor_debug \ |
| libGLESv2_swiftshader_vendor_release 2>&1 | tee vendor_build.out |
| |
| # We don't need the obj files since they can be generated from the syms |
| |
| rm -rf ${OBJECT_DIR}/${TARGET_ARCH}/*/obj |
| |
| # JBMR2 (and earlier?) doesn't allow the library name to differ from the |
| # module name. Rename the generated libraries. |
| |
| IFS=$'\n' |
| for i in $(find ${OBJECT_DIR}/${TARGET_ARCH} -name '*_vendor_*'); do |
| j="${i/_vendor_debug/}" |
| j="${j/_vendor_release/}" |
| if [[ "$i" != "$j" ]]; then |
| mv "$i" "$j" |
| fi |
| done |
| unset IFS |
| |
| pushd "${OBJECT_DIR}" |
| git add ${TARGET_ARCH} |
| popd |
| done |
| |
| # Decide if we need any warning in the commit message |
| |
| WARN="" |
| if [[ "$(cd ${SOURCE_DIR}; git diff HEAD)" != "" ]]; then |
| WARN="TREE WAS NOT CLEAN" |
| elif [[ "$(cd ${SOURCE_DIR}; git diff origin/master)" != "" ]]; then |
| WARN="TREE WAS NOT MERGED" |
| fi |
| |
| # Do the commit |
| |
| pushd "${OBJECT_DIR}" |
| git commit \ |
| -m "${WARN} SwiftShader build as of:" \ |
| -m " git hash: $( cd ${SOURCE_DIR}; git log -n1 | grep commit | head -1 | awk '{ print $2; }')" \ |
| -m "$(cd ${SOURCE_DIR}; git log -n1 | grep '^ *Change-Id:' | tail -1 | sed 's,-, ,')" \ |
| -m " At $(cd ${SOURCE_DIR}; git remote -v | grep ^origin | head -1 | awk '{ print $2; }')" \ |
| -m "$1" |
| popd |
| rm -rf ${SOURCE_DIR_LINKED} |