move to new build system

This commit is contained in:
2024-06-06 14:17:47 -05:00
parent 88d8bf63f5
commit aee68520b3
563 changed files with 4283 additions and 361439 deletions

8
scripts/cleanup.cmd Normal file
View File

@ -0,0 +1,8 @@
@echo off
set ARG1=%~1
set ARG2=%~2
pushd "%~dp0%"
call mingw64 -no-start ./cleanup.sh "%ARG1%" "x86_64" "%ARG2%" 1 0
popd

148
scripts/cleanup.sh Executable file
View File

@ -0,0 +1,148 @@
#!/bin/bash
CURRENT_DIR=$(dirname "$0")
CURRENT_DIR=$(realpath ${CURRENT_DIR})
SOURCE_DIR=${CURRENT_DIR}/..
SOURCE_DIR=$(realpath ${SOURCE_DIR})
. "${CURRENT_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1>/dev/null 2>&1
if [ "${PROJECT_ENABLE_BOOST}" == "OFF" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/boost_*
fi
if [ "${PROJECT_ENABLE_CLI11}" == "OFF" ] && [ "${PROJECT_KEEP_CLI11}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/CLI11-*
fi
if [ "${PROJECT_ENABLE_CPP_HTTPLIB}" == "OFF" ] && [ "${PROJECT_KEEP_HTTPLIB}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/cpp-httplib-*
fi
if [ "${PROJECT_ENABLE_CURL}" == "OFF" ] && [ "${PROJECT_KEEP_CURL}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/curl-*
fi
if [ "${PROJECT_ENABLE_DTL}" == "OFF" ] && [ "${PROJECT_KEEP_DTL}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/dtl-*
fi
if [ "${PROJECT_ENABLE_FLAC}" == "OFF" ] && [ "${PROJECT_KEEP_FLAC}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/flac-*
fi
if [ "${PROJECT_ENABLE_FMT}" == "OFF" ] && [ "${PROJECT_KEEP_FMT}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/fmt-*
fi
if [ "${PROJECT_ENABLE_FONTCONFIG}" == "OFF" ] && [ "${PROJECT_KEEP_FONTCONFIG}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/fontconfig-*
fi
if [ "${PROJECT_ENABLE_FREETYPE2}" == "OFF" ] && [ "${PROJECT_KEEP_FREETYPE2}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/freetype-*
fi
if [ "${PROJECT_ENABLE_FZF}" == "OFF" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/include/fzf.h
rm -f ${PROJECT_3RD_PARTY_DIR}/src/fzf.c
fi
if [ "${PROJECT_ENABLE_JSON}" == "OFF" ] && [ "${PROJECT_KEEP_JSON}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/json-*
fi
if [ "${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}" == "OFF" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/boost_1_76_*
rm -f ${PROJECT_3RD_PARTY_DIR}/libbitcoin-system-*
fi
if [ "${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}" == "ON" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/boost_1_85_*
fi
if [ "${PROJECT_ENABLE_LIBEVENT}" == "OFF" ] && [ "${PROJECT_KEEP_LIBEVENT}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/libevent-*
fi
if [ "${PROJECT_ENABLE_LIBSODIUM}" == "OFF" ] && [ "${PROJECT_KEEP_LIBSODIUM}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/libsodium-*
rm -f ${PROJECT_3RD_PARTY_DIR}/libsodium_configure.sh
fi
if [ "${PROJECT_ENABLE_NUSPELL}" == "OFF" ] && [ "${PROJECT_KEEP_NUSPELL}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/nuspell-*
fi
if [ "${PROJECT_ENABLE_OGG}" == "OFF" ] && [ "${PROJECT_KEEP_OGG}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/ogg-*
fi
if [ "${PROJECT_ENABLE_OPENAL}" == "OFF" ] && [ "${PROJECT_KEEP_OPENAL}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/openal-*
fi
if [ "${PROJECT_ENABLE_OPENSSL}" == "OFF" ] && [ "${PROJECT_KEEP_OPENSSL}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/openssl-*
fi
if [ "${PROJECT_ENABLE_PUGIXML}" == "OFF" ] && [ "${PROJECT_KEEP_PUGIXML}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/pugixml-*
fi
if [ "${PROJECT_ENABLE_ROCKSDB}" == "OFF" ] && [ "${PROJECT_KEEP_ROCKSDB}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/rocksdb-*
fi
if [ "${PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS}" == "OFF" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/include/platform_folders.hpp
rm -f ${PROJECT_3RD_PARTY_DIR}/src/platform_folders.cpp
fi
if [ "${PROJECT_ENABLE_SECP256K1}" == "OFF" ] && [ "${PROJECT_KEEP_SECP256K1}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/secp256k1-*
fi
if [ "${PROJECT_ENABLE_SFML}" == "OFF" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/SFML-*
rm -f ${PROJECT_3RD_PARTY_DIR}/include/RoundedRectangleShape.hpp
rm -f ${PROJECT_3RD_PARTY_DIR}/include/Text2.hpp
rm -f ${PROJECT_3RD_PARTY_DIR}/src/RoundedRectangleShape.cpp
rm -f ${PROJECT_3RD_PARTY_DIR}/src/Text2.cpp
rm -f ${PROJECT_3RD_PARTY_DIR}/SFML_patch.sh
fi
if [ "${PROJECT_ENABLE_SPDLOG}" == "OFF" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/spdlog-*
fi
if [ "${PROJECT_ENABLE_SQLITE}" == "OFF" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/sqlite-*
fi
if [ "${PROJECT_ENABLE_STDUUID}" == "OFF" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/stduuid-*
fi
if [ "${PROJECT_ENABLE_TESTING}" == "OFF" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/googletest-*
fi
if [ "${PROJECT_ENABLE_TPL}" == "OFF" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/tiny-process-library*
fi
if [ "${PROJECT_ENABLE_VORBIS}" == "OFF" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/vorbis-*
rm -f ${PROJECT_3RD_PARTY_DIR}/vorbis_cmakelists_txt.patch
rm -f ${PROJECT_3RD_PARTY_DIR}/vorbis_patch.sh
fi
if [ "${PROJECT_ENABLE_WINFSP}" == "OFF" ]; then
rm -rf ${PROJECT_3RD_PARTY_DIR}/winfsp-*
fi
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "OFF" ] && [ "${PROJECT_KEEP_WXWIDGETS}" != "1" ]; then
rm -f ${PROJECT_3RD_PARTY_DIR}/wxWidgets-*
fi

133
scripts/copy_mingw64_deps.sh Executable file
View File

@ -0,0 +1,133 @@
#!/bin/bash
CURRENT_DIR=$(dirname "$0")
CURRENT_DIR=$(realpath ${CURRENT_DIR})
PROJECT_MINGW64_COPY_DEPENDENCIES=()
. "${CURRENT_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1>/dev/null 2>&1
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_STATIC_LINK}" == "OFF" ]; then
mkdir -p "${PROJECT_DIST_DIR}"
rm -f ${PROJECT_DIST_DIR}/*.dll
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
/mingw64/bin/libgcc_s_seh-1.dll
/mingw64/bin/libstdc++-6.dll
/mingw64/bin/libwinpthread-1.dll
/mingw64/bin/libzlib1.dll
/mingw64/bin/zlib1.dll
)
if [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libboost*.dll)
fi
if [ "${PROJECT_ENABLE_CLI11}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libcli11*.dll)
fi
if [ "${PROJECT_ENABLE_FLAC}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libFLAC*.dll)
fi
if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
/mingw64/bin/libexpat*.dll
/mingw64/bin/libfontconfig*.dll
/mingw64/bin/libpng*.dll
)
fi
if [ "${PROJECT_ENABLE_FREETYPE2}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libfreetype*.dll)
fi
if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libcurl*.dll)
fi
if [ "${PROJECT_ENABLE_LIBSODIUM}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsodium*.dll)
fi
if [ "${PROJECT_ENABLE_NUSPELL}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libnuspell*.dll)
fi
if [ "${PROJECT_ENABLE_OGG}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libogg*.dll)
fi
if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
/mingw64/bin/libssl*.dll
/mingw64/bin/libcrypt*.dll
)
fi
if [ "${PROJECT_ENABLE_OPENAL}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libopenal*.dll)
fi
if [ "${PROJECT_ENABLE_PUGIXML}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpugi*.dll)
fi
if [ "${PROJECT_ENABLE_ROCKSDB}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/librocksdb*.dll)
fi
if [ "${PROJECT_ENABLE_SECP256K1}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsecp256k1*.dll)
fi
if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsfml*.dll)
fi
if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libspdlog*.dll)
fi
if [ "${PROJECT_ENABLE_TPL}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libtiny-process*.dll)
fi
if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libvorbis*.dll)
fi
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwxm*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/wxm*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/libwxm*.dll)
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/wxm*.dll)
fi
fi
if [ "${PROJECT_ENABLE_SFML}" == "ON" ] || [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/opengl*.dll)
fi
if [ "${PROJECT_ENABLE_WINFSP}" == "ON" ]; then
if [ "${PROJECT_BUILD_ARCH}" == "x86_64" ]; then
WINFSP_DLL_PART=x64
fi
if [ "${WINFSP_DLL_PART}" != "" ]; then
PROJECT_MINGW64_COPY_DEPENDENCIES+=(${PROJECT_3RD_PARTY_DIR}/winfsp-2.0/bin/winfsp-${WINFSP_DLL_PART}.dll)
fi
fi
for PROJECT_DEPENDENCY in "${PROJECT_MINGW64_COPY_DEPENDENCIES[@]}"; do
rsync -av --progress ${PROJECT_DEPENDENCY} "${PROJECT_DIST_DIR}/"
done
rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/bin/*.dll "${PROJECT_DIST_DIR}/"
rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/lib/*.dll "${PROJECT_DIST_DIR}/"
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/lib/gcc_x64_dll/*.dll "${PROJECT_DIST_DIR}/"
fi
fi

View File

@ -1,30 +1,21 @@
#!/bin/bash
pushd "$(dirname "$0")"
CURRENT_DIR=$(pwd)
CURRENT_DIR=$(dirname "$0")
CURRENT_DIR=$(realpath ${CURRENT_DIR})
pushd "${CURRENT_DIR}/.."
. "${CURRENT_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1> /dev/null 2>&1
function create_containers() {
TYPE=$1
BUILD_TYPE=$1
for FILE in ./docker/${TYPE}/*; do
DISTRONAME=$(basename ${FILE})
CONTAINER_NAME=repertory_${DISTRONAME}
TAG_NAME=repertory:${DISTRONAME}
echo Creating Container [${CONTAINER_NAME}]
for FILE in "${SOURCE_DIR}/docker/${BUILD_TYPE}/*"; do
DOCKER_CREATE_ONLY=1
DOCKER_NAME=$(basename ${FILE})
DOCKER_TAG=${PROJECT_APP_NAME}:${DOCKER_NAME}
docker stop ${CONTAINER_NAME}
docker rm ${CONTAINER_NAME}
docker build -t ${TAG_NAME} - < docker/${TYPE}/${DISTRONAME}
docker stop ${CONTAINER_NAME}
docker rm ${CONTAINER_NAME}
. "${CURRENT_DIR}/docker_common.sh"
done
}
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
create_containers aarch64
create_containers 64_bit
popd
popd
create_containers x86_64

49
scripts/docker_common.sh Executable file
View File

@ -0,0 +1,49 @@
#!/bin/bash
if [ "${PROJECT_BUILD_ARCH}" == "aarch64" ]; then
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
fi
if [ "${DOCKER_NAME}" == "mingw64" ]; then
APP_VERSION_BUILD_ARGS=${PROJECT_MINGW64_DOCKER_BUILD_ARGS}
IS_MINGW=1
IS_UNIX=1
else
IS_MINGW=0
IS_UNIX=0
fi
if [ "${DOCKER_CREATE_ONLY}" != "1" ]; then
docker stop ${DOCKER_CONTAINER}
docker rm ${DOCKER_CONTAINER}
fi
pushd "${SOURCE_DIR}/support"
cp -f ${SOURCE_DIR}/docker/${PROJECT_BUILD_ARCH}/${DOCKER_NAME} Dockerfile
docker build ${APP_VERSION_BUILD_ARGS} \
--build-arg NUM_JOBS=${NUM_JOBS} \
-t ${DOCKER_TAG} . || exit 1
rm Dockerfile
popd
if [ "${DOCKER_CREATE_ONLY}" != "1" ]; then
docker run -td \
--env MY_NUM_JOBS=${NUM_JOBS} \
--name ${DOCKER_CONTAINER} \
-u $(id -u):$(id -g) \
-v ${SOURCE_DIR}:${SOURCE_DIR}:rw,z \
-w ${SOURCE_DIR} \
${DOCKER_TAG} || exit 1
if [ "${DOCKER_SHELL}" == "1" ]; then
docker exec -it ${DOCKER_CONTAINER} /bin/bash
else
docker exec \
${DOCKER_CONTAINER} \
/bin/bash -c \
"${SOURCE_DIR}/scripts/make_common.sh \"${PROJECT_CMAKE_BUILD_TYPE}\" \"${PROJECT_BUILD_ARCH}\" \"${PROJECT_BUILD_CLEAN}\" ${IS_MINGW} ${IS_UNIX}" || exit 1
fi
docker stop ${DOCKER_CONTAINER}
docker rm ${DOCKER_CONTAINER}
fi

404
scripts/env.sh Executable file
View File

@ -0,0 +1,404 @@
#!/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
PROJECT_ENABLE_BOOST=OFF
PROJECT_ENABLE_CLI11=OFF
PROJECT_ENABLE_CPP_HTTPLIB=OFF
PROJECT_ENABLE_CURL=OFF
PROJECT_ENABLE_DTL=OFF
PROJECT_ENABLE_FLAC=OFF
PROJECT_ENABLE_FMT=OFF
PROJECT_ENABLE_FONTCONFIG=OFF
PROJECT_ENABLE_FREETYPE2=OFF
PROJECT_ENABLE_FUSE=OFF
PROJECT_ENABLE_FZF=OFF
PROJECT_ENABLE_GTKMM=OFF
PROJECT_ENABLE_JSON=OFF
PROJECT_ENABLE_LIBBITCOIN_SYSTEM=OFF
PROJECT_ENABLE_LIBEVENT=OFF
PROJECT_ENABLE_LIBSODIUM=OFF
PROJECT_ENABLE_NUSPELL=OFF
PROJECT_ENABLE_OGG=OFF
PROJECT_ENABLE_OPENAL=OFF
PROJECT_ENABLE_OPENSSL=OFF
PROJECT_ENABLE_PUGIXML=OFF
PROJECT_ENABLE_ROCKSDB=OFF
PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS=OFF
PROJECT_ENABLE_SECP256K1=OFF
PROJECT_ENABLE_SFML=OFF
PROJECT_ENABLE_SPDLOG=OFF
PROJECT_ENABLE_SQLITE=OFF
PROJECT_ENABLE_STDUUID=OFF
PROJECT_ENABLE_TESTING=OFF
PROJECT_ENABLE_TPL=OFF
PROJECT_ENABLE_VORBIS=OFF
PROJECT_ENABLE_WINFSP=OFF
PROJECT_ENABLE_WXWIDGETS=OFF
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_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_ENABLE_BOOST=${PROJECT_ENABLE_BOOST} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_CLI11=${PROJECT_ENABLE_CLI11} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_CPP_HTTPLIB=${PROJECT_ENABLE_CPP_HTTPLIB} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_CURL=${PROJECT_ENABLE_CURL} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_DTL=${PROJECT_ENABLE_DTL} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_FLAC=${PROJECT_ENABLE_FLAC} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_FMT=${PROJECT_ENABLE_FMT} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_FONTCONFIG=${PROJECT_ENABLE_FONTCONFIG} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_FREETYPE2=${PROJECT_ENABLE_FREETYPE2} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_FUSE=${PROJECT_ENABLE_FUSE} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_FZF=${PROJECT_ENABLE_FZF} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_GTKMM=${PROJECT_ENABLE_GTKMM} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_JSON=${PROJECT_ENABLE_JSON} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_LIBBITCOIN_SYSTEM=${PROJECT_ENABLE_LIBBITCOIN_SYSTEM} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_LIBEVENT=${PROJECT_ENABLE_LIBEVENT} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_LIBSODIUM=${PROJECT_ENABLE_LIBSODIUM} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_NUSPELL=${PROJECT_ENABLE_NUSPELL} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_OGG=${PROJECT_ENABLE_OGG} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_OPENAL=${PROJECT_ENABLE_OPENAL} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_OPENSSL=${PROJECT_ENABLE_OPENSSL} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_PUGIXML=${PROJECT_ENABLE_PUGIXML} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_ROCKSDB=${PROJECT_ENABLE_ROCKSDB} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_SAGO_PLATFORM_FOLDERS=${PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_SECP256K1=${PROJECT_ENABLE_SECP256K1} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_SFML=${PROJECT_ENABLE_SFML} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_SPDLOG=${PROJECT_ENABLE_SPDLOG} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_SQLITE=${PROJECT_ENABLE_SQLITE} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_STDUUID=${PROJECT_ENABLE_STDUUID} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_TESTING=${PROJECT_ENABLE_TESTING} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_TPL=${PROJECT_ENABLE_TPL} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_VORBIS=${PROJECT_ENABLE_VORBIS} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_WINFSP=${PROJECT_ENABLE_WINFSP} ${PROJECT_CMAKE_OPTS}"
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_WXWIDGETS=${PROJECT_ENABLE_WXWIDGETS} ${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}"
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}"
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_ENABLE_BOOST
export PROJECT_ENABLE_CLI11
export PROJECT_ENABLE_CPP_HTTPLIB
export PROJECT_ENABLE_CURL
export PROJECT_ENABLE_DTL
export PROJECT_ENABLE_FLAC
export PROJECT_ENABLE_FMT
export PROJECT_ENABLE_FONTCONFIG
export PROJECT_ENABLE_FREETYPE2
export PROJECT_ENABLE_FUSE
export PROJECT_ENABLE_FUSEOFF
export PROJECT_ENABLE_FZF
export PROJECT_ENABLE_GTKMM
export PROJECT_ENABLE_JSON
export PROJECT_ENABLE_LIBBITCOIN_SYSTEM
export PROJECT_ENABLE_LIBEVENT
export PROJECT_ENABLE_LIBSODIUM
export PROJECT_ENABLE_NUSPELL
export PROJECT_ENABLE_OGG
export PROJECT_ENABLE_OPENAL
export PROJECT_ENABLE_OPENSSL
export PROJECT_ENABLE_PUGIXML
export PROJECT_ENABLE_ROCKSDB
export PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS
export PROJECT_ENABLE_SECP256K1
export PROJECT_ENABLE_SFML
export PROJECT_ENABLE_SPDLOG
export PROJECT_ENABLE_SQLITE
export PROJECT_ENABLE_STDUUID
export PROJECT_ENABLE_TESTING
export PROJECT_ENABLE_TPL
export PROJECT_ENABLE_VORBIS
export PROJECT_ENABLE_WINFSP
export PROJECT_ENABLE_WXWIDGETS
export PROJECT_EXTERNAL_BUILD_ROOT
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_REQUIRE_ALPINE
export PROJECT_STATIC_LINK
export PROJECT_TOOLCHAIN_FILE_CMAKE
export PROJECT_TOOLCHAIN_FILE_MESON
export SOURCE_DIR
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 " Cmake Build type: ${PROJECT_CMAKE_BUILD_TYPE}"
echo " CMake options: -G\"Unix Makefiles\" ${PROJECT_CMAKE_OPTS}"
echo " CMake toolchain file: ${PROJECT_TOOLCHAIN_FILE_CMAKE}"
echo " Dist dir: ${PROJECT_DIST_DIR}"
echo " External build root: ${PROJECT_EXTERNAL_BUILD_ROOT}"
echo " Is Alpine: ${PROJECT_IS_ALPINE}"
echo " Is ARM64: ${PROJECT_IS_ARM64}"
echo " Is MINGW: ${PROJECT_IS_MINGW}"
echo " Is MINGW on Unix: ${PROJECT_IS_MINGW_UNIX}"
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]=-"
echo " Build shared libraries: ${PROJECT_BUILD_SHARED_LIBS}"
echo " Enable boost: ${PROJECT_ENABLE_BOOST}"
echo " Enable CL11: ${PROJECT_ENABLE_CLI11}"
echo " Enable cpp-httplib: ${PROJECT_ENABLE_CPP_HTTPLIB}"
echo " Enable curl: ${PROJECT_ENABLE_CURL}"
echo " Enable DTL: ${PROJECT_ENABLE_DTL}"
echo " Enable FLAC: ${PROJECT_ENABLE_FLAC}"
echo " Enable fmt: ${PROJECT_ENABLE_FMT}"
echo " Enable fontconfig: ${PROJECT_ENABLE_FONTCONFIG}"
echo " Enable freetype2: ${PROJECT_ENABLE_FREETYPE2}"
echo " Enable FUSE: ${PROJECT_ENABLE_FUSE}"
echo " Enable fzf: ${PROJECT_ENABLE_FZF}"
echo " Enable gtkmm: ${PROJECT_ENABLE_GTKMM}"
echo " Enable JSON for Modern C++: ${PROJECT_ENABLE_JSON}"
echo " Enable libbitcoin-system: ${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}"
echo " Enable libevent: ${PROJECT_ENABLE_LIBEVENT}"
echo " Enable libsodium: ${PROJECT_ENABLE_LIBSODIUM}"
echo " Enable nuspell: ${PROJECT_ENABLE_NUSPELL}"
echo " Enable OGG: ${PROJECT_ENABLE_OGG}"
echo " Enable OpenAL: ${PROJECT_ENABLE_OPENAL}"
echo " Enable OpenSSL: ${PROJECT_ENABLE_OPENSSL}"
echo "Enable Sago Platform Folders: ${PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS}"
echo " Enable PugiXML: ${PROJECT_ENABLE_PUGIXML}"
echo " Enable RocksDB: ${PROJECT_ENABLE_ROCKSDB}"
echo " Enable secp256k1: ${PROJECT_ENABLE_SECP256K1}"
echo " Enable SFML: ${PROJECT_ENABLE_SFML}"
echo " Enable spdlog: ${PROJECT_ENABLE_SPDLOG}"
echo " Enable SQLite: ${PROJECT_ENABLE_SQLITE}"
echo " Enable stduuid: ${PROJECT_ENABLE_STDUUID}"
echo " Enable tiny process library: ${PROJECT_ENABLE_TPL}"
echo " Enable Vorbis: ${PROJECT_ENABLE_VORBIS}"
echo " Enable WinFSP: ${PROJECT_ENABLE_WINFSP}"
echo " Enable wxWidgets: ${PROJECT_ENABLE_WXWIDGETS}"

9
scripts/info.cmd Normal file
View File

@ -0,0 +1,9 @@
@echo off
set ARG1=%~1
set ARG2=%~2
pushd "%~dp0%"
call mingw64 -no-start ./info.sh "%ARG1%" "x86_64" "%ARG2%" 1 0
popd

9
scripts/info.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
CURRENT_DIR=$(dirname "$0")
CURRENT_DIR=$(realpath ${CURRENT_DIR})
SOURCE_DIR=${CURRENT_DIR}/..
SOURCE_DIR=$(realpath ${SOURCE_DIR})
. "${CURRENT_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1

View File

@ -1,79 +1,47 @@
#!/bin/bash
BUILD_TYPE=$1
BUILD_CLEAN=$2
IS_MINGW=$3
CURRENT_DIR=$(dirname "$0")
CURRENT_DIR=$(realpath ${CURRENT_DIR})
if [ "${BUILD_TYPE}" == "" ]; then
BUILD_TYPE=Release
. "${CURRENT_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5"
mkdir -p "${PROJECT_BUILD_DIR}/build"
if [ -f "${SOURCE_DIR}/pre_build.sh" ]; then
"${SOURCE_DIR}/pre_build.sh"
fi
if [ "${IS_MINGW}" == "1" ]; then
BUILD_ROOT=build2
else
BUILD_ROOT=build
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
APP_BINARY_EXT=.exe
fi
BUILD_FOLDER=$(echo "${BUILD_TYPE}" | tr '[:upper:]' '[:lower:]')
if [ "${BUILD_FOLDER}" == "release" ]; then
BUILD_TYPE=Release
fi
pushd "${PROJECT_BUILD_DIR}"
cmake "${SOURCE_DIR}" -G"Unix Makefiles" ${PROJECT_CMAKE_OPTS} || exit 1
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 "2" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 2)
elif [ "${NUM_JOBS}" -gt "1" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 1)
fi
fi
echo "Job count: ${NUM_JOBS}"
pushd "$(dirname "$0")"
mkdir -p ../${BUILD_ROOT}/${BUILD_FOLDER}
pushd ../${BUILD_ROOT}/${BUILD_FOLDER}
if [ "${IS_MINGW}" == "1" ]; then
TOOLCHAIN=$(realpath /cmake_toolchain.cmake)
CMAKE_ADDITIONAL_OPTS=-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN}
fi
if [ "${IS_MINGW}" == "1" ]; then
EXE_EXT=.exe
fi
cmake ../.. ${CMAKE_ADDITIONAL_OPTS} \
-G"Unix Makefiles" \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DREPERTORY_ENABLE_S3=ON \
-DREPERTORY_ENABLE_S3_TESTING=ON || exit 1
pushd ..
ln -sf ${BUILD_FOLDER}/compile_commands.json .
ln -sf ${BUILD_FOLDER}/repertory${EXE_EXT} .
ln -sf ${BUILD_FOLDER}/unittests${EXE_EXT} .
if [ "${IS_MINGW}" == "1" ]; then
ln -sf ${BUILD_FOLDER}/winfsp-x64.dll .
fi
popd
if [ "${BUILD_CLEAN}" == "clean" ]; then
if [ "${PROJECT_BUILD_CLEAN}" == "clean" ]; then
make clean
pushd build
make clean
popd
fi
make -j${NUM_JOBS} || exit 1
pushd build
make -j${NUM_JOBS} || exit 1
popd
popd
pushd ../${BUILD_ROOT}
ln -sf ${BUILD_FOLDER}/compile_commands.json .
ln -sf ${BUILD_FOLDER}/repertory${EXE_EXT} .
ln -sf ${BUILD_FOLDER}/unittests${EXE_EXT} .
if [ "${IS_MINGW}" == "1" ]; then
ln -sf ${BUILD_FOLDER}/winfsp-x64.dll .
if [ "${PROJECT_IS_MINGW}" != "1" ] && [ "${PROJECT_REQUIRE_ALPINE}" == "ON" ]; then
rsync -av --progress /usr/share/icu/74.1/ "${PROJECT_DIST_DIR}/icu/"
fi
popd
ln -sf ../3rd_party/cacert.pem ../${BUILD_ROOT}/cacert.pem
popd
for APP in ${PROJECT_APP_LIST[@]}; do
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/"
done
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
. "${CURRENT_DIR}/copy_mingw64_deps.sh" "$1" "$2" "$3" "$4" "$5"
fi
ln -sf "${PROJECT_BUILD_DIR}/build/compile_commands.json" "${SOURCE_DIR}/compile_commands.json"

View File

@ -1,127 +0,0 @@
#!/bin/bash
PLATFORM_NAME=$1
SIGNING_FOLDER=$2
BINARY_FOLDER=$3
SOURCE_FOLDER=$4
OUTPUT_FOLDER=$5
ARM64=$6
LINUX_PLATFORM=alpine
exit_script() {
echo "$1"
cd "${CURRENT_DIR}"
exit 1
}
if [ -z "${PLATFORM_NAME}" ]; then
exit_script "'PLATFORM_NAME' is not set (arg1)"
fi
if [ -z "${SIGNING_FOLDER}" ]; then
exit_script "'SIGNING_FOLDER' is not set (arg2)"
fi
if [ -z "${BINARY_FOLDER}" ]; then
exit_script "'BINARY_FOLDER' is not set (arg3)"
fi
if [ -z "${SOURCE_FOLDER}" ]; then
exit_script "'SOURCE_FOLDER' is not set (arg4)"
fi
if [ -z "${OUTPUT_FOLDER}" ]; then
exit_script "'OUTPUT_FOLDER' is not set (arg5)"
fi
if [ "${PLATFORM_NAME}" == "darwin" ]; then
SHA256_EXEC="shasum -a 256 -b"
else
SHA256_EXEC="sha256sum -b"
fi
pushd "${SOURCE_FOLDER}"
BRANCH=$(git branch --show-current)
RELEASE=$(grep set\(REPERTORY_RELEASE_ITER ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
if [ "${BRANCH}" == "master" ] || [ "${BRANCH}" == "alpha" ] || [ "${BRANCH}" == "beta" ] || [ "${BRANCH}" == "rc" ]; then
OUTPUT_FOLDER=${OUTPUT_FOLDER}/${RELEASE}
else
OUTPUT_FOLDER=${OUTPUT_FOLDER}/nightly
fi
GIT_REV=$(git rev-parse --short HEAD)
REPERTORY_VERSION=$(grep set\(REPERTORY_MAJOR ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
REPERTORY_VERSION=${REPERTORY_VERSION}.$(grep set\(REPERTORY_MINOR ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
REPERTORY_VERSION=${REPERTORY_VERSION}.$(grep set\(REPERTORY_REV ./CMakeLists.txt | sed s/\)//g | awk '{print $2}')
REPERTORY_VERSION=${REPERTORY_VERSION}-${RELEASE}
popd
REPERTORY_BINARY=repertory
if [ "${ARM64}" == "1" ]; then
if [ "${PLATFORM_NAME}" == "${LINUX_PLATFORM}" ]; then
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_linux_arm64.zip
else
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_${PLATFORM_NAME}_arm64.zip
fi
elif [ "${PLATFORM_NAME}" == "${LINUX_PLATFORM}" ]; then
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_linux_amd64.zip
elif [ "${PLATFORM_NAME}" == "mingw64" ]; then
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_windows_amd64.zip
REPERTORY_BINARY=${REPERTORY_BINARY}.exe
else
ZIP_FILE_NAME=repertory_${REPERTORY_VERSION}_${GIT_REV}_${PLATFORM_NAME}_amd64.zip
fi
ZIP_FILE_PATH=./${ZIP_FILE_NAME}
create_hash_and_sig() {
${SHA256_EXEC} ./${1} > ${1}.sha256 || exit_script "SHA-256 failed for $1"
openssl dgst -sha256 -sign "${SIGNING_FOLDER}/blockstorage_dev_private.pem" -out ${1}.sig $1 || exit_script "Create signature failed for $1"
openssl dgst -sha256 -verify "${SIGNING_FOLDER}/blockstorage_dev_public.pem" -signature ${1}.sig $1 || exit_script "Verify signature failed for $1"
}
clean_directory() {
rm -f "${ZIP_FILE_PATH}"
rm -f "${ZIP_FILE_PATH}.sha256"
rm -f "${ZIP_FILE_PATH}.sig"
rm -f "cacert.pem.sha256"
rm -f "cacert.pem.sig"
rm -f "${REPERTORY_BINARY}.sha256"
rm -f "${REPERTORY_BINARY}.sig"
if [ "${PLATFORM_NAME}" == "mingw64" ]; then
rm -f "winfsp-x64.dll.sha256"
rm -f "winfsp-x64.dll.sig"
fi
}
pushd "${BINARY_FOLDER}"
clean_directory
strip ./${REPERTORY_BINARY}
create_hash_and_sig ${REPERTORY_BINARY}
create_hash_and_sig cacert.pem
if [ "${PLATFORM_NAME}" == "mingw64" ]; then
create_hash_and_sig winfsp-x64.dll
fi
if [ "${PLATFORM_NAME}" == "mingw64" ]; then
zip "${ZIP_FILE_PATH}" \
${REPERTORY_BINARY} ${REPERTORY_BINARY}.sha256 ${REPERTORY_BINARY}.sig \
winfsp-x64.dll winfsp-x64.dll.sha256 winfsp-x64.dll.sig \
cacert.pem cacert.pem.sha256 cacert.pem.sig || exit_script "Create zip failed"
else
zip "${ZIP_FILE_PATH}" \
${REPERTORY_BINARY} ${REPERTORY_BINARY}.sha256 ${REPERTORY_BINARY}.sig \
cacert.pem cacert.pem.sha256 cacert.pem.sig || exit_script "Create zip failed"
fi
create_hash_and_sig ${ZIP_FILE_NAME}
cp -f "${ZIP_FILE_PATH}" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME} failed"
cp -f "${ZIP_FILE_PATH}.sha256" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME}.sha256 failed"
cp -f "${ZIP_FILE_PATH}.sig" "${OUTPUT_FOLDER}" || exit_script "Copy ${ZIP_FILE_NAME}.sig failed"
clean_directory
popd

View File

@ -1,26 +1,16 @@
#!/bin/bash
BUILD_TYPE=$1
BUILD_CLEAN=$2
BUILD_ARCH=$3
CURRENT_DIR=$(dirname "$0")
CURRENT_DIR=$(realpath ${CURRENT_DIR})
SOURCE_DIR=$(dirname "$0")/..
SOURCE_DIR=$(realpath ${SOURCE_DIR})
. "${CURRENT_DIR}/env.sh" "$1" "$2" "$3" 0 0
NAME=alpine
if [ -z "${BUILD_ARCH}" ]; then
BUILD_ARCH=64_bit
if [ "${PROJECT_REQUIRE_ALPINE}" == "ON" ]; then
DOCKER_NAME=alpine
DOCKER_CONTAINER=${PROJECT_APP_NAME}_${DOCKER_NAME}_${PROJECT_BUILD_ARCH}
DOCKER_TAG=${PROJECT_APP_NAME}:${DOCKER_NAME}
. "${CURRENT_DIR}/docker_common.sh" || exit 1
else
"${SOURCE_DIR}/scripts/make_common.sh" "${PROJECT_CMAKE_BUILD_TYPE}" "${PROJECT_BUILD_ARCH}" "${PROJECT_BUILD_CLEAN}" 0 0 || exit 1
fi
if [ -z "${BUILD_TYPE}" ]; then
BUILD_TYPE=Release
fi
ln -sf ${SOURCE_DIR}/build/compile_commands.json ${SOURCE_DIR}/compile_commands.json
docker stop repertory_${NAME}
docker rm repertory_${NAME}
docker build -t repertory:${NAME} - < ${SOURCE_DIR}/docker/${BUILD_ARCH}/${NAME} &&
docker run -td -u $(id -u):$(id -g) --device /dev/fuse --cap-add SYS_ADMIN --name repertory_${NAME} --env MY_NUM_JOBS=${MY_NUM_JOBS} -w ${SOURCE_DIR} -v ${SOURCE_DIR}:${SOURCE_DIR}:rw,z repertory:${NAME} &&
docker exec repertory_${NAME} /bin/bash -c "${SOURCE_DIR}/scripts/make_common.sh ${BUILD_TYPE} ${BUILD_CLEAN}"
docker stop repertory_${NAME}
docker rm repertory_${NAME}

10
scripts/make_win32.cmd Normal file
View File

@ -0,0 +1,10 @@
@echo off
set ARG1=%~1
set ARG2=%~2
pushd "%~dp0%"
call setup_msys2.cmd "%ARG1%" "%ARG2%"
call mingw64 -no-start ./make_common.sh "%ARG1%" "x86_64" "%ARG2%" 1 0 || exit 1
popd

View File

@ -1,28 +1,12 @@
#!/bin/bash
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 "2" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 2)
elif [ "${NUM_JOBS}" -gt "1" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 1)
fi
fi
CURRENT_DIR=$(dirname "$0")
CURRENT_DIR=$(realpath ${CURRENT_DIR})
BUILD_TYPE=$1
BUILD_CLEAN=$2
. "${CURRENT_DIR}/env.sh" "$1" "$2" "$3" 1 1
SOURCE_DIR=$(dirname "$0")/..
SOURCE_DIR=$(realpath ${SOURCE_DIR})
DOCKER_NAME=mingw64
DOCKER_CONTAINER=${PROJECT_APP_NAME}_${DOCKER_NAME}
DOCKER_TAG=${PROJECT_APP_NAME}:${DOCKER_NAME}
NAME=mingw64
BUILD_ARCH=64_bit
docker stop repertory_${NAME}
docker rm repertory_${NAME}
docker build --build-arg NUM_JOBS=${MY_NUM_JOBS} -t repertory:${NAME} - < ${SOURCE_DIR}/docker/${BUILD_ARCH}/${NAME} &&
docker run -td -u $(id -u):$(id -g) --name repertory_${NAME} -w ${SOURCE_DIR} -v ${SOURCE_DIR}:${SOURCE_DIR}:rw,z repertory:${NAME} &&
docker exec repertory_${NAME} /bin/bash -c "${SOURCE_DIR}/scripts/make_common.sh ${BUILD_TYPE} \"${BUILD_CLEAN}\" 1"
docker stop repertory_${NAME}
docker rm repertory_${NAME}
. "${CURRENT_DIR}/docker_common.sh" || exit 1

View File

@ -1,40 +1,14 @@
#!/bin/bash
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 "2" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 2)
elif [ "${NUM_JOBS}" -gt "1" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 1)
fi
fi
CURRENT_DIR=$(dirname "$0")
CURRENT_DIR=$(realpath ${CURRENT_DIR})
pushd "$(dirname "$0")"
CURRENT_DIR=$(pwd)
DOCKER_NAME=$1
pushd "${CURRENT_DIR}/.."
NAME=$1
TYPE=$2
if [ -z "$NAME" ]; then
echo "Name not set"
else
if [ -z "${TYPE}" ]; then
TYPE=64_bit
fi
. "${CURRENT_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1>/dev/null 2>&1
TAG=repertory_shell
CONTAINER=${TAG}_${NAME}
DOCKER_CONTAINER=${PROJECT_APP_NAME}_${DOCKER_NAME}_${PROJECT_BUILD_ARCH}_shell
DOCKER_TAG=${PROJECT_APP_NAME}:${DOCKER_NAME}
DOCKER_SHELL=1
docker stop ${CONTAINER}
docker rm ${CONTAINER}
docker build --build-arg NUM_JOBS=$NUM_JOBS -t ${TAG}:${NAME} - < docker/${TYPE}/${NAME} &&
docker run -itd --device /dev/fuse --cap-add SYS_ADMIN --name ${CONTAINER} -v $(pwd):/mnt ${TAG}:${NAME} &&
# docker run -itd --device /dev/fuse --cap-add SYS_ADMIN --name ${CONTAINER} ${TAG}:${NAME} &&
docker exec -it ${CONTAINER} /bin/bash
docker stop ${CONTAINER}
docker rm ${CONTAINER}
docker system prune -f
fi
popd
popd
. "${CURRENT_DIR}/docker_common.sh" || exit 1

View File

@ -1,6 +1,9 @@
@echo off
set ARG1=%~1
set ARG2=%~2
pushd "%~dp0%"
call mingw64 -no-start ./setup_msys2.sh
call mingw64 -no-start ./setup_msys2.sh
call mingw64 -no-start ./setup_msys2.sh "%ARG1%" "x86_64" "%ARG2%" 1 0
call mingw64 -no-start ./setup_msys2.sh "%ARG1%" "x86_64" "%ARG2%" 1 0
popd

View File

@ -1,26 +1,40 @@
#!/bin/bash
CURRENT_DIR=$(dirname "$0")
CURRENT_DIR=$(realpath ${CURRENT_DIR})
PROJECT_MSYS2_PACKAGE_LIST=()
. "${CURRENT_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1> /dev/null 2>&1
PROJECT_MSYS2_PACKAGE_LIST+=(
mingw64/mingw-w64-x86_64-autotools
mingw64/mingw-w64-x86_64-clang-tools-extra
mingw64/mingw-w64-x86_64-cmake
mingw64/mingw-w64-x86_64-curl
mingw64/mingw-w64-x86_64-diffutils
mingw64/mingw-w64-x86_64-gcc
mingw64/mingw-w64-x86_64-gdb
mingw64/mingw-w64-x86_64-icu
mingw64/mingw-w64-x86_64-make
mingw64/mingw-w64-x86_64-mesa
mingw64/mingw-w64-x86_64-meson
mingw64/mingw-w64-x86_64-meson-python
mingw64/mingw-w64-x86_64-ninja
mingw64/mingw-w64-x86_64-python
mingw64/mingw-w64-x86_64-python-mako
mingw64/mingw-w64-x86_64-toolchain
mingw64/mingw-w64-x86_64-wget
mingw64/mingw-w64-x86_64-zlib
msys/bison
msys/flex
msys/git
msys/patch
msys/rsync
make
)
pacman -Sqyuu --noconfirm &&
pacman -S --noconfirm --needed --disable-download-timeout msys2-keyring &&
pacman -S --noconfirm --needed --disable-download-timeout \
mingw64/mingw-w64-x86_64-boost \
mingw64/mingw-w64-x86_64-clang-tools-extra \
mingw64/mingw-w64-x86_64-cmake \
mingw64/mingw-w64-x86_64-curl \
mingw64/mingw-w64-x86_64-fmt \
mingw64/mingw-w64-x86_64-gcc \
mingw64/mingw-w64-x86_64-gdb \
mingw64/mingw-w64-x86_64-gtest \
mingw64/mingw-w64-x86_64-gtkmm3 \
mingw64/mingw-w64-x86_64-libsodium \
mingw64/mingw-w64-x86_64-make \
mingw64/mingw-w64-x86_64-openssl \
mingw64/mingw-w64-x86_64-sfml \
mingw64/mingw-w64-x86_64-spdlog \
mingw64/mingw-w64-x86_64-sqlite3 \
mingw64/mingw-w64-x86_64-toolchain \
mingw64/mingw-w64-x86_64-vlc \
mingw64/mingw-w64-x86_64-wxwidgets3.2-msw \
mingw64/mingw-w64-x86_64-zlib \
msys/git \
make
${PROJECT_MSYS2_PACKAGE_LIST[@]}