diff --git a/CMakeLists.txt b/CMakeLists.txt index 598729a..c4bf719 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -372,6 +372,10 @@ endif() add_definitions("-DRAPIDJSON_PARSE_DEFAULT_FLAGS=kParseTrailingCommasFlag") +if (WIN32 AND (CMAKE_BUILD_TYPE STREQUAL "Release")) + add_definitions(/DNDEBUG) +endif() + add_executable(${CMAKE_PROJECT_NAME} ${HEADERS} ${SOURCES}) if (STATIC_BINARY OR STATIC_LIBS) diff --git a/cmake/aarch64_toolchain_clang.cmake b/cmake/aarch64_toolchain_clang.cmake new file mode 100644 index 0000000..1c52bf5 --- /dev/null +++ b/cmake/aarch64_toolchain_clang.cmake @@ -0,0 +1,9 @@ +set(CMAKE_CROSSCOMPILING TRUE) + +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + +set(CMAKE_C_COMPILER clang-20) +set(CMAKE_CXX_COMPILER clang++-20) +set(CMAKE_ASM_COMPILER aarch64-linux-gnu-as) +set(CMAKE_STRIP aarch64-linux-gnu-strip) diff --git a/cmake/flags.cmake b/cmake/flags.cmake index 384013f..1659471 100644 --- a/cmake/flags.cmake +++ b/cmake/flags.cmake @@ -113,7 +113,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang) set(GENERAL_FLAGS "${GENERAL_FLAGS} -mfix-cortex-a53-835769") endif() - set(WARNING_FLAGS "-Wall -Wextra -Wno-unused-function -Wno-undefined-internal -Wunreachable-code-aggressive -Wmissing-prototypes -Wmissing-variable-declarations -Werror") + set(WARNING_FLAGS "-Wall -Wextra -Wno-unused-function -Wno-undefined-internal -Wno-nan-infinity-disabled -Wunreachable-code-aggressive -Wmissing-prototypes -Wmissing-variable-declarations -Werror") if (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 20)) set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-error=cpp") @@ -150,4 +150,8 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang) set(CMAKE_CXX_FLAGS_RELEASE "") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "") set(CMAKE_CXX_FLAGS_MINSIZEREL "") + + if (STATIC_BINARY) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") + endif() endif() diff --git a/cmake/riscv64_toolchain_clang.cmake b/cmake/riscv64_toolchain_clang.cmake new file mode 100644 index 0000000..0f16949 --- /dev/null +++ b/cmake/riscv64_toolchain_clang.cmake @@ -0,0 +1,9 @@ +set(CMAKE_CROSSCOMPILING TRUE) + +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR riscv64) + +set(CMAKE_C_COMPILER clang-20) +set(CMAKE_CXX_COMPILER clang++-20) +set(CMAKE_ASM_COMPILER riscv64-linux-gnu-as) +set(CMAKE_STRIP riscv64-linux-gnu-strip) diff --git a/cmake/windows_x86_64_toolchain_clang.cmake b/cmake/windows_x86_64_toolchain_clang.cmake new file mode 100644 index 0000000..20989de --- /dev/null +++ b/cmake/windows_x86_64_toolchain_clang.cmake @@ -0,0 +1,8 @@ +set(CMAKE_CROSSCOMPILING TRUE) + +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_VERSION 6.0) +set(CMAKE_SYSTEM_PROCESSOR x86_64) + +set(CMAKE_C_COMPILER clang-20) +set(CMAKE_CXX_COMPILER clang++-20) diff --git a/external/src/RandomX b/external/src/RandomX index e613bfe..d341d6a 160000 --- a/external/src/RandomX +++ b/external/src/RandomX @@ -1 +1 @@ -Subproject commit e613bfe3641e126ca97cb7f7d16677a947f7a78c +Subproject commit d341d6a61c2e85fa7b103d3f5b82e5f4c9e8880a diff --git a/external/src/libzmq b/external/src/libzmq index 8a20bd6..1fce1ef 160000 --- a/external/src/libzmq +++ b/external/src/libzmq @@ -1 +1 @@ -Subproject commit 8a20bd6132b3a93562fbf72736739c02a0cc93c3 +Subproject commit 1fce1ef0054ac560c307735216800abba53236a6 diff --git a/release_scripts/build_all.sh b/release_scripts/build_all.sh new file mode 100755 index 0000000..d902dbc --- /dev/null +++ b/release_scripts/build_all.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +# Example usage: +# +# git clone --recursive https://github.com/SChernykh/p2pool +# cd p2pool +# git checkout v4.9 +# release_scripts/build_all.sh v4.9 +# + +cd "$(dirname "$0")" + +docker images | grep -q p2pool_build_ubuntu + +if [ $? -ne 0 ]; then + echo "Build image not found, creating it" + images/ubuntu/build.sh +fi + +rm -f p2pool.tar +tar -f p2pool.tar -c ../cmake -c ../external -c ../src -c ../CMakeLists.txt -c ../LICENSE -c ../README.md + +ln p2pool.tar linux_aarch64/p2pool.tar +ln p2pool.tar linux_riscv64/p2pool.tar +ln p2pool.tar linux_x64/p2pool.tar +ln p2pool.tar windows_x64/p2pool.tar + +gnome-terminal --tab -- linux_aarch64/build.sh $1 +gnome-terminal --tab -- linux_riscv64/build.sh $1 +gnome-terminal --tab -- linux_x64/build.sh $1 +gnome-terminal --tab -- windows_x64/build.sh $1 diff --git a/release_scripts/images/ubuntu/Dockerfile b/release_scripts/images/ubuntu/Dockerfile new file mode 100644 index 0000000..266fe6f --- /dev/null +++ b/release_scripts/images/ubuntu/Dockerfile @@ -0,0 +1,3 @@ +FROM ubuntu:latest +ADD prepare.sh / +RUN /prepare.sh diff --git a/release_scripts/images/ubuntu/build.sh b/release_scripts/images/ubuntu/build.sh new file mode 100755 index 0000000..f0b3576 --- /dev/null +++ b/release_scripts/images/ubuntu/build.sh @@ -0,0 +1,3 @@ +#!/bin/sh +cd "$(dirname "$0")" +docker build -t p2pool_build_ubuntu . diff --git a/release_scripts/images/ubuntu/prepare.sh b/release_scripts/images/ubuntu/prepare.sh new file mode 100755 index 0000000..e14f48a --- /dev/null +++ b/release_scripts/images/ubuntu/prepare.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +export DEBIAN_FRONTEND=noninteractive +apt-get update && apt-get upgrade -yq --no-install-recommends +apt-get install -yq --no-install-recommends patch lsb-release wget software-properties-common gnupg p7zip cmake make gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu gcc-riscv64-linux-gnu g++-riscv64-linux-gnu binutils-riscv64-linux-gnu g++-mingw-w64-x86-64 gcc-mingw-w64-x86-64 binutils-mingw-w64-x86-64 + +wget https://apt.llvm.org/llvm.sh +chmod +x llvm.sh +./llvm.sh 20 all diff --git a/release_scripts/linux_aarch64/Dockerfile b/release_scripts/linux_aarch64/Dockerfile new file mode 100644 index 0000000..6b91d5a --- /dev/null +++ b/release_scripts/linux_aarch64/Dockerfile @@ -0,0 +1,4 @@ +FROM p2pool_build_ubuntu +ARG P2POOL_VERSION BUILD_TIMESTAMP +ADD p2pool.tar p2pool_linux_aarch64.sh /p2pool/ +RUN /p2pool/p2pool_linux_aarch64.sh p2pool-${P2POOL_VERSION}-linux-aarch64 ${BUILD_TIMESTAMP} diff --git a/release_scripts/linux_aarch64/build.sh b/release_scripts/linux_aarch64/build.sh new file mode 100755 index 0000000..392f73b --- /dev/null +++ b/release_scripts/linux_aarch64/build.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# Example usage: ./build.sh v4.8.1 + +cd "$(dirname "$0")" +[ ! -f "p2pool.tar" ] && tar -f p2pool.tar -c ../../cmake -c ../../external -c ../../src -c ../../CMakeLists.txt -c ../../LICENSE -c ../../README.md + +docker build --build-arg P2POOL_VERSION=$1 --build-arg BUILD_TIMESTAMP="$(git show --no-patch --format=%ct $1)" -t p2pool_ubuntu_aarch64_build . + +docker create --name p2pool_ubuntu_aarch64_build_container p2pool_ubuntu_aarch64_build:latest +docker cp p2pool_ubuntu_aarch64_build_container:/p2pool/build/p2pool-$1-linux-aarch64.tar.gz ../p2pool-$1-linux-aarch64.tar.gz +docker rm p2pool_ubuntu_aarch64_build_container + +docker image rm -f p2pool_ubuntu_aarch64_build + +rm p2pool.tar diff --git a/release_scripts/linux_aarch64/p2pool_linux_aarch64.sh b/release_scripts/linux_aarch64/p2pool_linux_aarch64.sh new file mode 100755 index 0000000..824a1e8 --- /dev/null +++ b/release_scripts/linux_aarch64/p2pool_linux_aarch64.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +export TZ=UTC0 + +CURRENT_DATE=$(date -u -d @$2 +"%Y-%m-%d") +CURRENT_TIME=$(date -u -d @$2 +"%H:%M:%S") +TOUCH_DATE=$(date -u -d @$2 +"%Y%m%d%H%M.%S") + +flags_size="-ffunction-sections -fdata-sections -Wl,-s -Wl,--gc-sections" +flags_datetime="-D__DATE__=\"\\\"$CURRENT_DATE\\\"\" -D__TIME__=\"\\\"$CURRENT_TIME\\\"\" -Wno-builtin-macro-redefined" + +flags_libs="--target=aarch64-linux-gnu -Os -flto -fuse-ld=lld -w $flags_size $flags_datetime" +flags_p2pool="--target=aarch64-linux-gnu -fuse-ld=lld -Wno-unused-command-line-argument $flags_size $flags_datetime" + +cd /p2pool/external/src/curl +cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../cmake/aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include +make -j$(nproc) +cd lib && cp -f libcurl.a .libs + +cd /p2pool/external/src/libuv +rm -rf build +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../../cmake/aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF +make -j$(nproc) + +cd /p2pool/external/src/libzmq +rm -rf build +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../../cmake/aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DCMAKE_CXX_FLAGS="$flags_libs" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF +make -j$(nproc) + +cd /p2pool +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../cmake/aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=aarch64 +make -j$(nproc) p2pool + +mkdir $1 + +mv p2pool $1 +mv ../LICENSE $1 +mv ../README.md $1 + +tar cvf $1.tar --sort=name --owner=0 --group=0 --mtime="$CURRENT_DATE $CURRENT_TIME" $1 +touch -t $TOUCH_DATE $1.tar +7z a -mx=9 -tgzip -stl $1.tar.gz $1.tar diff --git a/release_scripts/linux_riscv64/Dockerfile b/release_scripts/linux_riscv64/Dockerfile new file mode 100644 index 0000000..3f7e45a --- /dev/null +++ b/release_scripts/linux_riscv64/Dockerfile @@ -0,0 +1,4 @@ +FROM p2pool_build_ubuntu +ARG P2POOL_VERSION BUILD_TIMESTAMP +ADD p2pool.tar p2pool_linux_riscv64.sh /p2pool/ +RUN /p2pool/p2pool_linux_riscv64.sh p2pool-${P2POOL_VERSION}-linux-riscv64 ${BUILD_TIMESTAMP} diff --git a/release_scripts/linux_riscv64/build.sh b/release_scripts/linux_riscv64/build.sh new file mode 100755 index 0000000..f45d39e --- /dev/null +++ b/release_scripts/linux_riscv64/build.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# Example usage: ./build.sh v4.8.1 + +cd "$(dirname "$0")" +[ ! -f "p2pool.tar" ] && tar -f p2pool.tar -c ../../cmake -c ../../external -c ../../src -c ../../CMakeLists.txt -c ../../LICENSE -c ../../README.md + +docker build --build-arg P2POOL_VERSION=$1 --build-arg BUILD_TIMESTAMP="$(git show --no-patch --format=%ct $1)" -t p2pool_ubuntu_riscv64_build . + +docker create --name p2pool_ubuntu_riscv64_build_container p2pool_ubuntu_riscv64_build:latest +docker cp p2pool_ubuntu_riscv64_build_container:/p2pool/build/p2pool-$1-linux-riscv64.tar.gz ../p2pool-$1-linux-riscv64.tar.gz +docker rm p2pool_ubuntu_riscv64_build_container + +docker image rm -f p2pool_ubuntu_riscv64_build + +rm p2pool.tar diff --git a/release_scripts/linux_riscv64/p2pool_linux_riscv64.sh b/release_scripts/linux_riscv64/p2pool_linux_riscv64.sh new file mode 100755 index 0000000..b75f060 --- /dev/null +++ b/release_scripts/linux_riscv64/p2pool_linux_riscv64.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +export TZ=UTC0 + +CURRENT_DATE=$(date -u -d @$2 +"%Y-%m-%d") +CURRENT_TIME=$(date -u -d @$2 +"%H:%M:%S") +TOUCH_DATE=$(date -u -d @$2 +"%Y%m%d%H%M.%S") + +flags_size="-ffunction-sections -fdata-sections -Wl,-s -Wl,--gc-sections" +flags_datetime="-D__DATE__=\"\\\"$CURRENT_DATE\\\"\" -D__TIME__=\"\\\"$CURRENT_TIME\\\"\" -Wno-builtin-macro-redefined" + +flags_libs="--target=riscv64-linux-gnu -Os -flto -fuse-ld=lld -w $flags_size $flags_datetime" +flags_p2pool="--target=riscv64-linux-gnu -fuse-ld=lld -Wno-unused-command-line-argument $flags_size $flags_datetime" + +cd /p2pool/external/src/curl +cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../cmake/riscv64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include +make -j$(nproc) +cd lib && cp -f libcurl.a .libs + +cd /p2pool/external/src/libuv +rm -rf build +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../../cmake/riscv64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF +make -j$(nproc) + +cd /p2pool/external/src/libzmq +rm -rf build +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../../cmake/riscv64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DCMAKE_CXX_FLAGS="$flags_libs" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF +make -j$(nproc) + +cd /p2pool +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../cmake/riscv64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=riscv64 +make -j$(nproc) p2pool + +mkdir $1 + +mv p2pool $1 +mv ../LICENSE $1 +mv ../README.md $1 + +tar cvf $1.tar --sort=name --owner=0 --group=0 --mtime="$CURRENT_DATE $CURRENT_TIME" $1 +touch -t $TOUCH_DATE $1.tar +7z a -mx=9 -tgzip -stl $1.tar.gz $1.tar diff --git a/release_scripts/linux_x64/Dockerfile b/release_scripts/linux_x64/Dockerfile new file mode 100644 index 0000000..432df51 --- /dev/null +++ b/release_scripts/linux_x64/Dockerfile @@ -0,0 +1,4 @@ +FROM p2pool_build_ubuntu +ARG P2POOL_VERSION BUILD_TIMESTAMP +ADD p2pool.tar p2pool_linux_x64.sh /p2pool/ +RUN /p2pool/p2pool_linux_x64.sh p2pool-${P2POOL_VERSION}-linux-x64 ${BUILD_TIMESTAMP} diff --git a/release_scripts/linux_x64/build.sh b/release_scripts/linux_x64/build.sh new file mode 100755 index 0000000..3b93df0 --- /dev/null +++ b/release_scripts/linux_x64/build.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# Example usage: ./build.sh v4.8.1 + +cd "$(dirname "$0")" +[ ! -f "p2pool.tar" ] && tar -f p2pool.tar -c ../../cmake -c ../../external -c ../../src -c ../../CMakeLists.txt -c ../../LICENSE -c ../../README.md + +docker build --build-arg P2POOL_VERSION=$1 --build-arg BUILD_TIMESTAMP="$(git show --no-patch --format=%ct $1)" -t p2pool_linux_x64_build . + +docker create --name p2pool_linux_x64_build_container p2pool_linux_x64_build:latest +docker cp p2pool_linux_x64_build_container:/p2pool/build/p2pool-$1-linux-x64.tar.gz ../p2pool-$1-linux-x64.tar.gz +docker rm p2pool_linux_x64_build_container + +docker image rm -f p2pool_linux_x64_build + +rm p2pool.tar diff --git a/release_scripts/linux_x64/p2pool_linux_x64.sh b/release_scripts/linux_x64/p2pool_linux_x64.sh new file mode 100755 index 0000000..2dfc442 --- /dev/null +++ b/release_scripts/linux_x64/p2pool_linux_x64.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +export TZ=UTC0 + +CURRENT_DATE=$(date -u -d @$2 +"%Y-%m-%d") +CURRENT_TIME=$(date -u -d @$2 +"%H:%M:%S") +TOUCH_DATE=$(date -u -d @$2 +"%Y%m%d%H%M.%S") + +flags_size="-ffunction-sections -fdata-sections -Wl,-s -Wl,--gc-sections" +flags_datetime="-D__DATE__=\"\\\"$CURRENT_DATE\\\"\" -D__TIME__=\"\\\"$CURRENT_TIME\\\"\" -Wno-builtin-macro-redefined" + +flags_libs="-Os -flto -fuse-ld=lld -w $flags_size $flags_datetime" +flags_p2pool="-fuse-ld=lld -Wno-unused-command-line-argument $flags_size $flags_datetime" + +cd /p2pool/external/src/curl +cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang-20 -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include +make -j$(nproc) +cd lib && cp -f libcurl.a .libs + +cd /p2pool/external/src/libuv +rm -rf build +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang-20 -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF +make -j$(nproc) + +cd /p2pool/external/src/libzmq +rm -rf build +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang-20 -DCMAKE_CXX_COMPILER=clang++-20 -DCMAKE_C_FLAGS="$flags_libs" -DCMAKE_CXX_FLAGS="$flags_libs" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF +make -j$(nproc) + +cd /p2pool +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang-20 -DCMAKE_CXX_COMPILER=clang++-20 -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DSTATIC_BINARY=ON -DARCH_ID=x86_64 +make -j$(nproc) p2pool + +mkdir $1 + +mv p2pool $1 +mv ../LICENSE $1 +mv ../README.md $1 + +tar cvf $1.tar --sort=name --owner=0 --group=0 --mtime="$CURRENT_DATE $CURRENT_TIME" $1 +touch -t $TOUCH_DATE $1.tar +7z a -mx=9 -tgzip -stl $1.tar.gz $1.tar diff --git a/release_scripts/windows_x64/Dockerfile b/release_scripts/windows_x64/Dockerfile new file mode 100644 index 0000000..5be74fc --- /dev/null +++ b/release_scripts/windows_x64/Dockerfile @@ -0,0 +1,4 @@ +FROM p2pool_build_ubuntu +ARG P2POOL_VERSION BUILD_TIMESTAMP +ADD p2pool.tar p2pool_windows_x64.sh intrin-impl.patch /p2pool/ +RUN /p2pool/p2pool_windows_x64.sh p2pool-${P2POOL_VERSION}-windows-x64 ${BUILD_TIMESTAMP} diff --git a/release_scripts/windows_x64/build.sh b/release_scripts/windows_x64/build.sh new file mode 100755 index 0000000..84e30c0 --- /dev/null +++ b/release_scripts/windows_x64/build.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# Example usage: ./build.sh v4.8.1 + +cd "$(dirname "$0")" +[ ! -f "p2pool.tar" ] && tar -f p2pool.tar -c ../../cmake -c ../../external -c ../../src -c ../../CMakeLists.txt -c ../../LICENSE -c ../../README.md + +docker build --build-arg P2POOL_VERSION=$1 --build-arg BUILD_TIMESTAMP="$(git show --no-patch --format=%ct $1)" -t p2pool_windows_x64_build . + +docker create --name p2pool_windows_x64_build_container p2pool_windows_x64_build:latest +docker cp p2pool_windows_x64_build_container:/p2pool/build/p2pool-$1-windows-x64.zip ../p2pool-$1-windows-x64.zip +docker rm p2pool_windows_x64_build_container + +docker image rm -f p2pool_windows_x64_build + +rm p2pool.tar diff --git a/release_scripts/windows_x64/intrin-impl.patch b/release_scripts/windows_x64/intrin-impl.patch new file mode 100644 index 0000000..bbf33f2 --- /dev/null +++ b/release_scripts/windows_x64/intrin-impl.patch @@ -0,0 +1,11 @@ +--- intrin-impl.h ++++ intrin-impl.h +@@ -2023,7 +2023,7 @@ + #define __INTRINSIC_DEFINED___cpuid + #endif /* __INTRINSIC_PROLOG */ + +-#if (!defined(__GNUC__) || __GNUC__ < 11) ++#if !defined(__clang__) && (!defined(__GNUC__) || __GNUC__ < 11) + #if __INTRINSIC_PROLOG(__cpuidex) + void __cpuidex(int CPUInfo[4], int, int); + #if !__has_builtin(__cpuidex) diff --git a/release_scripts/windows_x64/p2pool_windows_x64.sh b/release_scripts/windows_x64/p2pool_windows_x64.sh new file mode 100755 index 0000000..6502367 --- /dev/null +++ b/release_scripts/windows_x64/p2pool_windows_x64.sh @@ -0,0 +1,48 @@ +#!/bin/sh + +export TZ=UTC0 + +CURRENT_DATE=$(date -u -d @$2 +"%Y-%m-%d") +CURRENT_TIME=$(date -u -d @$2 +"%H:%M:%S") +TOUCH_DATE=$(date -u -d @$2 +"%Y%m%d%H%M.%S") + +cd /p2pool +cp /usr/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h intrin-impl.h +patch -u intrin-impl.h -i intrin-impl.patch +cp -f intrin-impl.h /usr/x86_64-w64-mingw32/include/psdk_inc/intrin-impl.h +rm intrin-impl.h + +flags_libs="--target=x86_64-pc-windows-gnu -Os -flto -ffunction-sections -fdata-sections -Wl,-s -Wl,--gc-sections -Wl,/timestamp:$2 -fuse-ld=lld -w" +flags_p2pool="--target=x86_64-pc-windows-gnu -ffunction-sections -fdata-sections -Wl,-s -Wl,--gc-sections -Wl,/timestamp:$2 -fuse-ld=lld -femulated-tls -Wno-unused-command-line-argument" + +cd /p2pool/external/src/curl +cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../cmake/windows_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include +make -j$(nproc) +cd lib && cp -f libcurl.a .libs + +cd /p2pool/external/src/libuv +rm -rf build +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../../cmake/windows_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF +make -j$(nproc) + +cd /p2pool/external/src/libzmq +rm -rf build +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../../cmake/windows_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DCMAKE_CXX_FLAGS="$flags_libs" -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF -DPOLLER=epoll +make -j$(nproc) + +cd /p2pool +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../cmake/windows_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=x86_64 +make -j$(nproc) p2pool + +mkdir $1 + +mv p2pool.exe $1 +mv ../LICENSE $1 +mv ../README.md $1 + +touch -t $TOUCH_DATE $1 +touch -t $TOUCH_DATE $1/* +7z a -mx=9 -tzip -stl $1.zip $1 diff --git a/src/common.h b/src/common.h index 3f2c74f..5592a57 100644 --- a/src/common.h +++ b/src/common.h @@ -80,7 +80,7 @@ #define _WIN32_WINNT 0x0600 #endif -#include +#include #elif defined(__linux__) || defined(__unix__) || defined(_POSIX_VERSION) || defined(__MACH__) diff --git a/src/util.cpp b/src/util.cpp index 1ee62c2..e5da1b2 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -32,7 +32,7 @@ #endif #ifdef _WIN32 -#include +#include #elif defined(HAVE_RES_QUERY) #include #include