mirror of https://github.com/thesofproject/sof.git
87 lines
2.7 KiB
Bash
Executable File
87 lines
2.7 KiB
Bash
Executable File
#!/bin/sh
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
# Copyright(c) 2021 Intel Corporation. All rights reserved.
|
|
|
|
# "All problems can be solved by another level of indirection"
|
|
# Ideally, this script would not be needed.
|
|
#
|
|
# Minor adjustments to the docker image provided by the Zephyr project.
|
|
|
|
set -e
|
|
set -x
|
|
|
|
unset ZEPHYR_BASE
|
|
|
|
# Make sure we're in the right place
|
|
test -e ./sof/scripts/xtensa-build-zephyr.py
|
|
|
|
# See .github/workflows/zephyr.yml
|
|
PATH="$PATH":/opt/sparse/bin
|
|
command -v sparse || true
|
|
: REAL_CC="$REAL_CC"
|
|
|
|
# See https://stackoverflow.com/questions/35291520/docker-and-userns-remap-how-to-manage-volume-permissions-to-share-data-betwee + many others
|
|
exec_as_sof_uid()
|
|
{
|
|
local sof_uid; sof_uid="$(stat --printf='%u' .)"
|
|
local current_uid; current_uid="$(id -u)"
|
|
if test "$current_uid" = "$sof_uid"; then
|
|
return 0
|
|
fi
|
|
|
|
# Add new container user matching the host user owning the SOF
|
|
# checkout
|
|
local sof_user; sof_user="$(id "$sof_uid")" || {
|
|
sof_user=sof_zephyr_docker_builder
|
|
|
|
local sof_guid; sof_guid="$(stat --printf='%g' .)"
|
|
|
|
getent group "$sof_guid" ||
|
|
sudo groupadd -g "$sof_guid" sof_zephyr_docker_group
|
|
|
|
sudo useradd -m -u "$sof_uid" -g "$sof_guid" "$sof_user"
|
|
|
|
local current_user; current_user="$(id -un)"
|
|
|
|
# Copy sudo permissions just in case the build needs it
|
|
sudo sed -e "s/$current_user/$sof_user/" /etc/sudoers.d/"$current_user" |
|
|
sudo tee -a /etc/sudoers.d/"$sof_user"
|
|
sudo chmod --reference=/etc/sudoers.d/"$current_user" \
|
|
/etc/sudoers.d/"$sof_user"
|
|
}
|
|
|
|
# Safety delay: slower infinite loops are much better
|
|
sleep 0.5
|
|
|
|
# Double sudo to work around some funny restriction in
|
|
# zephyr-build:/etc/sudoers: 'user' can do anything but... only as
|
|
# root.
|
|
sudo sudo -u "$sof_user" REAL_CC="$REAL_CC" "$0" "$@"
|
|
exit "$?"
|
|
}
|
|
|
|
exec_as_sof_uid "$@"
|
|
|
|
# Work in progress: move more code to a function
|
|
# https://github.com/thesofproject/sof-test/issues/740
|
|
|
|
# As of container version 0.18.4,
|
|
# https://github.com/zephyrproject-rtos/docker-image/blob/master/Dockerfile
|
|
# installs two SDKs: ZSDK_VERSION=0.12.4 and ZSDK_ALT_VERSION=0.13.1
|
|
# ZEPHYR_SDK_INSTALL_DIR points at ZSDK_VERSION but we want the latest.
|
|
unset ZEPHYR_SDK_INSTALL_DIR
|
|
|
|
# Zephyr's CMake does not look in /opt but it searches $HOME
|
|
ls -ld /opt/toolchains/zephyr-sdk-*
|
|
ln -s /opt/toolchains/zephyr-sdk-* ~/ || true
|
|
|
|
if test -e .west || test -e zephyr; then
|
|
init_update=''
|
|
else
|
|
init_update='-u'
|
|
fi
|
|
|
|
# To investigate what went wrong enable the trailing comment.
|
|
# This cannot be enabled by default for automation reasons.
|
|
./sof/scripts/xtensa-build-zephyr.py $init_update --no-interactive "$@" # || /bin/bash
|