aboutsummaryrefslogtreecommitdiff
path: root/build-aux/ci_build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'build-aux/ci_build.sh')
-rwxr-xr-xbuild-aux/ci_build.sh287
1 files changed, 0 insertions, 287 deletions
diff --git a/build-aux/ci_build.sh b/build-aux/ci_build.sh
deleted file mode 100755
index 73fcca30..00000000
--- a/build-aux/ci_build.sh
+++ /dev/null
@@ -1,287 +0,0 @@
-#!/bin/bash
-# SPDX-License-Identifier: 0BSD
-
-#############################################################################
-#
-# Script meant to be used for Continuous Integration automation for POSIX
-# systems. On GitHub, this is used by Ubuntu and MacOS builds.
-#
-#############################################################################
-#
-# Author: Jia Tan
-#
-#############################################################################
-
-set -e
-
-USAGE="Usage: $0
- -a [autogen flags]
- -b [autotools|cmake]
- -c [crc32|crc64|sha256]
- -d [encoders|decoders|bcj|delta|threads|shared|nls|small|ifunc|clmul|sandbox]
- -f [CFLAGS]
- -l [destdir]
- -m [compiler]
- -n [ARTIFACTS_DIR_NAME]
- -p [all|build|test]
- -s [srcdir]"
-
-# Absolute path of script directory
-ABS_DIR=$(cd -- "$(dirname -- "$0")" && pwd)
-
-# Default CLI option values
-AUTOGEN_FLAGS=""
-BUILD_SYSTEM="autotools"
-CHECK_TYPE="crc32,crc64,sha256"
-BCJ="y"
-DELTA="y"
-ENCODERS="y"
-DECODERS="y"
-THREADS="y"
-SHARED="y"
-NATIVE_LANG_SUPPORT="y"
-SMALL="n"
-IFUNC="y"
-CLMUL="y"
-SANDBOX="y"
-SRC_DIR="$ABS_DIR/../"
-DEST_DIR="$SRC_DIR/../xz_build"
-PHASE="all"
-ARTIFACTS_DIR_NAME="output"
-
-
-###################
-# Parse arguments #
-###################
-
-while getopts a:b:c:d:l:m:n:s:p:f:h opt; do
- # b option can have either value "autotools" OR "cmake"
- case ${opt} in
- h)
- echo "$USAGE"
- exit 0
- ;;
- a)
- AUTOGEN_FLAGS="$OPTARG"
- ;;
- b)
- case "$OPTARG" in
- autotools) ;;
- cmake) ;;
- *) echo "Invalid build system: $OPTARG"; exit 1;;
- esac
- BUILD_SYSTEM="$OPTARG"
- ;;
- c) CHECK_TYPE="$OPTARG"
- ;;
- # d options can be a comma separated list of things to disable at
- # configure time
- d)
- for disable_arg in $(echo "$OPTARG" | sed "s/,/ /g"); do
- case "$disable_arg" in
- encoders) ENCODERS="n" ;;
- decoders) DECODERS="n" ;;
- bcj) BCJ="n" ;;
- delta) DELTA="n" ;;
- threads) THREADS="n" ;;
- shared) SHARED="n";;
- nls) NATIVE_LANG_SUPPORT="n";;
- small) SMALL="y";;
- ifunc) IFUNC="n";;
- clmul) CLMUL="n";;
- sandbox) SANDBOX="n";;
- *) echo "Invalid disable value: $disable_arg"; exit 1 ;;
- esac
- done
- ;;
- l) DEST_DIR="$OPTARG"
- ;;
- m)
- CC="$OPTARG"
- export CC
- ;;
- n) ARTIFACTS_DIR_NAME="$OPTARG"
- ;;
- s) SRC_DIR="$OPTARG"
- ;;
- p) PHASE="$OPTARG"
- ;;
- f)
- CFLAGS="$OPTARG"
- export CFLAGS
- ;;
- esac
-done
-
-
-####################
-# Helper Functions #
-####################
-
-# These two functions essentially implement the ternary "?" operator.
-add_extra_option() {
- # First argument is option value ("y" or "n")
- # Second argument is option to set if "y"
- # Third argument is option to set if "n"
- if [ "$1" = "y" ]
- then
- EXTRA_OPTIONS="$EXTRA_OPTIONS $2"
- else
- EXTRA_OPTIONS="$EXTRA_OPTIONS $3"
- fi
-}
-
-
-add_to_filter_list() {
- # First argument is option value ("y" or "n")
- # Second argument is option to set if "y"
- if [ "$1" = "y" ]
- then
- FILTER_LIST="$FILTER_LIST$2"
- fi
-}
-
-
-###############
-# Build Phase #
-###############
-
-if [ "$PHASE" = "all" ] || [ "$PHASE" = "build" ]
-then
- # Checksum options should be specified differently based on the
- # build system. It must be calculated here since we won't know
- # the build system used until all args have been parsed.
- # Autotools - comma separated
- # CMake - semi-colon separated
- if [ "$BUILD_SYSTEM" = "autotools" ]
- then
- SEP=","
- else
- SEP=";"
- fi
-
- CHECK_TYPE_TEMP=""
- for crc in $(echo "$CHECK_TYPE" | sed "s/,/ /g"); do
- case "$crc" in
- # Remove "crc32" from cmake build, if specified.
- crc32)
- if [ "$BUILD_SYSTEM" = "cmake" ]
- then
- continue
- fi
- ;;
- crc64) ;;
- sha256) ;;
- *) echo "Invalid check type: $crc"; exit 1 ;;
- esac
-
- CHECK_TYPE_TEMP="$CHECK_TYPE_TEMP$SEP$crc"
- done
-
- # Remove the first character from $CHECK_TYPE_TEMP since it will
- # always be the delimiter.
- CHECK_TYPE="${CHECK_TYPE_TEMP:1}"
-
- FILTER_LIST="lzma1$SEP"lzma2
-
- # Build based on arguments
- mkdir -p "$DEST_DIR"
-
- # Generate configure option values
- EXTRA_OPTIONS=""
-
- case $BUILD_SYSTEM in
- autotools)
- cd "$SRC_DIR"
-
- # Run autogen.sh script if not already run
- if [ ! -f configure ]
- then
- ./autogen.sh "$AUTOGEN_FLAGS"
- fi
-
- cd "$DEST_DIR"
-
- add_to_filter_list "$BCJ" ",x86,powerpc,ia64,arm,armthumb,arm64,sparc,riscv"
- add_to_filter_list "$DELTA" ",delta"
-
- add_extra_option "$ENCODERS" "--enable-encoders=$FILTER_LIST" "--disable-encoders"
- add_extra_option "$DECODERS" "--enable-decoders=$FILTER_LIST" "--disable-decoders"
- add_extra_option "$THREADS" "" "--disable-threads"
- add_extra_option "$SHARED" "" "--disable-shared"
- add_extra_option "$NATIVE_LANG_SUPPORT" "" "--disable-nls"
- add_extra_option "$SMALL" "--enable-small" ""
- add_extra_option "$IFUNC" "" "--disable-ifunc"
- add_extra_option "$CLMUL" "" "--disable-clmul-crc"
- add_extra_option "$SANDBOX" "" "--enable-sandbox=no"
-
- # Run configure script
- "$SRC_DIR"/configure --enable-werror --enable-checks="$CHECK_TYPE" $EXTRA_OPTIONS --config-cache
-
- # Build the project
- make
- ;;
- cmake)
- cd "$DEST_DIR"
-
- add_to_filter_list "$BCJ" ";x86;powerpc;ia64;arm;armthumb;arm64;sparc;riscv"
- add_to_filter_list "$DELTA" ";delta"
-
- add_extra_option "$THREADS" "-DENABLE_THREADS=ON" "-DENABLE_THREADS=OFF"
-
- # Disable MicroLZMA if encoders are not configured.
- add_extra_option "$ENCODERS" "-DENCODERS=$FILTER_LIST" "-DENCODERS= -DMICROLZMA_ENCODER=OFF"
-
- # Disable MicroLZMA and lzip decoders if decoders are not configured.
- add_extra_option "$DECODERS" "-DDECODERS=$FILTER_LIST" "-DDECODERS= -DMICROLZMA_DECODER=OFF -DLZIP_DECODER=OFF"
-
- # CMake disables the shared library by default.
- add_extra_option "$SHARED" "-DBUILD_SHARED_LIBS=ON" ""
-
- add_extra_option "$SMALL" "-DHAVE_SMALL=ON" ""
-
- if test -n "$CC" ; then
- EXTRA_OPTIONS="$EXTRA_OPTIONS -DCMAKE_C_COMPILER=$CC"
- fi
-
- # Remove old cache file to clear previous settings.
- rm -f "CMakeCache.txt"
- cmake "$SRC_DIR/CMakeLists.txt" -B "$DEST_DIR" $EXTRA_OPTIONS -DADDITIONAL_CHECK_TYPES="$CHECK_TYPE" -G "Unix Makefiles"
- cmake --build "$DEST_DIR"
- ;;
- esac
-fi
-
-
-##############
-# Test Phase #
-##############
-
-if [ "$PHASE" = "all" ] || [ "$PHASE" = "test" ]
-then
- case $BUILD_SYSTEM in
- autotools)
- cd "$DEST_DIR"
- # If the tests fail, copy the test logs into the artifacts folder
- if make check
- then
- :
- else
- mkdir -p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
- cp ./tests/*.log "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
- exit 1
- fi
- ;;
- cmake)
- cd "$DEST_DIR"
- if make test
- then
- :
- else
- mkdir -p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
- cp ./Testing/Temporary/*.log "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME"
- exit 1
- fi
- ;;
- esac
-fi