blob: 6ee631c3003460dd20cf5c51832c090a99d52e6c [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.
David James184e3902012-02-23 20:19:28 -080029DEFINE_integer jobs -1 \
30 "How many packages to build in parallel at maximum."
Zdenek Behan2fbd5af2012-03-12 19:38:50 +010031DEFINE_boolean skip_toolchain_update $FLAGS_FALSE \
32 "Don't update the toolchains."
Mike Frysinger7f2ebbd2012-06-01 21:41:27 -040033DEFINE_string toolchain_boards "" \
34 "Extra toolchains to setup for the specified boards."
Mike Frysinger237117b2017-10-19 12:42:09 -040035DEFINE_boolean eclean ${FLAGS_TRUE} \
36 "Run eclean to delete old binpkgs after updating the chroot."
Zdenek Behand7bfd862011-05-11 23:56:46 +020037
38# Parse command line flags
39FLAGS "$@" || exit 1
40eval set -- "${FLAGS_ARGV}"
41
42# Only now can we die on error. shflags functions leak non-zero error codes,
Brian Harring7f175a52012-03-02 05:37:00 -080043# so will die prematurely if 'switch_to_strict_mode' is specified before now.
44switch_to_strict_mode
Zdenek Behand7bfd862011-05-11 23:56:46 +020045
J. Richard Barnettee80f6de2012-02-24 14:08:34 -080046. ${SCRIPTS_DIR}/sdk_lib/make_conf_util.sh
47
Zdenek Behan308e9fd2011-05-12 22:25:47 +020048# Run version hooks as pre-update
Alex Kleine5e0ea92018-09-13 17:18:15 -060049run_chroot_version_hooks
Zdenek Behan308e9fd2011-05-12 22:25:47 +020050
Gilad Arnoldfbc41112015-04-07 08:43:43 +030051info "Updating chroot"
52
J. Richard Barnettee80f6de2012-02-24 14:08:34 -080053# Create /etc/make.conf.host_setup. The file content is regenerated
54# from scratch every update. There are various reasons to do this:
55# + It's cheap, so this is an easy way to guarantee correct content
56# after an upgrade.
57# + Inside make_chroot.sh, we use a temporary version of the file
58# which must be updated before the script completes; that final
59# update happens here.
60# + If the repositories change to add or remove the private
61# overlay, the file may need to be regenerated.
62create_host_setup
David Jamese996baa2011-11-02 16:11:27 -070063
Chris Masonebbccc242014-02-08 16:23:53 -080064sudo_clear_shadow_locks /
65
Mike Frysingerc405e7b2014-11-14 13:39:22 -050066# First make sure the cross-compilers have the right config settings.
67# We don't actually build them yet though as we want to wait for the
68# sdk to have all up-to-date packages.
Zdenek Behan2fbd5af2012-03-12 19:38:50 +010069if [ "${FLAGS_skip_toolchain_update}" -eq "${FLAGS_FALSE}" ]; then
Mike Frysingerc405e7b2014-11-14 13:39:22 -050070 info "Updating cross-compilers"
71 TOOLCHAIN_FLAGS=()
Zdenek Behan42184b42012-05-30 19:42:31 +020072
Mike Frysingerc405e7b2014-11-14 13:39:22 -050073 if [[ -n ${FLAGS_toolchain_boards} ]]; then
74 TOOLCHAIN_FLAGS+=(
75 "--targets=boards"
76 "--include-boards=${FLAGS_toolchain_boards}"
77 )
78 fi
79
Zdenek Behan2fbd5af2012-03-12 19:38:50 +010080 # This should really only be skipped while bootstrapping.
81 if [ "${FLAGS_usepkg}" -eq "${FLAGS_FALSE}" ]; then
Mike Frysinger5e2e2732012-08-22 17:18:36 -040082 TOOLCHAIN_FLAGS+=( --nousepkg )
Zdenek Behan2fbd5af2012-03-12 19:38:50 +010083 fi
84 # Expand the path before sudo, as root doesn't have the same path magic.
Ahmad Sharif89b8a8b2012-09-21 20:12:45 -070085 sudo -E $(type -p cros_setup_toolchains) "${TOOLCHAIN_FLAGS[@]}"
Zdenek Behan4748e872011-10-11 03:23:11 +020086fi
87
Nicolas Boichat03a63052017-12-01 14:51:27 +080088# Make sure depot_tools is bootstrapped, so that it can build chromeos-chrome.
89info "Bootstrapping depot_tools"
90ensure_bootstrap
91
Mike Frysingerc405e7b2014-11-14 13:39:22 -050092info "Updating the SDK"
93
Gilad Arnoldfbc41112015-04-07 08:43:43 +030094# Perform an update of all the sdk packages in the chroot.
Gilad Arnoldfbc41112015-04-07 08:43:43 +030095EMERGE_CMD="${CHROMITE_BIN}/parallel_emerge"
96
Mike Frysingerdf308252017-06-15 21:54:53 -040097EMERGE_FLAGS=( -uNv --with-bdeps=y --select )
Gilad Arnoldfbc41112015-04-07 08:43:43 +030098if [ "${FLAGS_usepkg}" -eq "${FLAGS_TRUE}" ]; then
Mike Frysingerdf308252017-06-15 21:54:53 -040099 EMERGE_FLAGS+=( --getbinpkg )
Gilad Arnoldfbc41112015-04-07 08:43:43 +0300100
101 # Only update toolchain when binpkgs are available. Toolchain rollout
102 # process only takes place when the chromiumos sdk builder finishes
103 # a successful build.
Mike Frysingerd0e4af72017-09-13 00:24:34 -0400104 PACKAGES=(
105 $("${CHROMITE_BIN}/cros_setup_toolchains" --show-packages host)
106 )
107 # Sanity check we got some valid results.
108 [[ ${#PACKAGES[@]} -eq 0 ]] && die_notrace "cros_setup_toolchains failed"
Manoj Gupta661fb772018-04-12 22:04:35 -0700109 # Update post cross-packages. This is needed to update rust.
110 PACKAGES+=(
111 $("${CHROMITE_BIN}/cros_setup_toolchains" --show-packages host-post-cross)
112 )
Mike Frysingerdf308252017-06-15 21:54:53 -0400113 EMERGE_FLAGS+=(
Mike Frysingerd0e4af72017-09-13 00:24:34 -0400114 $(printf ' --useoldpkg-atoms=%s' "${PACKAGES[@]}")
Mike Frysingerdf308252017-06-15 21:54:53 -0400115 )
Gilad Arnoldfbc41112015-04-07 08:43:43 +0300116fi
Gilad Arnoldfbc41112015-04-07 08:43:43 +0300117if [[ "${FLAGS_jobs}" -ne -1 ]]; then
Mike Frysingerdf308252017-06-15 21:54:53 -0400118 EMERGE_FLAGS+=( --jobs="${FLAGS_jobs}" )
Gilad Arnoldfbc41112015-04-07 08:43:43 +0300119fi
120
David James85dd1402012-06-07 14:55:46 -0700121# Build cros_workon packages when they are changed.
122for pkg in $("${CHROMITE_BIN}/cros_list_modified_packages" --host); do
Mike Frysingerdf308252017-06-15 21:54:53 -0400123 EMERGE_FLAGS+=( --reinstall-atoms="${pkg}" --usepkg-exclude="${pkg}" )
David James85dd1402012-06-07 14:55:46 -0700124done
125
Zdenek Behan4748e872011-10-11 03:23:11 +0200126# Second pass, update everything else.
Mike Frysingerdf308252017-06-15 21:54:53 -0400127EMERGE_FLAGS+=( --deep )
Manoj Guptaf8fcdca2018-04-13 04:47:27 +0000128sudo -E ${EMERGE_CMD} "${EMERGE_FLAGS[@]}" virtual/target-sdk world
Zdenek Behand7bfd862011-05-11 23:56:46 +0200129
Manoj Gupta48535332018-04-12 22:04:35 -0700130# Install post cross packages if binary pkgs are available.
131if [ "${FLAGS_usepkg}" -eq "${FLAGS_TRUE}" ]; then
132 # Use --usepkgonly to ensure that packages are not built from source.
133 EMERGE_FLAGS=( -uNv --with-bdeps=y --select --getbinpkg --deep --usepkgonly )
134 EMERGE_FLAGS+=(
135 $("${CHROMITE_BIN}/cros_setup_toolchains" --show-packages host-post-cross)
136 )
137 sudo -E ${EMERGE_CMD} "${EMERGE_FLAGS[@]}"
Benjamin Gordonaefd3d92018-10-16 10:21:09 -0600138
139 # Install nobdeps packages only when binary pkgs are available, since we don't
140 # want to accidentally pull in build deps for a rebuild.
141 EMERGE_FLAGS=( -uNv --with-bdeps=n --oneshot --getbinpkg --deep --usepkgonly )
142 sudo -E "${EMERGE_CMD}" "${EMERGE_FLAGS[@]}" virtual/target-sdk-nobdeps
Manoj Gupta48535332018-04-12 22:04:35 -0700143fi
144
Zdenek Behan99fb7422011-10-17 01:12:34 +0200145# Automatically discard all CONFIG_PROTECT'ed files. Those that are
146# protected should not be overwritten until the variable is changed.
147# Autodiscard is option "-9" followed by the "YES" confirmation.
148printf '%s\nYES\n' -9 | sudo etc-update
149
David Jamesd899f8d2011-08-17 05:22:52 -0700150# If the user still has old perl modules installed, update them.
Ben Chan0c9da662017-05-15 17:29:51 -0700151"${SCRIPTS_DIR}/build_library/perl_rebuild.sh"
Matt Tennant0a9d32d2012-07-30 16:51:37 -0700152
Mike Frysinger237117b2017-10-19 12:42:09 -0400153# Finally clean out any stale binpkgs we've accumulated.
154if [[ ${FLAGS_eclean} -eq ${FLAGS_TRUE} ]]; then
155 info "Running 'eclean -d packages' to clean up stale binpkgs"
156 sudo eclean -d packages
157fi
158
Matt Tennant0a9d32d2012-07-30 16:51:37 -0700159command_completed