From 0382a0e812f5d8655a346ac6a9fd42d1326bf764 Mon Sep 17 00:00:00 2001 From: dpuzyrkov <dpuzyrkov@gmail.com> Date: Thu, 25 Aug 2022 18:42:16 +0300 Subject: [PATCH] [*] new buildscripts added. --- build.sh | 79 +++++++++++++++++++++++++++++++++++----------- pack.sh | 74 ++++++++++++++++++++++++++++++++++++++----- packaging/linux.sh | 40 +++++++++++++++++++++++ targets/linux.sh | 18 +++++++++++ targets/osx.sh | 61 +++++++++++++++++++++++++++++++++++ targets/windows.sh | 31 ++++++++++++++++++ validate.sh | 39 +++++++++++++++++++++++ 7 files changed, 315 insertions(+), 27 deletions(-) create mode 100755 packaging/linux.sh create mode 100644 targets/linux.sh create mode 100644 targets/osx.sh create mode 100644 targets/windows.sh create mode 100644 validate.sh diff --git a/build.sh b/build.sh index bfbf4a6..2aba1f9 100755 --- a/build.sh +++ b/build.sh @@ -8,31 +8,72 @@ else HERE=`dirname ${CMD}` fi -#build architecture -#- amd64-darvin -#- amd64-linux -#- armhf-linux -#- armv7-linux +export SOURCES=${HERE}/../ -# freebsb? openbsd? netbsd? openwrt -# ios (ipad/iphone) aarch64-ios-darwin +#validate input params +. ${HERE}/validate.sh -BUILD_ARCH="${1:-amd64-linux}" -BUILD_TYPE="${2:-release}" -BUILD_DIR=${PWD}/build_${BUILD_ARCH}_${BUILD_TYPE} +Help() +{ + echo "cellframe-node build" + echo "Usage: build.sh [--target ${TARGETS}] [${BUILD_TYPES}] [OPTIONS]" + echo "options: -DWHATEVER=ANYTHING will be passed to cmake as defines" + echo +} -echo "Build [${BUILD_TYPE}] binaries for [$BUILD_ARCH] architecture in [${BUILD_DIR}] on $(nproc) threads." +POSITIONAL_ARGS=() -#make build directory and cd in -mkdir -p ${BUILD_DIR} -cd ${BUILD_DIR} +while [[ $# -gt 0 ]]; do + case $1 in + -h|--help) + Help + shift # past argument + shift # past value + ;; + -t|--target) + TARGET="$2" + shift # past argument + shift # past value + ;; + *) + POSITIONAL_ARGS+=("$1") # save positional arg + shift # past argument + ;; + esac +done -#define DEBUG for build if neccessary +set -- "${POSITIONAL_ARGS[@]}" # restore positional parameters + +BUILD_TYPE="${1:-release}" +BUILD_OPTIONS="${@:2}" + +BUILD_TARGET="${TARGET:-linux}" + +BUILD_DIR=${PWD}/build_${BUILD_TARGET}_${BUILD_TYPE} + +VALIDATE_TARGET $TARGET +VALIDATE_BUILD_TYPE $BUILD_TYPE + +#append qmake debug\release qmake options for this if [ "${BUILD_TYPE}" = "debug" ]; then - cmake ../ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TARGET_ARCH=$BUILD_ARCH + BUILD_OPTIONS[${#BUILD_OPTIONS[@]}]="-DCMAKE_BUILD_TYPE=Debug" else - cmake ../ -DCMAKE_TARGET_ARCH=$BUILD_ARCH + BUILD_OPTIONS[${#BUILD_OPTIONS[@]}]="-DCMAKE_BUILD_TYPE=Release" fi -#call make to do the build process -make -j"$(nproc)" +. ${HERE}/targets/${BUILD_TARGET}.sh + +#all base logic from here +mkdir -p ${BUILD_DIR}/build +mkdir -p ${BUILD_DIR}/dist + +echo "Build [${BUILD_TYPE}] binaries for [$BUILD_TARGET] in [${BUILD_DIR}] on $(nproc) threads" +echo "with options: [${BUILD_OPTIONS[@]}]" + +cd ${BUILD_DIR}/build + +#debug out +echo "$CMAKE ${BUILD_OPTIONS[@]}" + +"${CMAKE[@]}" ../../ ${BUILD_OPTIONS[@]} +"${MAKE[@]}" diff --git a/pack.sh b/pack.sh index 1e24690..1f2a337 100755 --- a/pack.sh +++ b/pack.sh @@ -8,15 +8,73 @@ else HERE=`dirname ${CMD}` fi +export SOURCES=${HERE}/../ -BUILD_ARCH="${1:-x86_64-linux-gnu}" -BUILD_TYPE="${2:-release}" -PACKAGE_TYPE="${3:-deb}" -BUILD_DIR=${PWD}/build_${BUILD_ARCH}_${BUILD_TYPE} +containsElement () { + local e match="$1" + shift + for e; do [[ "$e" == "$match" ]] && return 0; done + return 1 +} + +Help() +{ + echo "cellframe-node pack" + echo "Usage: pack.sh [--target linux | windows | android] [release | debug]" + echo "--sign PATH should provide a path to file with env variables ANDROID_KEYSTORE_PATH, ANDROID_KEYSTORE_ALIAS, ANDROID_KEYSTORE_PASS for apk signing" +} + +POSITIONAL_ARGS=() + +while [[ $# -gt 0 ]]; do + case $1 in + -h|--help) + Help + shift # past argument + shift # past value + ;; + -t|--target) + TARGET="$2" + shift # past argument + shift # past value + ;; + *) + POSITIONAL_ARGS+=("$1") # save positional arg + shift # past argument + ;; + esac +done + +set -- "${POSITIONAL_ARGS[@]}" # restore positional parameters + +#all base logic from here + + +BUILD_TYPE="${1:-release}" +BUILD_OPTIONS="${@:2}" + +BUILD_TARGET="${TARGET:-linux}" + + +#validate input params +. ${HERE}/validate.sh +VALIDATE_TARGET $TARGET +VALIDATE_BUILD_TYPE $BUILD_TYPE + +DIST_DIR=${PWD}/build_${BUILD_TARGET}_${BUILD_TYPE}/dist +BUILD_DIR=${PWD}/build_${BUILD_TARGET}_${BUILD_TYPE}/build +OUT_DIR=${PWD}/build_${BUILD_TARGET}_${BUILD_TYPE}/ + +#we care only about dist dir, i think +[ ! -d ${DIST_DIR} ] && { echo "No build found: $BRAND $BUILD_TARGET" && exit 255; } + + + +echo "Pack [${BUILD_TYPE}] binaries for [$BUILD_TARGET] from [${DIST_DIR}] to [${OUT_DIR}]" + +. ${HERE}/packaging/${BUILD_TARGET}.sh + +PACK ${DIST_DIR} ${BUILD_DIR} ${OUT_DIR} -echo "Pack [${BUILD_TYPE}] binaries for [$BUILD_ARCH] architecture from [${BUILD_DIR}] in {$PACKAGE_TYPE} package." -cd ${BUILD_DIR} -#do cpack, it should care all other things and generate a deb file -cpack . diff --git a/packaging/linux.sh b/packaging/linux.sh new file mode 100755 index 0000000..e64aaf2 --- /dev/null +++ b/packaging/linux.sh @@ -0,0 +1,40 @@ +#!/bin/bash -e + +set -e + +if [ ${0:0:1} = "/" ]; then + HERE=`dirname $0` +else + CMD=`pwd`/$0 + HERE=`dirname ${CMD}` +fi + + +FILL_VERSION() +{ + source "${HERE}/../version.mk" + + VERSION_UPDATE="s|VERSION_MAJOR|${VERSION_MAJOR}|g" + BUILD_UPDATE="s|VERSION_MINOR|${VERSION_MINOR}|g" + MAJOR_UPDATE="s|VERSION_PATCH|${VERSION_PATCH}|g" + + for TEMPLATE in "$@"; do + sed \ + -e "${VERSION_UPDATE}" \ + -e "${BUILD_UPDATE}" \ + -e "${MAJOR_UPDATE}" \ + -i "${TEMPLATE}" + done +} + +PACK() +{ + + DIST_DIR=$1 + BUILD_DIR=$2 + OUT_DIR=$3 + + cd $BUILD_DIR + cpack ./ + cp *.deb ${OUT_DIR} +} \ No newline at end of file diff --git a/targets/linux.sh b/targets/linux.sh new file mode 100644 index 0000000..13bc4ad --- /dev/null +++ b/targets/linux.sh @@ -0,0 +1,18 @@ +#!/bin/bash -e + +set -e + +if [ ${0:0:1} = "/" ]; then + HERE=`dirname $0` +else + CMD=`pwd`/$0 + HERE=`dirname ${CMD}` +fi + + +CMAKE=(cmake) +MAKE=(make) + +echo "Linux target" +echo "CMAKE=${CMAKE[@]}" +echo "MAKE=${MAKE[@]}" \ No newline at end of file diff --git a/targets/osx.sh b/targets/osx.sh new file mode 100644 index 0000000..cd68374 --- /dev/null +++ b/targets/osx.sh @@ -0,0 +1,61 @@ +#!/bin/bash -e +#OSX BUILD +#HAVE TO PROVIDE OSXCROSS_QT_ROOT variable +#HAVE TO PROVIDE OSXCROSS_QT_VERSION variable + +set -e + +if [ ${0:0:1} = "/" ]; then + HERE=`dirname $0` +else + CMD=`pwd`/$0 + HERE=`dirname ${CMD}` +fi + + +if [ -z "$OSXCROSS_QT_ROOT" ] +then + echo "Please, export OSXCROSS_QT_ROOT variable, pointing to Qt-builds locations for osxcross environment" + exit 255 +fi + + +if [ -z "$OSXCROSS_QT_VERSION" ] +then + echo "Please, export OSXCROSS_QT_VERSION variable, scpecifying Qt-version in OSXCROSS_QT_ROOT directory." + exit 255 +fi + +echo "Using QT ${OSXCROSS_QT_VERSION} from ${OSXCROSS_QT_ROOT}/${OSXCROSS_QT_VERSION}" + +[ ! -d ${OSXCROSS_QT_ROOT}/${OSXCROSS_QT_VERSION} ] && { echo "No QT ${OSXCROSS_QT_VERSION} found in ${OSXCROSS_QT_ROOT}" && exit 255; } + +#define QMAKE & MAKE commands for build.sh script +export OSXCROSS_VERSION=1.4 +export OSXCROSS_OSX_VERSION_MIN=10.9 +export OSXCROSS_TARGET=darwin20.4 +export OSXCROSS_BASE_DIR=/osxcross/build/.. +export OSXCROSS_SDK=/opt/osxcross/bin/../SDK/MacOSX11.3.sdk +export OSXCROSS_SDK_DIR=/opt/osxcross/bin/../SDK/MacOSX11.3.sdk/.. +export OSXCROSS_SDK_VERSION=11.3 +export OSXCROSS_TARBALL_DIR=/osxcross/build/../tarballs +export OSXCROSS_PATCH_DIR=/osxcross/build/../patches +export OSXCROSS_TARGET_DIR=/opt/osxcross/bin/.. +export OSXCROSS_DIR_SDK_TOOLS=/opt/osxcross/bin/../SDK/MacOSX11.3.sdk/../tools +export OSXCROSS_BUILD_DIR=/osxcross/build +export OSXCROSS_CCTOOLS_PATH=/opt/osxcross/bin +export OSXCROSS_LIBLTO_PATH=/usr/lib/llvm-11/lib +export OSXCROSS_LINKER_VERSION=609 +export PATH=/opt/osxcross//bin:/opt/osxcross//bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/osxcross/bin + +export CC=${OSXCROSS_ROOT}/bin/x86_64-apple-darwin20.4-clang +export CXX=${OSXCROSS_ROOT}bin/x86_64-apple-darwin20.4-clang++ + +CMAKE=(cmake) + +#everything else can be done by default make +MAKE=(make) + +echo "OSXcross target" +echo "QMAKE=${CMAKE[@]}" +echo "MAKE=${MAKE[@]}" \ No newline at end of file diff --git a/targets/windows.sh b/targets/windows.sh new file mode 100644 index 0000000..73746dd --- /dev/null +++ b/targets/windows.sh @@ -0,0 +1,31 @@ + +#!/bin/bash -e +#WINDWOS BUILD IS SUPPORTED BY MXE +#HAVE TO PROVIDE MXE ROOT DIRECTORY +set -e + + +if [ ${0:0:1} = "/" ]; then + HERE=`dirname $0` +else + CMD=`pwd`/$0 + HERE=`dirname ${CMD}` +fi + + +if [ -z "$MXE_ROOT" ] +then + echo "Please, export MXE_ROOT variable, pointing to MXE environment root (we will use qt, make shure it was built)" + echo "To build mxe, go to https://github.com/mxe/mxe, clone it, and do \"make qt5\" within it. Install dependencies if it says so." + exit 255 +fi + +#qmake command +CMAKE=(${MXE_ROOT}/usr/bin/x86_64-w64-mingw32.static-cmake) +export PATH=${MXE_ROOT}/usr/bin:$PATH +#everything else can be done by default make +MAKE=(make) + +echo "Windows target" +echo "CMAKE=${CMAKE[@]}" +echo "MAKE=${MAKE[@]}" \ No newline at end of file diff --git a/validate.sh b/validate.sh new file mode 100644 index 0000000..327473f --- /dev/null +++ b/validate.sh @@ -0,0 +1,39 @@ +#!/bin/bash +set -e + +if [ ${0:0:1} = "/" ]; then + HERE=`dirname $0` +else + CMD=`pwd`/$0 + HERE=`dirname ${CMD}` +fi + +containsElement () { + local e match="$1" + shift + for e; do [[ "$e" == "$match" ]] && return 0; done + return 1 +} + + +TARGETS=(linux windows android osx) +BUILD_TYPES=(release debug) + +VALIDATE_TARGET() +{ + containsElement "$BUILD_TARGET" "${TARGETS[@]}" || { + echo "Such target not implemented [$BUILD_TARGET]" + echo "Available targets are [${TARGETS[@]}]" + exit 255 + } +} + +VALIDATE_BUILD_TYPE() +{ + containsElement "$BUILD_TYPE" "${BUILD_TYPES[@]}" || { + echo "Unknown build typed [$BUILD_TYPE]" + echo "Available types are [${BUILD_TYPES[@]}]" + exit 255 + } +} + -- GitLab