From 33cd8d16f4f804bdfd50fea320410e901886568b Mon Sep 17 00:00:00 2001 From: Anton Livaja Date: Wed, 11 Sep 2024 11:39:04 -0400 Subject: [PATCH 1/3] feat: scratch together virtio.efi --- packages/edk2/Containerfile | 53 +++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 packages/edk2/Containerfile diff --git a/packages/edk2/Containerfile b/packages/edk2/Containerfile new file mode 100644 index 0000000..68b119b --- /dev/null +++ b/packages/edk2/Containerfile @@ -0,0 +1,53 @@ +FROM scratch as base +ARG ARCH=x86_64 +ENV VERSION=202408 +ENV SRC_HASH=63c99b6f9f7aa94e8d76c432bea05d0d4dd6600af78d6fd59a1aec5ce9cea8ce +ENV SRC_FILE=edk2-stable${VERSION}.tar.gz +ENV SRC_SITE=https://github.com/tianocore/edk2/archive/refs/tags/${SRC_FILE}} + +FROM base as fetch +ADD --checksum=sha256:${SRC_HASH} ${SRC_SITE} . + +FROM fetch as build +# https://github.com/tianocore/tianocore.github.io/wiki/Using-EDK-II-with-Native-GCC +COPY --from=stagex/busybox . / +COPY --from=stagex/binutils . / +COPY --from=stagex/musl . / +COPY --from=stagex/make . / +COPY --from=stagex/gcc . / +COPY --from=stagex/git . / +COPY --from=stagex/python . / +# TODO: package nasm: COPY --from=stagex/nasm . / +# TODO: package iasl: COPY --from=stagex/iasl . / + +RUN tar -xf ${SRC_FILE} +WORKDIR edk2-edk2-stable${VERSION} + +# Not sure how we want to package this +# We could do just Ovmf stuff, or do all platforms +# then in qemu, we can grab the efi we need and convert it +# to a rom + +# https://github.com/tianocore/tianocore.github.io/wiki/Common-instructions +RUN --network=none <<-EOF + set -ex + make -C BaseTools -j "$(nproc)" + . edksetup.sh + echo " + ACTIVE_PLATFORM = OvmfPkg/OvmfPkgX64.dsc + TARGET = RELEASE + TARGET_ARCH = X64 + TOOL_CHAIN_CONF = Conf/tools_def.txt + TOOL_CHAIN_TAG = GCC5 + MAX_CONCURRENT_THREAD_NUMBER = 1 + BUILD_RULE_CONF = Conf/build_rule.txt + " > Conf/target.txt + build + # EFI is located in /Build/OvmfX64/RELEASE_GCC5/X64/ +EOF + +FROM build as install +RUN make DESTDIR="/rootfs" install + +FROM stagex/filesystem as package +COPY --from=install /rootfs/. / From 38d295d61baf8febbe4be974cd2676901329d629 Mon Sep 17 00:00:00 2001 From: Anton Livaja Date: Wed, 11 Sep 2024 12:20:50 -0400 Subject: [PATCH 2/3] feat: update edk2 to package usign alpine approach --- packages/edk2/Containerfile | 48 ++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/packages/edk2/Containerfile b/packages/edk2/Containerfile index 68b119b..c5d3aa8 100644 --- a/packages/edk2/Containerfile +++ b/packages/edk2/Containerfile @@ -9,7 +9,6 @@ FROM base as fetch ADD --checksum=sha256:${SRC_HASH} ${SRC_SITE} . FROM fetch as build -# https://github.com/tianocore/tianocore.github.io/wiki/Using-EDK-II-with-Native-GCC COPY --from=stagex/busybox . / COPY --from=stagex/binutils . / COPY --from=stagex/musl . / @@ -17,33 +16,38 @@ COPY --from=stagex/make . / COPY --from=stagex/gcc . / COPY --from=stagex/git . / COPY --from=stagex/python . / -# TODO: package nasm: COPY --from=stagex/nasm . / -# TODO: package iasl: COPY --from=stagex/iasl . / +COPY --from=stagex/nasm . / +COPY --from=stagex/acpica . / RUN tar -xf ${SRC_FILE} WORKDIR edk2-edk2-stable${VERSION} -# Not sure how we want to package this -# We could do just Ovmf stuff, or do all platforms -# then in qemu, we can grab the efi we need and convert it -# to a rom - -# https://github.com/tianocore/tianocore.github.io/wiki/Common-instructions +ENV PLATFORM = "ShellPkg/ShellPkg.dsc OvmfPkg/OvmfPkgX64.dsc OvmfPkg/OvmfXen.dsc" +ENV TOOLCHAIN = "GCC5" +ENV RELEASE = "RELEASE" RUN --network=none <<-EOF set -ex - make -C BaseTools -j "$(nproc)" - . edksetup.sh - echo " - ACTIVE_PLATFORM = OvmfPkg/OvmfPkgX64.dsc - TARGET = RELEASE - TARGET_ARCH = X64 - TOOL_CHAIN_CONF = Conf/tools_def.txt - TOOL_CHAIN_TAG = GCC5 - MAX_CONCURRENT_THREAD_NUMBER = 1 - BUILD_RULE_CONF = Conf/build_rule.txt - " > Conf/target.txt - build - # EFI is located in /Build/OvmfX64/RELEASE_GCC5/X64/ + export PYTHON_COMMAND=python3 + export WORKSPACE=$PWD + export PACKAGES_PATH=$PWD + export EDK_TOOLS_PATH=$PWD/BaseTools/ + export PATH=$PWD/BaseTools/BinWrappers/PosixLike/:$PATH + # parallel build fails + unset MAKEFLAGS + + bash -c ". edksetup.sh" + make -C BaseTools + + for _p in $PLATFORM; do + msg "Building Plaform Files $_p" + command build -b $RELEASE \ + -a $TARGET_ARCH \ + -t $TOOLCHAIN \ + -p $_p \ + -n ${JOBS:-2} \ + -DSECURE_BOOT_ENABLE=TRUE \ + -DTPM2_ENABLE=TRUE + done EOF FROM build as install From 787b9fcb20e4fa3fb5e7ea7468612246e2e610c2 Mon Sep 17 00:00:00 2001 From: Anton Livaja Date: Wed, 11 Sep 2024 12:21:27 -0400 Subject: [PATCH 3/3] feat: package acpica and nasm --- packages/acpica/Containerfile | 30 ++++++++++++++++++++++++++++++ packages/nasm/Containerfile | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 packages/acpica/Containerfile create mode 100644 packages/nasm/Containerfile diff --git a/packages/acpica/Containerfile b/packages/acpica/Containerfile new file mode 100644 index 0000000..364d947 --- /dev/null +++ b/packages/acpica/Containerfile @@ -0,0 +1,30 @@ +FROM scratch as base +ENV VERSION=20230628 +ENV SRC_HASH=86876a745e3d224dcfd222ed3de465b47559e85811df2db9820ef09a9dff5cce +ENV SRC_FILE=acpica-unix-${VERSION}.tar.gz +ENV SRC_SITE=https://downloadmirror.intel.com/783549/${SRC_FILE} + +FROM base as fetch +ADD --checksum=sha256:${SRC_HASH} ${SRC_SITE} . + +FROM fetch as build +COPY --from=stagex/busybox . / +COPY --from=stagex/gcc . / +COPY --from=stagex/musl . / +COPY --from=stagex/binutils . / +COPY --from=stagex/make . / +COPY --from=stagex/bison . / +COPY --from=stage/flex . / +RUN tar -xf ${SRC_FILE} +WORKDIR acpica-unix-${VERSION} +RUN --network=none <<-EOF + set -eux + export LDFLAGS="${LDFLAGS/-Wl,-z,pack-relative-relocs}" + make NOWERROR=TRUE -j "$(nproc)" +EOF + +FROM build AS install +RUN --network=none DESTDIR=/rootfs make install + +FROM stagex/filesystem AS package +COPY --from=install /rootfs/. / \ No newline at end of file diff --git a/packages/nasm/Containerfile b/packages/nasm/Containerfile new file mode 100644 index 0000000..64fc954 --- /dev/null +++ b/packages/nasm/Containerfile @@ -0,0 +1,35 @@ +FROM scratch as base +ENV VERSION=2.16.03 +ENV SRC_HASH=86876a745e3d224dcfd222ed3de465b47559e85811df2db9820ef09a9dff5cce +ENV SRC_FILE=nasm-${VERSION}.tar.xz +ENV SRC_SITE=https://www.nasm.us/pub/nasm/releasebuilds/${VERSION}/${SRC_FILE}} + +FROM base as fetch +ADD --checksum=sha256:${SRC_HASH} ${SRC_SITE} . + +FROM fetch as build +COPY --from=stagex/busybox . / +COPY --from=stagex/gcc . / +COPY --from=stagex/binutils . / +COPY --from=stagex/make . / +COPY --from=stagex/bison . / +COPY --from=stage/flex . / +COPY --from=stagex/musl . / +COPY --from=stagex/perl . / +RUN tar -xf ${SRC_FILE} +WORKDIR nasm-${VERSION} +RUN --network=none <<-EOF + set -eux + CFLAGS="$CFLAGS -O2 -flto=auto" \ + ./configure \ + --build=x86_64-linux-musl \ + --host=x86_64-linux-musl \ + --prefix=/usr + make -j "$(nproc)" +EOF + +FROM build AS install +RUN --network=none DESTDIR=/rootfs make install + +FROM stagex/filesystem AS package +COPY --from=install /rootfs/. / \ No newline at end of file