diff --git a/platforms/android/arm64-v8a/build.sh b/platforms/android/arm64-v8a/build.sh new file mode 100755 index 0000000..4dea8cc --- /dev/null +++ b/platforms/android/arm64-v8a/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +./platforms/build-common.sh android arm64-v8a diff --git a/platforms/android/arm64-v8a/external.sh b/platforms/android/arm64-v8a/external.sh index 2047256..bcfbdc8 100755 --- a/platforms/android/arm64-v8a/external.sh +++ b/platforms/android/arm64-v8a/external.sh @@ -6,9 +6,12 @@ source ./platforms/config.sh echo "Building libraries..." echo " LIBZEDMD_SHA: ${LIBZEDMD_SHA}" +print_dependency_source LIBZEDMD "${LIBZEDMD_SHA}" LIBZEDMD_SOURCE_DIR echo " LIBSERUM_SHA: ${LIBSERUM_SHA}" +print_dependency_source LIBSERUM "${LIBSERUM_SHA}" LIBSERUM_SOURCE_DIR echo " LIBPUPDMD_SHA: ${LIBPUPDMD_SHA}" echo " LIBVNI_SHA: ${LIBVNI_SHA}" +print_dependency_source LIBVNI "${LIBVNI_SHA}" LIBVNI_SOURCE_DIR echo "" if [[ $(uname) == "Linux" ]]; then @@ -19,17 +22,20 @@ else NUM_PROCS=1 fi + rm -rf external -mkdir external +mkdir -p \ + external \ + third-party/include \ + third-party/build-libs/android/arm64-v8a \ + third-party/runtime-libs/android/arm64-v8a cd external # # build libzedmd and copy to external # -curl -sL https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz -o libzedmd-${LIBZEDMD_SHA}.tar.gz -tar xzf libzedmd-${LIBZEDMD_SHA}.tar.gz -mv libzedmd-${LIBZEDMD_SHA} libzedmd +prepare_dependency_source libzedmd "${LIBZEDMD_SHA}" "https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz" tar LIBZEDMD_SOURCE_DIR cd libzedmd BUILD_TYPE=${BUILD_TYPE} platforms/android/arm64-v8a/external.sh cmake \ @@ -40,12 +46,11 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/ZeDMD.h ../../third-party/include/ -cp -r third-party/include/komihash ../../third-party/include/ -cp -r third-party/include/sockpp ../../third-party/include/ -cp third-party/include/FrameUtil.h ../../third-party/include/ -cp third-party/runtime-libs/android/arm64-v8a/libsockpp.so ../../third-party/runtime-libs/android/arm64-v8a/ -cp build/libzedmd.so ../../third-party/runtime-libs/android/arm64-v8a/ +cp src/ZeDMD.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/komihash ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/sockpp ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/runtime-libs/android/arm64-v8a/libsockpp.so ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/android/arm64-v8a/ +cp build/libzedmd.so ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/android/arm64-v8a/ cp -r test ../../ cd .. @@ -53,10 +58,11 @@ cd .. # build libserum and copy to external # -curl -sL https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz -o libserum-${LIBSERUM_SHA}.tar.gz -tar xzf libserum-${LIBSERUM_SHA}.tar.gz -mv libserum-${LIBSERUM_SHA} libserum +prepare_dependency_source libserum "${LIBSERUM_SHA}" "https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz" tar LIBSERUM_SOURCE_DIR cd libserum +# libserum consumes libframeutil's FrameUtil.h and its CMake refuses to +# configure without it, so run its own dependency fetch first. +./platforms/android/arm64-v8a/external.sh cmake \ -DPLATFORM=android \ -DARCH=arm64-v8a \ @@ -65,13 +71,18 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp -r third-party/include/lz4 ../../third-party/include/ -cp src/LZ4Stream.h ../../third-party/include/ -cp src/SceneGenerator.h ../../third-party/include/ -cp src/serum.h ../../third-party/include/ -cp src/TimeUtils.h ../../third-party/include/ -cp src/serum-decode.h ../../third-party/include/ -cp build/libserum.so ../../third-party/runtime-libs/android/arm64-v8a/ +cp -r third-party/include/lz4 ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/LZ4Stream.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/SceneGenerator.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/TimeUtils.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum-decode.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +# FrameUtil.h comes from libserum, not libzedmd: libserum pins the +# libframeutil revision whose ScalingAlgorithm values it persists in the +# cROMc header and reports through Serum_GetScalingAlgorithm(), so this +# is the copy libdmdutil has to agree with. +cp third-party/include/FrameUtil.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libserum.so ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/android/arm64-v8a/ cd .. # @@ -89,17 +100,15 @@ cmake -DPLATFORM=android \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/pupdmd.h ../../third-party/include/ -cp build/libpupdmd.so ../../third-party/runtime-libs/android/arm64-v8a/ +cp src/pupdmd.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libpupdmd.so ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/android/arm64-v8a/ cd .. # # build libvni and copy to external # -curl -sL https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz -o libvni-${LIBVNI_SHA}.tar.gz -tar xzf libvni-${LIBVNI_SHA}.tar.gz -mv libvni-${LIBVNI_SHA} libvni +prepare_dependency_source libvni "${LIBVNI_SHA}" "https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz" tar LIBVNI_SOURCE_DIR cd libvni platforms/android/arm64-v8a/external.sh cmake \ @@ -110,6 +119,6 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/vni.h ../../third-party/include/ -cp build/libvni.so ../../third-party/runtime-libs/android/arm64-v8a/ +cp src/vni.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libvni.so ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/android/arm64-v8a/ cd .. diff --git a/platforms/build-common.sh b/platforms/build-common.sh new file mode 100755 index 0000000..7276eeb --- /dev/null +++ b/platforms/build-common.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e + +if [ "$#" -lt 2 ]; then + echo "Usage: $0 [extra-cmake-args...]" + exit 1 +fi + +PLATFORM_NAME="$1" +ARCH_NAME="$2" +shift 2 + +if [ -z "${BUILD_TYPE}" ]; then + BUILD_TYPE="Release" +fi + +EXTERNAL_SCRIPT="./platforms/${PLATFORM_NAME}/${ARCH_NAME}/external.sh" +if [ -f "${EXTERNAL_SCRIPT}" ]; then + BUILD_TYPE=${BUILD_TYPE} "${EXTERNAL_SCRIPT}" +fi + +if [ "${PLATFORM_NAME}" = "win" ]; then + if [ "${ARCH_NAME}" = "x86" ]; then + cmake -G "Visual Studio 17 2022" -A Win32 -DPLATFORM=${PLATFORM_NAME} -DARCH=${ARCH_NAME} "$@" -B build + else + cmake -G "Visual Studio 17 2022" -DPLATFORM=${PLATFORM_NAME} -DARCH=${ARCH_NAME} "$@" -B build + fi + cmake --build build --config ${BUILD_TYPE} +elif [ "${PLATFORM_NAME}" = "win-mingw" ]; then + cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DPLATFORM=${PLATFORM_NAME} -DARCH=${ARCH_NAME} "$@" -B build + cmake --build build -- -j$(nproc) +else + cmake -DPLATFORM=${PLATFORM_NAME} -DARCH=${ARCH_NAME} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} "$@" -B build + cmake --build build +fi diff --git a/platforms/config.sh b/platforms/config.sh index 98bba73..790628d 100755 --- a/platforms/config.sh +++ b/platforms/config.sh @@ -2,12 +2,64 @@ set -e -LIBZEDMD_SHA=e8466d252a71539a50bc8ac6271a00fd2d48884c -LIBSERUM_SHA=5046e20351e7d4359e976b1edcdce34937c9289f +LIBZEDMD_SHA=50da457a97a13320899e72e8546c95c62b3052d5 +LIBSERUM_SHA=60469265097f151a17a83f53e50b514d0a73d980 LIBPUPDMD_SHA=4a1123220e6dce73c87cc584494df2ac82cb6f4c LIBVNI_SHA=7258e2fa0d086e1224d6510d44a61879e6b344b1 LIBUSB_SHA=15a7ebb4d426c5ce196684347d2b7cafad862626 +PROJECT_SOURCE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)" + +dependency_source_dir() { + local var_name="$1" + local source_dir="${!var_name:-}" + + if [ -z "${source_dir}" ]; then + return 0 + fi + + (cd "${PROJECT_SOURCE_ROOT}" && cd "${source_dir}" && pwd -P) +} + +print_dependency_source() { + local label="$1" + local sha="$2" + local source_var="$3" + local source_dir + + source_dir="$(dependency_source_dir "${source_var}")" + if [ -n "${source_dir}" ]; then + echo " ${label}_SOURCE_DIR: ${source_dir}" + else + echo " ${label}_SOURCE: archive ${sha}" + fi +} + +prepare_dependency_source() { + local name="$1" + local sha="$2" + local url="$3" + local archive_type="${4:-tar}" + local source_var="$5" + local source_dir + + source_dir="$(dependency_source_dir "${source_var}")" + if [ -n "${source_dir}" ]; then + echo "Using ${source_var}: ${source_dir}" + ln -s "${source_dir}" "${name}" + elif [ "${archive_type}" = "zip" ]; then + curl -sL "${url}" -o "${name}.zip" + unzip "${name}.zip" + mv "${name}-${sha}" "${name}" + else + curl -sL "${url}" -o "${name}-${sha}.tar.gz" + tar xzf "${name}-${sha}.tar.gz" + mv "${name}-${sha}" "${name}" + fi +} + + + if [ -z "${BUILD_TYPE}" ]; then BUILD_TYPE="Release" fi diff --git a/platforms/ios-simulator/arm64/build.sh b/platforms/ios-simulator/arm64/build.sh new file mode 100755 index 0000000..d863d57 --- /dev/null +++ b/platforms/ios-simulator/arm64/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +./platforms/build-common.sh ios-simulator arm64 diff --git a/platforms/ios-simulator/arm64/external.sh b/platforms/ios-simulator/arm64/external.sh index 0953bc1..81b14f6 100755 --- a/platforms/ios-simulator/arm64/external.sh +++ b/platforms/ios-simulator/arm64/external.sh @@ -6,24 +6,30 @@ source ./platforms/config.sh echo "Building libraries..." echo " LIBZEDMD_SHA: ${LIBZEDMD_SHA}" +print_dependency_source LIBZEDMD "${LIBZEDMD_SHA}" LIBZEDMD_SOURCE_DIR echo " LIBSERUM_SHA: ${LIBSERUM_SHA}" +print_dependency_source LIBSERUM "${LIBSERUM_SHA}" LIBSERUM_SOURCE_DIR echo " LIBPUPDMD_SHA: ${LIBPUPDMD_SHA}" echo " LIBVNI_SHA: ${LIBVNI_SHA}" +print_dependency_source LIBVNI "${LIBVNI_SHA}" LIBVNI_SOURCE_DIR echo "" NUM_PROCS=$(sysctl -n hw.ncpu) + rm -rf external -mkdir external +mkdir -p \ + external \ + third-party/include \ + third-party/build-libs/ios-simulator/arm64 \ + third-party/runtime-libs/ios-simulator/arm64 cd external # # build libzedmd and copy to external # -curl -sL https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz -o libzedmd-${LIBZEDMD_SHA}.tar.gz -tar xzf libzedmd-${LIBZEDMD_SHA}.tar.gz -mv libzedmd-${LIBZEDMD_SHA} libzedmd +prepare_dependency_source libzedmd "${LIBZEDMD_SHA}" "https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz" tar LIBZEDMD_SOURCE_DIR cd libzedmd BUILD_TYPE=${BUILD_TYPE} platforms/ios-simulator/arm64/external.sh cmake \ @@ -34,12 +40,11 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/ZeDMD.h ../../third-party/include/ -cp -r third-party/include/komihash ../../third-party/include/ -cp -r third-party/include/sockpp ../../third-party/include/ -cp third-party/include/FrameUtil.h ../../third-party/include/ -cp -a third-party/build-libs/ios-simulator/arm64/libsockpp.a ../../third-party/build-libs/ios-simulator/arm64/ -cp build/libzedmd.a ../../third-party/build-libs/ios-simulator/arm64/ +cp src/ZeDMD.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/komihash ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/sockpp ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a third-party/build-libs/ios-simulator/arm64/libsockpp.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/ios-simulator/arm64/ +cp build/libzedmd.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/ios-simulator/arm64/ cp -r test ../../ cd .. @@ -47,10 +52,11 @@ cd .. # build libserum and copy to external # -curl -sL https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz -o libserum-${LIBSERUM_SHA}.tar.gz -tar xzf libserum-${LIBSERUM_SHA}.tar.gz -mv libserum-${LIBSERUM_SHA} libserum +prepare_dependency_source libserum "${LIBSERUM_SHA}" "https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz" tar LIBSERUM_SOURCE_DIR cd libserum +# libserum consumes libframeutil's FrameUtil.h and its CMake refuses to +# configure without it, so run its own dependency fetch first. +./platforms/ios-simulator/arm64/external.sh cmake \ -DPLATFORM=ios-simulator \ -DARCH=arm64 \ @@ -59,13 +65,18 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp -r third-party/include/lz4 ../../third-party/include/ -cp src/LZ4Stream.h ../../third-party/include/ -cp src/SceneGenerator.h ../../third-party/include/ -cp src/serum.h ../../third-party/include/ -cp src/TimeUtils.h ../../third-party/include/ -cp src/serum-decode.h ../../third-party/include/ -cp build/libserum.a ../../third-party/build-libs/ios-simulator/arm64/ +cp -r third-party/include/lz4 ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/LZ4Stream.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/SceneGenerator.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/TimeUtils.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum-decode.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +# FrameUtil.h comes from libserum, not libzedmd: libserum pins the +# libframeutil revision whose ScalingAlgorithm values it persists in the +# cROMc header and reports through Serum_GetScalingAlgorithm(), so this +# is the copy libdmdutil has to agree with. +cp third-party/include/FrameUtil.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libserum.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/ios-simulator/arm64/ cd .. # @@ -84,17 +95,15 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/pupdmd.h ../../third-party/include/ -cp build/libpupdmd.a ../../third-party/build-libs/ios-simulator/arm64/ +cp src/pupdmd.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libpupdmd.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/ios-simulator/arm64/ cd .. # # build libvni and copy to external # -curl -sL https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz -o libvni-${LIBVNI_SHA}.tar.gz -tar xzf libvni-${LIBVNI_SHA}.tar.gz -mv libvni-${LIBVNI_SHA} libvni +prepare_dependency_source libvni "${LIBVNI_SHA}" "https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz" tar LIBVNI_SOURCE_DIR cd libvni platforms/ios-simulator/arm64/external.sh cmake \ @@ -105,6 +114,6 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/vni.h ../../third-party/include/ -cp build/libvni.a ../../third-party/build-libs/ios-simulator/arm64/ +cp src/vni.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libvni.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/ios-simulator/arm64/ cd .. diff --git a/platforms/ios/arm64/build.sh b/platforms/ios/arm64/build.sh new file mode 100755 index 0000000..4a261a9 --- /dev/null +++ b/platforms/ios/arm64/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +./platforms/build-common.sh ios arm64 diff --git a/platforms/ios/arm64/external.sh b/platforms/ios/arm64/external.sh index 06a7855..d979b70 100755 --- a/platforms/ios/arm64/external.sh +++ b/platforms/ios/arm64/external.sh @@ -6,24 +6,30 @@ source ./platforms/config.sh echo "Building libraries..." echo " LIBZEDMD_SHA: ${LIBZEDMD_SHA}" +print_dependency_source LIBZEDMD "${LIBZEDMD_SHA}" LIBZEDMD_SOURCE_DIR echo " LIBSERUM_SHA: ${LIBSERUM_SHA}" +print_dependency_source LIBSERUM "${LIBSERUM_SHA}" LIBSERUM_SOURCE_DIR echo " LIBPUPDMD_SHA: ${LIBPUPDMD_SHA}" echo " LIBVNI_SHA: ${LIBVNI_SHA}" +print_dependency_source LIBVNI "${LIBVNI_SHA}" LIBVNI_SOURCE_DIR echo "" NUM_PROCS=$(sysctl -n hw.ncpu) + rm -rf external -mkdir external +mkdir -p \ + external \ + third-party/include \ + third-party/build-libs/ios/arm64 \ + third-party/runtime-libs/ios/arm64 cd external # # build libzedmd and copy to external # -curl -sL https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz -o libzedmd-${LIBZEDMD_SHA}.tar.gz -tar xzf libzedmd-${LIBZEDMD_SHA}.tar.gz -mv libzedmd-${LIBZEDMD_SHA} libzedmd +prepare_dependency_source libzedmd "${LIBZEDMD_SHA}" "https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz" tar LIBZEDMD_SOURCE_DIR cd libzedmd BUILD_TYPE=${BUILD_TYPE} platforms/ios/arm64/external.sh cmake \ @@ -34,12 +40,11 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/ZeDMD.h ../../third-party/include/ -cp -r third-party/include/komihash ../../third-party/include/ -cp -r third-party/include/sockpp ../../third-party/include/ -cp third-party/include/FrameUtil.h ../../third-party/include/ -cp -a third-party/build-libs/ios/arm64/libsockpp.a ../../third-party/build-libs/ios/arm64/ -cp build/libzedmd.a ../../third-party/build-libs/ios/arm64/ +cp src/ZeDMD.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/komihash ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/sockpp ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a third-party/build-libs/ios/arm64/libsockpp.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/ios/arm64/ +cp build/libzedmd.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/ios/arm64/ cp -r test ../../ cd .. @@ -47,10 +52,11 @@ cd .. # build libserum and copy to external # -curl -sL https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz -o libserum-${LIBSERUM_SHA}.tar.gz -tar xzf libserum-${LIBSERUM_SHA}.tar.gz -mv libserum-${LIBSERUM_SHA} libserum +prepare_dependency_source libserum "${LIBSERUM_SHA}" "https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz" tar LIBSERUM_SOURCE_DIR cd libserum +# libserum consumes libframeutil's FrameUtil.h and its CMake refuses to +# configure without it, so run its own dependency fetch first. +./platforms/ios/arm64/external.sh cmake \ -DPLATFORM=ios \ -DARCH=arm64 \ @@ -59,13 +65,18 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp -r third-party/include/lz4 ../../third-party/include/ -cp src/LZ4Stream.h ../../third-party/include/ -cp src/SceneGenerator.h ../../third-party/include/ -cp src/serum.h ../../third-party/include/ -cp src/TimeUtils.h ../../third-party/include/ -cp src/serum-decode.h ../../third-party/include/ -cp build/libserum.a ../../third-party/build-libs/ios/arm64/ +cp -r third-party/include/lz4 ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/LZ4Stream.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/SceneGenerator.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/TimeUtils.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum-decode.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +# FrameUtil.h comes from libserum, not libzedmd: libserum pins the +# libframeutil revision whose ScalingAlgorithm values it persists in the +# cROMc header and reports through Serum_GetScalingAlgorithm(), so this +# is the copy libdmdutil has to agree with. +cp third-party/include/FrameUtil.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libserum.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/ios/arm64/ cd .. # @@ -84,17 +95,15 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/pupdmd.h ../../third-party/include/ -cp build/libpupdmd.a ../../third-party/build-libs/ios/arm64/ +cp src/pupdmd.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libpupdmd.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/ios/arm64/ cd .. # # build libvni and copy to external # -curl -sL https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz -o libvni-${LIBVNI_SHA}.tar.gz -tar xzf libvni-${LIBVNI_SHA}.tar.gz -mv libvni-${LIBVNI_SHA} libvni +prepare_dependency_source libvni "${LIBVNI_SHA}" "https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz" tar LIBVNI_SOURCE_DIR cd libvni platforms/ios/arm64/external.sh cmake \ @@ -105,6 +114,6 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/vni.h ../../third-party/include/ -cp build/libvni.a ../../third-party/build-libs/ios/arm64/ +cp src/vni.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libvni.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/ios/arm64/ cd .. diff --git a/platforms/linux/aarch64/build.sh b/platforms/linux/aarch64/build.sh new file mode 100755 index 0000000..3e71c09 --- /dev/null +++ b/platforms/linux/aarch64/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +./platforms/build-common.sh linux aarch64 diff --git a/platforms/linux/aarch64/external.sh b/platforms/linux/aarch64/external.sh index e9214b6..7b1d742 100755 --- a/platforms/linux/aarch64/external.sh +++ b/platforms/linux/aarch64/external.sh @@ -7,15 +7,23 @@ source ./platforms/config.sh echo "Building libraries..." echo " LIBUSB_SHA: ${LIBUSB_SHA}" echo " LIBZEDMD_SHA: ${LIBZEDMD_SHA}" +print_dependency_source LIBZEDMD "${LIBZEDMD_SHA}" LIBZEDMD_SOURCE_DIR echo " LIBSERUM_SHA: ${LIBSERUM_SHA}" +print_dependency_source LIBSERUM "${LIBSERUM_SHA}" LIBSERUM_SOURCE_DIR echo " LIBPUPDMD_SHA: ${LIBPUPDMD_SHA}" echo " LIBVNI_SHA: ${LIBVNI_SHA}" +print_dependency_source LIBVNI "${LIBVNI_SHA}" LIBVNI_SOURCE_DIR echo "" NUM_PROCS=$(nproc) + rm -rf external -mkdir external +mkdir -p \ + external \ + third-party/include \ + third-party/build-libs/linux/aarch64 \ + third-party/runtime-libs/linux/aarch64 cd external # @@ -30,18 +38,16 @@ cd libusb ./configure \ --enable-shared make -j${NUM_PROCS} -mkdir -p ../../third-party/include/libusb-1.0 -cp libusb/libusb.h ../../third-party/include/libusb-1.0 -cp -a libusb/.libs/libusb-1.0.{so,so.*} ../../third-party/runtime-libs/linux/aarch64/ +mkdir -p ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp libusb/libusb.h ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp -a libusb/.libs/libusb-1.0.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/aarch64/ cd .. # # build libzedmd and copy to external # -curl -sL https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz -o libzedmd-${LIBZEDMD_SHA}.tar.gz -tar xzf libzedmd-${LIBZEDMD_SHA}.tar.gz -mv libzedmd-${LIBZEDMD_SHA} libzedmd +prepare_dependency_source libzedmd "${LIBZEDMD_SHA}" "https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz" tar LIBZEDMD_SOURCE_DIR cd libzedmd BUILD_TYPE=${BUILD_TYPE} platforms/linux/aarch64/external.sh cmake \ @@ -53,16 +59,15 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/ZeDMD.h ../../third-party/include/ -cp third-party/include/libserialport.h ../../third-party/include/ -cp third-party/include/cargs.h ../../third-party/include/ -cp -r third-party/include/komihash ../../third-party/include/ -cp -r third-party/include/sockpp ../../third-party/include/ -cp third-party/include/FrameUtil.h ../../third-party/include/ -cp third-party/runtime-libs/linux/aarch64/libcargs.so ../../third-party/runtime-libs/linux/aarch64/ -cp -a third-party/runtime-libs/linux/aarch64/libserialport.{so,so.*} ../../third-party/runtime-libs/linux/aarch64/ -cp -a third-party/runtime-libs/linux/aarch64/libsockpp.{so,so.*} ../../third-party/runtime-libs/linux/aarch64/ -cp -a build/libzedmd.{so,so.*} ../../third-party/runtime-libs/linux/aarch64/ +cp src/ZeDMD.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/libserialport.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/cargs.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/komihash ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/sockpp ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/runtime-libs/linux/aarch64/libcargs.so ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/aarch64/ +cp -a third-party/runtime-libs/linux/aarch64/libserialport.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/aarch64/ +cp -a third-party/runtime-libs/linux/aarch64/libsockpp.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/aarch64/ +cp -a build/libzedmd.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/aarch64/ cp -r test ../../ cd .. @@ -70,10 +75,11 @@ cd .. # build libserum and copy to external # -curl -sL https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz -o libserum-${LIBSERUM_SHA}.tar.gz -tar xzf libserum-${LIBSERUM_SHA}.tar.gz -mv libserum-${LIBSERUM_SHA} libserum +prepare_dependency_source libserum "${LIBSERUM_SHA}" "https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz" tar LIBSERUM_SOURCE_DIR cd libserum +# libserum consumes libframeutil's FrameUtil.h and its CMake refuses to +# configure without it, so run its own dependency fetch first. +./platforms/linux/aarch64/external.sh cmake \ -DPLATFORM=linux \ -DARCH=aarch64 \ @@ -82,13 +88,18 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp -r third-party/include/lz4 ../../third-party/include/ -cp src/LZ4Stream.h ../../third-party/include/ -cp src/SceneGenerator.h ../../third-party/include/ -cp src/serum.h ../../third-party/include/ -cp src/TimeUtils.h ../../third-party/include/ -cp src/serum-decode.h ../../third-party/include/ -cp -a build/libserum.{so,so.*} ../../third-party/runtime-libs/linux/aarch64/ +cp -r third-party/include/lz4 ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/LZ4Stream.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/SceneGenerator.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/TimeUtils.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum-decode.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +# FrameUtil.h comes from libserum, not libzedmd: libserum pins the +# libframeutil revision whose ScalingAlgorithm values it persists in the +# cROMc header and reports through Serum_GetScalingAlgorithm(), so this +# is the copy libdmdutil has to agree with. +cp third-party/include/FrameUtil.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libserum.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/aarch64/ cd .. # @@ -107,17 +118,15 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/pupdmd.h ../../third-party/include/ -cp -a build/libpupdmd.{so,so.*} ../../third-party/runtime-libs/linux/aarch64/ +cp src/pupdmd.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libpupdmd.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/aarch64/ cd .. # # build libvni and copy to external # -curl -sL https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz -o libvni-${LIBVNI_SHA}.tar.gz -tar xzf libvni-${LIBVNI_SHA}.tar.gz -mv libvni-${LIBVNI_SHA} libvni +prepare_dependency_source libvni "${LIBVNI_SHA}" "https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz" tar LIBVNI_SOURCE_DIR cd libvni platforms/linux/aarch64/external.sh cmake \ @@ -128,6 +137,6 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/vni.h ../../third-party/include/ -cp -a build/libvni.{so,so.*} ../../third-party/runtime-libs/linux/aarch64/ +cp src/vni.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libvni.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/aarch64/ cd .. diff --git a/platforms/linux/x64/build.sh b/platforms/linux/x64/build.sh new file mode 100755 index 0000000..be4359d --- /dev/null +++ b/platforms/linux/x64/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +./platforms/build-common.sh linux x64 diff --git a/platforms/linux/x64/external.sh b/platforms/linux/x64/external.sh index 2661ed1..ee19aa9 100755 --- a/platforms/linux/x64/external.sh +++ b/platforms/linux/x64/external.sh @@ -7,15 +7,23 @@ source ./platforms/config.sh echo "Building libraries..." echo " LIBUSB_SHA: ${LIBUSB_SHA}" echo " LIBZEDMD_SHA: ${LIBZEDMD_SHA}" +print_dependency_source LIBZEDMD "${LIBZEDMD_SHA}" LIBZEDMD_SOURCE_DIR echo " LIBSERUM_SHA: ${LIBSERUM_SHA}" +print_dependency_source LIBSERUM "${LIBSERUM_SHA}" LIBSERUM_SOURCE_DIR echo " LIBPUPDMD_SHA: ${LIBPUPDMD_SHA}" echo " LIBVNI_SHA: ${LIBVNI_SHA}" +print_dependency_source LIBVNI "${LIBVNI_SHA}" LIBVNI_SOURCE_DIR echo "" NUM_PROCS=$(nproc) + rm -rf external -mkdir external +mkdir -p \ + external \ + third-party/include \ + third-party/build-libs/linux/x64 \ + third-party/runtime-libs/linux/x64 cd external # @@ -30,18 +38,16 @@ cd libusb ./configure \ --enable-shared make -j${NUM_PROCS} -mkdir -p ../../third-party/include/libusb-1.0 -cp libusb/libusb.h ../../third-party/include/libusb-1.0 -cp -a libusb/.libs/libusb-1.0.{so,so.*} ../../third-party/runtime-libs/linux/x64/ +mkdir -p ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp libusb/libusb.h ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp -a libusb/.libs/libusb-1.0.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/x64/ cd .. # # build libzedmd and copy to external # -curl -sL https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz -o libzedmd-${LIBZEDMD_SHA}.tar.gz -tar xzf libzedmd-${LIBZEDMD_SHA}.tar.gz -mv libzedmd-${LIBZEDMD_SHA} libzedmd +prepare_dependency_source libzedmd "${LIBZEDMD_SHA}" "https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz" tar LIBZEDMD_SOURCE_DIR cd libzedmd BUILD_TYPE=${BUILD_TYPE} platforms/linux/x64/external.sh cmake \ @@ -52,16 +58,15 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/ZeDMD.h ../../third-party/include/ -cp third-party/include/libserialport.h ../../third-party/include/ -cp third-party/include/cargs.h ../../third-party/include/ -cp -r third-party/include/komihash ../../third-party/include/ -cp -r third-party/include/sockpp ../../third-party/include/ -cp third-party/include/FrameUtil.h ../../third-party/include/ -cp third-party/runtime-libs/linux/x64/libcargs.so ../../third-party/runtime-libs/linux/x64/ -cp -a third-party/runtime-libs/linux/x64/libserialport.{so,so.*} ../../third-party/runtime-libs/linux/x64/ -cp -a third-party/runtime-libs/linux/x64/libsockpp.{so,so.*} ../../third-party/runtime-libs/linux/x64/ -cp -a build/libzedmd.{so,so.*} ../../third-party/runtime-libs/linux/x64/ +cp src/ZeDMD.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/libserialport.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/cargs.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/komihash ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/sockpp ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/runtime-libs/linux/x64/libcargs.so ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/x64/ +cp -a third-party/runtime-libs/linux/x64/libserialport.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/x64/ +cp -a third-party/runtime-libs/linux/x64/libsockpp.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/x64/ +cp -a build/libzedmd.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/x64/ cp -r test ../../ cd .. @@ -69,10 +74,11 @@ cd .. # build libserum and copy to external # -curl -sL https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz -o libserum-${LIBSERUM_SHA}.tar.gz -tar xzf libserum-${LIBSERUM_SHA}.tar.gz -mv libserum-${LIBSERUM_SHA} libserum +prepare_dependency_source libserum "${LIBSERUM_SHA}" "https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz" tar LIBSERUM_SOURCE_DIR cd libserum +# libserum consumes libframeutil's FrameUtil.h and its CMake refuses to +# configure without it, so run its own dependency fetch first. +./platforms/linux/x64/external.sh cmake \ -DPLATFORM=linux \ -DARCH=x64 \ @@ -81,13 +87,18 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp -r third-party/include/lz4 ../../third-party/include/ -cp src/LZ4Stream.h ../../third-party/include/ -cp src/SceneGenerator.h ../../third-party/include/ -cp src/serum.h ../../third-party/include/ -cp src/TimeUtils.h ../../third-party/include/ -cp src/serum-decode.h ../../third-party/include/ -cp -a build/libserum.{so,so.*} ../../third-party/runtime-libs/linux/x64/ +cp -r third-party/include/lz4 ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/LZ4Stream.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/SceneGenerator.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/TimeUtils.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum-decode.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +# FrameUtil.h comes from libserum, not libzedmd: libserum pins the +# libframeutil revision whose ScalingAlgorithm values it persists in the +# cROMc header and reports through Serum_GetScalingAlgorithm(), so this +# is the copy libdmdutil has to agree with. +cp third-party/include/FrameUtil.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libserum.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/x64/ cd .. # @@ -106,17 +117,15 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/pupdmd.h ../../third-party/include/ -cp -a build/libpupdmd.{so,so.*} ../../third-party/runtime-libs/linux/x64/ +cp src/pupdmd.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libpupdmd.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/x64/ cd .. # # build libvni and copy to external # -curl -sL https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz -o libvni-${LIBVNI_SHA}.tar.gz -tar xzf libvni-${LIBVNI_SHA}.tar.gz -mv libvni-${LIBVNI_SHA} libvni +prepare_dependency_source libvni "${LIBVNI_SHA}" "https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz" tar LIBVNI_SOURCE_DIR cd libvni platforms/linux/x64/external.sh cmake \ @@ -127,6 +136,6 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/vni.h ../../third-party/include/ -cp -a build/libvni.{so,so.*} ../../third-party/runtime-libs/linux/x64/ +cp src/vni.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libvni.{so,so.*} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/linux/x64/ cd .. diff --git a/platforms/macos/arm64/build.sh b/platforms/macos/arm64/build.sh new file mode 100755 index 0000000..9743dfb --- /dev/null +++ b/platforms/macos/arm64/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +./platforms/build-common.sh macos arm64 diff --git a/platforms/macos/arm64/external.sh b/platforms/macos/arm64/external.sh index e50850a..2bd182a 100755 --- a/platforms/macos/arm64/external.sh +++ b/platforms/macos/arm64/external.sh @@ -4,18 +4,27 @@ set -e source ./platforms/config.sh +export MACOSX_DEPLOYMENT_TARGET="${MACOSX_DEPLOYMENT_TARGET:-${PPUC_MACOS_DEPLOYMENT_TARGET:-$(xcrun --sdk macosx --show-sdk-version 2>/dev/null || echo 14.0)}}" echo "Building libraries..." echo " LIBUSB_SHA: ${LIBUSB_SHA}" echo " LIBZEDMD_SHA: ${LIBZEDMD_SHA}" +print_dependency_source LIBZEDMD "${LIBZEDMD_SHA}" LIBZEDMD_SOURCE_DIR echo " LIBSERUM_SHA: ${LIBSERUM_SHA}" +print_dependency_source LIBSERUM "${LIBSERUM_SHA}" LIBSERUM_SOURCE_DIR echo " LIBPUPDMD_SHA: ${LIBPUPDMD_SHA}" echo " LIBVNI_SHA: ${LIBVNI_SHA}" +print_dependency_source LIBVNI "${LIBVNI_SHA}" LIBVNI_SOURCE_DIR echo "" NUM_PROCS=$(sysctl -n hw.ncpu) + rm -rf external -mkdir external +mkdir -p \ + external \ + third-party/include \ + third-party/build-libs/macos/arm64 \ + third-party/runtime-libs/macos/arm64 cd external # @@ -29,21 +38,19 @@ cd libusb ./autogen.sh ./configure \ --host=arm-apple-darwin \ - CFLAGS="-arch arm64" \ - LDFLAGS="-Wl,-install_name,@rpath/libusb-1.0.dylib" + CFLAGS="-arch arm64 -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" \ + LDFLAGS="-mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET} -Wl,-install_name,@rpath/libusb-1.0.dylib" make -j${NUM_PROCS} -mkdir -p ../../third-party/include/libusb-1.0 -cp libusb/libusb.h ../../third-party/include/libusb-1.0 -cp -a libusb/.libs/libusb*.dylib ../../third-party/runtime-libs/macos/arm64/ +mkdir -p ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp libusb/libusb.h ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp -a libusb/.libs/libusb*.dylib ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/arm64/ cd .. # # build libzedmd and copy to external # -curl -sL https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz -o libzedmd-${LIBZEDMD_SHA}.tar.gz -tar xzf libzedmd-${LIBZEDMD_SHA}.tar.gz -mv libzedmd-${LIBZEDMD_SHA} libzedmd +prepare_dependency_source libzedmd "${LIBZEDMD_SHA}" "https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz" tar LIBZEDMD_SOURCE_DIR cd libzedmd BUILD_TYPE=${BUILD_TYPE} platforms/macos/arm64/external.sh cmake \ @@ -53,19 +60,20 @@ cmake \ -DBUILD_STATIC=OFF \ -DCMAKE_C_VISIBILITY_PRESET=default \ -DCMAKE_CXX_VISIBILITY_PRESET=default \ + -DCMAKE_OSX_ARCHITECTURES=arm64 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/ZeDMD.h ../../third-party/include/ -cp third-party/include/libserialport.h ../../third-party/include/ -cp third-party/include/cargs.h ../../third-party/include/ -cp -r third-party/include/komihash ../../third-party/include/ -cp -r third-party/include/sockpp ../../third-party/include/ -cp third-party/include/FrameUtil.h ../../third-party/include/ -cp third-party/runtime-libs/macos/arm64/libcargs.dylib ../../third-party/runtime-libs/macos/arm64/ -cp -a third-party/runtime-libs/macos/arm64/libserialport.{dylib,*.dylib} ../../third-party/runtime-libs/macos/arm64/ -cp -a third-party/runtime-libs/macos/arm64/libsockpp.{dylib,*.dylib} ../../third-party/runtime-libs/macos/arm64/ -cp -a build/libzedmd.{dylib,*.dylib} ../../third-party/runtime-libs/macos/arm64/ +cp src/ZeDMD.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/libserialport.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/cargs.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/komihash ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/sockpp ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/runtime-libs/macos/arm64/libcargs.dylib ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/arm64/ +cp -a third-party/runtime-libs/macos/arm64/libserialport.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/arm64/ +cp -a third-party/runtime-libs/macos/arm64/libsockpp.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/arm64/ +cp -a build/libzedmd.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/arm64/ cp -r test ../../ cd .. @@ -73,25 +81,33 @@ cd .. # build libserum and copy to external # -curl -sL https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz -o libserum-${LIBSERUM_SHA}.tar.gz -tar xzf libserum-${LIBSERUM_SHA}.tar.gz -mv libserum-${LIBSERUM_SHA} libserum +prepare_dependency_source libserum "${LIBSERUM_SHA}" "https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz" tar LIBSERUM_SOURCE_DIR cd libserum +# libserum consumes libframeutil's FrameUtil.h and its CMake refuses to +# configure without it, so run its own dependency fetch first. +./platforms/macos/arm64/external.sh cmake \ -DPLATFORM=macos \ -DARCH=arm64 \ -DBUILD_SHARED=ON \ -DBUILD_STATIC=OFF \ + -DCMAKE_OSX_ARCHITECTURES=arm64 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp -r third-party/include/lz4 ../../third-party/include/ -cp src/LZ4Stream.h ../../third-party/include/ -cp src/SceneGenerator.h ../../third-party/include/ -cp src/serum.h ../../third-party/include/ -cp src/TimeUtils.h ../../third-party/include/ -cp src/serum-decode.h ../../third-party/include/ -cp -a build/libserum.{dylib,*.dylib} ../../third-party/runtime-libs/macos/arm64/ +cp -r third-party/include/lz4 ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/LZ4Stream.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/SceneGenerator.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/TimeUtils.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum-decode.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +# FrameUtil.h comes from libserum, not libzedmd: libserum pins the +# libframeutil revision whose ScalingAlgorithm values it persists in the +# cROMc header and reports through Serum_GetScalingAlgorithm(), so this +# is the copy libdmdutil has to agree with. +cp third-party/include/FrameUtil.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libserum.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/arm64/ cd .. # @@ -107,20 +123,20 @@ cmake \ -DARCH=arm64 \ -DBUILD_SHARED=ON \ -DBUILD_STATIC=OFF \ + -DCMAKE_OSX_ARCHITECTURES=arm64 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/pupdmd.h ../../third-party/include/ -cp -a build/libpupdmd.{dylib,*.dylib} ../../third-party/runtime-libs/macos/arm64/ +cp src/pupdmd.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libpupdmd.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/arm64/ cd .. # # build libvni and copy to external # -curl -sL https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz -o libvni-${LIBVNI_SHA}.tar.gz -tar xzf libvni-${LIBVNI_SHA}.tar.gz -mv libvni-${LIBVNI_SHA} libvni +prepare_dependency_source libvni "${LIBVNI_SHA}" "https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz" tar LIBVNI_SOURCE_DIR cd libvni platforms/macos/arm64/external.sh cmake \ @@ -128,9 +144,11 @@ cmake \ -DARCH=arm64 \ -DBUILD_SHARED=ON \ -DBUILD_STATIC=OFF \ + -DCMAKE_OSX_ARCHITECTURES=arm64 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/vni.h ../../third-party/include/ -cp -a build/libvni.{dylib,*.dylib} ../../third-party/runtime-libs/macos/arm64/ +cp src/vni.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libvni.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/arm64/ cd .. diff --git a/platforms/macos/x64/build.sh b/platforms/macos/x64/build.sh new file mode 100755 index 0000000..3f0546e --- /dev/null +++ b/platforms/macos/x64/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +./platforms/build-common.sh macos x64 diff --git a/platforms/macos/x64/external.sh b/platforms/macos/x64/external.sh index 980f5e4..fd27738 100755 --- a/platforms/macos/x64/external.sh +++ b/platforms/macos/x64/external.sh @@ -4,18 +4,27 @@ set -e source ./platforms/config.sh +export MACOSX_DEPLOYMENT_TARGET="${MACOSX_DEPLOYMENT_TARGET:-${PPUC_MACOS_DEPLOYMENT_TARGET:-$(xcrun --sdk macosx --show-sdk-version 2>/dev/null || echo 14.0)}}" echo "Building libraries..." echo " LIBUSB_SHA: ${LIBUSB_SHA}" echo " LIBZEDMD_SHA: ${LIBZEDMD_SHA}" +print_dependency_source LIBZEDMD "${LIBZEDMD_SHA}" LIBZEDMD_SOURCE_DIR echo " LIBSERUM_SHA: ${LIBSERUM_SHA}" +print_dependency_source LIBSERUM "${LIBSERUM_SHA}" LIBSERUM_SOURCE_DIR echo " LIBPUPDMD_SHA: ${LIBPUPDMD_SHA}" echo " LIBVNI_SHA: ${LIBVNI_SHA}" +print_dependency_source LIBVNI "${LIBVNI_SHA}" LIBVNI_SOURCE_DIR echo "" NUM_PROCS=$(sysctl -n hw.ncpu) + rm -rf external -mkdir external +mkdir -p \ + external \ + third-party/include \ + third-party/build-libs/macos/x64 \ + third-party/runtime-libs/macos/x64 cd external # @@ -29,21 +38,19 @@ cd libusb ./autogen.sh ./configure \ --host=x86_64-apple-darwin \ - CFLAGS="-arch x86_64" \ - LDFLAGS="-Wl,-install_name,@rpath/libusb-1.0.dylib" + CFLAGS="-arch x86_64 -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}" \ + LDFLAGS="-mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET} -Wl,-install_name,@rpath/libusb-1.0.dylib" make -j${NUM_PROCS} -mkdir -p ../../third-party/include/libusb-1.0 -cp libusb/libusb.h ../../third-party/include/libusb-1.0 -cp -a libusb/.libs/libusb*.dylib ../../third-party/runtime-libs/macos/x64/ +mkdir -p ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp libusb/libusb.h ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp -a libusb/.libs/libusb*.dylib ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/x64/ cd .. # # build libzedmd and copy to external # -curl -sL https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz -o libzedmd-${LIBZEDMD_SHA}.tar.gz -tar xzf libzedmd-${LIBZEDMD_SHA}.tar.gz -mv libzedmd-${LIBZEDMD_SHA} libzedmd +prepare_dependency_source libzedmd "${LIBZEDMD_SHA}" "https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz" tar LIBZEDMD_SOURCE_DIR cd libzedmd BUILD_TYPE=${BUILD_TYPE} platforms/macos/x64/external.sh cmake \ @@ -51,19 +58,20 @@ cmake \ -DARCH=x64 \ -DBUILD_SHARED=ON \ -DBUILD_STATIC=OFF \ + -DCMAKE_OSX_ARCHITECTURES=x86_64 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/ZeDMD.h ../../third-party/include/ -cp third-party/include/libserialport.h ../../third-party/include/ -cp third-party/include/cargs.h ../../third-party/include/ -cp -r third-party/include/komihash ../../third-party/include/ -cp -r third-party/include/sockpp ../../third-party/include/ -cp third-party/include/FrameUtil.h ../../third-party/include/ -cp third-party/runtime-libs/macos/x64/libcargs.dylib ../../third-party/runtime-libs/macos/x64/ -cp -a third-party/runtime-libs/macos/x64/libserialport.{dylib,*.dylib} ../../third-party/runtime-libs/macos/x64/ -cp -a third-party/runtime-libs/macos/x64/libsockpp.{dylib,*.dylib} ../../third-party/runtime-libs/macos/x64/ -cp -a build/libzedmd.{dylib,*.dylib} ../../third-party/runtime-libs/macos/x64/ +cp src/ZeDMD.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/libserialport.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/cargs.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/komihash ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/sockpp ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/runtime-libs/macos/x64/libcargs.dylib ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/x64/ +cp -a third-party/runtime-libs/macos/x64/libserialport.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/x64/ +cp -a third-party/runtime-libs/macos/x64/libsockpp.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/x64/ +cp -a build/libzedmd.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/x64/ cp -r test ../../ cd .. @@ -71,25 +79,33 @@ cd .. # build libserum and copy to external # -curl -sL https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz -o libserum-${LIBSERUM_SHA}.tar.gz -tar xzf libserum-${LIBSERUM_SHA}.tar.gz -mv libserum-${LIBSERUM_SHA} libserum +prepare_dependency_source libserum "${LIBSERUM_SHA}" "https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz" tar LIBSERUM_SOURCE_DIR cd libserum +# libserum consumes libframeutil's FrameUtil.h and its CMake refuses to +# configure without it, so run its own dependency fetch first. +./platforms/macos/x64/external.sh cmake \ -DPLATFORM=macos \ -DARCH=x64 \ -DBUILD_SHARED=ON \ -DBUILD_STATIC=OFF \ + -DCMAKE_OSX_ARCHITECTURES=x86_64 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp -r third-party/include/lz4 ../../third-party/include/ -cp src/LZ4Stream.h ../../third-party/include/ -cp src/SceneGenerator.h ../../third-party/include/ -cp src/serum.h ../../third-party/include/ -cp src/TimeUtils.h ../../third-party/include/ -cp src/serum-decode.h ../../third-party/include/ -cp -a build/libserum.{dylib,*.dylib} ../../third-party/runtime-libs/macos/x64/ +cp -r third-party/include/lz4 ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/LZ4Stream.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/SceneGenerator.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/TimeUtils.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum-decode.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +# FrameUtil.h comes from libserum, not libzedmd: libserum pins the +# libframeutil revision whose ScalingAlgorithm values it persists in the +# cROMc header and reports through Serum_GetScalingAlgorithm(), so this +# is the copy libdmdutil has to agree with. +cp third-party/include/FrameUtil.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libserum.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/x64/ cd .. # @@ -105,20 +121,20 @@ cmake \ -DARCH=x64 \ -DBUILD_SHARED=ON \ -DBUILD_STATIC=OFF \ + -DCMAKE_OSX_ARCHITECTURES=x86_64 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/pupdmd.h ../../third-party/include/ -cp -a build/libpupdmd.{dylib,*.dylib} ../../third-party/runtime-libs/macos/x64/ +cp src/pupdmd.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libpupdmd.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/x64/ cd .. # # build libvni and copy to external # -curl -sL https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz -o libvni-${LIBVNI_SHA}.tar.gz -tar xzf libvni-${LIBVNI_SHA}.tar.gz -mv libvni-${LIBVNI_SHA} libvni +prepare_dependency_source libvni "${LIBVNI_SHA}" "https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz" tar LIBVNI_SOURCE_DIR cd libvni platforms/macos/x64/external.sh cmake \ @@ -126,9 +142,11 @@ cmake \ -DARCH=x64 \ -DBUILD_SHARED=ON \ -DBUILD_STATIC=OFF \ + -DCMAKE_OSX_ARCHITECTURES=x86_64 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/vni.h ../../third-party/include/ -cp -a build/libvni.{dylib,*.dylib} ../../third-party/runtime-libs/macos/x64/ +cp src/vni.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a build/libvni.{dylib,*.dylib} ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/macos/x64/ cd .. diff --git a/platforms/tvos/arm64/build.sh b/platforms/tvos/arm64/build.sh new file mode 100755 index 0000000..24aec36 --- /dev/null +++ b/platforms/tvos/arm64/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +./platforms/build-common.sh tvos arm64 diff --git a/platforms/tvos/arm64/external.sh b/platforms/tvos/arm64/external.sh index 0f6dfeb..971ae8f 100755 --- a/platforms/tvos/arm64/external.sh +++ b/platforms/tvos/arm64/external.sh @@ -6,24 +6,30 @@ source ./platforms/config.sh echo "Building libraries..." echo " LIBZEDMD_SHA: ${LIBZEDMD_SHA}" +print_dependency_source LIBZEDMD "${LIBZEDMD_SHA}" LIBZEDMD_SOURCE_DIR echo " LIBSERUM_SHA: ${LIBSERUM_SHA}" +print_dependency_source LIBSERUM "${LIBSERUM_SHA}" LIBSERUM_SOURCE_DIR echo " LIBPUPDMD_SHA: ${LIBPUPDMD_SHA}" echo " LIBVNI_SHA: ${LIBVNI_SHA}" +print_dependency_source LIBVNI "${LIBVNI_SHA}" LIBVNI_SOURCE_DIR echo "" NUM_PROCS=$(sysctl -n hw.ncpu) + rm -rf external -mkdir external +mkdir -p \ + external \ + third-party/include \ + third-party/build-libs/tvos/arm64 \ + third-party/runtime-libs/tvos/arm64 cd external # # build libzedmd and copy to external # -curl -sL https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz -o libzedmd-${LIBZEDMD_SHA}.tar.gz -tar xzf libzedmd-${LIBZEDMD_SHA}.tar.gz -mv libzedmd-${LIBZEDMD_SHA} libzedmd +prepare_dependency_source libzedmd "${LIBZEDMD_SHA}" "https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz" tar LIBZEDMD_SOURCE_DIR cd libzedmd BUILD_TYPE=${BUILD_TYPE} platforms/tvos/arm64/external.sh cmake \ @@ -34,12 +40,11 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/ZeDMD.h ../../third-party/include/ -cp -r third-party/include/komihash ../../third-party/include/ -cp -r third-party/include/sockpp ../../third-party/include/ -cp third-party/include/FrameUtil.h ../../third-party/include/ -cp -a third-party/build-libs/tvos/arm64/libsockpp.a ../../third-party/build-libs/tvos/arm64/ -cp build/libzedmd.a ../../third-party/build-libs/tvos/arm64/ +cp src/ZeDMD.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/komihash ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/sockpp ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -a third-party/build-libs/tvos/arm64/libsockpp.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/tvos/arm64/ +cp build/libzedmd.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/tvos/arm64/ cp -r test ../../ cd .. @@ -47,10 +52,11 @@ cd .. # build libserum and copy to external # -curl -sL https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz -o libserum-${LIBSERUM_SHA}.tar.gz -tar xzf libserum-${LIBSERUM_SHA}.tar.gz -mv libserum-${LIBSERUM_SHA} libserum +prepare_dependency_source libserum "${LIBSERUM_SHA}" "https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz" tar LIBSERUM_SOURCE_DIR cd libserum +# libserum consumes libframeutil's FrameUtil.h and its CMake refuses to +# configure without it, so run its own dependency fetch first. +./platforms/tvos/arm64/external.sh cmake \ -DPLATFORM=tvos \ -DARCH=arm64 \ @@ -59,13 +65,18 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp -r third-party/include/lz4 ../../third-party/include/ -cp src/LZ4Stream.h ../../third-party/include/ -cp src/SceneGenerator.h ../../third-party/include/ -cp src/serum.h ../../third-party/include/ -cp src/TimeUtils.h ../../third-party/include/ -cp src/serum-decode.h ../../third-party/include/ -cp build/libserum.a ../../third-party/build-libs/tvos/arm64/ +cp -r third-party/include/lz4 ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/LZ4Stream.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/SceneGenerator.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/TimeUtils.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum-decode.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +# FrameUtil.h comes from libserum, not libzedmd: libserum pins the +# libframeutil revision whose ScalingAlgorithm values it persists in the +# cROMc header and reports through Serum_GetScalingAlgorithm(), so this +# is the copy libdmdutil has to agree with. +cp third-party/include/FrameUtil.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libserum.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/tvos/arm64/ cd .. # @@ -84,17 +95,15 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/pupdmd.h ../../third-party/include/ -cp build/libpupdmd.a ../../third-party/build-libs/tvos/arm64/ +cp src/pupdmd.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libpupdmd.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/tvos/arm64/ cd .. # # build libvni and copy to external # -curl -sL https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz -o libvni-${LIBVNI_SHA}.tar.gz -tar xzf libvni-${LIBVNI_SHA}.tar.gz -mv libvni-${LIBVNI_SHA} libvni +prepare_dependency_source libvni "${LIBVNI_SHA}" "https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz" tar LIBVNI_SOURCE_DIR cd libvni platforms/tvos/arm64/external.sh cmake \ @@ -105,6 +114,6 @@ cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/vni.h ../../third-party/include/ -cp build/libvni.a ../../third-party/build-libs/tvos/arm64/ +cp src/vni.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/libvni.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/tvos/arm64/ cd .. diff --git a/platforms/win-mingw/x64/build.sh b/platforms/win-mingw/x64/build.sh new file mode 100755 index 0000000..195abc5 --- /dev/null +++ b/platforms/win-mingw/x64/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +./platforms/build-common.sh win-mingw x64 diff --git a/platforms/win-mingw/x64/external.sh b/platforms/win-mingw/x64/external.sh index 449db16..e4abc04 100755 --- a/platforms/win-mingw/x64/external.sh +++ b/platforms/win-mingw/x64/external.sh @@ -7,15 +7,23 @@ source ./platforms/config.sh echo "Building libraries..." echo " LIBUSB_SHA: ${LIBUSB_SHA}" echo " LIBZEDMD_SHA: ${LIBZEDMD_SHA}" +print_dependency_source LIBZEDMD "${LIBZEDMD_SHA}" LIBZEDMD_SOURCE_DIR echo " LIBSERUM_SHA: ${LIBSERUM_SHA}" +print_dependency_source LIBSERUM "${LIBSERUM_SHA}" LIBSERUM_SOURCE_DIR echo " LIBPUPDMD_SHA: ${LIBPUPDMD_SHA}" echo " LIBVNI_SHA: ${LIBVNI_SHA}" +print_dependency_source LIBVNI "${LIBVNI_SHA}" LIBVNI_SOURCE_DIR echo "" NUM_PROCS=$(nproc) + rm -rf external -mkdir external +mkdir -p \ + external \ + third-party/include \ + third-party/build-libs/win-mingw/x64 \ + third-party/runtime-libs/win-mingw/x64 cd external # @@ -36,19 +44,17 @@ sed -i.bak 's/libusb-1\.0/libusb64-1.0/g' libusb/libusb64-1.0.rc ./configure \ --enable-shared make -j${NUM_PROCS} -mkdir -p ../../third-party/include/libusb-1.0 -cp libusb/libusb.h ../../third-party/include/libusb-1.0 -cp libusb/.libs/libusb64-1.0.dll.a ../../third-party/build-libs/win-mingw/x64/ -cp libusb/.libs/libusb64-1.0.dll ../../third-party/runtime-libs/win-mingw/x64/ +mkdir -p ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp libusb/libusb.h ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp libusb/.libs/libusb64-1.0.dll.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win-mingw/x64/ +cp libusb/.libs/libusb64-1.0.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win-mingw/x64/ cd .. # # build libzedmd and copy to external # -curl -sL https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz -o libzedmd-${LIBZEDMD_SHA}.tar.gz -tar xzf libzedmd-${LIBZEDMD_SHA}.tar.gz -mv libzedmd-${LIBZEDMD_SHA} libzedmd +prepare_dependency_source libzedmd "${LIBZEDMD_SHA}" "https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz" tar LIBZEDMD_SOURCE_DIR cd libzedmd BUILD_TYPE=${BUILD_TYPE} platforms/win-mingw/x64/external.sh cmake \ @@ -59,20 +65,19 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/ZeDMD.h ../../third-party/include/ -cp third-party/include/cargs.h ../../third-party/include/ -cp -r third-party/include/komihash ../../third-party/include/ -cp -r third-party/include/sockpp ../../third-party/include/ -cp third-party/include/FrameUtil.h ../../third-party/include/ -cp third-party/include/libserialport.h ../../third-party/include/ -cp third-party/build-libs/win-mingw/x64/libcargs64.dll.a ../../third-party/build-libs/win-mingw/x64/ -cp third-party/runtime-libs/win-mingw/x64/libcargs64.dll ../../third-party/runtime-libs/win-mingw/x64/ -cp third-party/build-libs/win-mingw/x64/libserialport64.dll.a ../../third-party/build-libs/win-mingw/x64/ -cp third-party/runtime-libs/win-mingw/x64/libserialport64-0.dll ../../third-party/runtime-libs/win-mingw/x64/ -cp third-party/build-libs/win-mingw/x64/libsockpp64.dll.a ../../third-party/build-libs/win-mingw/x64/ -cp third-party/runtime-libs/win-mingw/x64/libsockpp64.dll ../../third-party/runtime-libs/win-mingw/x64/ -cp build/zedmd64.dll.a ../../third-party/build-libs/win-mingw/x64/ -cp build/zedmd64.dll ../../third-party/runtime-libs/win-mingw/x64/ +cp src/ZeDMD.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/cargs.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/komihash ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/sockpp ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/libserialport.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/build-libs/win-mingw/x64/libcargs64.dll.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win-mingw/x64/ +cp third-party/runtime-libs/win-mingw/x64/libcargs64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win-mingw/x64/ +cp third-party/build-libs/win-mingw/x64/libserialport64.dll.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win-mingw/x64/ +cp third-party/runtime-libs/win-mingw/x64/libserialport64-0.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win-mingw/x64/ +cp third-party/build-libs/win-mingw/x64/libsockpp64.dll.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win-mingw/x64/ +cp third-party/runtime-libs/win-mingw/x64/libsockpp64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win-mingw/x64/ +cp build/zedmd64.dll.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win-mingw/x64/ +cp build/zedmd64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win-mingw/x64/ cp -r test ../../ cd .. @@ -80,10 +85,11 @@ cd .. # build libserum and copy to external # -curl -sL https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz -o libserum-${LIBSERUM_SHA}.tar.gz -tar xzf libserum-${LIBSERUM_SHA}.tar.gz -mv libserum-${LIBSERUM_SHA} libserum +prepare_dependency_source libserum "${LIBSERUM_SHA}" "https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz" tar LIBSERUM_SOURCE_DIR cd libserum +# libserum consumes libframeutil's FrameUtil.h and its CMake refuses to +# configure without it, so run its own dependency fetch first. +./platforms/win-mingw/x64/external.sh cmake \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -DPLATFORM=win-mingw \ @@ -92,14 +98,19 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build -- -j${NUM_PROCS} -cp -r third-party/include/lz4 ../../third-party/include/ -cp src/LZ4Stream.h ../../third-party/include/ -cp src/SceneGenerator.h ../../third-party/include/ -cp src/serum.h ../../third-party/include/ -cp src/TimeUtils.h ../../third-party/include/ -cp src/serum-decode.h ../../third-party/include/ -cp build/serum64.dll.a ../../third-party/build-libs/win-mingw/x64/ -cp build/serum64.dll ../../third-party/runtime-libs/win-mingw/x64/ +cp -r third-party/include/lz4 ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/LZ4Stream.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/SceneGenerator.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/TimeUtils.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum-decode.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +# FrameUtil.h comes from libserum, not libzedmd: libserum pins the +# libframeutil revision whose ScalingAlgorithm values it persists in the +# cROMc header and reports through Serum_GetScalingAlgorithm(), so this +# is the copy libdmdutil has to agree with. +cp third-party/include/FrameUtil.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/serum64.dll.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win-mingw/x64/ +cp build/serum64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win-mingw/x64/ cd .. # @@ -118,18 +129,16 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/pupdmd.h ../../third-party/include/ -cp build/pupdmd64.dll.a ../../third-party/build-libs/win-mingw/x64/ -cp build/pupdmd64.dll ../../third-party/runtime-libs/win-mingw/x64/ +cp src/pupdmd.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/pupdmd64.dll.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win-mingw/x64/ +cp build/pupdmd64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win-mingw/x64/ cd .. # # build libvni and copy to external # -curl -sL https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz -o libvni-${LIBVNI_SHA}.tar.gz -tar xzf libvni-${LIBVNI_SHA}.tar.gz -mv libvni-${LIBVNI_SHA} libvni +prepare_dependency_source libvni "${LIBVNI_SHA}" "https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz" tar LIBVNI_SOURCE_DIR cd libvni platforms/win-mingw/x64/external.sh cmake \ @@ -140,9 +149,9 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build -- -j${NUM_PROCS} -cp src/vni.h ../../third-party/include/ -cp build/vni64.dll.a ../../third-party/build-libs/win-mingw/x64/ -cp build/vni64.dll ../../third-party/runtime-libs/win-mingw/x64/ +cp src/vni.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/vni64.dll.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win-mingw/x64/ +cp build/vni64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win-mingw/x64/ cd .. # @@ -151,6 +160,6 @@ cd .. UCRT64_BIN="${MINGW_PREFIX}/bin" -cp "${UCRT64_BIN}/libgcc_s_seh-1.dll" ../third-party/runtime-libs/win-mingw/x64/ -cp "${UCRT64_BIN}/libstdc++-6.dll" ../third-party/runtime-libs/win-mingw/x64/ -cp "${UCRT64_BIN}/libwinpthread-1.dll" ../third-party/runtime-libs/win-mingw/x64/ +cp "${UCRT64_BIN}/libgcc_s_seh-1.dll" ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win-mingw/x64/ +cp "${UCRT64_BIN}/libstdc++-6.dll" ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win-mingw/x64/ +cp "${UCRT64_BIN}/libwinpthread-1.dll" ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win-mingw/x64/ diff --git a/platforms/win/x64/build.sh b/platforms/win/x64/build.sh new file mode 100755 index 0000000..a259ccd --- /dev/null +++ b/platforms/win/x64/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +./platforms/build-common.sh win x64 diff --git a/platforms/win/x64/external.sh b/platforms/win/x64/external.sh index a206e7e..313319e 100755 --- a/platforms/win/x64/external.sh +++ b/platforms/win/x64/external.sh @@ -14,13 +14,21 @@ source ./platforms/config.sh echo "Building libraries..." echo " LIBUSB_SHA: ${LIBUSB_SHA}" echo " LIBZEDMD_SHA: ${LIBZEDMD_SHA}" +print_dependency_source LIBZEDMD "${LIBZEDMD_SHA}" LIBZEDMD_SOURCE_DIR echo " LIBSERUM_SHA: ${LIBSERUM_SHA}" +print_dependency_source LIBSERUM "${LIBSERUM_SHA}" LIBSERUM_SOURCE_DIR echo " LIBPUPDMD_SHA: ${LIBPUPDMD_SHA}" echo " LIBVNI_SHA: ${LIBVNI_SHA}" +print_dependency_source LIBVNI "${LIBVNI_SHA}" LIBVNI_SOURCE_DIR echo "" + rm -rf external -mkdir external +mkdir -p \ + external \ + third-party/include \ + third-party/build-libs/win/x64 \ + third-party/runtime-libs/win/x64 cd external # @@ -44,19 +52,17 @@ MSYSTEM=UCRT64 "${MSYS2_PATH}/usr/bin/bash.exe" -l -c " ./configure --enable-shared && make -j\$(nproc) " -mkdir -p ../../third-party/include/libusb-1.0 -cp libusb/libusb.h ../../third-party/include/libusb-1.0 -cp libusb/.libs/libusb64-1.0.dll.a ../../third-party/build-libs/win/x64/libusb64-1.0.lib -cp libusb/.libs/libusb64-1.0.dll ../../third-party/runtime-libs/win/x64/ +mkdir -p ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp libusb/libusb.h ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp libusb/.libs/libusb64-1.0.dll.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x64/libusb64-1.0.lib +cp libusb/.libs/libusb64-1.0.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x64/ cd .. # # build libzedmd and copy to external # -curl -sL https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz -o libzedmd-${LIBZEDMD_SHA}.tar.gz -tar xzf libzedmd-${LIBZEDMD_SHA}.tar.gz -mv libzedmd-${LIBZEDMD_SHA} libzedmd +prepare_dependency_source libzedmd "${LIBZEDMD_SHA}" "https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz" tar LIBZEDMD_SOURCE_DIR cd libzedmd BUILD_TYPE=${BUILD_TYPE} platforms/win/x64/external.sh cmake \ @@ -67,23 +73,22 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build --config ${BUILD_TYPE} -cp src/ZeDMD.h ../../third-party/include/ -cp third-party/include/cargs.h ../../third-party/include/ -cp -r third-party/include/komihash ../../third-party/include/ -cp -r third-party/include/sockpp ../../third-party/include/ -cp third-party/include/FrameUtil.h ../../third-party/include/ -cp third-party/include/libserialport.h ../../third-party/include/ -cp third-party/build-libs/win/x64/cargs64.lib ../../third-party/build-libs/win/x64/ -cp third-party/runtime-libs/win/x64/cargs64.dll ../../third-party/runtime-libs/win/x64/ -cp third-party/build-libs/win/x64/libserialport64.lib ../../third-party/build-libs/win/x64/ -cp third-party/runtime-libs/win/x64/libserialport64-0.dll ../../third-party/runtime-libs/win/x64/ -cp third-party/build-libs/win/x64/sockpp64.lib ../../third-party/build-libs/win/x64/ -cp third-party/runtime-libs/win/x64/sockpp64.dll ../../third-party/runtime-libs/win/x64/ -cp third-party/runtime-libs/win/x64/libgcc_s_seh-1.dll ../../third-party/runtime-libs/win/x64/ -cp third-party/runtime-libs/win/x64/libstdc++-6.dll ../../third-party/runtime-libs/win/x64/ -cp third-party/runtime-libs/win/x64/libwinpthread-1.dll ../../third-party/runtime-libs/win/x64/ -cp build/${BUILD_TYPE}/zedmd64.lib ../../third-party/build-libs/win/x64/ -cp build/${BUILD_TYPE}/zedmd64.dll ../../third-party/runtime-libs/win/x64/ +cp src/ZeDMD.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/cargs.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/komihash ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/sockpp ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/libserialport.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/build-libs/win/x64/cargs64.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x64/ +cp third-party/runtime-libs/win/x64/cargs64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x64/ +cp third-party/build-libs/win/x64/libserialport64.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x64/ +cp third-party/runtime-libs/win/x64/libserialport64-0.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x64/ +cp third-party/build-libs/win/x64/sockpp64.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x64/ +cp third-party/runtime-libs/win/x64/sockpp64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x64/ +cp third-party/runtime-libs/win/x64/libgcc_s_seh-1.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x64/ +cp third-party/runtime-libs/win/x64/libstdc++-6.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x64/ +cp third-party/runtime-libs/win/x64/libwinpthread-1.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x64/ +cp build/${BUILD_TYPE}/zedmd64.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x64/ +cp build/${BUILD_TYPE}/zedmd64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x64/ cp -r test ../../ cd .. @@ -91,10 +96,11 @@ cd .. # build libserum and copy to external # -curl -sL https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz -o libserum-${LIBSERUM_SHA}.tar.gz -tar xzf libserum-${LIBSERUM_SHA}.tar.gz -mv libserum-${LIBSERUM_SHA} libserum +prepare_dependency_source libserum "${LIBSERUM_SHA}" "https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz" tar LIBSERUM_SOURCE_DIR cd libserum +# libserum consumes libframeutil's FrameUtil.h and its CMake refuses to +# configure without it, so run its own dependency fetch first. +./platforms/win/x64/external.sh cmake \ -G "Visual Studio 18 2026" \ -DPLATFORM=win \ @@ -103,14 +109,19 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build --config ${BUILD_TYPE} -cp -r third-party/include/lz4 ../../third-party/include/ -cp src/LZ4Stream.h ../../third-party/include/ -cp src/SceneGenerator.h ../../third-party/include/ -cp src/serum.h ../../third-party/include/ -cp src/TimeUtils.h ../../third-party/include/ -cp src/serum-decode.h ../../third-party/include/ -cp build/${BUILD_TYPE}/serum64.lib ../../third-party/build-libs/win/x64/ -cp build/${BUILD_TYPE}/serum64.dll ../../third-party/runtime-libs/win/x64/ +cp -r third-party/include/lz4 ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/LZ4Stream.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/SceneGenerator.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/TimeUtils.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum-decode.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +# FrameUtil.h comes from libserum, not libzedmd: libserum pins the +# libframeutil revision whose ScalingAlgorithm values it persists in the +# cROMc header and reports through Serum_GetScalingAlgorithm(), so this +# is the copy libdmdutil has to agree with. +cp third-party/include/FrameUtil.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/${BUILD_TYPE}/serum64.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x64/ +cp build/${BUILD_TYPE}/serum64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x64/ cd .. # @@ -129,18 +140,16 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build --config ${BUILD_TYPE} -cp src/pupdmd.h ../../third-party/include/ -cp build/${BUILD_TYPE}/pupdmd64.lib ../../third-party/build-libs/win/x64/ -cp build/${BUILD_TYPE}/pupdmd64.dll ../../third-party/runtime-libs/win/x64/ +cp src/pupdmd.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/${BUILD_TYPE}/pupdmd64.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x64/ +cp build/${BUILD_TYPE}/pupdmd64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x64/ cd .. # # build libvni and copy to external # -curl -sL https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz -o libvni-${LIBVNI_SHA}.tar.gz -tar xzf libvni-${LIBVNI_SHA}.tar.gz -mv libvni-${LIBVNI_SHA} libvni +prepare_dependency_source libvni "${LIBVNI_SHA}" "https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz" tar LIBVNI_SOURCE_DIR cd libvni platforms/win/x64/external.sh cmake \ @@ -151,7 +160,7 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build --config ${BUILD_TYPE} -cp src/vni.h ../../third-party/include/ -cp build/${BUILD_TYPE}/vni64.lib ../../third-party/build-libs/win/x64/ -cp build/${BUILD_TYPE}/vni64.dll ../../third-party/runtime-libs/win/x64/ +cp src/vni.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/${BUILD_TYPE}/vni64.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x64/ +cp build/${BUILD_TYPE}/vni64.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x64/ cd .. diff --git a/platforms/win/x86/build.sh b/platforms/win/x86/build.sh new file mode 100755 index 0000000..46d0bdd --- /dev/null +++ b/platforms/win/x86/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +./platforms/build-common.sh win x86 diff --git a/platforms/win/x86/external.sh b/platforms/win/x86/external.sh index 593addb..d771a57 100755 --- a/platforms/win/x86/external.sh +++ b/platforms/win/x86/external.sh @@ -14,13 +14,21 @@ source ./platforms/config.sh echo "Building libraries..." echo " LIBUSB_SHA: ${LIBUSB_SHA}" echo " LIBZEDMD_SHA: ${LIBZEDMD_SHA}" +print_dependency_source LIBZEDMD "${LIBZEDMD_SHA}" LIBZEDMD_SOURCE_DIR echo " LIBSERUM_SHA: ${LIBSERUM_SHA}" +print_dependency_source LIBSERUM "${LIBSERUM_SHA}" LIBSERUM_SOURCE_DIR echo " LIBPUPDMD_SHA: ${LIBPUPDMD_SHA}" echo " LIBVNI_SHA: ${LIBVNI_SHA}" +print_dependency_source LIBVNI "${LIBVNI_SHA}" LIBVNI_SOURCE_DIR echo "" + rm -rf external -mkdir external +mkdir -p \ + external \ + third-party/include \ + third-party/build-libs/win/x86 \ + third-party/runtime-libs/win/x86 cd external # @@ -38,19 +46,17 @@ MSYSTEM=MINGW32 "${MSYS2_PATH}/usr/bin/bash.exe" -l -c " ./configure --enable-shared && make -j\$(nproc) " -mkdir -p ../../third-party/include/libusb-1.0 -cp libusb/libusb.h ../../third-party/include/libusb-1.0 -cp libusb/.libs/libusb-1.0.dll.a ../../third-party/build-libs/win/x86/libusb-1.0.lib -cp libusb/.libs/libusb-1.0.dll ../../third-party/runtime-libs/win/x86/ +mkdir -p ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp libusb/libusb.h ${PROJECT_SOURCE_ROOT}/third-party/include/libusb-1.0 +cp libusb/.libs/libusb-1.0.dll.a ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x86/libusb-1.0.lib +cp libusb/.libs/libusb-1.0.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x86/ cd .. # # build libzedmd and copy to external # -curl -sL https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz -o libzedmd-${LIBZEDMD_SHA}.tar.gz -tar xzf libzedmd-${LIBZEDMD_SHA}.tar.gz -mv libzedmd-${LIBZEDMD_SHA} libzedmd +prepare_dependency_source libzedmd "${LIBZEDMD_SHA}" "https://github.com/PPUC/libzedmd/archive/${LIBZEDMD_SHA}.tar.gz" tar LIBZEDMD_SOURCE_DIR cd libzedmd BUILD_TYPE=${BUILD_TYPE} platforms/win/x86/external.sh cmake \ @@ -62,23 +68,22 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build --config ${BUILD_TYPE} -cp src/ZeDMD.h ../../third-party/include/ -cp third-party/include/libserialport.h ../../third-party/include/ -cp third-party/include/cargs.h ../../third-party/include/ -cp -r third-party/include/komihash ../../third-party/include/ -cp -r third-party/include/sockpp ../../third-party/include/ -cp third-party/include/FrameUtil.h ../../third-party/include/ -cp third-party/build-libs/win/x86/cargs.lib ../../third-party/build-libs/win/x86/ -cp third-party/runtime-libs/win/x86/cargs.dll ../../third-party/runtime-libs/win/x86/ -cp third-party/build-libs/win/x86/libserialport.lib ../../third-party/build-libs/win/x86/ -cp third-party/runtime-libs/win/x86/libserialport-0.dll ../../third-party/runtime-libs/win/x86/ -cp third-party/build-libs/win/x86/sockpp.lib ../../third-party/build-libs/win/x86/ -cp third-party/runtime-libs/win/x86/sockpp.dll ../../third-party/runtime-libs/win/x86/ -cp third-party/runtime-libs/win/x86/libgcc_s_dw2-1.dll ../../third-party/runtime-libs/win/x86/ -cp third-party/runtime-libs/win/x86/libstdc++-6.dll ../../third-party/runtime-libs/win/x86/ -cp third-party/runtime-libs/win/x86/libwinpthread-1.dll ../../third-party/runtime-libs/win/x86/ -cp build/${BUILD_TYPE}/zedmd.lib ../../third-party/build-libs/win/x86/ -cp build/${BUILD_TYPE}/zedmd.dll ../../third-party/runtime-libs/win/x86/ +cp src/ZeDMD.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/libserialport.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/include/cargs.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/komihash ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp -r third-party/include/sockpp ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp third-party/build-libs/win/x86/cargs.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x86/ +cp third-party/runtime-libs/win/x86/cargs.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x86/ +cp third-party/build-libs/win/x86/libserialport.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x86/ +cp third-party/runtime-libs/win/x86/libserialport-0.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x86/ +cp third-party/build-libs/win/x86/sockpp.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x86/ +cp third-party/runtime-libs/win/x86/sockpp.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x86/ +cp third-party/runtime-libs/win/x86/libgcc_s_dw2-1.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x86/ +cp third-party/runtime-libs/win/x86/libstdc++-6.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x86/ +cp third-party/runtime-libs/win/x86/libwinpthread-1.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x86/ +cp build/${BUILD_TYPE}/zedmd.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x86/ +cp build/${BUILD_TYPE}/zedmd.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x86/ cp -r test ../../ cd .. @@ -86,10 +91,11 @@ cd .. # build libserum and copy to external # -curl -sL https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz -o libserum-${LIBSERUM_SHA}.tar.gz -tar xzf libserum-${LIBSERUM_SHA}.tar.gz -mv libserum-${LIBSERUM_SHA} libserum +prepare_dependency_source libserum "${LIBSERUM_SHA}" "https://github.com/PPUC/libserum/archive/${LIBSERUM_SHA}.tar.gz" tar LIBSERUM_SOURCE_DIR cd libserum +# libserum consumes libframeutil's FrameUtil.h and its CMake refuses to +# configure without it, so run its own dependency fetch first. +./platforms/win/x86/external.sh cmake \ -G "Visual Studio 18 2026" \ -A Win32 \ @@ -99,14 +105,19 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build --config ${BUILD_TYPE} -cp -r third-party/include/lz4 ../../third-party/include/ -cp src/LZ4Stream.h ../../third-party/include/ -cp src/SceneGenerator.h ../../third-party/include/ -cp src/serum.h ../../third-party/include/ -cp src/TimeUtils.h ../../third-party/include/ -cp src/serum-decode.h ../../third-party/include/ -cp build/${BUILD_TYPE}/serum.lib ../../third-party/build-libs/win/x86/ -cp build/${BUILD_TYPE}/serum.dll ../../third-party/runtime-libs/win/x86/ +cp -r third-party/include/lz4 ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/LZ4Stream.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/SceneGenerator.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/TimeUtils.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp src/serum-decode.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +# FrameUtil.h comes from libserum, not libzedmd: libserum pins the +# libframeutil revision whose ScalingAlgorithm values it persists in the +# cROMc header and reports through Serum_GetScalingAlgorithm(), so this +# is the copy libdmdutil has to agree with. +cp third-party/include/FrameUtil.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/${BUILD_TYPE}/serum.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x86/ +cp build/${BUILD_TYPE}/serum.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x86/ cd .. # @@ -126,18 +137,16 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build --config ${BUILD_TYPE} -cp src/pupdmd.h ../../third-party/include/ -cp build/${BUILD_TYPE}/pupdmd.lib ../../third-party/build-libs/win/x86/ -cp build/${BUILD_TYPE}/pupdmd.dll ../../third-party/runtime-libs/win/x86/ +cp src/pupdmd.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/${BUILD_TYPE}/pupdmd.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x86/ +cp build/${BUILD_TYPE}/pupdmd.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x86/ cd .. # # build libvni and copy to external # -curl -sL https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz -o libvni-${LIBVNI_SHA}.tar.gz -tar xzf libvni-${LIBVNI_SHA}.tar.gz -mv libvni-${LIBVNI_SHA} libvni +prepare_dependency_source libvni "${LIBVNI_SHA}" "https://github.com/PPUC/libvni/archive/${LIBVNI_SHA}.tar.gz" tar LIBVNI_SOURCE_DIR cd libvni platforms/win/x86/external.sh cmake \ @@ -149,7 +158,7 @@ cmake \ -DBUILD_STATIC=OFF \ -B build cmake --build build --config ${BUILD_TYPE} -cp src/vni.h ../../third-party/include/ -cp build/${BUILD_TYPE}/vni.lib ../../third-party/build-libs/win/x86/ -cp build/${BUILD_TYPE}/vni.dll ../../third-party/runtime-libs/win/x86/ +cp src/vni.h ${PROJECT_SOURCE_ROOT}/third-party/include/ +cp build/${BUILD_TYPE}/vni.lib ${PROJECT_SOURCE_ROOT}/third-party/build-libs/win/x86/ +cp build/${BUILD_TYPE}/vni.dll ${PROJECT_SOURCE_ROOT}/third-party/runtime-libs/win/x86/ cd .. diff --git a/src/DMD.cpp b/src/DMD.cpp index 694676b..bfcdda7 100644 --- a/src/DMD.cpp +++ b/src/DMD.cpp @@ -43,6 +43,7 @@ #include "FrameUtil.h" #include "DMDUtil/Logger.h" #include "OutputFilters.h" +#include "ScalingMode.h" #include "TimeUtils.h" #include "ZeDMD.h" #include "komihash/komihash.h" @@ -325,7 +326,11 @@ DMD::DMD() m_pDmdFrameThread = new std::thread(&DMD::DmdFrameThread, this); m_pPupDMDThread = new std::thread(&DMD::PupDMDThread, this); m_pSerumThread = new std::thread(&DMD::SerumThread, this); +#ifdef DMDUTIL_ENABLE_VNI m_pVniThread = new std::thread(&DMD::VniThread, this); +#else + m_pVniThread = nullptr; +#endif m_pDMDServerConnector = nullptr; } @@ -1623,6 +1628,17 @@ void DMD::SerumThread() Serum_SetMaximumUnknownFramesToSkip(Config::GetInstance()->GetMaximumUnknownFramesToSkip()); m_serumHasTimestamp = false; m_serumLastTimestampMs = 0; + + // Adopt the colorization's upscaling algorithm for our own display + // scaling, so in-frame and display scaling agree. + const uint8_t scalingAlgorithm = Serum_GetScalingAlgorithm(); + SetScalingAlgorithm(scalingAlgorithm); + Log(DMDUtil_LogLevel_INFO, "Serum: Upscaling algorithm is %s", + scalingAlgorithm == SERUM_SCALING_SCALE2X ? "Scale2x" : "line doubling"); + } + else + { + SetScalingAlgorithm(static_cast(FrameUtil::ScalingAlgorithm::Scale2x)); } } @@ -2119,12 +2135,12 @@ void DMD::PIN2DMDThread() const int upHeight = height * 2; if (upWidth == targetWidth && upHeight == targetHeight) { - FrameUtil::Helper::ScaleUp(dst, src, width, height, 24); + FrameUtil::Helper::ScaleUpBy(GetScalingAlgorithm(), dst, src, width, height, 24); return true; } if (upWidth <= kMaxTempWidth && upHeight <= kMaxTempHeight) { - FrameUtil::Helper::ScaleUp(tempBuffer, src, width, height, 24); + FrameUtil::Helper::ScaleUpBy(GetScalingAlgorithm(), tempBuffer, src, width, height, 24); FrameUtil::Helper::ScaleDown(dst, targetWidth, targetHeight, tempBuffer, upWidth, upHeight, 24); return true; } @@ -2144,7 +2160,7 @@ void DMD::PIN2DMDThread() const int upHeight = height * 2; if (upWidth <= kMaxTempWidth && upHeight <= kMaxTempHeight) { - FrameUtil::Helper::ScaleUp(tempBuffer, src, width, height, 24); + FrameUtil::Helper::ScaleUpBy(GetScalingAlgorithm(), tempBuffer, src, width, height, 24); FrameUtil::Helper::ScaleDown(dst, targetWidth, targetHeight, tempBuffer, upWidth, upHeight, 24); return true; } diff --git a/src/RGB24DMD.cpp b/src/RGB24DMD.cpp index 0025155..b254b83 100644 --- a/src/RGB24DMD.cpp +++ b/src/RGB24DMD.cpp @@ -7,6 +7,7 @@ #include "DMDUtil/Config.h" #include "FrameUtil.h" #include "OutputFilters.h" +#include "ScalingMode.h" namespace DMDUtil { @@ -48,7 +49,7 @@ void RGB24DMD::Update(uint8_t* pData, uint16_t width, uint16_t height) } else if (width == 128 && height == 32 && m_width == 256 && m_height == 64) { - FrameUtil::Helper::ScaleUp(m_pData, pData, width, height, 24); + FrameUtil::Helper::ScaleUpBy(GetScalingAlgorithm(), m_pData, pData, width, height, 24); m_update = true; } diff --git a/src/ScalingMode.h b/src/ScalingMode.h new file mode 100644 index 0000000..941a634 --- /dev/null +++ b/src/ScalingMode.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include + +#include "FrameUtil.h" + +namespace DMDUtil +{ + +/** + * The upscaling algorithm libdmdutil uses when it has to enlarge a frame for a + * display. + * + * This mirrors the algorithm the loaded Serum colorization selected, so that + * libserum's in-frame scaling (which shade a dynamic-zone pixel samples) and + * libdmdutil's display scaling (fitting the finished frame to the panel) agree. + * libserum reports the authored choice through Serum_GetScalingAlgorithm(); + * DMD::SerumThread() pushes it here right after Serum_Load(). + * + * Read from several output threads, written once per colorization load, hence + * the atomic. Defaults to Scale2x: that is what libdmdutil has always used for + * upscaling, and what an unset/failed Serum load and every pre-v8 cROMc resolve + * to. Only a colorization that explicitly opts out selects line doubling. + */ +inline std::atomic g_scalingAlgorithm{ + static_cast(FrameUtil::ScalingAlgorithm::Scale2x)}; + +inline void SetScalingAlgorithm(uint8_t algorithm) +{ + g_scalingAlgorithm.store(algorithm, std::memory_order_relaxed); +} + +inline FrameUtil::ScalingAlgorithm GetScalingAlgorithm() +{ + const uint8_t value = g_scalingAlgorithm.load(std::memory_order_relaxed); + return (value == static_cast(FrameUtil::ScalingAlgorithm::LineDoubling)) + ? FrameUtil::ScalingAlgorithm::LineDoubling + : FrameUtil::ScalingAlgorithm::Scale2x; +} + +} // namespace DMDUtil