From 8f7dfa733181b78bd8f04faeb96b344921a91200 Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 02:05:37 +0300 Subject: [PATCH 01/15] workflows --- .github/workflows/build.yml | 71 +++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..30b4fae --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,71 @@ +name: Build and Cross-compile + +on: + push: + branches: + - main + - master + tags: + - 'v*' + +jobs: + build: + strategy: + matrix: + os: [ubuntu-latest, windows-latest] + compiler: [clang] + + runs-on: ${{ matrix.os }} + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + with: + submodules: true + + ####################### + # Ubuntu dependencies # + ####################### + - name: Install dependencies (Ubuntu) + if: matrix.os == 'ubuntu-latest' + run: | + sudo apt update + sudo apt install --no-install-recommends -y build-essential libboost-all-dev libssl-dev git + + - name: Cache build artifacts (Ubuntu) + if: matrix.os == 'ubuntu-latest' + uses: actions/cache@v3 + with: + path: | + obj + libi2pd.a + key: ubuntu-build-${{ runner.os }}-${{ hashFiles('**/*.cpp', '**/*.h') }} + + - name: Install MSYS2 (Windows) + if: matrix.os == 'windows-latest' + run: | + Invoke-WebRequest -Uri "https://github.com/msys2/msys2-installer/releases/download/2025-08-30/msys2-x86_64-20250830.exe" -OutFile "msys2-installer.exe" + Start-Process -Wait -FilePath "msys2-installer.exe" -ArgumentList "/S" + C:\msys64\usr\bin\bash.exe -lc "pacman -Syu --noconfirm" + C:\msys64\usr\bin\bash.exe -lc "export ARCH=x86_64; export MINGW=mingw64; pacman -S --noconfirm mingw-w64-$ARCH-gcc mingw-w64-$ARCH-boost mingw-w64-$ARCH-openssl git make" + + - name: Initialize Git Submodules + run: git submodule update --init --recursive + + - name: Build Project (Ubuntu) + if: matrix.os == 'ubuntu-latest' + run: | + make -j8 + make stripall + make builddir + + - name: Build Project (Windows) + if: matrix.os == 'windows-latest' + run: | + C:\msys64\usr\bin\bash.exe -lc "cd /c/runner/work/i2pd-tools/i2pd-tools && make && make stripall && make builddir" + + - name: Upload binaries + uses: actions/upload-artifact@v4 + with: + name: my-binaries-${{ matrix.os }} + path: build/* + From 066eb9813f8ddb6a3cc6d4e144460f33362ca0ba Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 02:11:51 +0300 Subject: [PATCH 02/15] Makefile: builddir --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a621a07..e8ccd4f 100755 --- a/Makefile +++ b/Makefile @@ -107,7 +107,9 @@ clean-obj: rm -f $(wildcard *.o) stripall: strip b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf - +builddir: + mkdir -p build + mv b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf build/ || true clean-bin: rm -f b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf From bc1f601d4ceed7e4ba111e4d580fc2278705d8d9 Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 02:54:03 +0300 Subject: [PATCH 03/15] worfklows: comment windows --- .github/workflows/build.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 30b4fae..e0e6e07 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: build: strategy: matrix: - os: [ubuntu-latest, windows-latest] + os: [ubuntu-latest] #, windows-latest] compiler: [clang] runs-on: ${{ matrix.os }} @@ -39,14 +39,14 @@ jobs: obj libi2pd.a key: ubuntu-build-${{ runner.os }}-${{ hashFiles('**/*.cpp', '**/*.h') }} - - - name: Install MSYS2 (Windows) - if: matrix.os == 'windows-latest' - run: | - Invoke-WebRequest -Uri "https://github.com/msys2/msys2-installer/releases/download/2025-08-30/msys2-x86_64-20250830.exe" -OutFile "msys2-installer.exe" - Start-Process -Wait -FilePath "msys2-installer.exe" -ArgumentList "/S" - C:\msys64\usr\bin\bash.exe -lc "pacman -Syu --noconfirm" - C:\msys64\usr\bin\bash.exe -lc "export ARCH=x86_64; export MINGW=mingw64; pacman -S --noconfirm mingw-w64-$ARCH-gcc mingw-w64-$ARCH-boost mingw-w64-$ARCH-openssl git make" +# +# - name: Install MSYS2 (Windows) +# if: matrix.os == 'windows-latest' +# run: | +# Invoke-WebRequest -Uri "https://github.com/msys2/msys2-installer/releases/download/2025-08-30/msys2-x86_64-20250830.exe" -OutFile "msys2-installer.exe" +# Start-Process -Wait -FilePath "msys2-installer.exe" -ArgumentList "/S" +# C:\msys64\usr\bin\bash.exe -lc "pacman -Syu --noconfirm" +# C:\msys64\usr\bin\bash.exe -lc "export ARCH=x86_64; export MINGW=mingw64; pacman -S --noconfirm mingw-w64-$ARCH-gcc mingw-w64-$ARCH-boost mingw-w64-$ARCH-openssl git make" - name: Initialize Git Submodules run: git submodule update --init --recursive @@ -57,12 +57,12 @@ jobs: make -j8 make stripall make builddir - - - name: Build Project (Windows) - if: matrix.os == 'windows-latest' - run: | - C:\msys64\usr\bin\bash.exe -lc "cd /c/runner/work/i2pd-tools/i2pd-tools && make && make stripall && make builddir" - +# +# - name: Build Project (Windows) +# if: matrix.os == 'windows-latest' +# run: | +# C:\msys64\usr\bin\bash.exe -lc "cd /c/runner/work/i2pd-tools/i2pd-tools && make && make stripall && make builddir" +# - name: Upload binaries uses: actions/upload-artifact@v4 with: From 92a60ebef11904e5159058ad08232a76b2bc5046 Mon Sep 17 00:00:00 2001 From: Luminok <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 02:57:30 +0300 Subject: [PATCH 04/15] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 038b35e..183d85a 100755 --- a/README.md +++ b/README.md @@ -31,6 +31,9 @@ git submodule init && git submodule update git submodule update --init git pull --recurse-submodules make +# optional, for small output +# make stripall +# make builddir ``` ## Tools included From 0c302a344897183f5ae0b2227245117954ff4a97 Mon Sep 17 00:00:00 2001 From: Some One Date: Thu, 16 Oct 2025 11:36:42 +1000 Subject: [PATCH 05/15] try to fix windows resolve variables manually --- .github/workflows/build.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e0e6e07..63d6cd3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: build: strategy: matrix: - os: [ubuntu-latest] #, windows-latest] + os: [ubuntu-latest, windows-latest] compiler: [clang] runs-on: ${{ matrix.os }} @@ -47,6 +47,14 @@ jobs: # Start-Process -Wait -FilePath "msys2-installer.exe" -ArgumentList "/S" # C:\msys64\usr\bin\bash.exe -lc "pacman -Syu --noconfirm" # C:\msys64\usr\bin\bash.exe -lc "export ARCH=x86_64; export MINGW=mingw64; pacman -S --noconfirm mingw-w64-$ARCH-gcc mingw-w64-$ARCH-boost mingw-w64-$ARCH-openssl git make" + - name: Install MSYS2 (Windows) + uses: msys2/setup-msys2@v2 + if: matrix.os == 'windows-latest' + with: + msystem: CLANG64 + install: base-devel git mingw-w64-x86_64-clang mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-miniupnpc + update: true + - name: Initialize Git Submodules run: git submodule update --init --recursive From fb48cdd9e1c1e664c16a1cb098e81328d41dcbb3 Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 13:04:09 +0300 Subject: [PATCH 06/15] workflows: pre-init macos --- .github/workflows/build.yml | 65 ++++++++++++++++++++++--------------- Makefile | 61 +++++++++++++++++++--------------- 2 files changed, 74 insertions(+), 52 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 63d6cd3..f652e99 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,10 +12,11 @@ jobs: build: strategy: matrix: - os: [ubuntu-latest, windows-latest] + os: [ubuntu-latest, macos-latest, windows-latest] compiler: [clang] runs-on: ${{ matrix.os }} + steps: - name: Checkout Repository uses: actions/checkout@v3 @@ -31,46 +32,58 @@ jobs: sudo apt update sudo apt install --no-install-recommends -y build-essential libboost-all-dev libssl-dev git - - name: Cache build artifacts (Ubuntu) - if: matrix.os == 'ubuntu-latest' - uses: actions/cache@v3 - with: - path: | - obj - libi2pd.a - key: ubuntu-build-${{ runner.os }}-${{ hashFiles('**/*.cpp', '**/*.h') }} -# -# - name: Install MSYS2 (Windows) -# if: matrix.os == 'windows-latest' -# run: | -# Invoke-WebRequest -Uri "https://github.com/msys2/msys2-installer/releases/download/2025-08-30/msys2-x86_64-20250830.exe" -OutFile "msys2-installer.exe" -# Start-Process -Wait -FilePath "msys2-installer.exe" -ArgumentList "/S" -# C:\msys64\usr\bin\bash.exe -lc "pacman -Syu --noconfirm" -# C:\msys64\usr\bin\bash.exe -lc "export ARCH=x86_64; export MINGW=mingw64; pacman -S --noconfirm mingw-w64-$ARCH-gcc mingw-w64-$ARCH-boost mingw-w64-$ARCH-openssl git make" + ####################### + # macOS dependencies # + ####################### + - name: Install dependencies (macOS) + if: matrix.os == 'macos-latest' + run: | + brew update + brew install boost openssl@3 cmake make + + ####################### + # Windows dependencies # + ####################### - name: Install MSYS2 (Windows) - uses: msys2/setup-msys2@v2 if: matrix.os == 'windows-latest' + uses: msys2/setup-msys2@v2 with: msystem: CLANG64 install: base-devel git mingw-w64-x86_64-clang mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-miniupnpc update: true - - name: Initialize Git Submodules run: git submodule update --init --recursive + ####################### + # Build Project + ####################### - name: Build Project (Ubuntu) if: matrix.os == 'ubuntu-latest' run: | - make -j8 + make -j$(nproc) make stripall make builddir -# -# - name: Build Project (Windows) -# if: matrix.os == 'windows-latest' -# run: | -# C:\msys64\usr\bin\bash.exe -lc "cd /c/runner/work/i2pd-tools/i2pd-tools && make && make stripall && make builddir" -# + + - name: Build Project (macOS) + if: matrix.os == 'macos-latest' + run: | + make HOMEBREW=1 -j8 + make stripall + make builddir + + - name: Build Project (Windows) + if: matrix.os == 'windows-latest' + shell: msys2 {0} + run: | + cd "${GITHUB_WORKSPACE}" + make -j$(nproc) + make stripall + make builddir + + ####################### + # Upload binaries + ####################### - name: Upload binaries uses: actions/upload-artifact@v4 with: diff --git a/Makefile b/Makefile index e8ccd4f..91661e3 100755 --- a/Makefile +++ b/Makefile @@ -11,42 +11,46 @@ CXXFLAGS = -Wall -std=c++17 -O2 INCFLAGS = -I$(LIBI2PD_PATH) -I$(LIBI2PD_CLIENT_PATH) DEFINES = -DOPENSSL_SUPPRESS_DEPRECATED -LDFLAGS = -LDLIBS = $(I2PD_PATH)/$(I2PD_LIB) -lboost_system$(BOOST_SUFFIX) -lboost_program_options$(BOOST_SUFFIX) -lssl -lcrypto -lz - +LDFLAGS = +LDLIBS = $(I2PD_PATH)/$(I2PD_LIB) -lboost_system$(BOOST_SUFFIX) -lboost_program_options$(BOOST_SUFFIX) -lssl -lcrypto -lz +# ------------------------- +# Platform-specific flags +# ------------------------- ifeq ($(UNAME),Linux) CXXFLAGS += -g -else ifeq ($(UNAME),Darwin) - CXXFLAGS += -g -else ifeq ($(UNAME),FreeBSD) - CXXFLAGS += -g -else -# Win32 - CXXFLAGS += -Os -fPIC -msse - DEFINES += -DWIN32_LEAN_AND_MEAN - BOOST_SUFFIX = -mt -endif - -ifeq ($(UNAME),Linux) LDLIBS += -lrt -lpthread else ifeq ($(UNAME),Darwin) + CXXFLAGS += -g LDLIBS += -lpthread - LDFLAGS += -L/usr/local/opt/openssl@1.1/lib -L/usr/local/lib - INCFLAGS += -I/usr/local/opt/openssl@1.1/include -I/usr/local/include + ifdef HOMEBREW + BREW_PREFIX := $(shell brew --prefix) + INCFLAGS += -I$(BREW_PREFIX)/include + LDFLAGS += -L$(BREW_PREFIX)/lib + else + INCFLAGS += -I/usr/local/opt/openssl@3/include -I/usr/local/include + LDFLAGS += -L/usr/local/opt/openssl@3/lib -L/usr/local/lib + endif else ifeq ($(UNAME),FreeBSD) + CXXFLAGS += -g LDLIBS += -lthr -lpthread LDFLAGS += -L/usr/local/lib INCFLAGS += -I/usr/local/include else -# Win32 +# Windows (MSYS2 / MinGW) + CXXFLAGS += -Os -fPIC -msse + DEFINES += -DWIN32_LEAN_AND_MEAN + BOOST_SUFFIX = -mt LDLIBS += -lwsock32 -lws2_32 -liphlpapi -lpthread LDFLAGS += -s -static endif - +# ------------------------- +# Build targets +# ------------------------- all: $(I2PD_LIB) vain keygen keyinfo famtool routerinfo regaddr regaddr_3ld i2pbase64 offlinekeys b33address regaddralias x25519 verifyhost autoconf -vain: vain.o $(I2PD_LIB) + +vain: vain.o $(I2PD_LIB) $(CXX) -o vain $(LDFLAGS) vain.o $(LDLIBS) autoconf: autoconf.o $(I2PD_LIB) @@ -88,6 +92,9 @@ x25519: x25519.o $(I2PD_LIB) verifyhost: verifyhost.o $(I2PD_LIB) $(CXX) -o verifyhost $(DEFINES) $(LDFLAGS) verifyhost.o $(LDLIBS) +# ------------------------- +# Object compilation +# ------------------------- .SUFFIXES: .SUFFIXES: .c .cc .C .cpp .o @@ -97,6 +104,9 @@ $(I2PD_LIB): %.o: %.cpp $(I2PD_LIB) $(CXX) $(CXXFLAGS) $(DEFINES) $(INCFLAGS) -c -o $@ $< +# ------------------------- +# Cleanup +# ------------------------- count: wc *.c *.cc *.C *.cpp *.h *.hpp @@ -105,19 +115,18 @@ clean-i2pd: clean-obj: rm -f $(wildcard *.o) + stripall: strip b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf + builddir: mkdir -p build mv b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf build/ || true + clean-bin: rm -f b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf clean: clean-i2pd clean-obj clean-bin -.PHONY: all -.PHONY: count -.PHONY: clean-i2pd -.PHONY: clean-obj -.PHONY: clean-bin -.PHONY: clean +.PHONY: all count clean-i2pd clean-obj clean-bin clean + From ac417c8738da57c601b79c4ee77f1e6de0de983c Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 13:08:25 +0300 Subject: [PATCH 07/15] workflows: comment windows --- .github/workflows/build.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f652e99..fd325fa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: build: strategy: matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-latest, macos-latest] compiler: [clang] runs-on: ${{ matrix.os }} @@ -44,13 +44,13 @@ jobs: ####################### # Windows dependencies # ####################### - - name: Install MSYS2 (Windows) - if: matrix.os == 'windows-latest' - uses: msys2/setup-msys2@v2 - with: - msystem: CLANG64 - install: base-devel git mingw-w64-x86_64-clang mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-miniupnpc - update: true +# - name: Install MSYS2 (Windows) +# if: matrix.os == 'windows-latest' +## uses: msys2/setup-msys2@v2 + # with: + # msystem: CLANG64 + # install: base-devel git mingw-w64-x86_64-clang mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-miniupnpc + # update: true - name: Initialize Git Submodules run: git submodule update --init --recursive @@ -72,14 +72,14 @@ jobs: make stripall make builddir - - name: Build Project (Windows) - if: matrix.os == 'windows-latest' - shell: msys2 {0} - run: | - cd "${GITHUB_WORKSPACE}" - make -j$(nproc) - make stripall - make builddir +# - name: Build Project (Windows) +# if: matrix.os == 'windows-latest' +## shell: msys2 {0} + # run: | + # cd "${GITHUB_WORKSPACE}" + # make -j$(nproc) + # make stripall + # make builddir ####################### # Upload binaries From 21c8041428bd98b8803fe35a055f6fb9c7cfa67c Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 13:13:45 +0300 Subject: [PATCH 08/15] markflow test macos --- Makefile | 79 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/Makefile b/Makefile index 91661e3..6147362 100755 --- a/Makefile +++ b/Makefile @@ -1,52 +1,54 @@ -UNAME = $(shell uname -s) +UNAME := $(shell uname -s) -I2PD_PATH = i2pd -I2PD_LIB = libi2pd.a +I2PD_PATH := i2pd +I2PD_LIB := libi2pd.a -LIBI2PD_PATH = $(I2PD_PATH)/libi2pd -LIBI2PD_CLIENT_PATH = $(I2PD_PATH)/libi2pd_client +LIBI2PD_PATH := $(I2PD_PATH)/libi2pd +LIBI2PD_CLIENT_PATH := $(I2PD_PATH)/libi2pd_client CXX ?= g++ -CXXFLAGS = -Wall -std=c++17 -O2 -INCFLAGS = -I$(LIBI2PD_PATH) -I$(LIBI2PD_CLIENT_PATH) -DEFINES = -DOPENSSL_SUPPRESS_DEPRECATED +CXXFLAGS := -Wall -std=c++17 -O2 +INCFLAGS := -I$(LIBI2PD_PATH) -I$(LIBI2PD_CLIENT_PATH) +DEFINES := -DOPENSSL_SUPPRESS_DEPRECATED -LDFLAGS = -LDLIBS = $(I2PD_PATH)/$(I2PD_LIB) -lboost_system$(BOOST_SUFFIX) -lboost_program_options$(BOOST_SUFFIX) -lssl -lcrypto -lz +LDFLAGS := +LDLIBS := $(I2PD_PATH)/$(I2PD_LIB) -lboost_program_options$(BOOST_SUFFIX) -lssl -lcrypto -lz -# ------------------------- -# Platform-specific flags -# ------------------------- ifeq ($(UNAME),Linux) - CXXFLAGS += -g - LDLIBS += -lrt -lpthread + CXXFLAGS += -g + LDLIBS += -lrt -lpthread else ifeq ($(UNAME),Darwin) - CXXFLAGS += -g - LDLIBS += -lpthread - ifdef HOMEBREW - BREW_PREFIX := $(shell brew --prefix) - INCFLAGS += -I$(BREW_PREFIX)/include - LDFLAGS += -L$(BREW_PREFIX)/lib - else - INCFLAGS += -I/usr/local/opt/openssl@3/include -I/usr/local/include - LDFLAGS += -L/usr/local/opt/openssl@3/lib -L/usr/local/lib - endif + CXXFLAGS += -g + LDLIBS += -lpthread + + # Определяем путь Homebrew + ifeq ($(shell test -d /opt/homebrew && echo "true"),true) + BREW_PREFIX := /opt/homebrew + else + BREW_PREFIX := /usr/local + endif + + INCFLAGS += -I$(BREW_PREFIX)/include -I$(BREW_PREFIX)/opt/openssl@3/include + LDFLAGS += -L$(BREW_PREFIX)/lib -L$(BREW_PREFIX)/opt/openssl@3/lib + LDLIBS += $(BREW_PREFIX)/lib/libboost_system.a \ + $(BREW_PREFIX)/lib/libboost_program_options.a else ifeq ($(UNAME),FreeBSD) - CXXFLAGS += -g - LDLIBS += -lthr -lpthread - LDFLAGS += -L/usr/local/lib - INCFLAGS += -I/usr/local/include + CXXFLAGS += -g + LDLIBS += -lthr -lpthread + LDFLAGS += -L/usr/local/lib + INCFLAGS += -I/usr/local/include else -# Windows (MSYS2 / MinGW) - CXXFLAGS += -Os -fPIC -msse - DEFINES += -DWIN32_LEAN_AND_MEAN - BOOST_SUFFIX = -mt - LDLIBS += -lwsock32 -lws2_32 -liphlpapi -lpthread - LDFLAGS += -s -static + # Windows + CXXFLAGS += -Os -fPIC -msse + DEFINES += -DWIN32_LEAN_AND_MEAN + LDFLAGS += -L/clang64/lib + INCFLAGS += -I/clang64/include + BOOST_SUFFIX = + LDLIBS += -lwsock32 -lws2_32 -liphlpapi -lpthread endif # ------------------------- -# Build targets +# Targets # ------------------------- all: $(I2PD_LIB) vain keygen keyinfo famtool routerinfo regaddr regaddr_3ld i2pbase64 offlinekeys b33address regaddralias x25519 verifyhost autoconf @@ -57,7 +59,7 @@ autoconf: autoconf.o $(I2PD_LIB) $(CXX) -o autoconf $(DEFINES) $(LDFLAGS) autoconf.o $(LDLIBS) routerinfo: routerinfo.o $(I2PD_LIB) - $(CXX) -o routerinfo $(LDFLAGS) routerinfo.o $(LDLIBS) -latomic + $(CXX) -o routerinfo $(LDFLAGS) routerinfo.o $(LDLIBS) keygen: keygen.o $(I2PD_LIB) $(CXX) -o keygen $(DEFINES) $(LDFLAGS) keygen.o $(LDLIBS) @@ -66,7 +68,7 @@ keyinfo: keyinfo.o $(I2PD_LIB) $(CXX) -o keyinfo $(DEFINES) $(LDFLAGS) keyinfo.o $(LDLIBS) famtool: famtool.o $(I2PD_LIB) - $(CXX) -o famtool $(DEFINES) $(LDFLAGS) famtool.o $(LDLIBS) -latomic + $(CXX) -o famtool $(DEFINES) $(LDFLAGS) famtool.o $(LDLIBS) regaddr: regaddr.o $(I2PD_LIB) $(CXX) -o regaddr $(DEFINES) $(LDFLAGS) regaddr.o $(LDLIBS) @@ -95,7 +97,6 @@ verifyhost: verifyhost.o $(I2PD_LIB) # ------------------------- # Object compilation # ------------------------- -.SUFFIXES: .SUFFIXES: .c .cc .C .cpp .o $(I2PD_LIB): From ed2844f99f1f1e1d774bd79b9931b598352a1374 Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 13:17:54 +0300 Subject: [PATCH 09/15] test workflow --- Makefile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 6147362..2136b87 100755 --- a/Makefile +++ b/Makefile @@ -21,7 +21,6 @@ else ifeq ($(UNAME),Darwin) CXXFLAGS += -g LDLIBS += -lpthread - # Определяем путь Homebrew ifeq ($(shell test -d /opt/homebrew && echo "true"),true) BREW_PREFIX := /opt/homebrew else @@ -30,8 +29,8 @@ else ifeq ($(UNAME),Darwin) INCFLAGS += -I$(BREW_PREFIX)/include -I$(BREW_PREFIX)/opt/openssl@3/include LDFLAGS += -L$(BREW_PREFIX)/lib -L$(BREW_PREFIX)/opt/openssl@3/lib - LDLIBS += $(BREW_PREFIX)/lib/libboost_system.a \ - $(BREW_PREFIX)/lib/libboost_program_options.a + # Используем динамические библиотеки, без указания .a + LDLIBS += -lboost_system -lboost_program_options else ifeq ($(UNAME),FreeBSD) CXXFLAGS += -g LDLIBS += -lthr -lpthread From c03867daa1b42055a35aeb48299183a82f889662 Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 13:21:59 +0300 Subject: [PATCH 10/15] test workflow --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 2136b87..ce72543 100755 --- a/Makefile +++ b/Makefile @@ -29,8 +29,8 @@ else ifeq ($(UNAME),Darwin) INCFLAGS += -I$(BREW_PREFIX)/include -I$(BREW_PREFIX)/opt/openssl@3/include LDFLAGS += -L$(BREW_PREFIX)/lib -L$(BREW_PREFIX)/opt/openssl@3/lib - # Используем динамические библиотеки, без указания .a - LDLIBS += -lboost_system -lboost_program_options + + LDLIBS += -lboost_program_options else ifeq ($(UNAME),FreeBSD) CXXFLAGS += -g LDLIBS += -lthr -lpthread From 8ac777d618e82d8f791f1ffa2856ccabfe900784 Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 13:26:49 +0300 Subject: [PATCH 11/15] by vade comment --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fd325fa..855dc60 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -34,6 +34,7 @@ jobs: ####################### # macOS dependencies # + #BY VADE = https://github.com/MetanoicArmor ####################### - name: Install dependencies (macOS) if: matrix.os == 'macos-latest' From febf23f4be7f5d2e6e072607c60a5d11fdfdc173 Mon Sep 17 00:00:00 2001 From: Lunar Date: Thu, 16 Oct 2025 21:43:45 +1000 Subject: [PATCH 12/15] add build workflows (thank flu) --- .github/workflows/build-and-release.yml | 492 ++++++++++++++++++++++++ .github/workflows/build.yml | 93 ----- CMakeLists.txt | 423 ++++++++++++++++++++ 3 files changed, 915 insertions(+), 93 deletions(-) create mode 100644 .github/workflows/build-and-release.yml delete mode 100644 .github/workflows/build.yml create mode 100644 CMakeLists.txt diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml new file mode 100644 index 0000000..9433a13 --- /dev/null +++ b/.github/workflows/build-and-release.yml @@ -0,0 +1,492 @@ +name: Build All Platforms and Release + +on: + push: + branches: + - '*' + tags: + - '*' + pull_request: + branches: + - '*' + workflow_dispatch: + +jobs: + build-linux: + name: Build Linux (Ubuntu) with UPnP ON + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: install packages + run: | + sudo apt-get update + sudo apt-get install build-essential cmake libboost-all-dev libminiupnpc-dev libssl-dev zlib1g-dev + + - name: build application + run: | + mkdir build + cd build + cmake -DWITH_UPNP=ON .. + make -j3 + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: i2pd-ubuntu + path: | + build/i2pd + build/vain + build/keygen + build/keyinfo + build/famtool + build/routerinfo + build/regaddr + build/regaddr_3ld + build/i2pbase64 + build/offlinekeys + build/b33address + build/regaddralias + build/x25519 + build/verifyhost + build/autoconf + + build-macos: + name: Build macOS with UPnP ON + runs-on: macos-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Install dependencies + run: | + brew update + brew install boost miniupnpc openssl@1.1 zlib + + - name: Configure and build with CMake + run: | + mkdir build + cd build + cmake \ + -DWITH_UPNP=ON \ + -DOPENSSL_ROOT_DIR="$HOMEBREW_PREFIX/opt/openssl@1.1" \ + -DBOOST_ROOT="$HOMEBREW_PREFIX/opt/boost" \ + -DCMAKE_PREFIX_PATH="$HOMEBREW_PREFIX/opt/boost;$HOMEBREW_PREFIX/opt/miniupnpc;$HOMEBREW_PREFIX/opt/openssl@1.1" \ + -DZLIB_ROOT=$(brew --prefix zlib) \ + -DCMAKE_BUILD_TYPE=Release \ + -DFIND_BOOST_USE_CONFIG=OFF \ + .. + make -j8 + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: i2pd-macos + path: | + build/i2pd + build/vain + build/keygen + build/keyinfo + build/famtool + build/routerinfo + build/regaddr + build/regaddr_3ld + build/i2pbase64 + build/offlinekeys + build/b33address + build/regaddralias + build/x25519 + build/verifyhost + build/autoconf + + build-macos-legacy: + name: Build macOS Legacy with UPnP ON + runs-on: macos-13 + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Install dependencies + run: | + brew update + brew install boost miniupnpc openssl@1.1 zlib + + - name: Configure and build with CMake + run: | + mkdir build + cd build + cmake \ + -DWITH_UPNP=ON \ + -DOPENSSL_ROOT_DIR="/opt/homebrew/opt/openssl@1.1" \ + -DBOOST_ROOT="/opt/homebrew/opt/boost" \ + -DCMAKE_PREFIX_PATH="/opt/homebrew/opt/boost;/opt/homebrew/opt/miniupnpc;/opt/homebrew/opt/openssl@1.1" \ + -DZLIB_ROOT=$(brew --prefix zlib) \ + -DCMAKE_BUILD_TYPE=Release \ + -DFIND_BOOST_USE_CONFIG=OFF \ + .. + make -j8 + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: i2pd-macos-legacy + path: | + build/i2pd + build/vain + build/keygen + build/keyinfo + build/famtool + build/routerinfo + build/regaddr + build/regaddr_3ld + build/i2pbase64 + build/offlinekeys + build/b33address + build/regaddralias + build/x25519 + build/verifyhost + build/autoconf + + build-freebsd: + name: Build FreeBSD with UPnP ON + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Test in FreeBSD + id: test + uses: vmactions/freebsd-vm@v1 + with: + usesh: true + mem: 2048 + sync: rsync + copyback: true + prepare: pkg install -y devel/cmake devel/gmake devel/boost-libs security/openssl net/miniupnpc + run: | + mkdir build + cd build + cmake -DWITH_UPNP=ON -DCMAKE_BUILD_TYPE=Release .. + gmake -j2 + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: i2pd-freebsd + path: | + build/i2pd + build/vain + build/keygen + build/keyinfo + build/famtool + build/routerinfo + build/regaddr + build/regaddr_3ld + build/i2pbase64 + build/offlinekeys + build/b33address + build/regaddralias + build/x25519 + build/verifyhost + build/autoconf + + build-windows-ucrt: + name: Build Windows UCRT x64 + runs-on: windows-latest + + defaults: + run: + shell: msys2 {0} + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: true + + - name: Setup MSYS2 + uses: msys2/setup-msys2@v2 + with: + msystem: UCRT64 + install: base-devel git mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-ninja mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-boost mingw-w64-ucrt-x86_64-openssl mingw-w64-ucrt-x86_64-miniupnpc + update: true + + - name: Build application + run: | + cmake -DWITH_GIT_VERSION=ON -DWITH_STATIC=ON -DWITH_UPNP=ON -DCMAKE_BUILD_TYPE=Release . + cmake --build . -- -j3 + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: i2pd-windows-ucrt + path: | + ./i2pd.exe + ./vain.exe + ./keygen.exe + ./keyinfo.exe + ./famtool.exe + ./routerinfo.exe + ./regaddr.exe + ./regaddr_3ld.exe + ./i2pbase64.exe + ./offlinekeys.exe + ./b33address.exe + ./regaddralias.exe + ./x25519.exe + ./verifyhost.exe + ./autoconf.exe + + build-windows-arm: + name: Build Windows ARM64 + runs-on: windows-11-arm + + defaults: + run: + shell: msys2 {0} + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: true + + - name: Setup MSYS2 + uses: msys2/setup-msys2@v2 + with: + msystem: CLANGARM64 + install: base-devel git mingw-w64-clang-aarch64-cmake mingw-w64-clang-aarch64-ninja mingw-w64-clang-aarch64-clang mingw-w64-clang-aarch64-boost mingw-w64-clang-aarch64-openssl mingw-w64-clang-aarch64-miniupnpc + update: true + + - name: Build application + run: | + cmake -DWITH_GIT_VERSION=ON -DWITH_STATIC=ON -DWITH_UPNP=ON -DCMAKE_BUILD_TYPE=Release . + cmake --build . -- -j3 + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: i2pd-windows-arm64 + path: | + ./i2pd.exe + ./vain.exe + ./keygen.exe + ./keyinfo.exe + ./famtool.exe + ./routerinfo.exe + ./regaddr.exe + ./regaddr_3ld.exe + ./i2pbase64.exe + ./offlinekeys.exe + ./b33address.exe + ./regaddralias.exe + ./x25519.exe + ./verifyhost.exe + ./autoconf.exe + + release: + name: Create Continuous Release + runs-on: ubuntu-latest + needs: [build-linux, build-macos, build-macos-legacy, build-freebsd, build-windows-ucrt, build-windows-arm] + permissions: + contents: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + + - name: List downloaded artifacts + run: | + echo "Downloaded artifacts:" + if [ -d "artifacts" ]; then + find artifacts -type f + echo "" + echo "Artifact directories:" + ls -la artifacts/ + else + echo "No artifacts directory found" + fi + + - name: Create release directory structure + run: | + mkdir -p releases/{linux,freebsd,macos,windows} + + - name: Organize Linux artifacts + run: | + # Find and copy Linux artifacts (Ubuntu/CMake builds) + if [ -d "artifacts/i2pd-ubuntu" ]; then + cp -r "artifacts/i2pd-ubuntu" "releases/linux/ubuntu" + echo "Copied Linux artifact: ubuntu" + + # Create compressed archive for Linux build + tar -czf "i2pd-linux-ubuntu.tar.gz" -C releases/linux/ubuntu . + echo "Created Linux archive: i2pd-linux-ubuntu.tar.gz" + else + echo "No Linux artifacts found" + fi + + - name: Organize FreeBSD artifacts + run: | + # Copy FreeBSD artifacts + if [ -d "artifacts/i2pd-freebsd" ]; then + cp -r "artifacts/i2pd-freebsd" releases/freebsd/ + echo "Copied FreeBSD artifacts" + + # Create compressed archive for FreeBSD + tar -czf i2pd-freebsd.tar.gz -C releases/freebsd i2pd-freebsd + echo "Created FreeBSD archive: i2pd-freebsd.tar.gz" + else + echo "No FreeBSD artifacts found" + fi + + - name: Organize macOS artifacts + run: | + # Find and copy macOS (ARM) artifacts + if [ -d "artifacts/i2pd-macos" ]; then + cp -r "artifacts/i2pd-macos" "releases/macos/macos-arm" + echo "Copied macOS ARM artifact" + + # Create compressed archive for macOS ARM build + tar -czf "i2pd-macos-arm.tar.gz" -C releases/macos/macos-arm . + echo "Created macOS ARM archive: i2pd-macos-arm.tar.gz" + else + echo "No macOS ARM artifacts found" + fi + + # Find and copy macOS (Legacy/Intel) artifacts + if [ -d "artifacts/i2pd-macos-legacy" ]; then + cp -r "artifacts/i2pd-macos-legacy" "releases/macos/macos-legacy" + echo "Copied macOS Legacy artifact" + + # Create compressed archive for macOS Legacy build + tar -czf "i2pd-macos-legacy.tar.gz" -C releases/macos/macos-legacy . + echo "Created macOS Legacy archive: i2pd-macos-legacy.tar.gz" + else + echo "No macOS Legacy artifacts found" + fi + + - name: Organize Windows artifacts + run: | + # Find and copy Windows UCRT (x64) artifact + if [ -d "artifacts/i2pd-windows-ucrt" ]; then + echo "Processing Windows UCRT (x64) artifact" + # Create releases/windows/ucrt directory and copy .exe files directly to it + mkdir -p "releases/windows/ucrt" + cp "artifacts/i2pd-windows-ucrt"/*.exe "releases/windows/ucrt/" 2>/dev/null || echo "No .exe files in Windows UCRT artifact or copying failed" + + # Create ZIP archive for Windows UCRT build + if ls "releases/windows/ucrt"/*.exe >/dev/null 2>&1; then + cd "releases/windows/ucrt" + zip -r "../../../i2pd-windows-ucrt.zip" *.exe + cd ../../.. + echo "Created Windows UCRT archive: i2pd-windows-ucrt.zip" + else + echo "No .exe files found in Windows UCRT release directory" + ls -la "releases/windows/ucrt/" 2>/dev/null || echo "Windows UCRT release directory doesn't exist" + fi + else + echo "No Windows UCRT artifacts found" + fi + + # Find and copy Windows ARM64 artifact + if [ -d "artifacts/i2pd-windows-arm64" ]; then + echo "Processing Windows ARM64 artifact" + # Create releases/windows/arm64 directory and copy .exe files directly to it + mkdir -p "releases/windows/arm64" + cp "artifacts/i2pd-windows-arm64"/*.exe "releases/windows/arm64/" 2>/dev/null || echo "No .exe files in Windows ARM64 artifact or copying failed" + + # Create ZIP archive for Windows ARM64 build + if ls "releases/windows/arm64"/*.exe >/dev/null 2>&1; then + cd "releases/windows/arm64" + zip -r "../../../i2pd-windows-arm64.zip" *.exe + cd ../../.. + echo "Created Windows ARM64 archive: i2pd-windows-arm64.zip" + else + echo "No .exe files found in Windows ARM64 release directory" + ls -la "releases/windows/arm64/" 2>/dev/null || echo "Windows ARM64 release directory doesn't exist" + fi + else + echo "No Windows ARM64 artifacts found" + fi + + - name: Prepare release assets + run: | + echo "Listing all release assets:" + ls -la *.tar.gz *.zip 2>/dev/null || echo "No release assets found - will create them from available artifacts" + + - name: Delete previous continuous release assets + run: | + # Get the release ID for the continuous release + RELEASE_ID=$(gh api repos/${{ github.repository }}/releases/tags/continuous --jq '.id' 2>/dev/null || echo "notfound") + if [ "$RELEASE_ID" != "notfound" ] && [ "$RELEASE_ID" != "" ]; then + echo "Found existing continuous release with ID: $RELEASE_ID" + # Get asset IDs and delete them + ASSET_IDS=$(gh api repos/${{ github.repository }}/releases/$RELEASE_ID/assets --jq '.[].id') + for asset_id in $ASSET_IDS; do + if [ ! -z "$asset_id" ]; then + echo "Deleting asset ID: $asset_id" + gh api -X DELETE repos/${{ github.repository }}/releases/assets/$asset_id || true + fi + done + fi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + continue-on-error: true + + - name: Final listing of assets + run: | + echo "Final check for release assets:" + ls -la *.tar.gz *.zip 2>/dev/null || echo "No assets to upload - check if artifacts were processed" + + - name: Update or Create Continuous Release + id: create_release + uses: softprops/action-gh-release@v2 + with: + tag_name: continuous + name: Continuous Release + body: | + Continuous Release Build + + Latest Workflow Run: ${{ github.run_id }} + Commit: ${{ github.sha }} + Updated: $(date -u) + + This release contains build artifacts for multiple platforms: + - Linux (with UPnP ON) + - FreeBSD (with UPnP ON) + - macOS (ARM with UPnP ON) + - macOS (Legacy/Intel with UPnP ON) + - Windows (UCRT x64 variant) + - Windows (ARM64 variant) + + Artifacts include the main executable and all associated utilities. + This release is continuously updated with the latest builds. + draft: false + prerelease: true + make_latest: false + files: | + *.tar.gz + *.zip + fail_on_unmatched_files: false diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 855dc60..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,93 +0,0 @@ -name: Build and Cross-compile - -on: - push: - branches: - - main - - master - tags: - - 'v*' - -jobs: - build: - strategy: - matrix: - os: [ubuntu-latest, macos-latest] - compiler: [clang] - - runs-on: ${{ matrix.os }} - - steps: - - name: Checkout Repository - uses: actions/checkout@v3 - with: - submodules: true - - ####################### - # Ubuntu dependencies # - ####################### - - name: Install dependencies (Ubuntu) - if: matrix.os == 'ubuntu-latest' - run: | - sudo apt update - sudo apt install --no-install-recommends -y build-essential libboost-all-dev libssl-dev git - - ####################### - # macOS dependencies # - #BY VADE = https://github.com/MetanoicArmor - ####################### - - name: Install dependencies (macOS) - if: matrix.os == 'macos-latest' - run: | - brew update - brew install boost openssl@3 cmake make - - ####################### - # Windows dependencies # - ####################### -# - name: Install MSYS2 (Windows) -# if: matrix.os == 'windows-latest' -## uses: msys2/setup-msys2@v2 - # with: - # msystem: CLANG64 - # install: base-devel git mingw-w64-x86_64-clang mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-miniupnpc - # update: true - - - name: Initialize Git Submodules - run: git submodule update --init --recursive - - ####################### - # Build Project - ####################### - - name: Build Project (Ubuntu) - if: matrix.os == 'ubuntu-latest' - run: | - make -j$(nproc) - make stripall - make builddir - - - name: Build Project (macOS) - if: matrix.os == 'macos-latest' - run: | - make HOMEBREW=1 -j8 - make stripall - make builddir - -# - name: Build Project (Windows) -# if: matrix.os == 'windows-latest' -## shell: msys2 {0} - # run: | - # cd "${GITHUB_WORKSPACE}" - # make -j$(nproc) - # make stripall - # make builddir - - ####################### - # Upload binaries - ####################### - - name: Upload binaries - uses: actions/upload-artifact@v4 - with: - name: my-binaries-${{ matrix.os }} - path: build/* - diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..7bfbbb9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,423 @@ +cmake_minimum_required(VERSION 3.7) + + +if(${CMAKE_VERSION} VERSION_LESS 3.22) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +else() + cmake_policy(VERSION 3.22) +endif() + +# for debugging +#set(CMAKE_VERBOSE_MAKEFILE on) + +# paths +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/i2pd/build/cmake_modules") +set(CMAKE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/i2pd") + +set(LIBI2PD_SRC_DIR ${CMAKE_SOURCE_DIR}/libi2pd) +set(LIBI2PD_CLIENT_SRC_DIR ${CMAKE_SOURCE_DIR}/libi2pd_client) +set(LANG_SRC_DIR ${CMAKE_SOURCE_DIR}/i18n) +set(DAEMON_SRC_DIR ${CMAKE_SOURCE_DIR}/daemon) +set(I2PD_TOOLS_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + +include(Version) +set_version("${LIBI2PD_SRC_DIR}/version.h" PROJECT_VERSION) + +project( + i2pd + VERSION ${PROJECT_VERSION} + HOMEPAGE_URL "https://i2pd.website/" + LANGUAGES C CXX +) + +# configurable options +option(WITH_HARDENING "Use hardening compiler flags" OFF) +option(WITH_LIBRARY "Build library" ON) +option(WITH_BINARY "Build binary" ON) +option(WITH_STATIC "Static build" OFF) +option(WITH_UPNP "Include support for UPnP client" OFF) +option(WITH_GIT_VERSION "Use git commit info as version" OFF) +option(WITH_ADDRSANITIZER "Build with address sanitizer unix only" OFF) +option(WITH_THREADSANITIZER "Build with thread sanitizer unix only" OFF) +option(BUILD_TESTING "Build tests" OFF) + +IF(BUILD_TESTING) + enable_testing() +ENDIF() + +# Handle paths nicely +include(GNUInstallDirs) + +# Architecture +include(TargetArch) +target_architecture(ARCHITECTURE) + +include(CheckAtomic) + +if(WITH_STATIC) + if(MSVC) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + endif() +endif() + +include_directories(${LIBI2PD_SRC_DIR}) +FILE(GLOB LIBI2PD_SRC ${LIBI2PD_SRC_DIR}/*.cpp) +add_library(libi2pd ${LIBI2PD_SRC}) +set_target_properties(libi2pd PROPERTIES PREFIX "") + +if(WITH_LIBRARY) + install(TARGETS libi2pd + EXPORT libi2pd + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT Libraries) +endif() + +include_directories(${LIBI2PD_CLIENT_SRC_DIR}) +FILE(GLOB CLIENT_SRC ${LIBI2PD_CLIENT_SRC_DIR}/*.cpp) +add_library(libi2pdclient ${CLIENT_SRC}) +set_target_properties(libi2pdclient PROPERTIES PREFIX "") + +if(WITH_LIBRARY) + install(TARGETS libi2pdclient + EXPORT libi2pdclient + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT Libraries) +endif() + +include_directories(${LANG_SRC_DIR}) +FILE(GLOB LANG_SRC ${LANG_SRC_DIR}/*.cpp) +add_library(libi2pdlang ${LANG_SRC}) +set_target_properties(libi2pdlang PROPERTIES PREFIX "") + +if(WITH_LIBRARY) + install(TARGETS libi2pdlang + EXPORT libi2pdlang + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT Libraries) +endif() + +include_directories(${DAEMON_SRC_DIR}) + +set(DAEMON_SRC + "${DAEMON_SRC_DIR}/Daemon.cpp" + "${DAEMON_SRC_DIR}/HTTPServer.cpp" + "${DAEMON_SRC_DIR}/I2PControl.cpp" + "${DAEMON_SRC_DIR}/I2PControlHandlers.cpp" + "${DAEMON_SRC_DIR}/i2pd.cpp" + "${DAEMON_SRC_DIR}/UPnP.cpp" +) + +if(WIN32) + set(WIN32_SRC_DIR ${CMAKE_SOURCE_DIR}/Win32) + include_directories(${WIN32_SRC_DIR}) + + list(APPEND DAEMON_SRC + "${WIN32_SRC_DIR}/DaemonWin32.cpp" + "${WIN32_SRC_DIR}/Win32App.cpp" + "${WIN32_SRC_DIR}/Win32Service.cpp" + "${WIN32_SRC_DIR}/Win32NetState.cpp" + ) + + file(GLOB WIN32_RC ${WIN32_SRC_DIR}/*.rc) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN32_APP -DWIN32_LEAN_AND_MEAN -DNOMINMAX") + +endif() + +if(WITH_UPNP) + add_definitions(-DUSE_UPNP) +endif() + +if(WITH_GIT_VERSION) + include(GetGitRevisionDescription) + git_describe(GIT_VERSION) + add_definitions(-DGITVER=${GIT_VERSION}) +endif() + +if(APPLE) + add_definitions(-DMAC_OSX) +endif() + +if(HAIKU) + add_definitions(-D_DEFAULT_SOURCE -D_GNU_SOURCE) +endif() + +if(MSVC) + add_definitions(-DWINVER=0x0600) + add_definitions(-D_WIN32_WINNT=0x0600) +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Winvalid-pch -Wno-unused-parameter -Wno-uninitialized") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -pedantic") + # TODO: The following is incompatible with static build and enabled hardening for OpenWRT. + # Multiple definitions of __stack_chk_fail(libssp & libc) + if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -flto -s") + endif() + set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -ffunction-sections -fdata-sections") + set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "-Wl,--gc-sections") # -flto is added from above +endif() + +if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe") + if(WITH_HARDENING) + add_definitions("-D_FORTIFY_SOURCE=2") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat -Wformat-security -Werror=format-security") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector --param ssp-buffer-size=4") + endif() +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + # more tweaks + if(LINUX) + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -stdlib=libstdc++") # required for + list(APPEND CMAKE_REQUIRED_LIBRARIES "stdc++") # required to link with -stdlib=libstdc++ + endif() + if(NOT APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-const-variable -Wno-overloaded-virtual -Wno-c99-extensions") + endif() +endif() + +# compiler flags customization(by system) +if(UNIX) + list(APPEND DAEMON_SRC "${DAEMON_SRC_DIR}/UnixDaemon.cpp") + if(NOT(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR APPLE)) + # "'sleep_for' is not a member of 'std::this_thread'" in gcc 4.7/4.8 + add_definitions("-D_GLIBCXX_USE_NANOSLEEP=1") + endif() +endif() + +if(WITH_ADDRSANITIZER) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") +endif() + +if(WITH_THREADSANITIZER) + if(WITH_ADDRSANITIZER) + message(FATAL_ERROR "thread sanitizer option cannot be combined with address sanitizer") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=thread") + endif() +endif() + +if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0 AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0) # gcc 8-9 + list(APPEND CMAKE_REQUIRED_LIBRARIES "stdc++fs") +endif() + +# Use std::atomic instead of GCC builtins on macOS PowerPC: +# For more information refer to: https://github.com/PurpleI2P/i2pd/issues/1726#issuecomment-1306335111 +# This has been fixed in Boost 1.81, nevertheless we retain the setting for the sake of compatibility. +if(APPLE AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc") + add_definitions(-DBOOST_SP_USE_STD_ATOMIC) +endif() + +# libraries +set(THREADS_PREFER_PTHREAD_FLAG ON) +find_package(Threads REQUIRED) + +if(WITH_STATIC) + if(NOT MSVC) + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + endif() + + set(Boost_USE_STATIC_LIBS ON) + if(MSVC) + set(Boost_USE_STATIC_RUNTIME ON) + else() + set(Boost_USE_STATIC_RUNTIME OFF) + endif() + + if(MSVC) + set(OPENSSL_MSVC_STATIC_RT ON) + endif() + set(OPENSSL_USE_STATIC_LIBS ON) + + set(ZLIB_USE_STATIC_LIBS ON) + if(MSVC) + set(ZLIB_NAMES zlibstatic zlibstat) + else() + set(ZLIB_NAMES libz zlibstatic zlibstat zlib z) + endif() + + if(WITH_UPNP) + set(MINIUPNPC_USE_STATIC_LIBS ON) + add_definitions(-DMINIUPNP_STATICLIB) + endif() + + set(BUILD_SHARED_LIBS OFF) + + if(${CMAKE_CXX_COMPILER} MATCHES ".*-openwrt-.*") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") + # set(CMAKE_THREAD_LIBS_INIT "gcc_eh -Wl,--whole-archive -lpthread -Wl,--no-whole-archive") + set(CMAKE_THREAD_LIBS_INIT "gcc_eh -Wl,-u,pthread_create,-u,pthread_once,-u,pthread_mutex_lock,-u,pthread_mutex_unlock,-u,pthread_join,-u,pthread_equal,-u,pthread_detach,-u,pthread_cond_wait,-u,pthread_cond_signal,-u,pthread_cond_destroy,-u,pthread_cond_broadcast,-u,pthread_cancel") + endif() +else() + # TODO: Consider separate compilation for LIBI2PD_SRC for library. + # No need in -fPIC overhead for binary if not interested in library + # HINT: revert c266cff CMakeLists.txt: compilation speed up + if(NOT MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") + endif() + add_definitions(-DBOOST_ATOMIC_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_PROGRAM_OPTIONS_DYN_LINK) + if(WIN32) + set(Boost_USE_STATIC_LIBS OFF) + set(Boost_USE_STATIC_RUNTIME OFF) + endif() +endif() + +find_package(Boost REQUIRED COMPONENTS filesystem program_options) +if(NOT DEFINED Boost_FOUND) + message(SEND_ERROR "Boost is not found, or your boost version was below 1.46. Please download Boost!") +endif() + +find_package(OpenSSL REQUIRED) +if(NOT DEFINED OPENSSL_FOUND) + message(SEND_ERROR "Could not find OpenSSL. Please download and install it first!") +endif() + +if(OPENSSL_VERSION VERSION_GREATER_EQUAL "3.0.0") + add_definitions(-DOPENSSL_SUPPRESS_DEPRECATED) +endif() + +if(WITH_UPNP) + find_package(MiniUPnPc REQUIRED) + if(NOT MINIUPNPC_FOUND) + message(SEND_ERROR "Could not find MiniUPnPc. Please download and install it first!") + else() + include_directories(SYSTEM ${MINIUPNPC_INCLUDE_DIR}) + endif() +endif() + +find_package(ZLIB) +if(ZLIB_FOUND) + link_directories(${ZLIB_ROOT}/lib) +endif() + +# C++ standard to use, based on compiler and version of boost +if(NOT MSVC) +# check for c++20 & c++17 support + include(CheckCXXCompilerFlag) + + if(Boost_VERSION VERSION_GREATER_EQUAL "1.83") # min boost version for c++20 + CHECK_CXX_COMPILER_FLAG("-std=c++20" CXX20_SUPPORTED) + endif() + CHECK_CXX_COMPILER_FLAG("-std=c++17" CXX17_SUPPORTED) + + + if(CXX20_SUPPORTED) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20") + elseif(CXX17_SUPPORTED) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") + else() + message(SEND_ERROR "C++20 nor C++17 standard not seems to be supported by compiler. Too old version?") + endif() +endif() + +# load includes +include_directories(SYSTEM ${Boost_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}) + +# show summary +message(STATUS "---------------------------------------") +message(STATUS "Build type : ${CMAKE_BUILD_TYPE}") +message(STATUS "Compiler vendor : ${CMAKE_CXX_COMPILER_ID}") +message(STATUS "Compiler version : ${CMAKE_CXX_COMPILER_VERSION}") +message(STATUS "Compiler path : ${CMAKE_CXX_COMPILER}") +message(STATUS "Architecture : ${ARCHITECTURE}") +message(STATUS "Compiler flags : ${CMAKE_CXX_FLAGS}") +message(STATUS "Install prefix: : ${CMAKE_INSTALL_PREFIX}") +message(STATUS "Options:") +message(STATUS " HARDENING : ${WITH_HARDENING}") +message(STATUS " LIBRARY : ${WITH_LIBRARY}") +message(STATUS " BINARY : ${WITH_BINARY}") +message(STATUS " STATIC BUILD : ${WITH_STATIC}") +message(STATUS " UPnP : ${WITH_UPNP}") +if(WITH_GIT_VERSION) +message(STATUS " GIT VERSION : ${WITH_GIT_VERSION} (${GIT_VERSION})") +else() +message(STATUS " GIT VERSION : ${WITH_GIT_VERSION}") +endif() +message(STATUS " ADDRSANITIZER : ${WITH_ADDRSANITIZER}") +message(STATUS " THREADSANITIZER : ${WITH_THREADSANITIZER}") +message(STATUS "---------------------------------------") + +if(WITH_BINARY) + if(WIN32) + add_executable("${PROJECT_NAME}" WIN32 ${DAEMON_SRC} ${WIN32_RC}) + else() + add_executable("${PROJECT_NAME}" ${DAEMON_SRC}) + endif() + + if(WIN32) + list(APPEND MINGW_EXTRA "wsock32" "ws2_32" "iphlpapi") + # OpenSSL may require Crypt32 library on MSVC build, which is not added by CMake lesser than 3.21 + if(MSVC AND ${CMAKE_VERSION} VERSION_LESS 3.21) + list(APPEND MINGW_EXTRA "crypt32") + endif() + endif() + + if(WITH_STATIC) + if(NOT MSVC) + set_target_properties("${PROJECT_NAME}" PROPERTIES LINK_FLAGS "-static") + endif() + endif() + + if(WITH_HARDENING AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set_target_properties("${PROJECT_NAME}" PROPERTIES LINK_FLAGS "-z relro -z now") + endif() + + # FindBoost pulls pthread for thread which is broken for static linking at least on Ubuntu 15.04 + list(GET Boost_LIBRARIES -1 LAST_Boost_LIBRARIES) + if(${LAST_Boost_LIBRARIES} MATCHES ".*pthread.*") + list(REMOVE_AT Boost_LIBRARIES -1) + endif() + + # synchronization library is incompatible with Windows 7 + if(WIN32) + get_target_property(BOOSTFSLIBS Boost::filesystem INTERFACE_LINK_LIBRARIES) + list(REMOVE_ITEM BOOSTFSLIBS synchronization) + set_target_properties(Boost::filesystem PROPERTIES INTERFACE_LINK_LIBRARIES "${BOOSTFSLIBS}") + endif() + + if(WITH_STATIC) + set(DL_LIB ${CMAKE_DL_LIBS}) + endif() + + target_link_libraries("${PROJECT_NAME}" libi2pd libi2pdclient libi2pdlang ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto ${MINIUPNPC_LIBRARY} ZLIB::ZLIB Threads::Threads ${MINGW_EXTRA} ${DL_LIB} ${CMAKE_REQUIRED_LIBRARIES}) + + install(TARGETS "${PROJECT_NAME}" RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Runtime) + set(APPS "\${CMAKE_INSTALL_PREFIX}/bin/${PROJECT_NAME}${CMAKE_EXECUTABLE_SUFFIX}") + set(DIRS "${Boost_LIBRARY_DIR};${OPENSSL_INCLUDE_DIR}/../bin;${ZLIB_INCLUDE_DIR}/../bin;/mingw32/bin") +endif() + +if(BUILD_TESTING) + add_subdirectory(${CMAKE_SOURCE_DIR}/tests ${CMAKE_CURRENT_BINARY_DIR}/tests) +endif() + +set(TOOLS + vain + keygen + keyinfo + famtool + routerinfo + regaddr + regaddr_3ld + i2pbase64 + offlinekeys + b33address + regaddralias + x25519 + verifyhost + autoconf +) + +foreach(tool IN LISTS TOOLS) + add_executable(${tool} ${I2PD_TOOLS_DIR}/${tool}.cpp) + add_dependencies(${tool} libi2pd) + + target_link_libraries(${tool} libi2pd libi2pdclient libi2pdlang ${Boost_LIBRARIES} OpenSSL::SSL OpenSSL::Crypto ${MINIUPNPC_LIBRARY} ZLIB::ZLIB Threads::Threads ${MINGW_EXTRA} ${DL_LIB} ${CMAKE_REQUIRED_LIBRARIES}) + + # routerinfo and famtool want -latomic on Linux/FreeBSD + #if((IS_LINUX OR IS_FREEBSD) AND (${tool} STREQUAL "routerinfo" OR ${tool} STREQUAL "famtool")) + # target_link_libraries(${tool} atomic) + #endif() +endforeach() From 85513332eb38639dd1ee05f2a2deea719499a23c Mon Sep 17 00:00:00 2001 From: Lunar Date: Thu, 16 Oct 2025 21:48:13 +1000 Subject: [PATCH 13/15] make it only trigger workflows when committing main branches --- .github/workflows/build-and-release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 9433a13..0395f61 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -3,7 +3,9 @@ name: Build All Platforms and Release on: push: branches: - - '*' + - 'master' + - 'main' + - 'trunk' tags: - '*' pull_request: From 74006b8710a7d4a40ba06a85d1866d7b3dcc1f71 Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 16:03:41 +0300 Subject: [PATCH 14/15] sonya comment --- .github/workflows/build-and-release.yml | 12 ++++++------ .gitignore | 1 + Makefile | 12 ++++++------ autoconf.cpp => autoconf_i2pd.cpp | 0 4 files changed, 13 insertions(+), 12 deletions(-) rename autoconf.cpp => autoconf_i2pd.cpp (100%) diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml index 0395f61..446610f 100644 --- a/.github/workflows/build-and-release.yml +++ b/.github/workflows/build-and-release.yml @@ -55,7 +55,7 @@ jobs: build/regaddralias build/x25519 build/verifyhost - build/autoconf + build/autoconf_i2pd build-macos: name: Build macOS with UPnP ON @@ -106,7 +106,7 @@ jobs: build/regaddralias build/x25519 build/verifyhost - build/autoconf + build/autoconf_i2pd build-macos-legacy: name: Build macOS Legacy with UPnP ON @@ -157,7 +157,7 @@ jobs: build/regaddralias build/x25519 build/verifyhost - build/autoconf + build/autoconf_i2pd build-freebsd: name: Build FreeBSD with UPnP ON @@ -203,7 +203,7 @@ jobs: build/regaddralias build/x25519 build/verifyhost - build/autoconf + build/autoconf_i2pd build-windows-ucrt: name: Build Windows UCRT x64 @@ -251,7 +251,7 @@ jobs: ./regaddralias.exe ./x25519.exe ./verifyhost.exe - ./autoconf.exe + ./autoconf_i2pd.exe build-windows-arm: name: Build Windows ARM64 @@ -299,7 +299,7 @@ jobs: ./regaddralias.exe ./x25519.exe ./verifyhost.exe - ./autoconf.exe + ./autoconf_i2pd.exe release: name: Create Continuous Release diff --git a/.gitignore b/.gitignore index 38d6a5d..83870eb 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ offlinekeys regaddr_3ld verifyhost x25519 +autoconf_i2pd *.exe # private key files diff --git a/Makefile b/Makefile index ce72543..ab9d3b3 100755 --- a/Makefile +++ b/Makefile @@ -49,13 +49,13 @@ endif # ------------------------- # Targets # ------------------------- -all: $(I2PD_LIB) vain keygen keyinfo famtool routerinfo regaddr regaddr_3ld i2pbase64 offlinekeys b33address regaddralias x25519 verifyhost autoconf +all: $(I2PD_LIB) vain keygen keyinfo famtool routerinfo regaddr regaddr_3ld i2pbase64 offlinekeys b33address regaddralias x25519 verifyhost autoconf_i2pd vain: vain.o $(I2PD_LIB) $(CXX) -o vain $(LDFLAGS) vain.o $(LDLIBS) -autoconf: autoconf.o $(I2PD_LIB) - $(CXX) -o autoconf $(DEFINES) $(LDFLAGS) autoconf.o $(LDLIBS) +autoconf_i2pd: autoconf_i2pd.o $(I2PD_LIB) + $(CXX) -o autoconf_i2pd $(DEFINES) $(LDFLAGS) autoconf_i2pd.o $(LDLIBS) routerinfo: routerinfo.o $(I2PD_LIB) $(CXX) -o routerinfo $(LDFLAGS) routerinfo.o $(LDLIBS) @@ -117,14 +117,14 @@ clean-obj: rm -f $(wildcard *.o) stripall: - strip b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf + strip b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf_i2pd builddir: mkdir -p build - mv b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf build/ || true + mv b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf_i2pd build/ || true clean-bin: - rm -f b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf + rm -f b33address famtool i2pbase64 keygen keyinfo offlinekeys regaddr regaddr_3ld regaddralias routerinfo x25519 verifyhost vain autoconf_i2pd clean: clean-i2pd clean-obj clean-bin diff --git a/autoconf.cpp b/autoconf_i2pd.cpp similarity index 100% rename from autoconf.cpp rename to autoconf_i2pd.cpp From 34571221db5a824e16f165f57bfbf200124d1deb Mon Sep 17 00:00:00 2001 From: wipedlifepotato <60944239+wipedlifepotato@users.noreply.github.com> Date: Thu, 16 Oct 2025 16:06:35 +0300 Subject: [PATCH 15/15] fix cmakelist --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7bfbbb9..f469526 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -407,7 +407,7 @@ set(TOOLS regaddralias x25519 verifyhost - autoconf + autoconf_i2pd ) foreach(tool IN LISTS TOOLS)