Personal Submodule Forks and Docker Build

- Modify ec, coreboot, and edk submodules to point to personal
  forks using relative URL path
- Add image and script to build firmware in docker container
- Move firmware update build steps from flash.sh to build.sh
  so it can be built inside docker container
This commit is contained in:
Sravan Balaji 2024-06-29 10:00:26 -04:00
parent 7265ca3579
commit 860dcb1039
7 changed files with 110 additions and 19 deletions

8
.gitmodules vendored
View File

@ -1,10 +1,10 @@
[submodule "edk2"]
path = edk2
url = https://github.com/system76/edk2.git
url = ../system76-edk2.git
branch = system76
[submodule "coreboot"]
path = coreboot
url = https://github.com/system76/coreboot.git
url = ../system76-coreboot.git
branch = system76
[submodule "tools/UEFITool"]
path = tools/UEFITool
@ -36,8 +36,8 @@
branch = master
[submodule "ec"]
path = ec
url = https://github.com/system76/ec.git
branch = master
url = ../system76-embedded-controller.git
branch = main
[submodule "tools/apobtool"]
path = tools/apobtool
url = https://github.com/system76/apobtool.git

67
docker/Dockerfile Normal file
View File

@ -0,0 +1,67 @@
FROM ubuntu:20.04
# Install most dependencies
USER root
ARG TZ="America/New_York"
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
adduser \
sudo \
tzdata \
build-essential \
ccache \
cmake \
curl \
dosfstools \
flashrom \
git-lfs \
libncurses-dev \
libssl-dev \
libudev-dev \
mtools \
parted \
pkgconf \
python-is-python3 \
python3-distutils \
uuid-dev \
zlib1g-dev \
bison \
bzip2 \
ca-certificates \
flex \
g++ \
gcc \
gnat \
libnss3-dev \
patch \
tar \
xz-utils \
avr-libc \
avrdude \
clang-format \
gcc-avr \
libc-dev \
libhidapi-dev \
libudev-dev \
sdcc \
shellcheck \
xxd
# Create non-root user with disabled password and sudo privileges
ARG USER=docker
RUN adduser --disabled-password --gecos '' ${USER}
RUN adduser ${USER} sudo
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
# Enter build directory in user's home
USER ${USER}
ARG BUILD_DIR=/home/${USER}/firmware-open
WORKDIR ${BUILD_DIR}
# Set git configuration (required by some scripts)
ARG GIT_NAME="Docker User"
ARG GIT_EMAIL="docker@gmail.com"
RUN git config --global user.name "${GIT_NAME}"
RUN git config --global user.email "${GIT_EMAIL}"

2
ec

@ -1 +1 @@
Subproject commit 3d8204c3f40b4de1e3b94f2c1aaca5f29a80122e
Subproject commit e41716575ccb537871afec52f4d59a750db39d4a

2
edk2

@ -1 +1 @@
Subproject commit 88f5720e163089a8ed8831080d4ab9eeebf42ea2
Subproject commit 9ca522ba15f34311ed9606534cf2397ec8081211

View File

@ -120,4 +120,21 @@ then
mv -v "${USB}.partial" "${USB}"
fi
# Define base directory for firmware-update
export BASEDIR="system76-firmware-update"
# Clean build directory
mkdir -p build
BUILD="$(realpath "build/${MODEL}")"
rm -rf "${BUILD:?}/${BASEDIR}"
mkdir -p "${BUILD}/${BASEDIR}"
# Rebuild and copy firmware-update
pushd apps/firmware-update >/dev/null
rm -rf "build/x86_64-unknown-uefi"
make "build/x86_64-unknown-uefi/boot.efi"
cp -v "build/x86_64-unknown-uefi/boot.efi" "${BUILD}/${BASEDIR}"
cp -rv "res" "${BUILD}/${BASEDIR}"
popd >/dev/null
echo "Built '${VERSION}' for '${MODEL}'"

20
scripts/docker-build-env.sh Executable file
View File

@ -0,0 +1,20 @@
#!/usr/bin/env bash
DOCKER_USER=${USER}
BUILD_DIR=/home/${DOCKER_USER}/firmware-open
GIT_NAME="Sravan Balaji"
GIT_EMAIL="balajsra@umich.edu"
docker buildx build \
-f ./docker/Dockerfile \
--tag system76-firmware-open-build-env:latest \
--build-arg="USER=${DOCKER_USER}" \
--build-arg="BUILD_DIR=${BUILD_DIR}" \
--build-arg="GIT_NAME=${GIT_NAME}" \
--build-arg="GIT_EMAIL=${GIT_EMAIL}" \
.
docker run -it \
--volume .:${BUILD_DIR} \
system76-firmware-open-build-env:latest \
/bin/bash

View File

@ -24,20 +24,7 @@ fi
# Define base directory for firmware-update
export BASEDIR="system76-firmware-update"
# Clean build directory
mkdir -p build
BUILD="$(realpath "build/${MODEL}")"
rm -rf "${BUILD:?}/${BASEDIR}"
mkdir -p "${BUILD}/${BASEDIR}"
# Rebuild and copy firmware-update
pushd apps/firmware-update >/dev/null
rm -rf "build/x86_64-unknown-uefi"
make "build/x86_64-unknown-uefi/boot.efi"
cp -v "build/x86_64-unknown-uefi/boot.efi" "${BUILD}/${BASEDIR}"
cp -rv "res" "${BUILD}/${BASEDIR}"
popd >/dev/null
# Copy firmware
mkdir -p "${BUILD}/${BASEDIR}/firmware"