313 lines
9.8 KiB
Bash
Executable File
313 lines
9.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
PROJECT_BUILD_ARCH=$1
|
|
PROJECT_CMAKE_BUILD_TYPE=$2
|
|
PROJECT_BUILD_CLEAN=$3
|
|
PROJECT_IS_MINGW=$4
|
|
PROJECT_IS_MINGW_UNIX=$5
|
|
DISABLE_CREATE_DIRS=$6
|
|
|
|
CURRENT_DIR=$(dirname "$0")
|
|
CURRENT_DIR=$(realpath ${CURRENT_DIR})
|
|
|
|
SOURCE_DIR=${CURRENT_DIR}/..
|
|
SOURCE_DIR=$(realpath ${SOURCE_DIR})
|
|
|
|
NUM_JOBS=${MY_NUM_JOBS}
|
|
if [[ -z "${NUM_JOBS}" ]]; then
|
|
NUM_JOBS=$(getconf _NPROCESSORS_ONLN 2>/dev/null ||
|
|
getconf NPROCESSORS_ONLN 2>/dev/null || echo 1)
|
|
if [ "${NUM_JOBS}" -gt "4" ]; then
|
|
NUM_JOBS=$(expr ${NUM_JOBS} - 2)
|
|
elif [ "${NUM_JOBS}" -gt "1" ]; then
|
|
NUM_JOBS=$(expr ${NUM_JOBS} - 1)
|
|
fi
|
|
fi
|
|
|
|
. "${CURRENT_DIR}/options.sh"
|
|
|
|
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
|
|
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
|
|
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
|
|
if [ "${PROJECT_LIBRARY}" == "TESTING" ]; then
|
|
export ${ENABLE_NAME}=ON
|
|
else
|
|
export ${ENABLE_NAME}=OFF
|
|
fi
|
|
export ${KEEP_NAME}=0
|
|
done
|
|
|
|
PROJECT_APP_LIST=()
|
|
PROJECT_CMAKE_OPTS=""
|
|
PROJECT_IS_ALPINE=0
|
|
PROJECT_MINGW64_COPY_DEPENDENCIES=()
|
|
PROJECT_MSYS2_PACKAGE_LIST=()
|
|
PROJECT_REQUIRE_ALPINE=OFF
|
|
PROJECT_STATIC_LINK=OFF
|
|
|
|
if [ -f /etc/alpine-release ]; then
|
|
PROJECT_IS_ALPINE=1
|
|
fi
|
|
|
|
if [ "${PROJECT_IS_MINGW}" == "" ]; then
|
|
PROJECT_IS_MINGW=0
|
|
fi
|
|
|
|
if [ "${PROJECT_IS_MINGW_UNIX}" == "" ]; then
|
|
PROJECT_IS_MINGW_UNIX=0
|
|
fi
|
|
|
|
. "${SOURCE_DIR}/config.sh"
|
|
|
|
if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then
|
|
PROJECT_ENABLE_FLAC=ON
|
|
PROJECT_ENABLE_FONTCONFIG=ON
|
|
PROJECT_ENABLE_FREETYPE2=ON
|
|
PROJECT_ENABLE_OGG=ON
|
|
PROJECT_ENABLE_OPENAL=ON
|
|
PROJECT_ENABLE_VORBIS=ON
|
|
PROJECT_STATIC_LINK=OFF
|
|
fi
|
|
|
|
if [ "${PROJECT_ENABLE_CPP_HTTPLIB}" == "ON" ]; then
|
|
PROJECT_ENABLE_CURL=ON
|
|
PROJECT_ENABLE_OPENSSL=ON
|
|
fi
|
|
|
|
if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then
|
|
PROJECT_ENABLE_OPENSSL=ON
|
|
fi
|
|
|
|
if [ "${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}" == "ON" ]; then
|
|
PROJECT_ENABLE_BOOST=ON
|
|
PROJECT_ENABLE_SECP256K1=ON
|
|
fi
|
|
|
|
if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ]; then
|
|
PROJECT_ENABLE_FREETYPE2=ON
|
|
fi
|
|
|
|
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
|
|
PROJECT_ENABLE_CURL=ON
|
|
PROJECT_STATIC_LINK=OFF
|
|
fi
|
|
|
|
if [ "${PROJECT_ENABLE_SPDLOG}" == "ON" ]; then
|
|
PROJECT_ENABLE_FMT=OFF
|
|
fi
|
|
|
|
if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then
|
|
PROJECT_ENABLE_OGG=ON
|
|
fi
|
|
|
|
if [ "${PROJECT_ENABLE_FLAC}" == "ON" ]; then
|
|
PROJECT_ENABLE_OGG=ON
|
|
PROJECT_ENABLE_VORBIS=ON
|
|
fi
|
|
|
|
if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then
|
|
PROJECT_ENABLE_OPENSSL=ON
|
|
fi
|
|
|
|
PROJECT_IS_ARM64=0
|
|
if [ "${PROJECT_BUILD_ARCH}" == "" ]; then
|
|
PROJECT_BUILD_ARCH=x86_64
|
|
elif [ "${PROJECT_BUILD_ARCH}" == "aarch64" ]; then
|
|
PROJECT_IS_ARM64=1
|
|
fi
|
|
|
|
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" != "1" ]; then
|
|
MSYS=winsymlinks:nativestrict
|
|
fi
|
|
|
|
if [ "${PROJECT_CMAKE_BUILD_TYPE}" == "" ]; then
|
|
PROJECT_CMAKE_BUILD_TYPE=RelWithDebInfo
|
|
fi
|
|
|
|
PROJECT_CMAKE_BUILD_TYPE_LOWER=$(echo "${PROJECT_CMAKE_BUILD_TYPE}" | tr '[:upper:]' '[:lower:]')
|
|
if [ "${PROJECT_CMAKE_BUILD_TYPE_LOWER}" == "release" ]; then
|
|
PROJECT_CMAKE_BUILD_TYPE=RelWithDebInfo
|
|
elif [ "${PROJECT_CMAKE_BUILD_TYPE_LOWER}" == "debug" ]; then
|
|
PROJECT_CMAKE_BUILD_TYPE=Debug
|
|
fi
|
|
|
|
if [ "${PROJECT_STATIC_LINK}" == "ON" ]; then
|
|
PROJECT_LINK_TYPE=static
|
|
PROJECT_REQUIRE_ALPINE=ON
|
|
else
|
|
PROJECT_LINK_TYPE=shared
|
|
PROJECT_REQUIRE_ALPINE=OFF
|
|
fi
|
|
|
|
if [ -f "${SOURCE_DIR}/cmake/versions.cmake" ]; then
|
|
VERSIONS=($(sed -e s/\ /=/g -e s/set\(//g -e s/\)//g "${SOURCE_DIR}/cmake/versions.cmake"))
|
|
|
|
PROJECT_MINGW64_DOCKER_BUILD_ARGS=()
|
|
|
|
for VERSION in "${VERSIONS[@]}"; do
|
|
LOOKUP_NAME=$(echo ${VERSION} | sed s/_VERSION.*// | sed s/GTEST/TESTING/g)
|
|
ENABLE_NAME=PROJECT_ENABLE_${LOOKUP_NAME}
|
|
if [ "${!ENABLE_NAME}" != "OFF" ]; then
|
|
PROJECT_MINGW64_DOCKER_BUILD_ARGS+=("--build-arg ${VERSION}")
|
|
fi
|
|
done
|
|
|
|
PROJECT_MINGW64_DOCKER_BUILD_ARGS=${PROJECT_MINGW64_DOCKER_BUILD_ARGS[*]}
|
|
fi
|
|
|
|
PROJECT_BUILD_DIR=${SOURCE_DIR}/build/${PROJECT_CMAKE_BUILD_TYPE_LOWER}/${PROJECT_LINK_TYPE}
|
|
PROJECT_DIST_DIR=${SOURCE_DIR}/dist/${PROJECT_CMAKE_BUILD_TYPE_LOWER}/${PROJECT_LINK_TYPE}
|
|
|
|
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
|
|
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/win32
|
|
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/win32
|
|
else
|
|
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/linux
|
|
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/linux
|
|
fi
|
|
|
|
if [ "${PROJECT_IS_ARM64}" == "1" ]; then
|
|
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/aarch64
|
|
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/aarch64
|
|
else
|
|
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/x86_64
|
|
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/x86_64
|
|
fi
|
|
|
|
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/${PROJECT_APP_NAME}
|
|
|
|
PROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_BUILD_DIR}/deps
|
|
PROJECT_3RD_PARTY_DIR=${SOURCE_DIR}/support/3rd_party
|
|
|
|
if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then
|
|
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
|
|
OPENSSL_ROOT_DIR=/mingw64
|
|
else
|
|
OPENSSL_ROOT_DIR=${PROJECT_EXTERNAL_BUILD_ROOT}
|
|
fi
|
|
fi
|
|
|
|
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
|
|
PROJECT_TOOLCHAIN_FILE_CMAKE=/cmake_toolchain.cmake
|
|
PROJECT_TOOLCHAIN_FILE_MESON=/meson_cross_file.txt
|
|
PROJECT_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=${PROJECT_TOOLCHAIN_FILE_CMAKE} ${PROJECT_CMAKE_OPTS}"
|
|
fi
|
|
|
|
if [ "${PROJECT_STATIC_LINK}" == "ON" ]; then
|
|
PROJECT_BUILD_SHARED_LIBS=OFF
|
|
else
|
|
PROJECT_BUILD_SHARED_LIBS=ON
|
|
fi
|
|
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_3RD_PARTY_DIR=${PROJECT_3RD_PARTY_DIR} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_ARCH=${PROJECT_BUILD_ARCH} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_DIR=${PROJECT_BUILD_DIR} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_CMAKE_BUILD_TYPE=${PROJECT_CMAKE_BUILD_TYPE} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_DIST_DIR=${PROJECT_DIST_DIR} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_EXTERNAL_BUILD_ROOT} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_IS_MINGW_UNIX=${PROJECT_IS_MINGW_UNIX} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_LINK_TYPE=${PROJECT_LINK_TYPE} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_REQUIRE_ALPINE=${PROJECT_REQUIRE_ALPINE} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_STATIC_LINK=${PROJECT_STATIC_LINK} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_TOOLCHAIN_FILE_CMAKE=${PROJECT_TOOLCHAIN_FILE_CMAKE} ${PROJECT_CMAKE_OPTS}"
|
|
PROJECT_CMAKE_OPTS="-DPROJECT_TOOLCHAIN_FILE_MESON=${PROJECT_TOOLCHAIN_FILE_MESON} ${PROJECT_CMAKE_OPTS}"
|
|
|
|
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
|
|
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
|
|
PROJECT_CMAKE_OPTS="${PROJECT_CMAKE_OPTS} -D${ENABLE_NAME}=${!ENABLE_NAME}"
|
|
done
|
|
|
|
PKG_CONFIG_PATH="${PROJECT_EXTERNAL_BUILD_ROOT}/lib/pkgconfig:${PROJECT_EXTERNAL_BUILD_ROOT}/lib64/pkgconfig:${PROJECT_EXTERNAL_BUILD_ROOT}/shared/pkgconfig:${PKG_CONFIG_PATH}"
|
|
|
|
if [ "${DISABLE_CREATE_DIRS}" != "1" ]; then
|
|
mkdir -p "${PROJECT_BUILD_DIR}"
|
|
mkdir -p "${PROJECT_DIST_DIR}"
|
|
fi
|
|
|
|
PATH="${PROJECT_EXTERNAL_BUILD_ROOT}/bin:${PATH}"
|
|
|
|
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
|
|
PROJECT_OS=win32
|
|
else
|
|
PROJECT_OS=linux
|
|
fi
|
|
|
|
export MSYS
|
|
export NUM_JOBS
|
|
export OPENSSL_ROOT_DIR
|
|
export PATH
|
|
export PKG_CONFIG_PATH
|
|
export PROJECT_3RD_PARTY_DIR
|
|
export PROJECT_APP_LIST
|
|
export PROJECT_APP_NAME
|
|
export PROJECT_BUILD_ARCH
|
|
export PROJECT_BUILD_CLEAN
|
|
export PROJECT_BUILD_DIR
|
|
export PROJECT_BUILD_SHARED_LIBS
|
|
export PROJECT_CMAKE_BUILD_TYPE
|
|
export PROJECT_CMAKE_BUILD_TYPE_LOWER
|
|
export PROJECT_CMAKE_OPTS
|
|
export PROJECT_DIST_DIR
|
|
export PROJECT_IS_ALPINE
|
|
export PROJECT_IS_ARM64
|
|
export PROJECT_IS_MINGW
|
|
export PROJECT_IS_MINGW_UNIX
|
|
export PROJECT_LINK_TYPE
|
|
export PROJECT_MINGW64_COPY_DEPENDENCIES
|
|
export PROJECT_MINGW64_DOCKER_BUILD_ARGS
|
|
export PROJECT_MSYS2_PACKAGE_LIST
|
|
export PROJECT_OS
|
|
export PROJECT_PRIVATE_KEY
|
|
export PROJECT_PUBLIC_KEY
|
|
export PROJECT_REQUIRE_ALPINE
|
|
export PROJECT_STATIC_LINK
|
|
export PROJECT_TOOLCHAIN_FILE_CMAKE
|
|
export PROJECT_TOOLCHAIN_FILE_MESON
|
|
export SOURCE_DIR
|
|
|
|
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
|
|
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
|
|
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
|
|
export ${ENABLE_NAME}
|
|
export ${KEEP_NAME}
|
|
done
|
|
|
|
echo "-=[Settings]=-"
|
|
echo " App list: ${PROJECT_APP_LIST[*]}"
|
|
echo " Build arch: ${PROJECT_BUILD_ARCH}"
|
|
echo " Build clean: ${PROJECT_BUILD_CLEAN}"
|
|
echo " Build dir: ${PROJECT_BUILD_DIR}"
|
|
echo " Build shared libraries: ${PROJECT_BUILD_SHARED_LIBS}"
|
|
echo " CMake options: -G\"Unix Makefiles\" ${PROJECT_CMAKE_OPTS}"
|
|
echo " CMake toolchain file: ${PROJECT_TOOLCHAIN_FILE_CMAKE}"
|
|
echo " Cmake Build type: ${PROJECT_CMAKE_BUILD_TYPE}"
|
|
echo " Dist dir: ${PROJECT_DIST_DIR}"
|
|
echo " External build root: ${PROJECT_EXTERNAL_BUILD_ROOT}"
|
|
echo " Is ARM64: ${PROJECT_IS_ARM64}"
|
|
echo " Is Alpine: ${PROJECT_IS_ALPINE}"
|
|
echo " Is MINGW on Unix: ${PROJECT_IS_MINGW_UNIX}"
|
|
echo " Is MINGW: ${PROJECT_IS_MINGW}"
|
|
echo " Job count: ${NUM_JOBS}"
|
|
echo " Link type: ${PROJECT_LINK_TYPE}"
|
|
echo " Meson toolchain file: ${PROJECT_TOOLCHAIN_FILE_MESON}"
|
|
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
|
|
echo " MinGW docker build args: ${PROJECT_MINGW64_DOCKER_BUILD_ARGS}"
|
|
fi
|
|
echo " OPENSSL_ROOT_DIR: ${OPENSSL_ROOT_DIR}"
|
|
echo " PATH: ${PATH}"
|
|
echo " PKG_CONFIG_PATH: ${PKG_CONFIG_PATH}"
|
|
echo " Require Alpine: ${PROJECT_REQUIRE_ALPINE}"
|
|
echo " Static link: ${PROJECT_STATIC_LINK}"
|
|
echo " Third-party dir: ${PROJECT_3RD_PARTY_DIR}"
|
|
echo " Unit testing enabled: ${PROJECT_ENABLE_TESTING}"
|
|
echo "-=[Libraries]=-"
|
|
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
|
|
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
|
|
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
|
|
echo " ${ENABLE_NAME}=${!ENABLE_NAME},${!KEEP_NAME}"
|
|
done
|