# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Settings that are common to all target boards.  Do not place any board
# specific settings in here, or settings for the sdk.
#
# See "man make.conf" for the available options.

# Pull in definition of at least { ROOT, CHOST, [BOARD_OVERLAY] }
source make.conf.board_setup

# TODO: This will have to come from somewhere else when we support a 32-bit
# build host environment.
CBUILD=x86_64-pc-linux-gnu

# We need a dummy setting here as make.conf files expect to expand ${USE}.
# When we don't have this, they get the USE from the profile, and that has
# a very different meaning when expanded at the make.conf level as it will
# override all profile settings.
USE=""

# Be sure we don't overwrite pkgs from another sysroot.
PKGDIR=${ROOT}packages/
PORTAGE_TMPDIR=${ROOT}tmp/

PORT_LOGDIR=${ROOT}tmp/portage/logs/

PORTAGE_WORKDIR_MODE="0755"

PORTDIR_OVERLAY="
  /usr/local/portage/chromiumos
  /usr/local/portage/eclass-overlay
  ${BOARD_OVERLAY}
"

# Print a checkpoint message every 10MB while archiving.
PORTAGE_BINPKG_TAR_OPTS="--checkpoint=1000"

# Since our portage comes from version control, we redirect distfiles.
DISTDIR="/var/lib/portage/distfiles-target"

# Our chromium mirror should be more stable since we won't discard packages.
GENTOO_MIRRORS="https://commondatastorage.googleapis.com/chromeos-localmirror"
GENTOO_MIRRORS="$GENTOO_MIRRORS https://commondatastorage.googleapis.com/chromeos-mirror/gentoo"

# When building packages for the target, we need to search the target's
# sysroot for additional m4 files.  The autotools.eclass uses this.
AT_SYS_M4DIR="\${SYSROOT}/usr/share/aclocal"

# Remove all .la files for non-plugin libraries.
# Remove Gentoo init files since we use upstart.
# Remove logrotate.d files since we don't use logrotate.
# Remove sandbox files since we don't use that in the sysroot.
# Remove bash-completion files as we don't install bash-completion.
# Remove locale files as we don't use them.
INSTALL_MASK="
  /usr/lib*/*.la
  /etc/init.d /etc/conf.d
  /etc/logrotate.d
  /etc/sandbox.d
  /usr/share/bash-completion
  /usr/share/locale
"
PKG_INSTALL_MASK="${INSTALL_MASK}"

source /mnt/host/source/src/third_party/chromiumos-overlay/chromeos/config/make.conf.common

# Recommended MARCH_TUNE, CFLAGS, etc.
MARCH_TUNE=""

# Allow a board to override or define additional settings.
source make.conf.board

# NOTE: Flags here apply to all of our toolchains, including GCC, clang, and
# ARC++'s clang (which notably uses ld.bfd at times). Please tread carefully and
# test thoroughly before adding flags here.
COMMON_COMPILER_FLAGS="-Os -pipe ${MARCH_TUNE} ${BOARD_COMPILER_FLAGS} \
-g ${CXXEXCEPTIONS_FLAGS} -ffunction-sections -fdata-sections"
CFLAGS="${CFLAGS} ${COMMON_COMPILER_FLAGS}"
CXXFLAGS="${CXXFLAGS} ${COMMON_COMPILER_FLAGS}"
# Clear the variable so people don't try to rely on it.
COMMON_COMPILER_FLAGS=""

LDFLAGS="${LDFLAGS} -Wl,--gc-sections -Wl,--icf=all"

# Allow the user to override or define additional settings.
source make.conf.user
