Add bash based build harness.

This commit is contained in:
Andrius Štikonas 2021-01-29 01:31:56 +00:00
parent 6d51641b06
commit 707328a15c
8 changed files with 142 additions and 34 deletions

View File

@ -11,7 +11,7 @@ lint_task:
- apt-get -y install shellcheck
- apt-get -y clean
check_script:
- shellcheck rootfs.sh
- shellcheck rootfs.sh sysa/run.sh sysa/helpers.sh
run_task:
# Required background services

View File

@ -41,6 +41,7 @@ mkdir -p tmp/after/include/linux/{x86,x86_64}
mkdir -p tmp/tmp
cp after.kaem tmp/
cp after.kaem.run tmp/after/kaem.run
cp helpers.sh run.sh tmp/after/
# mescc-tools-extra
cp -r mescc-tools-extra tmp/after/

View File

@ -147,10 +147,4 @@ cd ${pkg}
kaem --file ${pkg}.kaem
cd ..
# Part 21: m4
pkg="m4-1.4"
cd ${pkg}
kaem --file ${pkg}.kaem
cd ..
echo "Bootstrapping completed."
bash run.sh

View File

@ -35,5 +35,7 @@ make
# Install
install bash /after/bin/
ln -s /after/bin/bash /bin/bash
ln -s /after/bin/bash /bin/sh
cd ../..

119
sysa/helpers.sh Executable file
View File

@ -0,0 +1,119 @@
#!/bin/bash -e
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
# SPDX-License-Identifier: GPL-3.0-or-later
export PATH=/after/bin
# Common build steps
# Build function provides a few common stages with default implementation
# that can be overridden on per package basis in the build script.
# build takes two arguments:
# 1) name-version of the package
# 2) optionally specify build script. Default is name-version.sh
build () {
pkg=$1
script_name=${2:-${pkg}.sh}
cd "$pkg" || (echo "Cannot cd into ${pkg}!"; kill $$)
echo "${pkg}: beginning build"
base_dir="${PWD}"
patch_dir="${base_dir}/patches"
mk_dir="${base_dir}/mk"
rm -rf "build"
mkdir -p "build"
cd "build"
echo "${pkg}: unpacking source."
call src_unpack
build_script="${base_dir}/${script_name}"
if test -e "${build_script}"; then
# shellcheck source=/dev/null
. "${build_script}"
fi
cd "${pkg}" || (echo "Cannot cd into build/${pkg}!"; kill $$)
echo "${pkg}: preparing source."
call src_prepare
echo "${pkg}: configuring source."
call src_configure
echo "${pkg}: compiling source."
call src_compile
echo "${pkg}: installing."
call src_install
cd ../..
echo "${pkg}: build successful"
cd ..
}
# Default unpacking function that unpacks a single source tarball.
default_src_unpack() {
src_dir="${base_dir}/src"
for suf in gz bz2 xz; do
source="${src_dir}/${pkg}.tar.${suf}"
if test -e "${source}"; then
case "${suf}" in
gz) xtr="z" ;;
bz2) xtr="j" ;;
xz) xtr="J" ;;
esac
tar "-${xtr}" -xf "${source}"
break
fi
done
}
# Default function to prepare source code.
# It applies all patches from patch_dir (at the moment only -p0 patches are supported).
# Then it copies our custom makefile.
default_src_prepare() {
if test -d "${patch_dir}"; then
for p in "${patch_dir}"/*.patch; do
patch -Np0 < "${p}"
done
fi
makefile="${mk_dir}/main.mk"
if test -e "${makefile}"; then
cp "${makefile}" Makefile
fi
}
# Default function for configuring source.
default_src_configure() {
:
}
# Default function for compiling source. It simply runs make without any parameters.
default_src_compile() {
make
}
# Default installing function. PREFIX should be set by run.sh script.
# Note that upstream makefiles might ignore PREFIX and have to be configured in configure stage.
default_src_install() {
make install PREFIX="${PREFIX}"
}
# Check if bash function exists
fn_exists() {
test "$(type -t "$1")" == 'function'
}
# Call package specific function or default implementation.
call() {
if fn_exists "$1"; then
$1
else
default_"${1}"
fi
}

View File

@ -1,26 +0,0 @@
#!/bin/sh
set -ex
mkdir build
cd build
# Extract
gunzip ../src/${pkg}.tar.gz
tar xf ../src/${pkg}.tar
cd ${pkg}
cp ../../mk/main.mk Makefile
# Patch and prepare
patch -Np0 -i ../../patches/signal-include.patch
# Build
make
# Install
install m4 /after/bin/
# Test
m4 --version
cd ../..

View File

@ -26,3 +26,6 @@ m4: libm4.a $(M4_OBJ)
libm4.a: $(LIB_OBJECTS)
$(AR) cr $@ $^
install: all
install m4 $(PREFIX)/bin

15
sysa/run.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/bash
# SPDX-FileCopyrightText: 2021 Andrius Štikonas <andrius@stikonas.eu>
# SPDX-License-Identifier: GPL-3.0-or-later
set -e
# shellcheck source=sysa/helpers.sh
. helpers.sh
export PREFIX=/after
# Part 21
build m4-1.4
echo "Bootstrapping completed."