blob: 77d5e4c37ec37cc004c1fefe9980a3ff6344ae65 [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
49${SCRIPTS_DIR}/run_chroot_version_hooks
50
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
Mike Frysingerc405e7b2014-11-14 13:39:22 -050088info "Updating the SDK"
89
Gilad Arnoldfbc41112015-04-07 08:43:43 +030090# Perform an update of all the sdk packages in the chroot.
Gilad Arnoldfbc41112015-04-07 08:43:43 +030091EMERGE_CMD="${CHROMITE_BIN}/parallel_emerge"
92
Mike Frysingerdf308252017-06-15 21:54:53 -040093EMERGE_FLAGS=( -uNv --with-bdeps=y --select )
Gilad Arnoldfbc41112015-04-07 08:43:43 +030094if [ "${FLAGS_usepkg}" -eq "${FLAGS_TRUE}" ]; then
Mike Frysingerdf308252017-06-15 21:54:53 -040095 EMERGE_FLAGS+=( --getbinpkg )
Gilad Arnoldfbc41112015-04-07 08:43:43 +030096
97 # Only update toolchain when binpkgs are available. Toolchain rollout
98 # process only takes place when the chromiumos sdk builder finishes
99 # a successful build.
Mike Frysingerd0e4af72017-09-13 00:24:34 -0400100 PACKAGES=(
101 $("${CHROMITE_BIN}/cros_setup_toolchains" --show-packages host)
102 )
103 # Sanity check we got some valid results.
104 [[ ${#PACKAGES[@]} -eq 0 ]] && die_notrace "cros_setup_toolchains failed"
Mike Frysingerdf308252017-06-15 21:54:53 -0400105 EMERGE_FLAGS+=(
Mike Frysingerd0e4af72017-09-13 00:24:34 -0400106 $(printf ' --useoldpkg-atoms=%s' "${PACKAGES[@]}")
Mike Frysingerdf308252017-06-15 21:54:53 -0400107 )
Gilad Arnoldfbc41112015-04-07 08:43:43 +0300108fi
109
110if [[ "${FLAGS_jobs}" -ne -1 ]]; then
Mike Frysingerdf308252017-06-15 21:54:53 -0400111 EMERGE_FLAGS+=( --jobs="${FLAGS_jobs}" )
Gilad Arnoldfbc41112015-04-07 08:43:43 +0300112fi
113
David James85dd1402012-06-07 14:55:46 -0700114# Build cros_workon packages when they are changed.
115for pkg in $("${CHROMITE_BIN}/cros_list_modified_packages" --host); do
Mike Frysingerdf308252017-06-15 21:54:53 -0400116 EMERGE_FLAGS+=( --reinstall-atoms="${pkg}" --usepkg-exclude="${pkg}" )
David James85dd1402012-06-07 14:55:46 -0700117done
118
Zdenek Behan4748e872011-10-11 03:23:11 +0200119# Second pass, update everything else.
Mike Frysingerdf308252017-06-15 21:54:53 -0400120EMERGE_FLAGS+=( --deep )
121sudo -E ${EMERGE_CMD} "${EMERGE_FLAGS[@]}" virtual/target-sdk world
Zdenek Behand7bfd862011-05-11 23:56:46 +0200122
Zdenek Behan99fb7422011-10-17 01:12:34 +0200123# Automatically discard all CONFIG_PROTECT'ed files. Those that are
124# protected should not be overwritten until the variable is changed.
125# Autodiscard is option "-9" followed by the "YES" confirmation.
126printf '%s\nYES\n' -9 | sudo etc-update
127
David Jamesd899f8d2011-08-17 05:22:52 -0700128# If the user still has old perl modules installed, update them.
Ben Chan0c9da662017-05-15 17:29:51 -0700129"${SCRIPTS_DIR}/build_library/perl_rebuild.sh"
Matt Tennant0a9d32d2012-07-30 16:51:37 -0700130
Mike Frysinger237117b2017-10-19 12:42:09 -0400131# Finally clean out any stale binpkgs we've accumulated.
132if [[ ${FLAGS_eclean} -eq ${FLAGS_TRUE} ]]; then
133 info "Running 'eclean -d packages' to clean up stale binpkgs"
134 sudo eclean -d packages
135fi
136
Matt Tennant0a9d32d2012-07-30 16:51:37 -0700137command_completed