| # Copyright 2016 The Chromium OS Authors. All rights reserved. |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| # @ECLASS: arc-build.eclass |
| # @MAINTAINER: |
| # Chromium OS Build Team |
| # @BUGREPORTS: |
| # Please report bugs via http://crbug.com/new (with label Build) |
| # @VCSURL: https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/master/eclass/@ECLASS@ |
| # @BLURB: helper eclass for building packages to run under ARC (Android Runtime) |
| # @DESCRIPTION: |
| # We want to build some libraries to run under ARC. These funcs will help |
| # write ebuilds to accomplish that. |
| |
| if [[ -z ${_ARC_BUILD_ECLASS} ]]; then |
| _ARC_BUILD_ECLASS=1 |
| |
| # Check for EAPI 4+. |
| case "${EAPI:-0}" in |
| 4|5|6) ;; |
| *) die "unsupported EAPI (${EAPI}) in eclass (${ECLASS})" ;; |
| esac |
| |
| inherit flag-o-matic |
| |
| # These are internal variables the user should not need to mess with. |
| ARC_BASE="/opt/android" |
| |
| ARC_CLANG_BASE="${ARC_BASE}/arc-llvm/3.8/bin" |
| |
| ARC_GCC_BASE="${ARC_BASE}/arc-gcc" |
| ARC_GCC_ARM_BASE="${ARC_GCC_BASE}/arm/arm-linux-androideabi-4.9" |
| ARC_GCC_ARM_BINDIR="${ARC_GCC_ARM_BASE}/bin" |
| ARC_GCC_ARM_LIBDIR="${ARC_GCC_ARM_BASE}/lib/gcc/arm-linux-androideabi/4.9" |
| ARC_GCC_ARM_PREFIX="${ARC_GCC_ARM_BINDIR}/arm-linux-androideabi-" |
| |
| ARC_GCC_X86_64_BASE="${ARC_GCC_BASE}/x86_64/x86_64-linux-android-4.9" |
| ARC_GCC_X86_64_BINDIR="${ARC_GCC_X86_64_BASE}/bin" |
| ARC_GCC_X86_64_LIBDIR="${ARC_GCC_X86_64_BASE}/lib/gcc/x86_64-linux-android/4.9" |
| ARC_GCC_X86_64_PREFIX="${ARC_GCC_X86_64_BINDIR}/x86_64-linux-android-" |
| |
| ARC_SYSROOT_BASE="${ARC_BASE}" |
| |
| # Make sure we know how to handle the active system. |
| arc-build-check-arch() { |
| case ${ARCH} in |
| arm|amd64) ;; |
| *) die "Unsupported arch ${ARCH}" ;; |
| esac |
| } |
| |
| _arc-build-select-common() { |
| if [[ -n ${ARC_SYSROOT} ]] ; then |
| # If we've already been set up, don't re-run. |
| return 0 |
| fi |
| |
| arc-build-check-arch |
| |
| # Set up flags for the android sysroot. |
| export ARC_SYSROOT="${ARC_SYSROOT_BASE}/${ARCH}" |
| append-flags --sysroot="${ARC_SYSROOT}" |
| |
| # Strip out flags that are specific to our compiler wrapper. |
| filter-flags -clang-syntax |
| |
| # Android uses soft floating point still. |
| filter-flags -mfpu=neon -mfloat-abi=hard |
| } |
| |
| # Set up the compiler settings for GCC. |
| arc-build-select-gcc() { |
| case ${ARCH} in |
| arm) |
| export CC="${ARC_GCC_ARM_PREFIX}gcc" |
| export CXX="${ARC_GCC_ARM_PREFIX}g++" |
| ;; |
| amd64) |
| export CC="${ARC_GCC_X86_64_PREFIX}gcc" |
| export CXX="${ARC_GCC_X86_64_PREFIX}g++" |
| ;; |
| esac |
| |
| _arc-build-select-common |
| } |
| |
| # Set up the compiler settings for clang. |
| arc-build-select-clang() { |
| export CC="${ARC_CLANG_BASE}/clang" |
| export CXX="${ARC_CLANG_BASE}/clang++" |
| |
| local target |
| case ${ARCH} in |
| arm) target="arm-linux-androideabi" ;; |
| esac |
| CC+=" -target ${target} -B${ARC_GCC_ARM_BINDIR}" |
| CXX+=" -target ${target} -B${ARC_GCC_ARM_BINDIR}" |
| |
| append-ldflags -L"${ARC_GCC_ARM_LIBDIR}" |
| |
| _arc-build-select-common |
| } |
| |
| # If your ebuild declares src_prepare, you'll need to call this directly. |
| # It will set up CC/CXX for use w/gcc. |
| arc-build_src_prepare() { |
| arc-build-select-gcc |
| } |
| |
| EXPORT_FUNCTIONS src_prepare |
| |
| fi |