summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xscripts/build.sh177
-rwxr-xr-xscripts/meson-vcs-tag.sh (renamed from meson-vcs-tag.sh)0
-rwxr-xr-xscripts/regress (renamed from regress)0
-rwxr-xr-xscripts/release.sh (renamed from release.sh)41
-rwxr-xr-xscripts/update-docs.sh17
5 files changed, 219 insertions, 16 deletions
diff --git a/scripts/build.sh b/scripts/build.sh
new file mode 100755
index 0000000..94c62b8
--- /dev/null
+++ b/scripts/build.sh
@@ -0,0 +1,177 @@
+#!/bin/bash
+
+usage() {
+ echo "Usage: build.sh [-b [release|debug]] "
+ echo " [-c [gcc|clang]]"
+ echo " [-m [meson|muon]"
+ echo " [config]"
+ echo ""
+ echo "CI build script."
+ echo ""
+ echo " -b [release]|debug build type"
+ echo " -c [gcc]|clang compiler to use"
+ echo " -m [meson]|muon use meson or muon"
+ echo " -t [arm]|ppc64le|s390x cross compile target"
+ echo ""
+ echo "configs with meson:"
+ echo " [default] default settings"
+ echo " fallback download all dependencies"
+ echo " and build them as shared libaries"
+ echo " cross use cross toolchain to build"
+ echo ""
+ echo "configs with muon:"
+ echo " [default] minimal static build"
+}
+
+BUILDTOOL=meson
+MESON=meson
+BUILDTYPE=release
+CROSS_TARGET=arm
+CC=${CC:-"gcc"}
+
+while getopts "b:c:m:t:" o; do
+ case "${o}" in
+ b)
+ BUILDTYPE="${OPTARG}"
+ ;;
+ c)
+ CC="${OPTARG}"
+ ;;
+ m)
+ BUILDTOOL="${OPTARG}"
+ ;;
+ t)
+ CROSS_TARGET="${OPTARG}"
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+ esac
+done
+shift $((OPTIND-1))
+
+CONFIG=${1:-"default"}
+
+cd "$(git rev-parse --show-toplevel)" || exit 1
+
+BUILDDIR="$(pwd)/.build-ci"
+
+config_meson_default() {
+ CC="${CC}" "${MESON}" setup \
+ --werror \
+ --buildtype="${BUILDTYPE}" \
+ --force-fallback-for=libnvme \
+ -Dlibnvme:werror=false \
+ "${BUILDDIR}"
+}
+
+config_meson_fallback() {
+ CC="${CC}" "${MESON}" setup \
+ --werror \
+ --buildtype="${BUILDTYPE}" \
+ --wrap-mode=forcefallback \
+ --default-library=both \
+ -Dlibnvme:werror=false \
+ -Dopenssl:werror=false \
+ "${BUILDDIR}"
+}
+
+config_meson_cross() {
+ CC="${CC}" "${MESON}" setup \
+ --werror \
+ --buildtype="${BUILDTYPE}" \
+ --cross-file=.github/cross/ubuntu-cross-${CROSS_TARGET}.txt \
+ --force-fallback-for=libnvme \
+ -Dlibnvme:werror=false \
+ -Dlibnvme:python=disabled \
+ -Dlibnvme:openssl=disabled \
+ "${BUILDDIR}"
+}
+
+build_meson() {
+ "${MESON}" compile \
+ -C "${BUILDDIR}"
+}
+
+test_meson() {
+ "${MESON}" test \
+ -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
+
+ CC="${CC}" make
+ SAMU="${BUILDDIR}/build-tools/samurai/samu"
+
+ 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
+
+ CC="${CC}" ninja="${SAMU}" ./bootstrap.sh stage1
+
+ CC="${CC}" ninja="${SAMU}" stage1/muon setup \
+ -Dprefix="${BUILDDIR}/build-tools" \
+ -Dlibcurl=enabled \
+ -Dlibarchive=enabled \
+ -Dlibpkgconf=enabled \
+ -Ddocs=disabled \
+ -Dsamurai=disabled \
+ "${BUILDDIR}/build-tools/.build-muon"
+ "${SAMU}" -C "${BUILDDIR}/build-tools/.build-muon"
+ MUON="${BUILDDIR}/build-tools/.build-muon/muon"
+
+ # "${MUON}" -C "${BUILDDIR}/build-tools/.build-muon" test
+
+ popd || exit 1
+}
+
+config_muon_default() {
+ CC="${CC}" CFLAGS="${CFLAGS} -static" \
+ ninja="${SAMU}" "${MUON}" setup \
+ -Dwrap_mode=forcefallback \
+ -Dlibnvme:json-c=disabled \
+ -Dlibnvme:python=disabled \
+ -Dlibnvme:openssl=disabled \
+ -Dlibnvme:keyutils=disabled \
+ -Djson-c=disabled \
+ "${BUILDDIR}"
+}
+
+build_muon() {
+ "${SAMU}" -C "${BUILDDIR}"
+}
+
+test_muon() {
+ ninja="${SAMU}" "${MUON}" -C "${BUILDDIR}" test
+ ldd "${BUILDDIR}/nvme" 2>&1 | grep 'not a dynamic executable' || exit 1
+}
+
+rm -rf "${BUILDDIR}"
+
+if [[ "${BUILDTOOL}" == "muon" ]]; then
+ if ! which samu ; then
+ tools_build_samurai
+ else
+ SAMU="$(which samu)"
+ fi
+
+ if ! which muon ; then
+ tools_build_muon
+ else
+ MUON="$(which muon)"
+ fi
+fi
+
+config_"${BUILDTOOL}"_"${CONFIG}"
+build_"${BUILDTOOL}"
+test_"${BUILDTOOL}"
diff --git a/meson-vcs-tag.sh b/scripts/meson-vcs-tag.sh
index 8ce6924..8ce6924 100755
--- a/meson-vcs-tag.sh
+++ b/scripts/meson-vcs-tag.sh
diff --git a/regress b/scripts/regress
index 302ff86..302ff86 100755
--- a/regress
+++ b/scripts/regress
diff --git a/release.sh b/scripts/release.sh
index b4ae81c..dad3f25 100755
--- a/release.sh
+++ b/scripts/release.sh
@@ -44,29 +44,35 @@ fi
# expected version regex
re='^v([0-9]+\.[0-9]+(\.[0-9]+)?)(-rc[0-9]+)?$'
-# use the version string provided from the command line for nvme-cli
+# use the version string provided from the command line
if [[ "$VERSION" =~ ${re} ]]; then
- echo "nvme-cli: valid version $VERSION string"
+ echo "valid version $VERSION string"
# remove the leading 'v'
ver="${VERSION#v}"
else
- echo "nvme-cli: invalid version string ${VERSION}"
+ echo "invalid version string $VERSION"
exit 1
fi
-# extract the vesion string from libnvme by using the ref
-# defined in libnvme.wrap.
-libnvme_ref=$(sed -n "s/revision = \([0-9a-z]\+\)/\1/p" subprojects/libnvme.wrap)
-libnvme_VERSION=$(git -C subprojects/libnvme describe "${libnvme_ref}")
-if [[ "${libnvme_VERSION}" =~ ${re} ]]; then
- echo "libnvme: valid version ${libnvme_VERSION} string"
+cd "$(git rev-parse --show-toplevel)" || exit 1
- # remove the leading 'v'
- libnvme_ver="${libnvme_VERSION#v}"
-else
- echo "libnvme: invalid version string ${libnvme_VERSION}"
- exit 1
+if [[ -f subprojects/libnvme.wrap ]]; then
+ git -C subprojects/libnvme fetch --all
+
+ # extract the vesion string from libnvme by using the ref
+ # defined in libnvme.wrap.
+ libnvme_ref=$(sed -n "s/revision = \([0-9a-z]\+\)/\1/p" subprojects/libnvme.wrap)
+ libnvme_VERSION=$(git -C subprojects/libnvme describe "${libnvme_ref}")
+ if [[ "${libnvme_VERSION}" =~ ${re} ]]; then
+ echo "libnvme: valid version ${libnvme_VERSION} string"
+
+ # remove the leading 'v'
+ libnvme_ver="${libnvme_VERSION#v}"
+ else
+ echo "libnvme: invalid version string ${libnvme_VERSION}"
+ exit 1
+ fi
fi
if [[ -n $(git status -s) ]]; then
@@ -94,7 +100,10 @@ fi
# update meson.build
sed -i -e "0,/[ \t]version: /s/\([ \t]version: \).*/\1\'$ver\',/" meson.build
-sed -i -e "s/\(dependency('libnvme', version: '>=\)\([\.1-9]\+\)/\1$libnvme_ver/" meson.build
+if [[ -f subprojects/libnvme.wrap ]]; then
+ sed -i -e "s/\(dependency('libnvme', version: '>=\)\([\.1-9]\+\)/\1$libnvme_ver/" meson.build
+fi
+
if [[ "${dry_run}" = false ]]; then
git add meson.build
git commit -s -m "build: Update version to $VERSION"
@@ -102,7 +111,7 @@ fi
if [ "$build_doc" = true ]; then
# update documentation
- ./$doc_dir/update-docs.sh
+ ./scripts/update-docs.sh
if [[ "${dry_run}" = false ]]; then
git add $doc_dir
git commit -s -m "doc: Regenerate all docs for $VERSION"
diff --git a/scripts/update-docs.sh b/scripts/update-docs.sh
new file mode 100755
index 0000000..6fe1132
--- /dev/null
+++ b/scripts/update-docs.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+cd "$(git rev-parse --show-toplevel)" || exit 1
+
+BUILDDIR="$(mktemp -d)"
+trap 'rm -rf -- $BUILDDIR' EXIT
+
+meson setup \
+ -Ddocs=all \
+ -Ddocs-build=true \
+ --force-fallback-for=libnvme \
+ "${BUILDDIR}"
+meson compile -C "${BUILDDIR}"
+find "${BUILDDIR}/Documentation" -maxdepth 1 \
+ \( -name '*.1' -o -name '*.html' \) \
+ -exec cp {} Documentation/ \;