From 860dcb103960f5f3a245efb2e4261f0eb81a8238 Mon Sep 17 00:00:00 2001 From: Sravan Balaji Date: Sat, 29 Jun 2024 10:00:26 -0400 Subject: [PATCH] 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 --- .gitmodules | 8 ++--- docker/Dockerfile | 67 +++++++++++++++++++++++++++++++++++++ ec | 2 +- edk2 | 2 +- scripts/build.sh | 17 ++++++++++ scripts/docker-build-env.sh | 20 +++++++++++ scripts/flash.sh | 13 ------- 7 files changed, 110 insertions(+), 19 deletions(-) create mode 100644 docker/Dockerfile create mode 100755 scripts/docker-build-env.sh diff --git a/.gitmodules b/.gitmodules index 9db60ed..102f5fd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -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 diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..76de68d --- /dev/null +++ b/docker/Dockerfile @@ -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}" diff --git a/ec b/ec index 3d8204c..e417165 160000 --- a/ec +++ b/ec @@ -1 +1 @@ -Subproject commit 3d8204c3f40b4de1e3b94f2c1aaca5f29a80122e +Subproject commit e41716575ccb537871afec52f4d59a750db39d4a diff --git a/edk2 b/edk2 index 88f5720..9ca522b 160000 --- a/edk2 +++ b/edk2 @@ -1 +1 @@ -Subproject commit 88f5720e163089a8ed8831080d4ab9eeebf42ea2 +Subproject commit 9ca522ba15f34311ed9606534cf2397ec8081211 diff --git a/scripts/build.sh b/scripts/build.sh index b491adf..8e5948d 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -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}'" diff --git a/scripts/docker-build-env.sh b/scripts/docker-build-env.sh new file mode 100755 index 0000000..53e909c --- /dev/null +++ b/scripts/docker-build-env.sh @@ -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 diff --git a/scripts/flash.sh b/scripts/flash.sh index d6af88a..4fff7d9 100755 --- a/scripts/flash.sh +++ b/scripts/flash.sh @@ -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"