blob: 86ba865f3adfed205878d5259b173fbbc3acca7d [file] [log] [blame]
Zdenek Behand7bfd862011-05-11 23:56:46 +02001#!/bin/bash
2
Matt Tennant0a9d32d2012-07-30 16:51:37 -07003# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Zdenek Behand7bfd862011-05-11 23:56:46 +02004# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
Zdenek Behand7bfd862011-05-11 23:56:46 +02007
David James0b1baf62012-03-15 09:26:23 -07008. "$(dirname "$0")/common.sh" || exit 1
Zdenek Behand7bfd862011-05-11 23:56:46 +02009
10# Script must run inside the chroot
11assert_inside_chroot "$@"
12
Zdenek Behan308e9fd2011-05-12 22:25:47 +020013# Do not run as root
14assert_not_root_user
15
David James855afb72012-03-14 20:04:59 -070016# Developer-visible flags.
Zdenek Behand7bfd862011-05-11 23:56:46 +020017DEFINE_boolean usepkg $FLAGS_TRUE \
18 "Use binary packages to bootstrap."
David James855afb72012-03-14 20:04:59 -070019
20FLAGS_HELP="usage: $(basename $0) [flags]
21Performs an update of the chroot. This script is called as part of
22build_packages, so there is typically no need to call this script directly.
23"
24show_help_if_requested "$@"
25
26# The following options are advanced options, only available to those willing
27# to read the source code. They are not shown in help output, since they are
28# not needed for the typical developer workflow.
Zdenek Behand7bfd862011-05-11 23:56:46 +020029DEFINE_boolean fast ${DEFAULT_FAST} "Call many emerges in parallel"
David James184e3902012-02-23 20:19:28 -080030DEFINE_integer jobs -1 \
31 "How many packages to build in parallel at maximum."
Zdenek Behan2fbd5af2012-03-12 19:38:50 +010032DEFINE_boolean skip_toolchain_update $FLAGS_FALSE \
33 "Don't update the toolchains."
Mike Frysinger7f2ebbd2012-06-01 21:41:27 -040034DEFINE_string toolchain_boards "" \
35 "Extra toolchains to setup for the specified boards."
Zdenek Behand7bfd862011-05-11 23:56:46 +020036
37# Parse command line flags
38FLAGS "$@" || exit 1
39eval set -- "${FLAGS_ARGV}"
40
41# Only now can we die on error. shflags functions leak non-zero error codes,
Brian Harring7f175a52012-03-02 05:37:00 -080042# so will die prematurely if 'switch_to_strict_mode' is specified before now.
43switch_to_strict_mode
Zdenek Behand7bfd862011-05-11 23:56:46 +020044
J. Richard Barnettee80f6de2012-02-24 14:08:34 -080045. ${SCRIPTS_DIR}/sdk_lib/make_conf_util.sh
46
Zdenek Behan308e9fd2011-05-12 22:25:47 +020047# Run version hooks as pre-update
48${SCRIPTS_DIR}/run_chroot_version_hooks
49
J. Richard Barnettee80f6de2012-02-24 14:08:34 -080050# Create /etc/make.conf.host_setup. The file content is regenerated
51# from scratch every update. There are various reasons to do this:
52# + It's cheap, so this is an easy way to guarantee correct content
53# after an upgrade.
54# + Inside make_chroot.sh, we use a temporary version of the file
55# which must be updated before the script completes; that final
56# update happens here.
57# + If the repositories change to add or remove the private
58# overlay, the file may need to be regenerated.
59create_host_setup
David Jamese996baa2011-11-02 16:11:27 -070060
Zdenek Behand7bfd862011-05-11 23:56:46 +020061info "Updating chroot"
62
Chris Masonebbccc242014-02-08 16:23:53 -080063sudo_clear_shadow_locks /
64
Mike Frysinger650bf872012-02-27 11:05:26 -050065EMERGE_FLAGS="-uNv --with-bdeps=y --select"
Zdenek Behan95626202011-05-12 05:54:19 +020066if [ "${FLAGS_usepkg}" -eq "${FLAGS_TRUE}" ]; then
67 EMERGE_FLAGS="${EMERGE_FLAGS} --getbinpkg"
David James0dccff32011-06-09 13:03:47 -070068
69 # Only update toolchain when binpkgs are available. Toolchain rollout
70 # process only takes place when the chromiumos sdk builder finishes
71 # a successful build.
72 EMERGE_FLAGS+=" --useoldpkg-atoms=sys-devel/binutils"
73 EMERGE_FLAGS+=" --useoldpkg-atoms=sys-devel/gcc"
74 EMERGE_FLAGS+=" --useoldpkg-atoms=sys-libs/glibc"
Zdenek Behan95626202011-05-12 05:54:19 +020075fi
Zdenek Behana29fb202011-05-12 05:21:14 +020076
David James184e3902012-02-23 20:19:28 -080077if [[ "${FLAGS_jobs}" -ne -1 ]]; then
78 EMERGE_FLAGS+=" --jobs=${FLAGS_jobs}"
79fi
80
Mike Frysinger0bf12792014-03-22 01:46:42 -040081# Perform an update of all the sdk packages in the chroot.
Zdenek Behand7bfd862011-05-11 23:56:46 +020082EMERGE_CMD="emerge"
David James85dd1402012-06-07 14:55:46 -070083CHROMITE_BIN="${GCLIENT_ROOT}/chromite/bin"
Zdenek Behand7bfd862011-05-11 23:56:46 +020084if [ "${FLAGS_fast}" -eq "${FLAGS_TRUE}" ]; then
David James85dd1402012-06-07 14:55:46 -070085 EMERGE_CMD="${CHROMITE_BIN}/parallel_emerge"
Zdenek Behand7bfd862011-05-11 23:56:46 +020086fi
Zdenek Behan95626202011-05-12 05:54:19 +020087
Mike Frysingerc405e7b2014-11-14 13:39:22 -050088# First make sure the cross-compilers have the right config settings.
89# We don't actually build them yet though as we want to wait for the
90# sdk to have all up-to-date packages.
Zdenek Behan2fbd5af2012-03-12 19:38:50 +010091if [ "${FLAGS_skip_toolchain_update}" -eq "${FLAGS_FALSE}" ]; then
Mike Frysingerc405e7b2014-11-14 13:39:22 -050092 info "Updating cross-compilers"
93 TOOLCHAIN_FLAGS=()
Zdenek Behan42184b42012-05-30 19:42:31 +020094
Mike Frysingerc405e7b2014-11-14 13:39:22 -050095 if [[ -n ${FLAGS_toolchain_boards} ]]; then
96 TOOLCHAIN_FLAGS+=(
97 "--targets=boards"
98 "--include-boards=${FLAGS_toolchain_boards}"
99 )
100 fi
101
Zdenek Behan2fbd5af2012-03-12 19:38:50 +0100102 # This should really only be skipped while bootstrapping.
103 if [ "${FLAGS_usepkg}" -eq "${FLAGS_FALSE}" ]; then
Mike Frysinger5e2e2732012-08-22 17:18:36 -0400104 TOOLCHAIN_FLAGS+=( --nousepkg )
Zdenek Behan2fbd5af2012-03-12 19:38:50 +0100105 fi
106 # Expand the path before sudo, as root doesn't have the same path magic.
Ahmad Sharif89b8a8b2012-09-21 20:12:45 -0700107 sudo -E $(type -p cros_setup_toolchains) "${TOOLCHAIN_FLAGS[@]}"
Zdenek Behan4748e872011-10-11 03:23:11 +0200108fi
109
Mike Frysingerc405e7b2014-11-14 13:39:22 -0500110info "Updating the SDK"
111
David James85dd1402012-06-07 14:55:46 -0700112# Build cros_workon packages when they are changed.
113for pkg in $("${CHROMITE_BIN}/cros_list_modified_packages" --host); do
114 EMERGE_FLAGS+=" --reinstall-atoms=${pkg} --usepkg-exclude=${pkg}"
115done
116
Zdenek Behan4748e872011-10-11 03:23:11 +0200117# Second pass, update everything else.
118EMERGE_FLAGS+=" --deep"
Mike Frysinger0bf12792014-03-22 01:46:42 -0400119sudo -E ${EMERGE_CMD} ${EMERGE_FLAGS} virtual/target-sdk world
Zdenek Behand7bfd862011-05-11 23:56:46 +0200120
Zdenek Behan99fb7422011-10-17 01:12:34 +0200121# Automatically discard all CONFIG_PROTECT'ed files. Those that are
122# protected should not be overwritten until the variable is changed.
123# Autodiscard is option "-9" followed by the "YES" confirmation.
124printf '%s\nYES\n' -9 | sudo etc-update
125
David Jamesd899f8d2011-08-17 05:22:52 -0700126# If the user still has old perl modules installed, update them.
127PERL_VERSIONS=$(find /usr/lib*/perl5/vendor_perl/ -maxdepth 1 -mindepth 1 \
128 -type d -printf '%P\n' | sort -u | wc -w)
129if [ "$PERL_VERSIONS" -gt 1 ] ; then
Mike Frysingerae030a32014-10-05 20:54:45 -0400130 # Some perl packages might not exist anymore due to the upgrade, so unmerge
131 # any that no longer exist.
132 info "Looking for outdated perl packages"
133 pkgs=()
134 for pkg in $(qlist -IC dev-perl/ perl-core/ virtual/perl-); do
135 equery which ${pkg} >/dev/null || pkgs+=( "${pkg}" )
136 done
137 if [[ ${#pkgs[@]} -gt 0 ]]; then
138 sudo qmerge -Uyq "${pkgs[@]}"
139 fi
Mike Frysinger27cb1542013-03-27 22:11:44 -0400140 sudo perl-cleaner --all -- --quiet
David Jamesd899f8d2011-08-17 05:22:52 -0700141fi
Matt Tennant0a9d32d2012-07-30 16:51:37 -0700142
143command_completed