summaryrefslogtreecommitdiffstats
path: root/scripts/build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build.sh')
-rwxr-xr-xscripts/build.sh115
1 files changed, 84 insertions, 31 deletions
diff --git a/scripts/build.sh b/scripts/build.sh
index 94c62b8..470f39a 100755
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -1,4 +1,5 @@
#!/bin/bash
+set -e
usage() {
echo "Usage: build.sh [-b [release|debug]] "
@@ -16,8 +17,10 @@ usage() {
echo "configs with meson:"
echo " [default] default settings"
echo " fallback download all dependencies"
- echo " and build them as shared libaries"
+ echo " and build them as shared libraries"
echo " cross use cross toolchain to build"
+ echo " coverage build coverage report"
+ echo " appimage build AppImage target"
echo ""
echo "configs with muon:"
echo " [default] minimal static build"
@@ -56,6 +59,9 @@ CONFIG=${1:-"default"}
cd "$(git rev-parse --show-toplevel)" || exit 1
BUILDDIR="$(pwd)/.build-ci"
+TOOLDIR="$(pwd)/.build-tools"
+
+fn_exists() { declare -F "$1" > /dev/null; }
config_meson_default() {
CC="${CC}" "${MESON}" setup \
@@ -89,6 +95,26 @@ config_meson_cross() {
"${BUILDDIR}"
}
+config_meson_coverage() {
+ CC="${CC}" "${MESON}" setup \
+ --werror \
+ --buildtype="${BUILDTYPE}" \
+ --force-fallback-for=libnvme \
+ -Dlibnvme:werror=false \
+ -Db_coverage=true \
+ "${BUILDDIR}"
+}
+
+config_meson_appimage() {
+ CC="${CC}" "${MESON}" setup \
+ --werror \
+ --buildtype="${BUILDTYPE}" \
+ --force-fallback-for=libnvme \
+ --prefix=/usr \
+ -Dlibnvme:werror=false \
+ "${BUILDDIR}"
+}
+
build_meson() {
"${MESON}" compile \
-C "${BUILDDIR}"
@@ -99,45 +125,68 @@ test_meson() {
-C "${BUILDDIR}"
}
+test_meson_coverage() {
+ "${MESON}" test \
+ -C "${BUILDDIR}"
+ ninja -C "${BUILDDIR}" coverage --verbose
+}
+
+install_meson_appimage() {
+ "${MESON}" install \
+ -C "${BUILDDIR}"
+}
+
tools_build_samurai() {
- mkdir -p "${BUILDDIR}"/build-tools
- git clone --depth 1 https://github.com/michaelforney/samurai.git \
- "${BUILDDIR}/build-tools/samurai"
- pushd "${BUILDDIR}/build-tools/samurai" || exit 1
+ if [ ! -d "${TOOLDIR}"/samurai ]; then
+ git clone --depth 1 https://github.com/michaelforney/samurai.git \
+ "${TOOLDIR}/samurai"
+ fi
- CC="${CC}" make
- SAMU="${BUILDDIR}/build-tools/samurai/samu"
+ if [[ -f "${TOOLDIR}/samurai/samu" ]]; then
+ return
+ fi
+ pushd "${TOOLDIR}/samurai" || exit 1
+ CC="${CC}" make
popd || exit 1
}
tools_build_muon() {
- mkdir -p "${BUILDDIR}"/build-tools
- git clone --depth 1 https://git.sr.ht/~lattis/muon \
- "${BUILDDIR}/build-tools/muon"
- pushd "${BUILDDIR}/build-tools/muon" || exit 1
+ if [ ! -d "${TOOLDIR}/muon" ]; then
+ git clone --depth 1 https://git.sr.ht/~lattis/muon \
+ "${TOOLDIR}/muon"
+ fi
- CC="${CC}" ninja="${SAMU}" ./bootstrap.sh stage1
+ if [[ -f "${TOOLDIR}/build-muon/muon" ]]; then
+ return
+ fi
+
+ pushd "${TOOLDIR}/muon" || exit 1
+
+ CC="${CC}" CFLAGS="${CFLAGS} -std=c99" ninja="${SAMU}" ./bootstrap.sh stage1
CC="${CC}" ninja="${SAMU}" stage1/muon setup \
- -Dprefix="${BUILDDIR}/build-tools" \
- -Dlibcurl=enabled \
- -Dlibarchive=enabled \
- -Dlibpkgconf=enabled \
+ -Dprefix="${TOOLDIR}" \
-Ddocs=disabled \
-Dsamurai=disabled \
- "${BUILDDIR}/build-tools/.build-muon"
- "${SAMU}" -C "${BUILDDIR}/build-tools/.build-muon"
+ -Dbestline=disabled \
+ "${TOOLDIR}/build-muon"
+ "${SAMU}" -C "${TOOLDIR}/build-muon"
MUON="${BUILDDIR}/build-tools/.build-muon/muon"
- # "${MUON}" -C "${BUILDDIR}/build-tools/.build-muon" test
+ # "${TOOLDIR}/build-muon/muon" \
+ # -C "${TOOLDIR}/build-muon" test
popd || exit 1
}
config_muon_default() {
- CC="${CC}" CFLAGS="${CFLAGS} -static" \
- ninja="${SAMU}" "${MUON}" setup \
+ # wrap_mode=forcefallback depends on git being available
+
+ CC="${CC}" CFLAGS="${CFLAGS}" ninja="${SAMU}" \
+ "${MUON}" setup \
+ -Ddefault_library=static \
+ -Dc_link_args="-static" \
-Dwrap_mode=forcefallback \
-Dlibnvme:json-c=disabled \
-Dlibnvme:python=disabled \
@@ -156,22 +205,26 @@ test_muon() {
ldd "${BUILDDIR}/nvme" 2>&1 | grep 'not a dynamic executable' || exit 1
}
-rm -rf "${BUILDDIR}"
-
if [[ "${BUILDTOOL}" == "muon" ]]; then
- if ! which samu ; then
+ SAMU="$(which samu 2> /dev/null)" || true
+ if [[ -z "${SAMU}" ]]; then
tools_build_samurai
- else
- SAMU="$(which samu)"
+ SAMU="${TOOLDIR}/samurai/samu"
fi
- if ! which muon ; then
+ MUON="$(which muon 2> /dev/null)" || true
+ if [[ -z "${MUON}" ]]; then
tools_build_muon
- else
- MUON="$(which muon)"
+ MUON="${TOOLDIR}/build-muon/muon"
fi
fi
+echo "samu: ${SAMU}"
+echo "muon: ${MUON}"
+
+rm -rf "${BUILDDIR}"
+
config_"${BUILDTOOL}"_"${CONFIG}"
-build_"${BUILDTOOL}"
-test_"${BUILDTOOL}"
+fn_exists "build_${BUILDTOOL}_${CONFIG}" && "build_${BUILDTOOL}_${CONFIG}" || build_"${BUILDTOOL}"
+fn_exists "test_${BUILDTOOL}_${CONFIG}" && "test_${BUILDTOOL}_${CONFIG}" || test_"${BUILDTOOL}"
+fn_exists "install_${BUILDTOOL}_${CONFIG}" && "install_${BUILDTOOL}_${CONFIG}" || true;