diff --git a/.claude/settings.local.json b/.claude/settings.local.json deleted file mode 100644 index eccd2a4..0000000 --- a/.claude/settings.local.json +++ /dev/null @@ -1,171 +0,0 @@ -{ - "permissions": { - "allow": [ - "Bash(git clone:*)", - "Bash(git init:*)", - "Bash(git remote add:*)", - "Bash(git fetch:*)", - "Bash(git checkout:*)", - "Bash(git config:*)", - "Bash(git -C \"E:\\\\repos\\\\triangles_old\" log --oneline --all)", - "Bash(git -C \"E:\\\\repos\\\\triangles_old\" branch -a)", - "Bash(git -C \"E:\\\\repos\\\\triangles_old\" log --oneline --all --graph)", - "Bash(git -C \"E:\\\\repos\\\\triangles_old\" show 7676e66 --stat)", - "Bash(python:*)", - "Bash(where:*)", - "Bash(powershell:*)", - "Bash(C:/msys64/usr/bin/bash.exe -lc \"pacman -Syu --noconfirm\")", - "Bash(C:/msys64/usr/bin/bash.exe -lc \"pacman -S --needed --noconfirm mingw-w64-x86_64-toolchain make\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"ls /mingw64/lib/libboost_system*.a 2>/dev/null; ls /mingw64/lib/cmake/boost_system* 2>/dev/null; ls /mingw64/lib/libboost*.a 2>/dev/null | head -10\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /c/Qt/deps/openssl-1.0.2u && make -j4 2>&1 | tail -10\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && mingw32-make -j4 2>&1 | tail -40\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && mingw32-make -j1 2>&1 | grep ''error:'' | grep -v ''bignum'' | sort -u | head -30\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && mingw32-make -j4 2>&1 | grep ''error:'' | sort -u | head -30\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"grep ''MINIUPNPC_API_VERSION'' /mingw64/include/miniupnpc/miniupnpc.h\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"grep -A3 ''upnpDiscover\\('' /mingw64/include/miniupnpc/miniupnpc.h | head -10\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"grep -B1 -A5 ''UPNP_GetValidIGD\\('' /mingw64/include/miniupnpc/miniupnpc.h\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && qmake-qt5 triangles-qt.pro 2>&1 | tail -5 && mingw32-make -j4 2>&1 | grep ''error:'' | sort -u | head -30\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && mingw32-make clean 2>&1 | tail -5 && qmake triangles-qt.pro 2>&1 && mingw32-make -j4 2>&1 | grep ''error:'' | sort -u | head -40\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"export PATH=/mingw64/bin:$PATH && cd /e/repos/triangles && rm -f build/*.o build/*.cpp 2>/dev/null; qmake triangles-qt.pro && mingw32-make -j4 2>&1 | grep ''error:'' | sort -u | head -40\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && rm -f build/*.o build/*.cpp 2>/dev/null; /mingw64/bin/qmake triangles-qt.pro && mingw32-make -j4 2>&1 | grep ''error:'' | sort -u | head -40\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"which qmake 2>/dev/null || ls /mingw64/bin/qmake* 2>/dev/null || ls /mingw64/share/qt5/bin/qmake* 2>/dev/null || find /mingw64 -name ''qmake*'' -type f 2>/dev/null | head -5\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && rm -f build/*.o build/*.cpp 2>/dev/null; qmake-qt5 triangles-qt.pro && mingw32-make -j4 2>&1 | grep ''error:'' | sort -u | head -40\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && mingw32-make -j4 2>&1 | grep ''error:'' | sort -u | head -40\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && mingw32-make -j4 2>&1 | grep -E ''error:'' | sort -u | head -40\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"find /e/repos/triangles -name ''*.exe'' -type f 2>/dev/null; ls -la /e/repos/triangles/release/ 2>/dev/null; ls -la /e/repos/triangles/debug/ 2>/dev/null\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && mingw32-make -j4 2>&1 | tail -60\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"pacman -S --noconfirm mingw-w64-x86_64-qt5-tools 2>&1 | tail -10\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"which lrelease 2>/dev/null; which lrelease-qt5 2>/dev/null; ls /mingw64/bin/lrelease* 2>/dev/null\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"ln -sf /mingw64/bin/lrelease-qt5.exe /mingw64/bin/lrelease.exe 2>/dev/null; ls -la /mingw64/bin/lrelease.exe\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && mingw32-make -j4 2>&1 | tail -80\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && qmake-qt5 triangles-qt.pro && mingw32-make -j4 2>&1 | tail -30\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"find /mingw64/lib -name ''*boost_system*'' 2>/dev/null\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"find /mingw64/lib -name ''libboost_*'' -name ''*.a'' 2>/dev/null | head -20\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && rm -f build/net.o && mingw32-make -j4 2>&1 | tail -20\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"ls -la /e/repos/triangles/release/triangles-qt.exe\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles/release && ldd triangles-qt.exe 2>/dev/null | grep mingw64\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles/release && ./triangles-qt.exe &\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"identify /e/repos/triangles/src/qt/res/images/header_logo.png 2>/dev/null || file /e/repos/triangles/src/qt/res/images/header_logo.png\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"ls -la /e/repos/triangles/src/qt/res/images/ | grep -i header\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cp ''/e/TRI/TRI logo w name new1 \\(300 x 63 px\\).png'' ''/e/repos/triangles/src/qt/res/images/header_logo.png'' && file ''/e/repos/triangles/src/qt/res/images/header_logo.png''\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"taskkill //IM triangles-qt.exe //F 2>/dev/null; echo done\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && qmake-qt5 triangles-qt.pro && mingw32-make -j4 2>&1 | tail -10\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles/src/qt/locale && sed -i ''s|https://bittrex.com/Market/Index?MarketName=BTC-TRI|https://313.cash|g'' *.ts && sed -i ''s|TRI on Bittrex|TRI on Pinball|g'' *.ts && echo done\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cp ''/e/TRI/Copy of TRI logo w name new4 \\(300x63\\).png'' ''/e/repos/triangles/src/qt/res/images/header_logo.png'' && file ''/e/repos/triangles/src/qt/res/images/header_logo.png''\")", - "Bash(git add:*)", - "Bash(git push)", - "Bash(git remote set-url:*)", - "Bash(git -c http.sslVerify=false push)", - "Bash(git -c credential.helper= push)", - "Bash(ls:*)", - "Bash(cmd /c \"set PATH=C:\\\\msys64\\\\mingw64\\\\bin;C:\\\\msys64\\\\usr\\\\bin;%PATH% && where qmake && where mingw32-make && where g++\")", - "Bash(PATH=\"/c/msys64/mingw64/bin:/c/msys64/usr/bin:$PATH\")", - "Bash(qmake-qt5:*)", - "Bash(mingw32-make:*)", - "Bash(ldd:*)", - "Bash(objdump:*)", - "Bash(/c/msys64/mingw64/bin/objdump.exe:*)", - "Bash(tasklist:*)", - "Bash(cmd.exe /c \"start /b E:\\\\repos\\\\triangles\\\\release\\\\triangles-qt.exe -datadir=E:\\\\Coins\\\\TRI -reindex\")", - "Bash(gcc:*)", - "Bash(/c/msys64/mingw64/bin/gcc.exe:*)", - "Bash(cmd.exe:*)", - "Bash(PATH=\"/c/msys64/mingw64/bin:$PATH\" /e/repos/triangles/scan_chain_tip.exe:*)", - "Bash(PATH=\"/c/msys64/mingw64/bin:$PATH\" /c/msys64/mingw64/bin/qmake.exe:*)", - "Bash(PATH=\"/c/msys64/mingw64/bin:$PATH\" qmake-qt5:*)", - "Bash(PATH=\"/c/msys64/mingw64/bin:$PATH\" mingw32-make:*)", - "Bash(export PATH=\"/c/msys64/mingw64/bin:$PATH\")", - "Bash(\"C:/msys64/mingw64/bin/qmake-qt5.exe\" triangles-qt.pro -o Makefile)", - "Bash(gh release create:*)", - "Bash(gh repo view:*)", - "Bash(gh repo create:*)", - "Bash(git commit:*)", - "Bash(git branch:*)", - "Bash(git push:*)", - "Bash(gh repo fork:*)", - "Bash(gh api:*)", - "Bash(gh auth:*)", - "Bash(1 <<'EOF'\n{\"visibility\":\"public\"}\nEOF)", - "Bash(findstr:*)", - "Bash(gh workflow run:*)", - "Bash(gh run watch:*)", - "Bash(gh run view:*)", - "Bash(gh release view:*)", - "Bash(gh run download:*)", - "Bash(gh release upload:*)", - "Bash(gh release delete-asset:*)", - "Bash(C:/msys64/mingw64/bin/mingw32-make.exe:*)", - "Bash(C:/msys64/usr/bin/env.exe MSYSTEM=MINGW64 PATH=\"/mingw64/bin:/usr/bin:/bin\" /usr/bin/bash -lc \"cd /e/repos/triangles/src && mingw32-make -f makefile.mingw -j8 all 2>&1 | tail -60\")", - "Bash(C:/msys64/usr/bin/env.exe MSYSTEM=MINGW64 /usr/bin/bash -lc \"ls /mingw64/lib/libboost_system*\")", - "Bash(C:/msys64/usr/bin/env.exe MSYSTEM=MINGW64 PATH=\"/mingw64/bin:/usr/bin:/bin\" /usr/bin/bash -lc \"cd /e/repos/triangles/src && mingw32-make -f makefile.mingw trianglesd.exe 2>&1 | tail -20\")", - "Bash(C:/msys64/usr/bin/env.exe MSYSTEM=MINGW64 PATH=\"/mingw64/bin:/usr/bin:/bin\" /usr/bin/bash -lc \"cd /e/repos/triangles/src && mingw32-make -f makefile.mingw trianglesd.exe 2>&1 | tail -10\")", - "Bash(gh run list:*)", - "Bash(git rm:*)", - "Bash(wc:*)", - "Bash(C:/msys64/usr/bin/bash.exe -lc \"cd /e/repos/triangles/src && make -f makefile.mingw obj/rest.o 2>&1 | head -80\")", - "Bash(C:/msys64/usr/bin/bash.exe -lc \"cd /e/repos/triangles/src && make -f makefile.mingw obj/trianglesrpc.o 2>&1 | tail -20\")", - "Bash(C:/msys64/usr/bin/bash.exe -lc \"cd /e/repos/triangles/src && make -f makefile.mingw 2>&1 | tail -30\")", - "Bash(node --version:*)", - "Bash(npm --version:*)", - "Bash(npm install:*)", - "Bash(npx svelte-kit sync:*)", - "Bash(npx vite build)", - "Bash(nslookup:*)", - "Bash(tailscale ping:*)", - "Bash(del /f \"%APPDATA%\\\\triangles\\\\peers.dat\")", - "Bash(C:msys64usrbinbash.exe -l -c \"cd ''e:/repos/triangles'' && qmake triangles-qt.pro ''USE_QRCODE=1'' ''USE_UPNP=-'' 2>&1 | tail -20\")", - "Bash(C:msys64msys2_shell.cmd -mingw64 -defterm -no-start -c \"cd /e/repos/triangles && qmake triangles-qt.pro ''USE_QRCODE=1'' ''USE_UPNP=-'' 2>&1 | tail -20\")", - "Bash(\"C:\\\\msys64\\\\mingw64\\\\bin\\\\bash.exe\" -c \"export PATH=/mingw64/bin:/usr/bin:$PATH && cd /e/repos/triangles && qmake triangles-qt.pro ''USE_QRCODE=1'' ''USE_UPNP=-'' 2>&1\")", - "Bash(C:/msys64/mingw64/bin/qmake.exe:*)", - "Bash(/c/msys64/mingw64/bin/qmake-qt5.exe:*)", - "Bash(/c/msys64/usr/bin/env.exe MSYSTEM=MINGW64 /c/msys64/usr/bin/bash.exe -l -c \"cd /e/repos/triangles && qmake triangles-qt.pro ''USE_QRCODE=1'' ''USE_UPNP=-'' 2>&1 | tail -5\")", - "Bash(export PATH=\"/c/msys64/mingw64/bin:/c/msys64/usr/bin:$PATH\")", - "Bash(/c/msys64/usr/bin/env.exe MSYSTEM=MINGW64 /c/msys64/usr/bin/bash.exe:*)", - "Bash(C:/msys64/usr/bin/bash.exe -l -c \"cd /e/repos/triangles && make release 2>&1 | grep -E ''error|Error|undefined|cannot find'' | head -20\")", - "Bash(C:/msys64/usr/bin/bash.exe -l -c \"pacman -Qs qrencode\")", - "Bash(C:/msys64/usr/bin/bash.exe -l -c \"pacman -S --noconfirm mingw-w64-x86_64-qrencode\")", - "Bash(C:/msys64/usr/bin/bash.exe -l -c \"cd /e/repos/triangles && qmake-qt5 -o Makefile triangles-qt.pro USE_QRCODE=0 USE_UPNP=- 2>&1\")", - "Bash(C:/msys64/usr/bin/bash.exe -l -c \"ls /mingw64/lib/libqrencode*\")", - "Bash(C:/msys64/usr/bin/bash.exe -l -c \"pacman -S --noconfirm mingw-w64-x86_64-cmake\")", - "Bash(C:/msys64/usr/bin/bash.exe -l -c \"cd /tmp && pacman -Sp mingw-w64-x86_64-qrencode 2>/dev/null\")", - "Bash(C:/msys64/usr/bin/bash.exe -l -c \"cd /e/repos/triangles && mkdir -p dist && cp release/triangles-qt.exe dist/ && cd dist && strip triangles-qt.exe && ls -lh triangles-qt.exe\")", - "Bash(C:/msys64/usr/bin/bash.exe -l -c \"cd /e/repos/triangles/dist && ldd triangles-qt.exe | grep mingw64 | awk ''{print $3}''\")", - "Bash(C:/msys64/usr/bin/bash.exe -l -c 'cd /e/repos/triangles/dist && ldd triangles-qt.exe | grep mingw64 | awk \"\"{print \\\\$3}\"\"')", - "Bash(C:/msys64/usr/bin/bash.exe -l -c \"cd /e/repos/triangles/dist && ldd triangles-qt.exe | grep mingw64\")", - "Bash(C:/msys64/usr/bin/bash.exe -l -c 'cd /e/repos/triangles/dist && ldd triangles-qt.exe | grep mingw64 | sed \"\"s/.*=> //\"\" | sed \"\"s/ \\(.*//\"\"> dlls.txt && while read dll; do cp \"\"$dll\"\" .; done < dlls.txt && ls *.dll | wc -l && echo \"\"DLLs copied\"\"')", - "Bash(C:/msys64/usr/bin/bash.exe -l -c 'cd /e/repos/triangles/dist && mkdir -p platforms && cp /mingw64/share/qt5/plugins/platforms/qwindows.dll platforms/ && echo \"\"Qt platform plugin copied\"\"')", - "Bash(C:/msys64/usr/bin/bash.exe -l -c 'cd /e/repos/triangles && rm -f Triangles-v5.1.8-win-x64.zip && cd dist && 7z a ../Triangles-v5.1.8-win-x64.zip triangles-qt.exe *.dll platforms/ && echo \"\"ZIP created\"\"')", - "Bash(C:/msys64/usr/bin/bash.exe -l -c \"cd /e/repos/triangles && make -j4 2>&1 | tail -15\")", - "Bash(pacman:*)", - "Bash(tar:*)", - "WebFetch(domain:src-ref.docs.torproject.org)", - "WebFetch(domain:gitlab.torproject.org)", - "Bash(git status:*)", - "Bash(git stash:*)", - "Bash(git pull:*)", - "Bash(git stash pop:*)", - "Bash(find:*)", - "Read(//e/repos/triangles/**)", - "Bash(curl:*)", - "Bash(qmake:*)", - "Bash(/c/msys64/mingw64/bin/mingw32-make.exe:*)", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"cd /e/repos/triangles && make -j1 2>&1 | tail -30\")", - "Bash(C:/msys64/msys2_shell.cmd -defterm -no-start -mingw64 -c \"cd /e/repos/triangles && rm -f build/main.o && mingw32-make -f Makefile.Release build/main.o 2>&1 | grep -E ''^\\(src/|.*error\\)'' | head -10\")", - "Bash(C:/msys64/msys2_shell.cmd -defterm -no-start -mingw64 -c \"cd /e/repos/triangles && ls -la build/main.o 2>&1\")", - "Bash(git -C \"e:\\\\repos\\\\triangles\" log --oneline -20)", - "Bash(git -C \"e:\\\\repos\\\\triangles\" describe --tags --abbrev=0)", - "Bash(git -C \"e:\\\\repos\\\\triangles\" rev-parse --short HEAD)", - "Bash(PATH=\"/c/msys64/mingw64/bin:$PATH\" which make:*)", - "Bash(export PATH=\"/mingw64/bin:$PATH\")", - "Bash(make:*)", - "Bash(C:/msys64/usr/bin/env.exe PATH=\"C:/msys64/mingw64/bin:C:/msys64/usr/bin\" C:/msys64/usr/bin/make.exe:*)", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -c \"cd /e/repos/triangles && make -f Makefile.Release -j8 2>&1 | tail -40\")", - "Bash(C:/msys64/msys2_shell.cmd -mingw64 -defterm -no-start -here -c \"make 2>&1 | tail -10\")", - "Bash(gh pr list:*)", - "Bash(gh pr view:*)", - "Bash(cmd //C \"powershell -NoProfile -Command \"\"Get-Process | Where-Object { $_.Path -like ''*triangles*'' } | Format-Table Id, ProcessName, Path\"\"\")", - "Bash(cmd //C \"tasklist /FI \"\"IMAGENAME eq triangles-qt.exe\"\"\")", - "Bash(MSYS_NO_PATHCONV=1 tasklist:*)" - ] - } -} diff --git a/.github/workflows/build-all.yml b/.github/workflows/build-all.yml index 050cd5a..b962137 100644 --- a/.github/workflows/build-all.yml +++ b/.github/workflows/build-all.yml @@ -18,21 +18,24 @@ jobs: - name: Install dependencies run: | sudo apt-get update - sudo apt-get install -y build-essential libboost-all-dev \ - libssl-dev libdb++-dev libleveldb-dev libevent-dev libminiupnpc-dev + sudo apt-get install -y build-essential cmake ninja-build \ + libboost-all-dev libssl-dev libdb++-dev libleveldb-dev \ + libevent-dev libminiupnpc-dev zlib1g-dev - - name: Build LevelDB + - name: Configure run: | - cd src/leveldb - chmod +x build_detect_platform - make clean || true - make OPT="-O2" libleveldb.a libmemenv.a + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_QT=OFF \ + -DBUILD_DAEMON=ON \ + -DBUILD_TESTS=ON \ + -DUSE_UPNP=OFF - - name: Build and run unit tests - run: | - cd src - make -f makefile.unix test -j$(nproc) - ./test_triangles --log_level=test_suite 2>&1 || true + - name: Build + run: cmake --build build -j$(nproc) + + - name: Run unit tests + run: cd build && ctest --output-on-failure || true build-windows-qt: runs-on: windows-latest @@ -48,6 +51,8 @@ jobs: update: true install: >- mingw-w64-x86_64-gcc + mingw-w64-x86_64-cmake + mingw-w64-x86_64-ninja mingw-w64-x86_64-qt5-base mingw-w64-x86_64-qt5-tools mingw-w64-x86_64-boost @@ -55,13 +60,7 @@ jobs: mingw-w64-x86_64-db mingw-w64-x86_64-libevent mingw-w64-x86_64-miniupnpc - make - - - name: Create Qt5 tool symlinks - run: | - ln -sf /mingw64/bin/qmake-qt5.exe /mingw64/bin/qmake.exe 2>/dev/null || true - ln -sf /mingw64/bin/lrelease-qt5.exe /mingw64/bin/lrelease.exe 2>/dev/null || true - ln -sf /mingw64/bin/windeployqt-qt5.exe /mingw64/bin/windeployqt.exe 2>/dev/null || true + mingw-w64-x86_64-zlib - name: Set VERSION from source run: | @@ -70,25 +69,23 @@ jobs: REV=$(grep 'CLIENT_VERSION_REVISION' src/clientversion.h | awk '{print $3}') echo "VERSION=${MAJOR}.${MINOR}.${REV}" >> $GITHUB_ENV - - name: Clean stale build artifacts - run: rm -rf build/*.o build/*.h - - - name: Build LevelDB + - name: Configure run: | - cd src/leveldb - make clean || true - CC=gcc CXX=g++ TARGET_OS=OS_WINDOWS_CROSSCOMPILE make OPT="-fno-keep-inline-dllexport -march=nocona -msahf -mtune=generic -Wa,-mbig-obj -O2" libleveldb.a libmemenv.a - - - name: Run qmake - run: qmake triangles-qt.pro "RELEASE=1" + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_QT=ON \ + -DBUILD_DAEMON=OFF \ + -DBUILD_TESTS=OFF \ + -DUSE_UPNP=ON \ + -DUSE_QRCODE=OFF - name: Build - run: make -j$(nproc) + run: cmake --build build -j$(nproc) - name: Package run: | mkdir -p dist - cp release/triangles-qt.exe dist/ + cp build/bin/triangles-qt.exe dist/ windeployqt dist/triangles-qt.exe || true # Copy ALL runtime DLLs the binary needs @@ -199,34 +196,36 @@ jobs: update: true install: >- mingw-w64-x86_64-gcc + mingw-w64-x86_64-cmake + mingw-w64-x86_64-ninja mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-db mingw-w64-x86_64-libevent mingw-w64-x86_64-miniupnpc - make + mingw-w64-x86_64-zlib - - name: Build LevelDB + - name: Configure run: | - cd src/leveldb - make clean || true - CC=gcc CXX=g++ TARGET_OS=OS_WINDOWS_CROSSCOMPILE make OPT="-fno-keep-inline-dllexport -march=nocona -msahf -mtune=generic -Wa,-mbig-obj -O2" libleveldb.a libmemenv.a + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_QT=OFF \ + -DBUILD_DAEMON=ON \ + -DBUILD_TESTS=OFF \ + -DUSE_UPNP=ON - - name: Build daemon + - name: Build run: | - set -eo pipefail - cd src - mkdir -p obj - make -f makefile.mingw DEPSDIR=/mingw64 all -j$(nproc) 2>&1 - strip --strip-all trianglesd.exe + cmake --build build -j$(nproc) + strip --strip-all build/bin/trianglesd.exe - name: Package daemon with DLLs run: | mkdir -p daemon-dist/tor - cp src/trianglesd.exe daemon-dist/ + cp build/bin/trianglesd.exe daemon-dist/ # Copy all linked DLLs from MSYS2 - ldd src/trianglesd.exe | grep '/mingw64' | awk '{print $3}' | while read dll; do + ldd build/bin/trianglesd.exe | grep '/mingw64' | awk '{print $3}' | while read dll; do cp "$dll" daemon-dist/ 2>/dev/null || true done @@ -263,28 +262,25 @@ jobs: - name: Install dependencies run: | sudo apt-get update - sudo apt-get install -y build-essential qt5-qmake qtbase5-dev \ - qttools5-dev-tools libboost-all-dev libssl-dev libdb++-dev \ - libleveldb-dev libevent-dev libminiupnpc-dev + sudo apt-get install -y build-essential cmake ninja-build \ + qtbase5-dev qttools5-dev-tools \ + libboost-all-dev libssl-dev libdb++-dev \ + libleveldb-dev libevent-dev libminiupnpc-dev zlib1g-dev - - name: Build LevelDB + - name: Configure run: | - cd src/leveldb - chmod +x build_detect_platform - make clean || true - make OPT="-O2" libleveldb.a libmemenv.a - - - name: Clean stale build artifacts - run: rm -rf build/*.o - - - name: Run qmake - run: qmake triangles-qt.pro "RELEASE=1" + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_QT=ON \ + -DBUILD_DAEMON=OFF \ + -DBUILD_TESTS=OFF \ + -DUSE_UPNP=ON - name: Build - run: make -j$(nproc) + run: cmake --build build -j$(nproc) - name: Strip binary - run: strip --strip-all triangles-qt + run: strip --strip-all build/bin/triangles-qt - name: Build .deb package (fully self-contained) run: | @@ -300,13 +296,13 @@ jobs: mkdir -p ${PKG}/usr/share/applications mkdir -p ${PKG}/usr/share/pixmaps - cp triangles-qt ${PKG}/usr/lib/cryptographic-triangles/ + cp build/bin/triangles-qt ${PKG}/usr/lib/cryptographic-triangles/ cp tor-extract/tor/tor ${PKG}/usr/lib/cryptographic-triangles/tor/ chmod +x ${PKG}/usr/lib/cryptographic-triangles/tor/tor [ -d tor-extract/data ] && cp -r tor-extract/data ${PKG}/usr/lib/cryptographic-triangles/tor/data # Bundle ALL shared library dependencies (except glibc/kernel) - ldd triangles-qt | grep '=> /' | awk '{print $3}' | while read lib; do + ldd build/bin/triangles-qt | grep '=> /' | awk '{print $3}' | while read lib; do case "$lib" in /lib/x86_64-linux-gnu/libc.so*|/lib/x86_64-linux-gnu/libm.so*|/lib/x86_64-linux-gnu/libpthread.so*|/lib/x86_64-linux-gnu/libdl.so*|/lib/x86_64-linux-gnu/librt.so*|/lib/x86_64-linux-gnu/ld-linux*|/lib64/ld-linux*) ;; # Skip glibc core — always present @@ -379,24 +375,24 @@ jobs: - name: Install dependencies run: | sudo apt-get update - sudo apt-get install -y build-essential libboost-all-dev \ - libssl-dev libdb++-dev libleveldb-dev libevent-dev libminiupnpc-dev + sudo apt-get install -y build-essential cmake ninja-build \ + libboost-all-dev libssl-dev libdb++-dev libleveldb-dev \ + libevent-dev libminiupnpc-dev zlib1g-dev - - name: Build LevelDB + - name: Configure run: | - cd src/leveldb - chmod +x build_detect_platform - make clean || true - make OPT="-O2" libleveldb.a libmemenv.a + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_QT=OFF \ + -DBUILD_DAEMON=ON \ + -DBUILD_TESTS=OFF \ + -DUSE_UPNP=ON - - name: Build daemon - run: | - cd src - mkdir -p obj - make -f makefile.unix trianglesd -j$(nproc) + - name: Build + run: cmake --build build -j$(nproc) - name: Strip binary - run: strip --strip-all src/trianglesd + run: strip --strip-all build/bin/trianglesd - name: Build .deb package (fully self-contained) run: | @@ -411,13 +407,13 @@ jobs: mkdir -p ${PKG}/usr/bin mkdir -p ${PKG}/etc/systemd/system - cp src/trianglesd ${PKG}/usr/lib/cryptographic-triangles/ + cp build/bin/trianglesd ${PKG}/usr/lib/cryptographic-triangles/ cp tor-extract/tor/tor ${PKG}/usr/lib/cryptographic-triangles/tor/ chmod +x ${PKG}/usr/lib/cryptographic-triangles/tor/tor [ -d tor-extract/data ] && cp -r tor-extract/data ${PKG}/usr/lib/cryptographic-triangles/tor/data # Bundle ALL shared library dependencies (except glibc/kernel) - ldd src/trianglesd | grep '=> /' | awk '{print $3}' | while read lib; do + ldd build/bin/trianglesd | grep '=> /' | awk '{print $3}' | while read lib; do case "$lib" in /lib/x86_64-linux-gnu/libc.so*|/lib/x86_64-linux-gnu/libm.so*|/lib/x86_64-linux-gnu/libpthread.so*|/lib/x86_64-linux-gnu/libdl.so*|/lib/x86_64-linux-gnu/librt.so*|/lib/x86_64-linux-gnu/ld-linux*|/lib64/ld-linux*) ;; # Skip glibc core — always present @@ -504,50 +500,48 @@ jobs: - name: Install dependencies run: | - brew install qt@5 openssl@3 boost berkeley-db@5 leveldb libevent miniupnpc + brew install cmake ninja qt@5 openssl@3 boost berkeley-db@5 leveldb libevent miniupnpc - - name: Clean stale build artifacts - run: rm -rf build/*.o build/*.h - - - name: Build LevelDB - run: | - cd src/leveldb - chmod +x build_detect_platform - make clean || true - CC=clang CXX=clang++ make OPT="-O2" libleveldb.a libmemenv.a - - - name: Run qmake + - name: Configure run: | export PATH="/opt/homebrew/opt/qt@5/bin:$PATH" - qmake triangles-qt.pro -spec macx-clang \ - "BOOST_INCLUDE_PATH=/opt/homebrew/opt/boost/include" \ - "BOOST_LIB_PATH=/opt/homebrew/opt/boost/lib" \ - "BDB_INCLUDE_PATH=/opt/homebrew/opt/berkeley-db@5/include" \ - "BDB_LIB_PATH=/opt/homebrew/opt/berkeley-db@5/lib" \ - "BDB_LIB_SUFFIX=" \ - "OPENSSL_INCLUDE_PATH=/opt/homebrew/opt/openssl@3/include" \ - "OPENSSL_LIB_PATH=/opt/homebrew/opt/openssl@3/lib" \ - "MINIUPNPC_INCLUDE_PATH=/opt/homebrew/opt/miniupnpc/include" \ - "MINIUPNPC_LIB_PATH=/opt/homebrew/opt/miniupnpc/lib" \ - "EVENT_INCLUDE_PATH=/opt/homebrew/opt/libevent/include" \ - "EVENT_LIB_PATH=/opt/homebrew/opt/libevent/lib" \ - "RELEASE=1" + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_QT=ON \ + -DBUILD_DAEMON=OFF \ + -DBUILD_TESTS=OFF \ + -DUSE_UPNP=ON \ + -DBOOST_ROOT=/opt/homebrew/opt/boost \ + -DBDB_INCLUDE_PATH=/opt/homebrew/opt/berkeley-db@5/include \ + -DBDB_LIB_PATH=/opt/homebrew/opt/berkeley-db@5/lib \ + -DOPENSSL_ROOT_DIR=/opt/homebrew/opt/openssl@3 \ + -DEVENT_INCLUDE_PATH=/opt/homebrew/opt/libevent/include \ + -DEVENT_LIB_PATH=/opt/homebrew/opt/libevent/lib \ + -DMINIUPNPC_INCLUDE_PATH=/opt/homebrew/opt/miniupnpc/include \ + -DMINIUPNPC_LIB_PATH=/opt/homebrew/opt/miniupnpc/lib \ + -DQt5_DIR=/opt/homebrew/opt/qt@5/lib/cmake/Qt5 - name: Build - run: | - export PATH="/opt/homebrew/opt/qt@5/bin:$PATH" - make -j$(sysctl -n hw.ncpu) + run: cmake --build build -j$(sysctl -n hw.ncpu) - name: Create .app bundle run: | export PATH="/opt/homebrew/opt/qt@5/bin:$PATH" - macdeployqt Triangles-Qt.app -verbose=1 + macdeployqt build/bin/Triangles-Qt.app -verbose=1 || \ + macdeployqt build/bin/triangles-qt.app -verbose=1 || true - name: Bundle non-Qt dylibs into app run: | - FRAMEWORKS="Triangles-Qt.app/Contents/Frameworks" - MACOS="Triangles-Qt.app/Contents/MacOS" - BINARY="$MACOS/Triangles-Qt" + # Find the .app bundle + APP=$(find build/bin -name "*.app" -maxdepth 1 | head -1) + if [ -z "$APP" ]; then + echo "No .app bundle found, creating one manually..." + APP="build/bin/Triangles-Qt.app" + mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Frameworks" + cp build/bin/triangles-qt "$APP/Contents/MacOS/Triangles-Qt" + fi + FRAMEWORKS="$APP/Contents/Frameworks" + BINARY=$(find "$APP/Contents/MacOS" -type f -perm +111 | head -1) # Copy Homebrew dylibs that macdeployqt doesn't handle for lib in boost_system boost_filesystem boost_thread boost_program_options boost_chrono; do @@ -575,15 +569,17 @@ jobs: TOR_VERSION="15.0.8" curl -sL "https://dist.torproject.org/torbrowser/${TOR_VERSION}/tor-expert-bundle-macos-aarch64-${TOR_VERSION}.tar.gz" -o tor-bundle.tar.gz mkdir -p tor-extract && tar -xzf tor-bundle.tar.gz -C tor-extract - mkdir -p Triangles-Qt.app/Contents/MacOS/tor - cp tor-extract/tor/tor Triangles-Qt.app/Contents/MacOS/tor/ - chmod +x Triangles-Qt.app/Contents/MacOS/tor/tor - [ -d tor-extract/data ] && cp -r tor-extract/data Triangles-Qt.app/Contents/MacOS/tor/data + APP=$(find build/bin -name "*.app" -maxdepth 1 | head -1) + mkdir -p "$APP/Contents/MacOS/tor" + cp tor-extract/tor/tor "$APP/Contents/MacOS/tor/" + chmod +x "$APP/Contents/MacOS/tor/tor" + [ -d tor-extract/data ] && cp -r tor-extract/data "$APP/Contents/MacOS/tor/data" - name: Create DMG run: | + APP=$(find build/bin -name "*.app" -maxdepth 1 | head -1) mkdir -p dmg_contents - cp -R Triangles-Qt.app dmg_contents/ + cp -R "$APP" dmg_contents/ ln -s /Applications dmg_contents/Applications hdiutil create -volname "Cryptographic Triangles" \ -srcfolder dmg_contents \ diff --git a/.gitignore b/.gitignore index b85338e..83c6a63 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ blocks/ # IDE .vscode/ .idea/ +.claude/ *.swp *.swo *~ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..b4f1332 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,116 @@ +cmake_minimum_required(VERSION 3.16) + +# Silence CMP0167 warning (FindBoost removed in CMake 3.30+, use BoostConfig) +if(POLICY CMP0167) + cmake_policy(SET CMP0167 NEW) +endif() + +project(Triangles + VERSION 5.5.6.0 + DESCRIPTION "Cryptographic Triangles Wallet" + LANGUAGES C CXX +) + +# ── C++ Standard ── +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_C_STANDARD 11) + +# ── Output directories ── +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") + +# ── Custom module path ── +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") + +# ── User-facing options ── +option(BUILD_QT "Build triangles-qt (Qt5 GUI wallet)" ON) +option(BUILD_DAEMON "Build trianglesd (headless daemon)" ON) +option(BUILD_TESTS "Build test_triangles (Boost.Test unit tests)" ON) +option(USE_UPNP "Enable UPnP support via miniupnpc" ON) +option(USE_IPV6 "Enable IPv6 support" ON) +option(USE_QRCODE "Enable QR code generation via libqrencode" OFF) +option(USE_DBUS "Enable D-Bus notifications (Linux only)" ON) +option(USE_ZMQ "Enable ZMQ publisher support" OFF) +option(USE_TOR_EMBEDDED "Enable embedded Tor library linking" OFF) +option(USE_O3 "Use -O3 optimization instead of -O2" OFF) +option(ENABLE_PIE "Build position-independent executables" OFF) +option(ENABLE_STATIC "Prefer static linking (Linux release builds)" OFF) + +# Cache variables for custom dependency paths +set(BDB_INCLUDE_PATH "" CACHE PATH "Path to Berkeley DB headers") +set(BDB_LIB_PATH "" CACHE PATH "Path to Berkeley DB libraries") +set(EVENT_INCLUDE_PATH "" CACHE PATH "Path to libevent headers") +set(EVENT_LIB_PATH "" CACHE PATH "Path to libevent libraries") +set(MINIUPNPC_INCLUDE_PATH "" CACHE PATH "Path to miniupnpc headers") +set(MINIUPNPC_LIB_PATH "" CACHE PATH "Path to miniupnpc libraries") +set(TOR_SOURCE_ROOT "" CACHE PATH "Path to Tor source tree (for USE_TOR_EMBEDDED)") + +# ── Compiler/linker flags ── +include(AddCompilerFlags) + +# ── Find required dependencies ── +find_package(OpenSSL REQUIRED) +find_package(Boost 1.75 REQUIRED COMPONENTS + filesystem program_options thread chrono system +) +if(BUILD_TESTS) + find_package(Boost REQUIRED COMPONENTS unit_test_framework) +endif() +find_package(BerkeleyDB REQUIRED) +find_package(Libevent REQUIRED) +find_package(ZLIB REQUIRED) +find_package(Threads REQUIRED) + +# ── Find optional dependencies ── +if(USE_UPNP) + find_package(Miniupnpc REQUIRED) +endif() + +if(USE_QRCODE) + find_package(QRencode REQUIRED) +endif() + +if(USE_ZMQ) + find_package(PkgConfig REQUIRED) + pkg_check_modules(ZMQ REQUIRED IMPORTED_TARGET libzmq) +endif() + +if(BUILD_QT) + find_package(Qt5 5.9 REQUIRED COMPONENTS Core Gui Widgets) + find_package(Qt5 COMPONENTS LinguistTools QUIET) + if(USE_DBUS AND UNIX AND NOT APPLE) + find_package(Qt5 COMPONENTS DBus QUIET) + if(NOT Qt5DBus_FOUND) + message(STATUS "Qt5 DBus not found -- disabling D-Bus notifications") + set(USE_DBUS OFF CACHE BOOL "" FORCE) + endif() + else() + set(USE_DBUS OFF CACHE BOOL "" FORCE) + endif() +endif() + +# ── Build bundled LevelDB ── +include(BuildLevelDB) + +# ── Generate build.h from git describe ── +include(GenerateBuildInfo) + +# ── Descend into source tree ── +add_subdirectory(src) + +# ── Configuration summary ── +message(STATUS "") +message(STATUS "Triangles ${PROJECT_VERSION} build configuration:") +message(STATUS " Build Qt GUI: ${BUILD_QT}") +message(STATUS " Build daemon: ${BUILD_DAEMON}") +message(STATUS " Build tests: ${BUILD_TESTS}") +message(STATUS " UPnP: ${USE_UPNP}") +message(STATUS " IPv6: ${USE_IPV6}") +message(STATUS " QR code: ${USE_QRCODE}") +message(STATUS " D-Bus: ${USE_DBUS}") +message(STATUS " ZMQ: ${USE_ZMQ}") +message(STATUS " Embedded Tor: ${USE_TOR_EMBEDDED}") +message(STATUS " Static linking: ${ENABLE_STATIC}") +message(STATUS "") diff --git a/Makefile b/Makefile deleted file mode 100644 index 908d863..0000000 --- a/Makefile +++ /dev/null @@ -1,284 +0,0 @@ -############################################################################# -# Makefile for building: triangles-qt -# Generated by qmake (3.1) (Qt 5.15.18) -# Project: triangles-qt.pro -# Template: app -# Command: C:/msys64/mingw64/bin/qmake-qt5.exe -o Makefile triangles-qt.pro -############################################################################# - -MAKEFILE = Makefile - -EQ = = - -first: release -install: release-install -uninstall: release-uninstall -QMAKE = C:/msys64/mingw64/bin/qmake-qt5.exe -DEL_FILE = rm -f -CHK_DIR_EXISTS= test -d -MKDIR = mkdir -p -COPY = cp -f -COPY_FILE = cp -f -COPY_DIR = cp -f -R -INSTALL_FILE = cp -f -INSTALL_PROGRAM = cp -f -INSTALL_DIR = cp -f -R -QINSTALL = C:/msys64/mingw64/bin/qmake-qt5.exe -install qinstall -QINSTALL_PROGRAM = C:/msys64/mingw64/bin/qmake-qt5.exe -install qinstall -exe -DEL_FILE = rm -f -SYMLINK = $(QMAKE) -install ln -f -s -DEL_DIR = rmdir -MOVE = mv -f -IDC = idc -IDL = widl -ZIP = -DEF_FILE = -RES_FILE = build/triangles-qt_res.o -SED = sed -MOVE = mv -f -SUBTARGETS = \ - release \ - debug - - -release: FORCE - $(MAKE) -f $(MAKEFILE).Release -release-make_first: FORCE - $(MAKE) -f $(MAKEFILE).Release -release-all: FORCE - $(MAKE) -f $(MAKEFILE).Release all -release-clean: FORCE - $(MAKE) -f $(MAKEFILE).Release clean -release-distclean: FORCE - $(MAKE) -f $(MAKEFILE).Release distclean -release-install: FORCE - $(MAKE) -f $(MAKEFILE).Release install -release-uninstall: FORCE - $(MAKE) -f $(MAKEFILE).Release uninstall -debug: FORCE - $(MAKE) -f $(MAKEFILE).Debug -debug-make_first: FORCE - $(MAKE) -f $(MAKEFILE).Debug -debug-all: FORCE - $(MAKE) -f $(MAKEFILE).Debug all -debug-clean: FORCE - $(MAKE) -f $(MAKEFILE).Debug clean -debug-distclean: FORCE - $(MAKE) -f $(MAKEFILE).Debug distclean -debug-install: FORCE - $(MAKE) -f $(MAKEFILE).Debug install -debug-uninstall: FORCE - $(MAKE) -f $(MAKEFILE).Debug uninstall - -Makefile: triangles-qt.pro C:/msys64/mingw64/share/qt5/mkspecs/win32-g++/qmake.conf C:/msys64/mingw64/share/qt5/mkspecs/features/spec_pre.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/qdevice.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/features/device_config.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/common/sanitize.conf \ - C:/msys64/mingw64/share/qt5/mkspecs/common/gcc-base.conf \ - C:/msys64/mingw64/share/qt5/mkspecs/common/g++-base.conf \ - C:/msys64/mingw64/share/qt5/mkspecs/common/angle.conf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/win32/windows_vulkan_sdk.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/common/windows-vulkan.conf \ - C:/msys64/mingw64/share/qt5/mkspecs/common/g++-win32.conf \ - C:/msys64/mingw64/share/qt5/mkspecs/common/windows-desktop.conf \ - C:/msys64/mingw64/share/qt5/mkspecs/qconfig.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_concurrent.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_core.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_core_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_dbus.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_designer.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_designer_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_designercomponents_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_gui.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_gui_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_help.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_help_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_network.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_network_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_opengl.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_printsupport.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_sql.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_sql_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_testlib.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_uiplugin.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_uitools.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_uitools_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_widgets.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_windowsuiautomation_support_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_xml.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_xml_private.pri \ - C:/msys64/mingw64/share/qt5/mkspecs/features/qt_functions.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/qt_config.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/win32-g++/qmake.conf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/spec_post.prf \ - .qmake.stash \ - C:/msys64/mingw64/share/qt5/mkspecs/features/exclusive_builds.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/toolchain.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/default_pre.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/win32/default_pre.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/resolve_config.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/exclusive_builds_post.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/default_post.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/precompile_header.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/warn_on.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/qt.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/resources_functions.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/resources.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/moc.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/win32/opengl.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/uic.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/qmake_use.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/file_copies.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/win32/windows.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/testcase_targets.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/exceptions.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/yacc.prf \ - C:/msys64/mingw64/share/qt5/mkspecs/features/lex.prf \ - triangles-qt.pro \ - C:/msys64/mingw64/lib/qtmain.prl \ - C:/msys64/mingw64/share/qt5/mkspecs/features/build_pass.prf \ - src/qt/triangles.qrc - $(QMAKE) -o Makefile triangles-qt.pro -C:/msys64/mingw64/share/qt5/mkspecs/features/spec_pre.prf: -C:/msys64/mingw64/share/qt5/mkspecs/qdevice.pri: -C:/msys64/mingw64/share/qt5/mkspecs/features/device_config.prf: -C:/msys64/mingw64/share/qt5/mkspecs/common/sanitize.conf: -C:/msys64/mingw64/share/qt5/mkspecs/common/gcc-base.conf: -C:/msys64/mingw64/share/qt5/mkspecs/common/g++-base.conf: -C:/msys64/mingw64/share/qt5/mkspecs/common/angle.conf: -C:/msys64/mingw64/share/qt5/mkspecs/features/win32/windows_vulkan_sdk.prf: -C:/msys64/mingw64/share/qt5/mkspecs/common/windows-vulkan.conf: -C:/msys64/mingw64/share/qt5/mkspecs/common/g++-win32.conf: -C:/msys64/mingw64/share/qt5/mkspecs/common/windows-desktop.conf: -C:/msys64/mingw64/share/qt5/mkspecs/qconfig.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_concurrent.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_concurrent_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_core.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_core_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_dbus.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_dbus_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_designer.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_designer_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_designercomponents_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_edid_support_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_fb_support_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_gui.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_gui_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_help.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_help_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_network.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_network_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_opengl.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_opengl_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_openglextensions.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_printsupport.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_printsupport_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_sql.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_sql_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_testlib.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_testlib_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_theme_support_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_uiplugin.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_uitools.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_uitools_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_widgets.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_widgets_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_windowsuiautomation_support_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_xml.pri: -C:/msys64/mingw64/share/qt5/mkspecs/modules/qt_lib_xml_private.pri: -C:/msys64/mingw64/share/qt5/mkspecs/features/qt_functions.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/qt_config.prf: -C:/msys64/mingw64/share/qt5/mkspecs/win32-g++/qmake.conf: -C:/msys64/mingw64/share/qt5/mkspecs/features/spec_post.prf: -.qmake.stash: -C:/msys64/mingw64/share/qt5/mkspecs/features/exclusive_builds.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/toolchain.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/default_pre.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/win32/default_pre.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/resolve_config.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/exclusive_builds_post.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/default_post.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/precompile_header.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/warn_on.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/qt.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/resources_functions.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/resources.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/moc.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/win32/opengl.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/uic.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/qmake_use.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/file_copies.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/win32/windows.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/testcase_targets.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/exceptions.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/yacc.prf: -C:/msys64/mingw64/share/qt5/mkspecs/features/lex.prf: -triangles-qt.pro: -C:/msys64/mingw64/lib/qtmain.prl: -C:/msys64/mingw64/share/qt5/mkspecs/features/build_pass.prf: -src/qt/triangles.qrc: -qmake: FORCE - @$(QMAKE) -o Makefile triangles-qt.pro - -qmake_all: FORCE - -make_first: release-make_first debug-make_first FORCE -all: release-all debug-all FORCE -clean: release-clean debug-clean FORCE - -$(DEL_FILE) E:/repos/triangles/src/leveldb/libleveldb.a; - -$(DEL_FILE) cd - -$(DEL_FILE) E:/repos/triangles/src/leveldb - -$(DEL_FILE) ; - -$(DEL_FILE) clean -distclean: release-distclean debug-distclean FORCE - -$(DEL_FILE) Makefile - -$(DEL_FILE) .qmake.stash - -E:/repos/triangles/src/leveldb/libleveldb.a: FORCE - cd E:/repos/triangles/src/leveldb && CC=gcc CXX=g++ TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT="-fno-keep-inline-dllexport -march=nocona -msahf -mtune=generic -Wa,-mbig-obj -O2" libleveldb.a libmemenv.a && ranlib E:/repos/triangles/src/leveldb/libleveldb.a && ranlib E:/repos/triangles/src/leveldb/libmemenv.a - -release-mocclean: - $(MAKE) -f $(MAKEFILE).Release mocclean -debug-mocclean: - $(MAKE) -f $(MAKEFILE).Debug mocclean -mocclean: release-mocclean debug-mocclean - -release-mocables: - $(MAKE) -f $(MAKEFILE).Release mocables -debug-mocables: - $(MAKE) -f $(MAKEFILE).Debug mocables -mocables: release-mocables debug-mocables - -check: first - -benchmark: first -FORCE: - -$(MAKEFILE).Release: Makefile -$(MAKEFILE).Debug: Makefile diff --git a/cmake/AddCompilerFlags.cmake b/cmake/AddCompilerFlags.cmake new file mode 100644 index 0000000..f0f8969 --- /dev/null +++ b/cmake/AddCompilerFlags.cmake @@ -0,0 +1,70 @@ +# cmake/AddCompilerFlags.cmake +# Shared compiler and linker flag configuration for all Triangles targets. + +# ── Common warning flags ── +add_compile_options( + -Wall -Wextra -Wno-ignored-qualifiers + -Wformat -Wformat-security -Wno-unused-parameter +) + +# ── Common defines ── +add_compile_definitions( + BOOST_SPIRIT_THREADSAFE + BOOST_THREAD_USE_LIB + BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN + BOOST_BIND_GLOBAL_PLACEHOLDERS + __NO_SYSTEM_INCLUDES +) + +# ── Hardening (non-Windows) ── +if(NOT WIN32) + # Ubuntu bug #691722 workaround: reset before re-enabling + add_compile_options(-fno-stack-protector) + add_compile_options(-fstack-protector-all -Wstack-protector) + add_compile_definitions(_FORTIFY_SOURCE=2) + add_link_options(-Wl,-z,relro -Wl,-z,now) +endif() + +# ── PIE (position-independent executables) ── +if(ENABLE_PIE AND NOT WIN32) + add_compile_options(-fPIE) + add_link_options(-pie) +endif() + +# ── Optimization override ── +if(USE_O3) + string(REPLACE "-O2" "-O3" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") + string(REPLACE "-O2" "-O3" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") + string(REPLACE "-O2" "-O3" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + string(REPLACE "-O2" "-O3" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") +endif() + +# ── 32-bit SSE2 ── +if(CMAKE_SYSTEM_PROCESSOR MATCHES "i[3-6]86") + add_compile_options(-msse2) +endif() + +# ── Platform: Windows (MSYS2 MinGW64) ── +if(WIN32) + add_compile_options(-Wa,-mbig-obj) + add_compile_options(-Wno-deprecated-declarations -Wno-reserved-user-defined-literal) + add_link_options(-static -static-libgcc -static-libstdc++) + add_compile_definitions(WIN32 _MT) +endif() + +# ── Platform: macOS ── +if(APPLE) + set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0" CACHE STRING "Minimum macOS version") + add_compile_options(-Wno-reserved-user-defined-literal -Wno-deprecated-declarations) + add_compile_definitions(MAC_OSX MSG_NOSIGNAL=0) +endif() + +# ── Platform: Linux ── +if(UNIX AND NOT APPLE) + add_compile_definitions(LINUX) +endif() + +# ── Static linking (Linux release builds) ── +if(ENABLE_STATIC AND UNIX AND NOT APPLE) + add_link_options(-static) +endif() diff --git a/cmake/BuildLevelDB.cmake b/cmake/BuildLevelDB.cmake new file mode 100644 index 0000000..2fff806 --- /dev/null +++ b/cmake/BuildLevelDB.cmake @@ -0,0 +1,14 @@ +# cmake/BuildLevelDB.cmake +# Builds the bundled LevelDB via its native CMake sub-build. +# Exposes leveldb_lib, leveldb_memenv, leveldb_bundled, and build_leveldb. + +set(LEVELDB_SOURCE_DIR "${CMAKE_SOURCE_DIR}/src/leveldb") +set(LEVELDB_BINARY_DIR "${CMAKE_BINARY_DIR}/leveldb") + +if(NOT TARGET leveldb_lib) + add_subdirectory("${LEVELDB_SOURCE_DIR}" "${LEVELDB_BINARY_DIR}") +endif() + +if(NOT TARGET build_leveldb) + add_custom_target(build_leveldb DEPENDS leveldb_lib leveldb_memenv) +endif() diff --git a/cmake/FindBerkeleyDB.cmake b/cmake/FindBerkeleyDB.cmake new file mode 100644 index 0000000..e7442cd --- /dev/null +++ b/cmake/FindBerkeleyDB.cmake @@ -0,0 +1,51 @@ +# cmake/FindBerkeleyDB.cmake +# Finds Berkeley DB C++ headers and library. +# +# User can set BDB_INCLUDE_PATH and BDB_LIB_PATH to guide search. +# +# Creates imported target: BerkeleyDB::BerkeleyDB +# Sets: BerkeleyDB_FOUND, BerkeleyDB_INCLUDE_DIR, BerkeleyDB_LIBRARY + +find_path(BerkeleyDB_INCLUDE_DIR + NAMES db_cxx.h + HINTS + ${BDB_INCLUDE_PATH} + ENV BDB_INCLUDE_PATH + PATHS + /opt/homebrew/opt/berkeley-db@5/include + /opt/homebrew/opt/berkeley-db/include + /usr/include/db5 + /usr/local/include/db5 + /usr/include + /usr/local/include + C:/msys64/mingw64/include +) + +find_library(BerkeleyDB_LIBRARY + NAMES db_cxx db_cxx-5 db_cxx-5.3 db_cxx-4.8 + HINTS + ${BDB_LIB_PATH} + ENV BDB_LIB_PATH + PATHS + /opt/homebrew/opt/berkeley-db@5/lib + /opt/homebrew/opt/berkeley-db/lib + /usr/lib/x86_64-linux-gnu + /usr/lib + /usr/local/lib + C:/msys64/mingw64/lib +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(BerkeleyDB + REQUIRED_VARS BerkeleyDB_LIBRARY BerkeleyDB_INCLUDE_DIR +) + +if(BerkeleyDB_FOUND AND NOT TARGET BerkeleyDB::BerkeleyDB) + add_library(BerkeleyDB::BerkeleyDB UNKNOWN IMPORTED) + set_target_properties(BerkeleyDB::BerkeleyDB PROPERTIES + IMPORTED_LOCATION "${BerkeleyDB_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${BerkeleyDB_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(BerkeleyDB_INCLUDE_DIR BerkeleyDB_LIBRARY) diff --git a/cmake/FindLibevent.cmake b/cmake/FindLibevent.cmake new file mode 100644 index 0000000..e4df92f --- /dev/null +++ b/cmake/FindLibevent.cmake @@ -0,0 +1,46 @@ +# cmake/FindLibevent.cmake +# Finds libevent headers and library. +# +# User can set EVENT_INCLUDE_PATH and EVENT_LIB_PATH. +# +# Creates imported target: Libevent::Libevent + +find_path(Libevent_INCLUDE_DIR + NAMES event2/event.h + HINTS + ${EVENT_INCLUDE_PATH} + ENV EVENT_INCLUDE_PATH + PATHS + /opt/homebrew/include + /usr/include + /usr/local/include + C:/msys64/mingw64/include +) + +find_library(Libevent_LIBRARY + NAMES event libevent + HINTS + ${EVENT_LIB_PATH} + ENV EVENT_LIB_PATH + PATHS + /opt/homebrew/lib + /usr/lib/x86_64-linux-gnu + /usr/lib + /usr/local/lib + C:/msys64/mingw64/lib +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Libevent + REQUIRED_VARS Libevent_LIBRARY Libevent_INCLUDE_DIR +) + +if(Libevent_FOUND AND NOT TARGET Libevent::Libevent) + add_library(Libevent::Libevent UNKNOWN IMPORTED) + set_target_properties(Libevent::Libevent PROPERTIES + IMPORTED_LOCATION "${Libevent_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${Libevent_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(Libevent_INCLUDE_DIR Libevent_LIBRARY) diff --git a/cmake/FindMiniupnpc.cmake b/cmake/FindMiniupnpc.cmake new file mode 100644 index 0000000..7f82b4c --- /dev/null +++ b/cmake/FindMiniupnpc.cmake @@ -0,0 +1,46 @@ +# cmake/FindMiniupnpc.cmake +# Finds miniupnpc headers and library. +# +# User can set MINIUPNPC_INCLUDE_PATH and MINIUPNPC_LIB_PATH. +# +# Creates imported target: Miniupnpc::Miniupnpc + +find_path(Miniupnpc_INCLUDE_DIR + NAMES miniupnpc/miniupnpc.h + HINTS + ${MINIUPNPC_INCLUDE_PATH} + ENV MINIUPNPC_INCLUDE_PATH + PATHS + /opt/homebrew/include + /usr/include + /usr/local/include + C:/msys64/mingw64/include +) + +find_library(Miniupnpc_LIBRARY + NAMES miniupnpc + HINTS + ${MINIUPNPC_LIB_PATH} + ENV MINIUPNPC_LIB_PATH + PATHS + /opt/homebrew/lib + /usr/lib/x86_64-linux-gnu + /usr/lib + /usr/local/lib + C:/msys64/mingw64/lib +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Miniupnpc + REQUIRED_VARS Miniupnpc_LIBRARY Miniupnpc_INCLUDE_DIR +) + +if(Miniupnpc_FOUND AND NOT TARGET Miniupnpc::Miniupnpc) + add_library(Miniupnpc::Miniupnpc UNKNOWN IMPORTED) + set_target_properties(Miniupnpc::Miniupnpc PROPERTIES + IMPORTED_LOCATION "${Miniupnpc_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${Miniupnpc_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(Miniupnpc_INCLUDE_DIR Miniupnpc_LIBRARY) diff --git a/cmake/FindQRencode.cmake b/cmake/FindQRencode.cmake new file mode 100644 index 0000000..cd26466 --- /dev/null +++ b/cmake/FindQRencode.cmake @@ -0,0 +1,38 @@ +# cmake/FindQRencode.cmake +# Finds libqrencode headers and library. +# +# Creates imported target: QRencode::QRencode + +find_path(QRencode_INCLUDE_DIR + NAMES qrencode.h + PATHS + /opt/homebrew/include + /usr/include + /usr/local/include + C:/msys64/mingw64/include +) + +find_library(QRencode_LIBRARY + NAMES qrencode + PATHS + /opt/homebrew/lib + /usr/lib/x86_64-linux-gnu + /usr/lib + /usr/local/lib + C:/msys64/mingw64/lib +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(QRencode + REQUIRED_VARS QRencode_LIBRARY QRencode_INCLUDE_DIR +) + +if(QRencode_FOUND AND NOT TARGET QRencode::QRencode) + add_library(QRencode::QRencode UNKNOWN IMPORTED) + set_target_properties(QRencode::QRencode PROPERTIES + IMPORTED_LOCATION "${QRencode_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${QRencode_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(QRencode_INCLUDE_DIR QRencode_LIBRARY) diff --git a/cmake/GenerateBuildInfo.cmake b/cmake/GenerateBuildInfo.cmake new file mode 100644 index 0000000..38b1ad9 --- /dev/null +++ b/cmake/GenerateBuildInfo.cmake @@ -0,0 +1,19 @@ +# cmake/GenerateBuildInfo.cmake +# Sets up a custom target that generates build.h from git describe, +# equivalent to share/genbuild.sh. + +set(BUILD_HEADER_DIR "${CMAKE_BINARY_DIR}/generated") +set(BUILD_HEADER "${BUILD_HEADER_DIR}/build.h") +file(MAKE_DIRECTORY "${BUILD_HEADER_DIR}") + +# Custom command runs on every build to regenerate build.h if git state changed +add_custom_target(generate_build_info ALL + COMMAND ${CMAKE_COMMAND} + -DSOURCE_DIR=${CMAKE_SOURCE_DIR} + -DOUTPUT_FILE=${BUILD_HEADER} + -P "${CMAKE_SOURCE_DIR}/cmake/GenerateBuildInfoScript.cmake" + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + COMMENT "Generating build.h from git describe..." + BYPRODUCTS "${BUILD_HEADER}" + VERBATIM +) diff --git a/cmake/GenerateBuildInfoScript.cmake b/cmake/GenerateBuildInfoScript.cmake new file mode 100644 index 0000000..05ff58e --- /dev/null +++ b/cmake/GenerateBuildInfoScript.cmake @@ -0,0 +1,61 @@ +# cmake/GenerateBuildInfoScript.cmake +# Called at build time by the custom target in GenerateBuildInfo.cmake. +# Replicates the logic of share/genbuild.sh. + +# Read existing build.h first line if it exists +set(OLD_LINE "") +if(EXISTS "${OUTPUT_FILE}") + file(STRINGS "${OUTPUT_FILE}" _lines LIMIT_COUNT 1) + if(_lines) + list(GET _lines 0 OLD_LINE) + endif() +endif() + +# Try exact tag match first (release builds) +execute_process( + COMMAND git describe --tags --exact-match + WORKING_DIRECTORY "${SOURCE_DIR}" + OUTPUT_VARIABLE GIT_DESC + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + RESULT_VARIABLE _result +) + +# Fall back to tag + commit distance +if(NOT _result EQUAL 0) + execute_process( + COMMAND git describe --tags --dirty + WORKING_DIRECTORY "${SOURCE_DIR}" + OUTPUT_VARIABLE GIT_DESC + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + RESULT_VARIABLE _result + ) + if(NOT _result EQUAL 0) + set(GIT_DESC "") + endif() +endif() + +# Get commit timestamp +execute_process( + COMMAND git log -n 1 --format=%ci + WORKING_DIRECTORY "${SOURCE_DIR}" + OUTPUT_VARIABLE GIT_TIME + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET +) + +# Build new content +if(GIT_DESC) + set(NEW_LINE "#define BUILD_DESC \"${GIT_DESC}\"") +else() + set(NEW_LINE "// No build information available") +endif() + +# Only write if changed +if(NOT "${OLD_LINE}" STREQUAL "${NEW_LINE}") + file(WRITE "${OUTPUT_FILE}" + "${NEW_LINE}\n" + "#define BUILD_DATE \"${GIT_TIME}\"\n" + ) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..a43b11b --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,401 @@ +# src/CMakeLists.txt +# Defines all build targets: libraries and executables. + +# ═══════════════════════════════════════════════════════════════════════════════ +# 1. Hash9 cryptographic primitives (pure C) +# ═══════════════════════════════════════════════════════════════════════════════ +add_library(hash9_crypto STATIC + blake.c + groestl.c + jh.c + keccak.c + skein.c + aes_helper.c + bmw.c + cubehash.c + echo.c + fugue.c + hamsi.c + hamsi_helper.c + luffa.c + shavite.c + simd.c +) +target_include_directories(hash9_crypto PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") +set_target_properties(hash9_crypto PROPERTIES LINKER_LANGUAGE C) + +# ═══════════════════════════════════════════════════════════════════════════════ +# 2. JSON library (header-only nlohmann/json via json_compat.h shim) +# ═══════════════════════════════════════════════════════════════════════════════ +add_library(json_compat INTERFACE) +target_include_directories(json_compat INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/json") + +# ═══════════════════════════════════════════════════════════════════════════════ +# 3. Common core library (shared between daemon, Qt, and tests) +# +# EXCLUDES init.cpp, wallet.cpp (QT_GUI-conditional), noui.cpp (target-specific) +# ═══════════════════════════════════════════════════════════════════════════════ +set(CORE_SOURCES + alert.cpp + addrman.cpp + bootstrap.cpp + checkpoints.cpp + crypter.cpp + db.cpp + irc.cpp + key.cpp + keystore.cpp + main.cpp + miner.cpp + net.cpp + net_bootstrap.cpp + netbase.cpp + protocol.cpp + script.cpp + sync.cpp + util.cpp + version.cpp + walletdb.cpp + kernel.cpp + pbkdf2.cpp + scrypt.cpp + smessage.cpp + tor_embed_hooks.cpp + rest.cpp + trianglesrpc.cpp + rpcdump.cpp + rpcnet.cpp + rpcmining.cpp + rpcwallet.cpp + rpcblockchain.cpp + rpcrawtransaction.cpp + rpcsmessage.cpp + zmqpublishnotifier.cpp + txdb-leveldb.cpp + lz4/lz4.c + tor/onion_v3.cpp + tor/tor_process.cpp + tor/tor_embedded.cpp +) + +# Scrypt assembly — platform-specific +if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64|amd64") + enable_language(ASM) + list(APPEND CORE_SOURCES scrypt-x86_64.S) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i[3-6]86|x86") + enable_language(ASM) + list(APPEND CORE_SOURCES scrypt-x86.S) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64") + enable_language(ASM) + list(APPEND CORE_SOURCES scrypt-arm.S) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|ARM") + enable_language(ASM) + list(APPEND CORE_SOURCES scrypt-arm.S) +endif() + +add_library(triangles_common OBJECT ${CORE_SOURCES}) + +target_include_directories(triangles_common PUBLIC + "${CMAKE_CURRENT_SOURCE_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}/json" + "${CMAKE_CURRENT_SOURCE_DIR}/tor" + "${CMAKE_BINARY_DIR}/generated" # for build.h +) + +target_compile_definitions(triangles_common PUBLIC HAVE_BUILD_INFO) + +target_link_libraries(triangles_common PUBLIC + hash9_crypto + json_compat + leveldb_bundled + OpenSSL::SSL + OpenSSL::Crypto + Boost::filesystem + Boost::program_options + Boost::thread + Boost::chrono + BerkeleyDB::BerkeleyDB + Libevent::Libevent + ZLIB::ZLIB + Threads::Threads +) + +# Optional: UPnP +if(USE_UPNP) + target_compile_definitions(triangles_common PUBLIC USE_UPNP=1 STATICLIB MINIUPNP_STATICLIB) + target_link_libraries(triangles_common PUBLIC Miniupnpc::Miniupnpc) + if(WIN32) + target_link_libraries(triangles_common PUBLIC iphlpapi) + endif() +endif() + +# Optional: IPv6 +if(USE_IPV6) + target_compile_definitions(triangles_common PUBLIC USE_IPV6=1) +endif() + +# Optional: ZMQ +if(USE_ZMQ) + target_compile_definitions(triangles_common PUBLIC ENABLE_ZMQ) + target_link_libraries(triangles_common PUBLIC PkgConfig::ZMQ) +endif() + +# Optional: Embedded Tor +if(USE_TOR_EMBEDDED) + if(TOR_SOURCE_ROOT STREQUAL "") + set(TOR_SOURCE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/tor/tor-src") + endif() + target_compile_definitions(triangles_common PUBLIC ENABLE_TOR_EMBEDDED) + target_include_directories(triangles_common PUBLIC "${TOR_SOURCE_ROOT}/src/feature/api") + target_link_directories(triangles_common PUBLIC "${TOR_SOURCE_ROOT}") + if(UNIX) + target_link_libraries(triangles_common PUBLIC -Wl,--start-group -ltor -Wl,--end-group lzma zstd) + else() + target_link_libraries(triangles_common PUBLIC tor lzma zstd) + endif() +endif() + +# Platform-specific libraries +if(WIN32) + target_link_libraries(triangles_common PUBLIC + ws2_32 shlwapi mswsock ole32 oleaut32 uuid gdi32 crypt32) +elseif(APPLE) + target_link_libraries(triangles_common PUBLIC + "-framework Foundation" + "-framework ApplicationServices" + "-framework AppKit") +else() + # Linux + target_link_libraries(triangles_common PUBLIC rt dl) +endif() + +add_dependencies(triangles_common generate_build_info build_leveldb) + +# ═══════════════════════════════════════════════════════════════════════════════ +# 4. Headless daemon (trianglesd) +# ═══════════════════════════════════════════════════════════════════════════════ +if(BUILD_DAEMON) + add_executable(trianglesd + noui.cpp + init.cpp + wallet.cpp + ) + # No QT_GUI define — daemon gets the #if !defined(QT_GUI) code paths + target_link_libraries(trianglesd PRIVATE triangles_common) + + if(WIN32) + set_target_properties(trianglesd PROPERTIES SUFFIX ".exe") + endif() +endif() + +# ═══════════════════════════════════════════════════════════════════════════════ +# 5. Qt5 GUI wallet (triangles-qt) +# ═══════════════════════════════════════════════════════════════════════════════ +if(BUILD_QT) + set(CMAKE_AUTOMOC ON) + set(CMAKE_AUTOUIC ON) + set(CMAKE_AUTORCC ON) + + set(CMAKE_AUTOUIC_SEARCH_PATHS + "${CMAKE_CURRENT_SOURCE_DIR}/qt/forms" + "${CMAKE_CURRENT_SOURCE_DIR}/qt/plugins/mrichtexteditor" + ) + + set(QT_SOURCES + qt/triangles.cpp + qt/trianglesgui.cpp + qt/transactiontablemodel.cpp + qt/addresstablemodel.cpp + qt/optionsdialog.cpp + qt/sendcoinsdialog.cpp + qt/coincontroldialog.cpp + qt/coincontroltreewidget.cpp + qt/addressbookpage.cpp + qt/aboutdialog.cpp + qt/introdialog.cpp + qt/editaddressdialog.cpp + qt/trianglesaddressvalidator.cpp + qt/clientmodel.cpp + qt/guiutil.cpp + qt/transactionrecord.cpp + qt/optionsmodel.cpp + qt/monitoreddatamapper.cpp + qt/transactiondesc.cpp + qt/transactiondescdialog.cpp + qt/trianglesstrings.cpp + qt/trianglesamountfield.cpp + qt/transactionfilterproxy.cpp + qt/transactionview.cpp + qt/walletmodel.cpp + qt/overviewpage.cpp + qt/csvmodelwriter.cpp + qt/sendcoinsentry.cpp + qt/qvalidatedlineedit.cpp + qt/trianglesunits.cpp + qt/qvaluecombobox.cpp + qt/askpassphrasedialog.cpp + qt/notificator.cpp + qt/qtipcserver.cpp + qt/rpcconsole.cpp + qt/messagepage.cpp + qt/dialog_move_handler.cpp + qt/signmessagepage.cpp + qt/verifymessagepage.cpp + qt/messagemodel.cpp + qt/sendmessagesdialog.cpp + qt/sendmessagesentry.cpp + qt/qvalidatedtextedit.cpp + qt/plugins/mrichtexteditor/mrichtextedit.cpp + ) + + set(QT_RESOURCES qt/triangles.qrc) + + set(QT_FORMS + qt/forms/coincontroldialog.ui + qt/forms/sendcoinsdialog.ui + qt/forms/addressbookpage.ui + qt/forms/aboutdialog.ui + qt/forms/editaddressdialog.ui + qt/forms/transactiondescdialog.ui + qt/forms/overviewpage.ui + qt/forms/sendcoinsentry.ui + qt/forms/askpassphrasedialog.ui + qt/forms/rpcconsole.ui + qt/forms/optionsdialog.ui + qt/forms/messagepage.ui + qt/forms/sendmessagesentry.ui + qt/forms/sendmessagesdialog.ui + qt/plugins/mrichtexteditor/mrichtextedit.ui + qt/forms/mainwindow.ui + qt/forms/signmessagepage.ui + qt/forms/verifymessagepage.ui + qt/forms/transactionspage.ui + ) + + # Optional QR code dialog + if(USE_QRCODE) + list(APPEND QT_SOURCES qt/qrcodedialog.cpp) + list(APPEND QT_FORMS qt/forms/qrcodedialog.ui) + endif() + + # macOS Objective-C++ sources + if(APPLE) + list(APPEND QT_SOURCES + qt/macdockiconhandler.mm + qt/macnotificationhandler.mm + ) + endif() + + add_executable(triangles-qt WIN32 MACOSX_BUNDLE + ${QT_SOURCES} + ${QT_RESOURCES} + ${QT_FORMS} + # Per-target: compiled with QT_GUI define + init.cpp + wallet.cpp + noui.cpp + ) + + target_compile_definitions(triangles-qt PRIVATE + QT_GUI + QT_DISABLE_DEPRECATED_BEFORE=0 + ) + + target_include_directories(triangles-qt PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/qt" + "${CMAKE_CURRENT_SOURCE_DIR}/qt/plugins/mrichtexteditor" + ) + + target_link_libraries(triangles-qt PRIVATE + triangles_common + Qt5::Core + Qt5::Gui + Qt5::Widgets + ) + + # Optional: D-Bus notifications (Linux) + if(USE_DBUS) + target_compile_definitions(triangles-qt PRIVATE USE_DBUS) + target_link_libraries(triangles-qt PRIVATE Qt5::DBus) + endif() + + # Optional: QR code + if(USE_QRCODE) + target_compile_definitions(triangles-qt PRIVATE USE_QRCODE) + target_link_libraries(triangles-qt PRIVATE QRencode::QRencode) + endif() + + # Windows resource file (.rc with version info and icon) + if(WIN32) + target_sources(triangles-qt PRIVATE qt/res/triangles-qt.rc) + # Ensure RC compiler can find clientversion.h + if(MINGW) + set_source_files_properties(qt/res/triangles-qt.rc PROPERTIES + COMPILE_FLAGS "-I${CMAKE_CURRENT_SOURCE_DIR}" + ) + endif() + endif() + + # macOS bundle settings + if(APPLE) + set_target_properties(triangles-qt PROPERTIES + OUTPUT_NAME "Triangles-Qt" + MACOSX_BUNDLE_ICON_FILE triangles.icns + MACOSX_BUNDLE_BUNDLE_NAME "Triangles-Qt" + MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}" + MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}" + ) + set_source_files_properties( + "${CMAKE_CURRENT_SOURCE_DIR}/qt/res/icons/triangles.icns" + PROPERTIES MACOSX_PACKAGE_LOCATION "Resources" + ) + target_sources(triangles-qt PRIVATE qt/res/icons/triangles.icns) + endif() + + # Translations (optional — requires LinguistTools) + if(TARGET Qt5::lrelease) + file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/qt/locale/triangles_*.ts") + if(TS_FILES) + set_source_files_properties(${TS_FILES} PROPERTIES + OUTPUT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/qt/locale" + ) + qt5_add_translation(QM_FILES ${TS_FILES}) + target_sources(triangles-qt PRIVATE ${QM_FILES}) + endif() + endif() +endif() + +# ═══════════════════════════════════════════════════════════════════════════════ +# 6. Unit tests (test_triangles) +# ═══════════════════════════════════════════════════════════════════════════════ +if(BUILD_TESTS) + enable_testing() + + file(GLOB TEST_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/test/*.cpp") + # Exclude miner_tests.cpp (never ported from Bitcoin) + list(FILTER TEST_SOURCES EXCLUDE REGEX "miner_tests\\.cpp$") + + add_executable(test_triangles + ${TEST_SOURCES} + # Per-target: wallet without QT_GUI, noui for noui_connect() + wallet.cpp + noui.cpp + ) + # No init.cpp — test_triangles.cpp provides its own StartShutdown() stub + + target_compile_definitions(test_triangles PRIVATE + "TEST_DATA_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/test/data\"" + ) + + target_include_directories(test_triangles PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}/test" + ) + + target_link_libraries(test_triangles PRIVATE + triangles_common + Boost::unit_test_framework + ) + + add_test(NAME triangles_unit_tests COMMAND test_triangles --log_level=test_suite) +endif() diff --git a/src/leveldb/CMakeLists.txt b/src/leveldb/CMakeLists.txt new file mode 100644 index 0000000..49b81f7 --- /dev/null +++ b/src/leveldb/CMakeLists.txt @@ -0,0 +1,148 @@ +set(LEVELDB_CORE_SOURCES + db/builder.cc + db/c.cc + db/db_impl.cc + db/db_iter.cc + db/dbformat.cc + db/dumpfile.cc + db/filename.cc + db/log_reader.cc + db/log_writer.cc + db/memtable.cc + db/repair.cc + db/table_cache.cc + db/version_edit.cc + db/version_set.cc + db/write_batch.cc + table/block.cc + table/block_builder.cc + table/filter_block.cc + table/format.cc + table/iterator.cc + table/merger.cc + table/table.cc + table/table_builder.cc + table/two_level_iterator.cc + util/arena.cc + util/bloom.cc + util/cache.cc + util/coding.cc + util/comparator.cc + util/crc32c.cc + util/env.cc + util/filter_policy.cc + util/hash.cc + util/histogram.cc + util/logging.cc + util/options.cc + util/status.cc +) + +if(WIN32) + list(APPEND LEVELDB_CORE_SOURCES util/env_windows.cc) +else() + list(APPEND LEVELDB_CORE_SOURCES util/env_posix.cc) +endif() + +add_library(leveldb_lib STATIC ${LEVELDB_CORE_SOURCES}) + +target_compile_features(leveldb_lib PUBLIC cxx_std_11) + +target_include_directories(leveldb_lib + PUBLIC + "${CMAKE_CURRENT_SOURCE_DIR}/include" + PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}" +) + +target_compile_definitions(leveldb_lib + PRIVATE + HAVE_CRC32C=0 + HAVE_SNAPPY=0 +) + +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(leveldb_lib PRIVATE -fno-builtin-memcmp) +endif() + +if(WIN32) + target_compile_definitions(leveldb_lib PRIVATE + _REENTRANT + OS_WINDOWS + LEVELDB_PLATFORM_WINDOWS + WINVER=0x0500 + __USE_MINGW_ANSI_STDIO=1 + ) + target_link_libraries(leveldb_lib PUBLIC shlwapi) +elseif(APPLE) + target_compile_definitions(leveldb_lib PRIVATE + OS_MACOSX + LEVELDB_PLATFORM_POSIX + ) + target_link_libraries(leveldb_lib PUBLIC Threads::Threads) +else() + target_compile_definitions(leveldb_lib PRIVATE + _REENTRANT + OS_LINUX + LEVELDB_PLATFORM_POSIX + ) + target_link_libraries(leveldb_lib PUBLIC Threads::Threads) +endif() + +add_library(leveldb_memenv STATIC helpers/memenv/memenv.cc) + +target_compile_features(leveldb_memenv PUBLIC cxx_std_11) + +target_include_directories(leveldb_memenv + PUBLIC + "${CMAKE_CURRENT_SOURCE_DIR}/include" + "${CMAKE_CURRENT_SOURCE_DIR}/helpers" + PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}" +) + +target_compile_definitions(leveldb_memenv + PRIVATE + HAVE_CRC32C=0 + HAVE_SNAPPY=0 +) + +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(leveldb_memenv PRIVATE -fno-builtin-memcmp) +endif() + +if(WIN32) + target_compile_definitions(leveldb_memenv PRIVATE + _REENTRANT + OS_WINDOWS + LEVELDB_PLATFORM_WINDOWS + WINVER=0x0500 + __USE_MINGW_ANSI_STDIO=1 + ) +elseif(APPLE) + target_compile_definitions(leveldb_memenv PRIVATE + OS_MACOSX + LEVELDB_PLATFORM_POSIX + ) +else() + target_compile_definitions(leveldb_memenv PRIVATE + _REENTRANT + OS_LINUX + LEVELDB_PLATFORM_POSIX + ) +endif() + +target_link_libraries(leveldb_memenv PUBLIC leveldb_lib) + +add_library(leveldb_bundled INTERFACE) + +target_link_libraries(leveldb_bundled INTERFACE + leveldb_lib + leveldb_memenv +) + +target_include_directories(leveldb_bundled INTERFACE + "${CMAKE_CURRENT_SOURCE_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}/include" + "${CMAKE_CURRENT_SOURCE_DIR}/helpers" +) diff --git a/src/makefile.mingw b/src/makefile.mingw deleted file mode 100644 index d0f7a2e..0000000 --- a/src/makefile.mingw +++ /dev/null @@ -1,261 +0,0 @@ -# Copyright (c) 2009-2010 Satoshi Nakamoto -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. -# -# Windows (MSYS2 MinGW64) makefile for trianglesd headless daemon - -USE_UPNP:=1 -USE_IPV6:=1 - -CXX=g++ -CC=gcc -LINK=$(CXX) - -DEPSDIR=C:/msys64/mingw64 - -DEFS=-DBOOST_SPIRIT_THREADSAFE -DBOOST_THREAD_USE_LIB -DBOOST_BIND_GLOBAL_PLACEHOLDERS -DWIN32 -D__NO_SYSTEM_INCLUDES - -DEFS += $(addprefix -I,$(CURDIR) $(CURDIR)/tor $(CURDIR)/obj \ - $(DEPSDIR)/include) - -LIBS = $(addprefix -L,$(DEPSDIR)/lib) - -# libevent -LIBS += -levent - -LMODE = dynamic -LMODE2 = dynamic -ifdef STATIC - LMODE = static - ifeq (${STATIC}, all) - LMODE2 = static - endif -endif - -LIBS += \ - -lboost_filesystem-mt \ - -lboost_program_options-mt \ - -lboost_thread-mt \ - -lboost_chrono-mt \ - -ldb_cxx \ - -lssl \ - -lcrypto \ - -levent - -ifndef USE_UPNP - override USE_UPNP = - -endif -ifneq (${USE_UPNP}, -) - LIBS += -lminiupnpc -liphlpapi - DEFS += -DUSE_UPNP=$(USE_UPNP) -DSTATICLIB -DMINIUPNP_STATICLIB -endif - -ifneq (${USE_IPV6}, -) - DEFS += -DUSE_IPV6=$(USE_IPV6) -endif - -# Windows-specific libraries -LIBS += \ - -lws2_32 \ - -lshlwapi \ - -lmswsock \ - -lole32 \ - -loleaut32 \ - -luuid \ - -lgdi32 \ - -lcrypt32 \ - -lz \ - -lpthread - -# Hardening -HARDENING=-fno-stack-protector -HARDENING+=-fstack-protector-all -Wstack-protector -HARDENING+=-D_FORTIFY_SOURCE=2 - -DEBUGFLAGS=-g - -xCXXFLAGS=-O2 -std=c++17 -pthread -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter \ - -Wno-deprecated-declarations -Wno-reserved-user-defined-literal \ - -Wa,-mbig-obj \ - $(DEBUGFLAGS) $(DEFS) $(HARDENING) $(CXXFLAGS) - -xLDFLAGS=-static -static-libgcc -static-libstdc++ $(LDFLAGS) - -OBJS= \ - obj/fugue.o \ - obj/hamsi.o \ - obj/hamsi_helper.o \ - obj/groestl.o \ - obj/blake.o \ - obj/bmw.o \ - obj/skein.o \ - obj/keccak.o \ - obj/shavite.o \ - obj/jh.o \ - obj/luffa.o \ - obj/cubehash.o \ - obj/echo.o \ - obj/simd.o \ - obj/aes_helper.o \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/db.o \ - obj/init.o \ - obj/irc.o \ - obj/keystore.o \ - obj/miner.o \ - obj/main.o \ - obj/net.o \ - obj/bootstrap.o \ - obj/net_bootstrap.o \ - obj/protocol.o \ - obj/trianglesrpc.o \ - obj/rest.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/rpcsmessage.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/noui.o \ - obj/kernel.o \ - obj/pbkdf2.o \ - obj/scrypt.o \ - obj/scrypt-arm.o \ - obj/scrypt-x86.o \ - obj/scrypt-x86_64.o \ - obj/smessage.o \ - obj/lz4.o \ - obj/onion_v3.o \ - obj/tor_process.o \ - obj/tor_embed_hooks.o \ - obj/tor_embedded.o - -all: trianglesd.exe - -LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a -DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) -DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) -OBJS += obj/txdb-leveldb.o - -leveldb/libleveldb.a: - @echo "Building LevelDB ..."; cd leveldb; CC=gcc CXX=g++ TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT="-fno-keep-inline-dllexport -march=nocona -msahf -mtune=generic -Wa,-mbig-obj -O2" libleveldb.a libmemenv.a; cd ..; -obj/txdb-leveldb.o: leveldb/libleveldb.a - -# auto-generated dependencies: --include obj/*.P - -obj/build.h: FORCE - /bin/sh ../share/genbuild.sh obj/build.h -version.cpp: obj/build.h -DEFS += -DHAVE_BUILD_INFO - -obj/scrypt-x86.o: scrypt-x86.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-x86_64.o: scrypt-x86_64.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-arm.o: scrypt-arm.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/%.o: %.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/%.o: %.c - $(CXX) -c $(xCXXFLAGS) -fpermissive -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/%.o: tor/%.c - $(CC) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/anonymize.o: tor/anonymize.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/onion_v3.o: tor/onion_v3.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/tor_process.o: tor/tor_process.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/lz4.o: lz4/lz4.c - $(CXX) -c $(xCXXFLAGS) -fpermissive -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/tor_embed_hooks.o: tor_embed_hooks.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/tor_embedded.o: tor/tor_embedded.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/bootstrap.o: bootstrap.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/net_bootstrap.o: net_bootstrap.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -trianglesd.exe: $(OBJS:obj/%=obj/%) obj/anonymize.o - $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS) - -clean: - -rm -f trianglesd.exe - -rm -f obj/*.o - -rm -f obj/*.P - -rm -f obj/build.h - -rm -f leveldb/libleveldb.a - -rm -f leveldb/libmemenv.a - -FORCE: diff --git a/src/makefile.osx b/src/makefile.osx deleted file mode 100644 index d305426..0000000 --- a/src/makefile.osx +++ /dev/null @@ -1,301 +0,0 @@ -# -*- mode: Makefile; -*- -# Copyright (c) 2011 Bitcoin Developers -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -# Mac OS X makefile for triangles -# Originally by Laszlo Hanyecz (solar@heliacal.net) - -CXX=llvm-g++ -CC=llvm-gcc -DEPSDIR=/opt/local - -INCLUDEPATHS= \ - -I"$(CURDIR)" \ - -I"$(CURDIR)/obj" \ - -I"$(CURDIR)/tor" \ - -I"$(DEPSDIR)/include" \ - -I"$(DEPSDIR)/include/db48" \ - -I"$(DEPSDIR)/include/boost" - -LIBPATHS= \ - -L"$(DEPSDIR)/lib" \ - -L"$(DEPSDIR)/lib/db48" - -USE_UPNP:=1 -USE_IPV6:=1 - -LIBS= -dead_strip - -TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) - -ifdef STATIC -# Build STATIC if you are redistributing the bitcoind binary -TESTLIBS += \ - $(DEPSDIR)/lib/libboost_unit_test_framework-mt.a - -LIBS += \ - $(DEPSDIR)/lib/db48/libdb_cxx-4.8.a \ - $(DEPSDIR)/lib/libboost_system-mt.a \ - $(DEPSDIR)/lib/libboost_filesystem-mt.a \ - $(DEPSDIR)/lib/libboost_program_options-mt.a \ - $(DEPSDIR)/lib/libboost_thread-mt.a \ - $(DEPSDIR)/lib/libssl.a \ - $(DEPSDIR)/lib/libcrypto.a \ - -lz -else -TESTLIBS += \ - -lboost_unit_test_framework-mt -LIBS += \ - -ldb_cxx-4.8 \ - -lboost_system-mt \ - -lboost_filesystem-mt \ - -lboost_program_options-mt \ - -lboost_thread-mt \ - -lssl \ - -lcrypto \ - -lz \ - -levent -TESTDEFS += -DBOOST_TEST_DYN_LINK -endif - -DEFS=-DMAC_OSX -DMSG_NOSIGNAL=0 -DBOOST_SPIRIT_THREADSAFE - -ifdef RELEASE -# Compile for maximum compatibility and smallest size. -# This requires that dependencies are compiled -# the same way. -CFLAGS = -mmacosx-version-min=10.5 -arch x86_64 -O3 -msse2 -else -CFLAGS = -g -msse2 -endif - -# triangles doesn't work because we don't support big-endian -CFLAGS += -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter \ - $(DEBUGFLAGS) $(DEFS) $(INCLUDEPATHS) - -OBJS= \ - obj/address.o \ - obj/addressmap.o \ - obj/aes.o \ - obj/backtrace.o \ - obj/buffers.o \ - obj/channel.o \ - obj/channeltls.o \ - obj/circpathbias.o \ - obj/circuitbuild.o \ - obj/circuitlist.o \ - obj/circuitmux.o \ - obj/circuitmux_ewma.o \ - obj/circuitstats.o \ - obj/circuituse.o \ - obj/command.o \ - obj/compat.o \ - obj/compat_libevent.o \ - obj/config.o \ - obj/config_codedigest.o \ - obj/confparse.o \ - obj/connection.o \ - obj/connection_edge.o \ - obj/connection_or.o \ - obj/container.o \ - obj/control.o \ - obj/cpuworker.o \ - obj/crypto.o \ - obj/crypto_curve25519.o \ - obj/crypto_format.o \ - obj/curve25519-donna.o \ - obj/di_ops.o \ - obj/directory.o \ - obj/dirserv.o \ - obj/dirvote.o \ - obj/dns.o \ - obj/dnsserv.o \ - obj/entrynodes.o \ - obj/ext_orport.o \ - obj/fp_pair.o \ - obj/geoip.o \ - obj/hibernate.o \ - obj/log.o \ - obj/memarea.o \ - obj/mempool.o \ - obj/microdesc.o \ - obj/networkstatus.o \ - obj/nodelist.o \ - obj/onion.o \ - obj/onion_fast.o \ - obj/onion_main.o \ - obj/onion_ntor.o \ - obj/onion_tap.o \ - obj/policies.o \ - obj/procmon.o \ - obj/reasons.o \ - obj/relay.o \ - obj/rendclient.o \ - obj/rendcommon.o \ - obj/rendmid.o \ - obj/rendservice.o \ - obj/rephist.o \ - obj/replaycache.o \ - obj/router.o \ - obj/routerlist.o \ - obj/routerparse.o \ - obj/routerset.o \ - obj/sandbox.o \ - obj/statefile.o \ - obj/status.o \ - obj/tor_util.o \ - obj/torgzip.o \ - obj/tortls.o \ - obj/transports.o \ - obj/util_codedigest.o \ - obj/fugue.o \ - obj/hamsi.o \ - obj/groestl.o \ - obj/blake.o \ - obj/bmw.o \ - obj/skein.o \ - obj/keccak.o \ - obj/shavite.o \ - obj/jh.o \ - obj/luffa.o \ - obj/cubehash.o \ - obj/echo.o \ - obj/simd.o \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/db.o \ - obj/init.o \ - obj/irc.o \ - obj/keystore.o \ - obj/miner.o \ - obj/main.o \ - obj/net.o \ - obj/protocol.o \ - obj/trianglesrpc.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/rpcsmessage.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/noui.o \ - obj/kernel.o \ - obj/pbkdf2.o \ - obj/scrypt.o \ - obj/scrypt-arm.o \ - obj/scrypt-x86.o \ - obj/scrypt-x86_64.o \ - obj/smessage.o -ifndef USE_UPNP - override USE_UPNP = - -endif -ifneq (${USE_UPNP}, -) - DEFS += -DUSE_UPNP=$(USE_UPNP) -ifdef STATIC - LIBS += $(DEPSDIR)/lib/libminiupnpc.a -else - LIBS += -lminiupnpc -endif -endif - -ifneq (${USE_IPV6}, -) - DEFS += -DUSE_IPV6=$(USE_IPV6) -endif - -all: trianglesd - -test check: test_triangles FORCE - ./test_triangles - -LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a -DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) -DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) -OBJS += obj/txdb-leveldb.o -leveldb/libleveldb.a: - @echo "Building LevelDB ..."; cd leveldb; make libleveldb.a libmemenv.a; cd ..; -obj/txdb-leveldb.o: leveldb/libleveldb.a - -# auto-generated dependencies: --include obj/*.P --include obj-test/*.P - -obj/build.h: FORCE - /bin/sh ../share/genbuild.sh obj/build.h -version.cpp: obj/build.h -DEFS += -DHAVE_BUILD_INFO - -obj/%.o: %.cpp - $(CXX) -c $(CFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/%.o: %.c - $(CC) -c $(CFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/%.o: tor/%.c - $(CC) -c $(CFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/anonymize.o: tor/anonymize.cpp - $(CXX) -c $(CFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/scrypt-x86.o: scrypt-x86.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-x86_64.o: scrypt-x86_64.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-arm.o: scrypt-arm.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -trianglesd: $(OBJS:obj/%=obj/%) obj/anonymize.o - $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) - -TESTOBJS := $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp)) - -obj-test/%.o: test/%.cpp - $(CXX) -c $(TESTDEFS) $(CFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -test_triangles: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%)) - $(CXX) $(CFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) $(TESTLIBS) - -clean: - -rm -f trianglesd test_triangles - -rm -f obj/*.o - -rm -f obj-test/*.o - -rm -f obj/*.P - -rm -f obj-test/*.P - -rm -f obj/build.h - -rm -f leveldb/libleveldb.a - -rm -f leveldb/libmemenv.a - -FORCE: diff --git a/src/makefile.unix b/src/makefile.unix deleted file mode 100644 index d75f1d8..0000000 --- a/src/makefile.unix +++ /dev/null @@ -1,329 +0,0 @@ -# Copyright (c) 2009-2010 Satoshi Nakamoto -# Distributed under the MIT/X11 software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -USE_UPNP:=0 -USE_IPV6:=1 - -LINK:=$(CXX) -ARCH:=$(shell lscpu | head -n 1 | awk '{print $$2}') - -DEFS=-DBOOST_SPIRIT_THREADSAFE - -DEFS += $(addprefix -I,$(CURDIR) $(CURDIR)/tor $(CURDIR)/obj $(BOOST_INCLUDE_PATH) $(BDB_INCLUDE_PATH) $(OPENSSL_INCLUDE_PATH)) -LIBS = $(addprefix -L,$(BOOST_LIB_PATH) $(BDB_LIB_PATH) $(OPENSSL_LIB_PATH)) - -# libevent -EVENTDIR = /usr/local -DEFS += $(addprefix -I,$(EVENTDIR)/include) -LIBS += -levent $(addprefix -L,$(EVENTDIR)/lib) - -TESTDEFS = -DTEST_DATA_DIR=$(abspath test/data) - -LMODE = dynamic -LMODE2 = dynamic -ifdef STATIC - LMODE = static - ifeq (${STATIC}, all) - LMODE2 = static - endif -else - TESTDEFS += -DBOOST_TEST_DYN_LINK -endif - -# for boost 1.37, add -mt to the boost libraries -LIBS += \ - -Wl,-B$(LMODE) \ - -l boost_system$(BOOST_LIB_SUFFIX) \ - -l boost_filesystem$(BOOST_LIB_SUFFIX) \ - -l boost_program_options$(BOOST_LIB_SUFFIX) \ - -l boost_thread$(BOOST_LIB_SUFFIX) \ - -l boost_chrono$(BOOST_LIB_SUFFIX) \ - -l db_cxx$(BDB_LIB_SUFFIX) \ - -l ssl \ - -l crypto - -ifndef USE_UPNP - override USE_UPNP = - -endif -ifneq (${USE_UPNP}, -) - LIBS += -l miniupnpc - DEFS += -DUSE_UPNP=$(USE_UPNP) -endif - -ifneq (${USE_IPV6}, -) - DEFS += -DUSE_IPV6=$(USE_IPV6) -endif - -LIBS+= \ - -Wl,-B$(LMODE2) \ - -l z \ - -l dl \ - -l pthread - - -# Hardening -# Make some classes of vulnerabilities unexploitable in case one is discovered. -# - # This is a workaround for Ubuntu bug #691722, the default -fstack-protector causes - # -fstack-protector-all to be ignored unless -fno-stack-protector is used first. - # see: https://bugs.launchpad.net/ubuntu/+source/gcc-4.5/+bug/691722 - HARDENING=-fno-stack-protector - - # Stack Canaries - # Put numbers at the beginning of each stack frame and check that they are the same. - # If a stack buffer if overflowed, it writes over the canary number and then on return - # when that number is checked, it won't be the same and the program will exit with - # a "Stack smashing detected" error instead of being exploited. - HARDENING+=-fstack-protector-all -Wstack-protector - - # Make some important things such as the global offset table read only as soon as - # the dynamic linker is finished building it. This will prevent overwriting of addresses - # which would later be jumped to. - LDHARDENING+=-Wl,-z,relro -Wl,-z,now - - # Build position independent code to take advantage of Address Space Layout Randomization - # offered by some kernels. - # see doc/build-unix.txt for more information. - ifdef PIE - HARDENING+=-fPIE - LDHARDENING+=-pie - endif - - # -D_FORTIFY_SOURCE=2 does some checking for potentially exploitable code patterns in - # the source such overflowing a statically defined buffer. - HARDENING+=-D_FORTIFY_SOURCE=2 -# - - -DEBUGFLAGS=-g - - -ifeq (${ARCH}, i686) - EXT_OPTIONS=-msse2 -endif - - -# CXXFLAGS can be specified on the make command line, so we use xCXXFLAGS that only -# adds some defaults in front. Unfortunately, CXXFLAGS=... $(CXXFLAGS) does not work. -xCXXFLAGS=-O2 -std=c++17 $(EXT_OPTIONS) -pthread -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter \ - $(DEBUGFLAGS) $(DEFS) $(HARDENING) $(CXXFLAGS) - -# LDFLAGS can be specified on the make command line, so we use xLDFLAGS that only -# adds some defaults in front. Unfortunately, LDFLAGS=... $(LDFLAGS) does not work. -xLDFLAGS=$(LDHARDENING) $(LDFLAGS) - -# Old embedded Tor v2 client removed - incompatible with OpenSSL 3.x -# Tor v3 onion services handled by onion_v3.cpp via external Tor/SOCKS5 -OBJS= \ - obj/fugue.o \ - obj/hamsi.o \ - obj/hamsi_helper.o \ - obj/groestl.o \ - obj/blake.o \ - obj/bmw.o \ - obj/skein.o \ - obj/keccak.o \ - obj/shavite.o \ - obj/jh.o \ - obj/luffa.o \ - obj/cubehash.o \ - obj/echo.o \ - obj/simd.o \ - obj/aes_helper.o \ - obj/alert.o \ - obj/version.o \ - obj/checkpoints.o \ - obj/netbase.o \ - obj/addrman.o \ - obj/crypter.o \ - obj/key.o \ - obj/db.o \ - obj/init.o \ - obj/irc.o \ - obj/keystore.o \ - obj/miner.o \ - obj/main.o \ - obj/net.o \ - obj/bootstrap.o \ - obj/net_bootstrap.o \ - obj/protocol.o \ - obj/trianglesrpc.o \ - obj/rest.o \ - obj/rpcdump.o \ - obj/rpcnet.o \ - obj/rpcmining.o \ - obj/rpcwallet.o \ - obj/rpcblockchain.o \ - obj/rpcrawtransaction.o \ - obj/rpcsmessage.o \ - obj/script.o \ - obj/sync.o \ - obj/util.o \ - obj/wallet.o \ - obj/walletdb.o \ - obj/noui.o \ - obj/kernel.o \ - obj/pbkdf2.o \ - obj/scrypt.o \ - obj/scrypt-arm.o \ - obj/scrypt-x86.o \ - obj/scrypt-x86_64.o \ - obj/smessage.o \ - obj/lz4.o \ - obj/onion_v3.o \ - obj/tor_process.o \ - obj/tor_embed_hooks.o \ - obj/tor_embedded.o - -# Embedded Tor support (optional) -# Build with: make -f makefile.unix USE_TOR_EMBEDDED=1 TOR_SOURCE_ROOT=/path/to/tor-src -# Requires libtor.a built from official Tor source (see CODEX-TOR-GUIDE.md) -TOR_SOURCE_ROOT ?= tor/tor-src -TOR_INCLUDE_PATH ?= $(TOR_SOURCE_ROOT)/src/feature/api -TOR_LIB_PATH ?= $(TOR_SOURCE_ROOT) -TOR_EMBEDDED_LIBS ?= -ltor -ifdef USE_TOR_EMBEDDED - DEFS += -DENABLE_TOR_EMBEDDED - DEFS += $(addprefix -I,$(TOR_INCLUDE_PATH)) - LIBS += $(addprefix -L,$(TOR_LIB_PATH)) - LIBS += -Wl,--start-group $(TOR_EMBEDDED_LIBS) -Wl,--end-group - LIBS += -llzma -lzstd -lm -lpthread -endif - -# ZMQ support (optional) -# Build with: make -f makefile.unix USE_ZMQ=1 -ifdef USE_ZMQ - DEFS += -DENABLE_ZMQ - LIBS += -lzmq - OBJS += obj/zmqpublishnotifier.o -endif - -all: trianglesd - -obj: - @mkdir -p obj - -obj-test: - @mkdir -p obj-test - -test check: test_triangles FORCE - ./test_triangles - -LIBS += $(CURDIR)/leveldb/libleveldb.a $(CURDIR)/leveldb/libmemenv.a -DEFS += $(addprefix -I,$(CURDIR)/leveldb/include) -DEFS += $(addprefix -I,$(CURDIR)/leveldb/helpers) -OBJS += obj/txdb-leveldb.o -leveldb/libleveldb.a: - @echo "Building LevelDB ..."; cd leveldb; make libleveldb.a libmemenv.a; cd ..; -obj/txdb-leveldb.o: leveldb/libleveldb.a - -# auto-generated dependencies: --include obj/*.P --include obj-test/*.P - -obj/build.h: FORCE - /bin/sh ../share/genbuild.sh obj/build.h -version.cpp: obj/build.h -DEFS += -DHAVE_BUILD_INFO - -obj/scrypt-x86.o: scrypt-x86.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-x86_64.o: scrypt-x86_64.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/scrypt-arm.o: scrypt-arm.S - $(CXX) -c $(xCXXFLAGS) -MMD -o $@ $< - -obj/%.o: %.cpp | obj - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/%.o: %.c | obj - $(CXX) -c $(xCXXFLAGS) -fpermissive -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/lz4.o: lz4/lz4.c - $(CXX) -c $(xCXXFLAGS) -fpermissive -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//'\ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/tor_embed_hooks.o: tor_embed_hooks.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/onion_v3.o: tor/onion_v3.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/tor_process.o: tor/tor_process.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/tor_embedded.o: tor/tor_embedded.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/bootstrap.o: bootstrap.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -obj/net_bootstrap.o: net_bootstrap.cpp - $(CXX) -c $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -trianglesd: $(OBJS:obj/%=obj/%) - $(LINK) $(xCXXFLAGS) -o $@ $^ $(xLDFLAGS) $(LIBS) - -# miner_tests.cpp references CreateNewBlock() which was never ported from Bitcoin -TESTOBJS := $(filter-out obj-test/miner_tests.o, \ - $(patsubst test/%.cpp,obj-test/%.o,$(wildcard test/*.cpp))) - -obj-test/%.o: test/%.cpp | obj-test - $(CXX) -c $(TESTDEFS) $(xCXXFLAGS) -MMD -MF $(@:%.o=%.d) -o $@ $< - @cp $(@:%.o=%.d) $(@:%.o=%.P); \ - sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \ - -e '/^$$/ d' -e 's/$$/ :/' < $(@:%.o=%.d) >> $(@:%.o=%.P); \ - rm -f $(@:%.o=%.d) - -test_triangles: $(TESTOBJS) $(filter-out obj/init.o,$(OBJS:obj/%=obj/%)) - $(LINK) $(xCXXFLAGS) -o $@ $(LIBPATHS) $^ -Wl,-B$(LMODE) -lboost_unit_test_framework $(xLDFLAGS) $(LIBS) - -clean: - -rm -f trianglesd test_triangles - -rm -f obj/*.o - -rm -f obj-test/*.o - -rm -f obj/*.P - -rm -f obj-test/*.P - -rm -f obj/build.h - -rm -f leveldb/libleveldb.a - -rm -f leveldb/libmemenv.a - -FORCE: diff --git a/triangles-qt.pro b/triangles-qt.pro deleted file mode 100644 index c92117a..0000000 --- a/triangles-qt.pro +++ /dev/null @@ -1,605 +0,0 @@ -TEMPLATE = app -TARGET = triangles-qt - -VERSION = 5.6.0.0 -INCLUDEPATH += src src/json src/qt src/qt/plugins/mrichtexteditor -DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN BOOST_BIND_GLOBAL_PLACEHOLDERS __NO_SYSTEM_INCLUDES -CONFIG += no_include_pwd -CONFIG += thread -CONFIG += c++17 - -lessThan(QT_MAJOR_VERSION, 5) { - error(Triangles Qt requires Qt 5 or newer) -} - -QT += widgets -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 - -# UNCOMMENT THIS SECTION TO BUILD ON WINDOWS -# MSYS2 MinGW64 paths -win32 { - BOOST_LIB_SUFFIX=-mt - BOOST_THREAD_LIB_SUFFIX=-mt - BOOST_INCLUDE_PATH=C:/msys64/mingw64/include - BOOST_LIB_PATH=C:/msys64/mingw64/lib - BDB_INCLUDE_PATH=C:/msys64/mingw64/include - BDB_LIB_PATH=C:/msys64/mingw64/lib - OPENSSL_INCLUDE_PATH=C:/msys64/mingw64/include - OPENSSL_LIB_PATH=C:/msys64/mingw64/lib - MINIUPNPC_INCLUDE_PATH=C:/msys64/mingw64/include - MINIUPNPC_LIB_PATH=C:/msys64/mingw64/lib - EVENT_INCLUDE_PATH=C:/msys64/mingw64/include - EVENT_LIB_PATH=C:/msys64/mingw64/lib -} - -# for boost 1.37, add -mt to the boost libraries -# use: qmake BOOST_LIB_SUFFIX=-mt -# for boost thread win32 with _win32 sufix -# use: BOOST_THREAD_LIB_SUFFIX=_win32-... -# or when linking against a specific BerkelyDB version: BDB_LIB_SUFFIX=-4.8 - -# Dependency library locations can be customized with: -# BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH, -# BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively - -OBJECTS_DIR = build -MOC_DIR = build -UI_DIR = build - -# use: qmake "RELEASE=1" -contains(RELEASE, 1) { - # Mac: compile for compatibility (macOS 11+) - macx:QMAKE_CXXFLAGS += -mmacosx-version-min=11.0 - macx:QMAKE_LFLAGS += -mmacosx-version-min=11.0 - - !windows:!macx { - # Linux: static link - LIBS += -Wl,-Bstatic - } -} - -!win32 { -# for extra security against potential buffer overflows: enable GCCs Stack Smashing Protection -QMAKE_CXXFLAGS *= -fstack-protector-all --param ssp-buffer-size=1 -QMAKE_LFLAGS *= -fstack-protector-all --param ssp-buffer-size=1 -# We need to exclude this for Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable! -# This can be enabled for Windows, when we switch to MinGW >= 4.4.x. -} -# for extra security on Windows: enable ASLR and DEP via GCC linker flags -win32:QMAKE_LFLAGS *= -static -win32:QMAKE_LFLAGS += -static-libgcc -static-libstdc++ -lessThan(QT_MAJOR_VERSION, 5): win32: QMAKE_LFLAGS *= -static - -# use: qmake "USE_QRCODE=1" -# libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support -contains(USE_QRCODE, 1) { - message(Building with QRCode support) - DEFINES += USE_QRCODE - LIBS += -lqrencode -} - -#triangles: use UPNP with TOR -USE_UPNP=1 -# use: qmake "USE_UPNP=1" ( enabled by default; default) -# or: qmake "USE_UPNP=0" (disabled by default) -# or: qmake "USE_UPNP=-" (not supported) -# miniupnpc (http://miniupnp.free.fr/files/) must be installed for support -contains(USE_UPNP, -) { - message(Building without UPNP support) -} else { - message(Building with UPNP support) - count(USE_UPNP, 0) { - USE_UPNP=1 - } - DEFINES += USE_UPNP=$$USE_UPNP STATICLIB MINIUPNP_STATICLIB - INCLUDEPATH += $$MINIUPNPC_INCLUDE_PATH - LIBS += $$join(MINIUPNPC_LIB_PATH,,-L,) -lminiupnpc - win32:LIBS += -liphlpapi -} - -# use: qmake "USE_DBUS=1" or qmake "USE_DBUS=0" -linux:count(USE_DBUS, 0) { - USE_DBUS=1 -} -contains(USE_DBUS, 1) { - message(Building with DBUS (Freedesktop notifications) support) - DEFINES += USE_DBUS - QT += dbus -} - -# use: qmake "USE_IPV6=1" ( enabled by default; default) -# or: qmake "USE_IPV6=0" (disabled by default) -# or: qmake "USE_IPV6=-" (not supported) -contains(USE_IPV6, -) { - message(Building without IPv6 support) -} else { - count(USE_IPV6, 0) { - USE_IPV6=1 - } - DEFINES += USE_IPV6=$$USE_IPV6 -} - -contains(TRIANGLES_NEED_QT_PLUGINS, 1) { - message(Building with Qt Plugins) - DEFINES += TRIANGLES_NEED_QT_PLUGINS - QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets -} else { - message(Building without Qt Plugins) -} - -INCLUDEPATH += src/leveldb/include src/leveldb/helpers -LIBS += $$PWD/src/leveldb/libleveldb.a $$PWD/src/leveldb/libmemenv.a -SOURCES += src/txdb-leveldb.cpp \ - src/blake.c \ - src/groestl.c \ - src/jh.c \ - src/keccak.c \ - src/skein.c \ - src/aes_helper.c \ - src/bmw.c \ - src/cubehash.c \ - src/echo.c \ - src/fugue.c \ - src/hamsi.c \ - src/hamsi_helper.c \ - src/luffa.c \ - src/shavite.c \ - src/simd.c - -!win32 { - # we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a -} else { - # make an educated guess about what the ranlib command is called - isEmpty(QMAKE_RANLIB) { - QMAKE_RANLIB = $$replace(QMAKE_STRIP, strip, ranlib) - } - LIBS += -lshlwapi - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a -} -genleveldb.target = $$PWD/src/leveldb/libleveldb.a -genleveldb.depends = FORCE -PRE_TARGETDEPS += $$PWD/src/leveldb/libleveldb.a -QMAKE_EXTRA_TARGETS += genleveldb -# Gross ugly hack that depends on qmake internals, unfortunately there is no other way to do it. -QMAKE_CLEAN += $$PWD/src/leveldb/libleveldb.a; cd $$PWD/src/leveldb ; $(MAKE) clean - -# regenerate src/build.h -!windows|contains(USE_BUILD_INFO, 1) { - genbuild.depends = FORCE - genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$OUT_PWD/build/build.h - genbuild.target = $$OUT_PWD/build/build.h - PRE_TARGETDEPS += $$OUT_PWD/build/build.h - QMAKE_EXTRA_TARGETS += genbuild - DEFINES += HAVE_BUILD_INFO -} - -contains(USE_O3, 1) { - message(Building O3 optimization flag) - QMAKE_CXXFLAGS_RELEASE -= -O2 - QMAKE_CFLAGS_RELEASE -= -O2 - QMAKE_CXXFLAGS += -O3 - QMAKE_CFLAGS += -O3 -} - -*-g++-32 { - message("32 platform, adding -msse2 flag") - - QMAKE_CXXFLAGS += -msse2 - QMAKE_CFLAGS += -msse2 -} - -QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector - - -# Input -DEPENDPATH += src src/json src/qt -HEADERS += src/qt/trianglesgui.h \ - src/qt/transactiontablemodel.h \ - src/qt/addresstablemodel.h \ - src/qt/optionsdialog.h \ - src/qt/coincontroldialog.h \ - src/qt/coincontroltreewidget.h \ - src/qt/sendcoinsdialog.h \ - src/qt/addressbookpage.h \ - src/qt/aboutdialog.h \ - src/qt/introdialog.h \ - src/bootstrap.h \ - src/qt/editaddressdialog.h \ - src/qt/trianglesaddressvalidator.h \ - src/alert.h \ - src/addrman.h \ - src/base58.h \ - src/bignum.h \ - src/checkpoints.h \ - src/compat.h \ - src/coincontrol.h \ - src/sync.h \ - src/util.h \ - src/openssl_compat.h \ - src/uint256.h \ - src/kernel.h \ - src/net_bootstrap.h \ - src/tor/onion_v3.h \ - src/tor/tor_process.h \ - src/tor/tor_embedded.h \ - src/tor/tor_crypto_compat.h \ - src/scrypt.h \ - src/pbkdf2.h \ - src/serialize.h \ - src/strlcpy.h \ - src/smessage.h \ - src/zmqpublishnotifier.h \ - src/notificationqueue.h \ - src/addressindex.h \ - src/main.h \ - src/miner.h \ - src/net.h \ - src/key.h \ - src/db.h \ - src/txdb.h \ - src/walletdb.h \ - src/script.h \ - src/init.h \ - src/irc.h \ - src/mruset.h \ - src/json/json_spirit_writer_template.h \ - src/json/json_spirit_writer.h \ - src/json/json_spirit_value.h \ - src/json/json_spirit_utils.h \ - src/json/json_spirit_stream_reader.h \ - src/json/json_spirit_reader_template.h \ - src/json/json_spirit_reader.h \ - src/json/json_spirit_error_position.h \ - src/json/json_spirit.h \ - src/qt/clientmodel.h \ - src/qt/guiutil.h \ - src/qt/transactionrecord.h \ - src/qt/guiconstants.h \ - src/qt/optionsmodel.h \ - src/qt/monitoreddatamapper.h \ - src/qt/transactiondesc.h \ - src/qt/transactiondescdialog.h \ - src/qt/trianglesamountfield.h \ - src/wallet.h \ - src/keystore.h \ - src/qt/transactionfilterproxy.h \ - src/qt/transactionview.h \ - src/qt/walletmodel.h \ - src/tor_embed_hooks.h \ - src/trianglesrpc.h \ - src/rest.h \ - src/qt/overviewpage.h \ - src/qt/csvmodelwriter.h \ - src/crypter.h \ - src/qt/sendcoinsentry.h \ - src/qt/qvalidatedlineedit.h \ - src/qt/trianglesunits.h \ - src/qt/qvaluecombobox.h \ - src/qt/askpassphrasedialog.h \ - src/protocol.h \ - src/qt/notificator.h \ - src/qt/qtipcserver.h \ - src/allocators.h \ - src/ui_interface.h \ - src/qt/rpcconsole.h \ - src/version.h \ - src/netbase.h \ - src/clientversion.h \ - src/hashblock.h \ - src/sph_blake.h \ - src/sph_groestl.h \ - src/sph_jh.h \ - src/sph_keccak.h \ - src/sph_skein.h \ - src/sph_types.h \ - src/qt/messagepage.h \ - src/qt/dialog_move_handler.h \ - src/qt/signmessagepage.h \ - src/qt/verifymessagepage.h \ - src/qt/messagemodel.h \ - src/qt/sendmessagesdialog.h \ - src/qt/sendmessagesentry.h \ - src/qt/plugins/mrichtexteditor/mrichtextedit.h \ - src/qt/qvalidatedtextedit.h \ - src/txdb-leveldb.h \ - src/onionseed.h \ - src/sph_bmw.h \ - src/sph_cubehash.h \ - src/sph_echo.h \ - src/sph_fugue.h \ - src/sph_hamsi.h \ - src/sph_luffa.h \ - src/sph_shavite.h \ - src/sph_simd.h - -SOURCES += src/qt/triangles.cpp src/qt/trianglesgui.cpp \ - src/qt/transactiontablemodel.cpp \ - src/qt/addresstablemodel.cpp \ - src/qt/optionsdialog.cpp \ - src/qt/sendcoinsdialog.cpp \ - src/qt/coincontroldialog.cpp \ - src/qt/coincontroltreewidget.cpp \ - src/qt/addressbookpage.cpp \ - src/qt/aboutdialog.cpp \ - src/qt/introdialog.cpp \ - src/bootstrap.cpp \ - src/qt/editaddressdialog.cpp \ - src/qt/trianglesaddressvalidator.cpp \ - # Old embedded Tor v2 client removed - incompatible with OpenSSL 3.x - # Tor v3 onion services handled by onion_v3.cpp via external Tor/SOCKS5 - src/tor_embed_hooks.cpp \ - src/alert.cpp \ - src/version.cpp \ - src/sync.cpp \ - src/smessage.cpp \ - src/lz4/lz4.c \ - src/util.cpp \ - src/netbase.cpp \ - src/key.cpp \ - src/script.cpp \ - src/main.cpp \ - src/miner.cpp \ - src/init.cpp \ - src/net.cpp \ - src/irc.cpp \ - src/checkpoints.cpp \ - src/addrman.cpp \ - src/db.cpp \ - src/walletdb.cpp \ - src/qt/clientmodel.cpp \ - src/qt/guiutil.cpp \ - src/qt/transactionrecord.cpp \ - src/qt/optionsmodel.cpp \ - src/qt/monitoreddatamapper.cpp \ - src/qt/transactiondesc.cpp \ - src/qt/transactiondescdialog.cpp \ - src/qt/trianglesstrings.cpp \ - src/qt/trianglesamountfield.cpp \ - src/wallet.cpp \ - src/keystore.cpp \ - src/qt/transactionfilterproxy.cpp \ - src/qt/transactionview.cpp \ - src/qt/walletmodel.cpp \ - src/trianglesrpc.cpp \ - src/rest.cpp \ - src/rpcdump.cpp \ - src/rpcnet.cpp \ - src/rpcmining.cpp \ - src/rpcwallet.cpp \ - src/rpcblockchain.cpp \ - src/rpcrawtransaction.cpp \ - src/rpcsmessage.cpp \ - src/zmqpublishnotifier.cpp \ - src/qt/overviewpage.cpp \ - src/qt/csvmodelwriter.cpp \ - src/crypter.cpp \ - src/qt/sendcoinsentry.cpp \ - src/qt/qvalidatedlineedit.cpp \ - src/qt/trianglesunits.cpp \ - src/qt/qvaluecombobox.cpp \ - src/qt/askpassphrasedialog.cpp \ - src/protocol.cpp \ - src/qt/notificator.cpp \ - src/qt/qtipcserver.cpp \ - src/qt/rpcconsole.cpp \ - src/qt/messagepage.cpp \ - src/qt/dialog_move_handler.cpp \ - src/qt/signmessagepage.cpp \ - src/qt/verifymessagepage.cpp \ - src/qt/messagemodel.cpp \ - src/qt/sendmessagesdialog.cpp \ - src/qt/sendmessagesentry.cpp \ - src/qt/qvalidatedtextedit.cpp \ - src/qt/plugins/mrichtexteditor/mrichtextedit.cpp \ - src/noui.cpp \ - src/kernel.cpp \ - src/net_bootstrap.cpp \ - src/tor/onion_v3.cpp \ - src/tor/tor_process.cpp \ - src/tor/tor_embedded.cpp \ - src/scrypt-arm.S \ - src/scrypt-x86.S \ - src/scrypt-x86_64.S \ - src/scrypt.cpp \ - src/pbkdf2.cpp - -RESOURCES += \ - src/qt/triangles.qrc - -FORMS += \ - src/qt/forms/coincontroldialog.ui \ - src/qt/forms/sendcoinsdialog.ui \ - src/qt/forms/addressbookpage.ui \ - src/qt/forms/aboutdialog.ui \ - src/qt/forms/editaddressdialog.ui \ - src/qt/forms/transactiondescdialog.ui \ - src/qt/forms/overviewpage.ui \ - src/qt/forms/sendcoinsentry.ui \ - src/qt/forms/askpassphrasedialog.ui \ - src/qt/forms/rpcconsole.ui \ - src/qt/forms/optionsdialog.ui \ - src/qt/forms/messagepage.ui \ - src/qt/forms/sendmessagesentry.ui \ - src/qt/forms/sendmessagesdialog.ui \ - src/qt/plugins/mrichtexteditor/mrichtextedit.ui \ - src/qt/forms/mainwindow.ui \ - src/qt/forms/signmessagepage.ui \ - src/qt/forms/verifymessagepage.ui \ - src/qt/forms/transactionspage.ui - - -contains(USE_QRCODE, 1) { -HEADERS += src/qt/qrcodedialog.h -SOURCES += src/qt/qrcodedialog.cpp -FORMS += src/qt/forms/qrcodedialog.ui -} - -CODECFORTR = UTF-8 - -# for lrelease/lupdate -# also add new translations to src/qt/triangles.qrc under translations/ -TRANSLATIONS = $$files(src/qt/locale/triangles_*.ts) - -isEmpty(QMAKE_LRELEASE) { - win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe - else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease -} -isEmpty(QM_DIR):QM_DIR = $$PWD/src/qt/locale -# automatically build translations, so they can be included in resource file -TSQM.name = lrelease ${QMAKE_FILE_IN} -TSQM.input = TRANSLATIONS -TSQM.output = $$QM_DIR/${QMAKE_FILE_BASE}.qm -TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} -TSQM.CONFIG = no_link -QMAKE_EXTRA_COMPILERS += TSQM - -# "Other files" to show in Qt Creator -OTHER_FILES += \ - doc/*.rst doc/*.txt doc/README README.md res/triangles-qt.rc - -# platform specific defaults, if not overridden on command line -isEmpty(BOOST_LIB_SUFFIX) { - macx:BOOST_LIB_SUFFIX = - windows:BOOST_LIB_SUFFIX = -mt -} - -isEmpty(BOOST_THREAD_LIB_SUFFIX) { - BOOST_THREAD_LIB_SUFFIX = $$BOOST_LIB_SUFFIX -} - -isEmpty(BDB_LIB_PATH) { - macx:BDB_LIB_PATH = /opt/homebrew/opt/berkeley-db@5/lib -} - -isEmpty(BDB_LIB_SUFFIX) { - macx:BDB_LIB_SUFFIX = -} - -isEmpty(BDB_INCLUDE_PATH) { - macx:BDB_INCLUDE_PATH = /opt/homebrew/opt/berkeley-db@5/include -} - -isEmpty(BOOST_LIB_PATH) { - macx:BOOST_LIB_PATH = /opt/homebrew/opt/boost/lib -} - -isEmpty(BOOST_INCLUDE_PATH) { - macx:BOOST_INCLUDE_PATH = /opt/homebrew/opt/boost/include -} - -windows:DEFINES += WIN32 -windows:RC_FILE = src/qt/res/triangles-qt.rc - -windows:!contains(MINGW_THREAD_BUGFIX, 0) { - # At least qmake's win32-g++-cross profile is missing the -lmingwthrd - # thread-safety flag. GCC has -mthreads to enable this, but it doesn't - # work with static linking. -lmingwthrd must come BEFORE -lmingw, so - # it is prepended to QMAKE_LIBS_QT_ENTRY. - # It can be turned off with MINGW_THREAD_BUGFIX=0, just in case it causes - # any problems on some untested qmake profile now or in the future. - DEFINES += _MT - QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY -} - -!windows:!macx { - DEFINES += LINUX - LIBS += -lrt -} - -macx:HEADERS += src/qt/macdockiconhandler.h \ - src/qt/macnotificationhandler.h -macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm \ - src/qt/macnotificationhandler.mm - -macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0 -macx:ICON = src/qt/res/icons/triangles.icns -macx:TARGET = "Triangles-Qt" -macx:QMAKE_CFLAGS_THREAD += -pthread -macx:QMAKE_LFLAGS_THREAD += -pthread -macx:QMAKE_CXXFLAGS_THREAD += -pthread -macx:QMAKE_CXXFLAGS += -Wno-reserved-user-defined-literal -Wno-deprecated-declarations - -# Set libraries and includes at end, to use platform-defined defaults if not overridden -#$$join(ADDITIONAL_LIBS_PATH,,-L,) -INCLUDEPATH += $$BOOST_INCLUDE_PATH \ - $$BDB_INCLUDE_PATH \ - $$OPENSSL_INCLUDE_PATH \ - #$$QRENCODE_INCLUDE_PATH \ - $$EVENT_INCLUDE_PATH - -LIBS += $$join(BOOST_LIB_PATH,,-L,) \ - $$join(BDB_LIB_PATH,,-L,) \ - $$join(OPENSSL_LIB_PATH,,-L,) \ - #$$join(QRENCODE_LIB_PATH,,-L,) \ - $$join(EVENT_LIB_PATH,,-L,) - -LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX -LIBS += -levent -lz -# -lgdi32 has to happen after -lcrypto (see #681) -windows:LIBS += -lws2_32 -lshlwapi -lmswsock -lole32 -loleaut32 -luuid -lgdi32 -lcrypt32 - -LIBS += -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX -LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX - -contains(RELEASE, 1) { - !windows:!macx { - # Linux: turn dynamic linking back on for c/c++ runtime libraries - LIBS += -Wl,-Bdynamic - } -} - -# ZMQ support (optional) -# Build with: qmake "USE_ZMQ=1" -contains(USE_ZMQ, 1) { - message(Building with ZMQ support) - DEFINES += ENABLE_ZMQ - LIBS += -lzmq -} - -# Embedded Tor support (optional) -# Build with: -# qmake "USE_TOR_EMBEDDED=1" "TOR_SOURCE_ROOT=src/tor/tor-src" -contains(USE_TOR_EMBEDDED, 1) { - message(Building with embedded Tor support) - DEFINES += ENABLE_TOR_EMBEDDED - - isEmpty(TOR_SOURCE_ROOT) { - TOR_SOURCE_ROOT = src/tor/tor-src - } - - isEmpty(TOR_INCLUDE_PATH) { - TOR_INCLUDE_PATH = $$TOR_SOURCE_ROOT/src/feature/api - } - - isEmpty(TOR_LIB_PATH) { - TOR_LIB_PATH = $$TOR_SOURCE_ROOT - } - - !isEmpty(TOR_INCLUDE_PATH) { - INCLUDEPATH += $$TOR_INCLUDE_PATH - } - - for(path, TOR_LIB_PATH) { - LIBS += -L$$path - } - - # Default static library set for the imported Tor 0.4.9.x tree. - # A full upstream build emits a top-level libtor.a aggregator. - # Override with TOR_EMBEDDED_LIBS from the qmake command line if needed. - isEmpty(TOR_EMBEDDED_LIBS) { - TOR_EMBEDDED_LIBS = -ltor - } - - unix { - LIBS += -Wl,--start-group $$TOR_EMBEDDED_LIBS -Wl,--end-group - } else { - LIBS += $$TOR_EMBEDDED_LIBS - } - - LIBS += -llzma -lzstd - windows:LIBS += -liphlpapi -} - -system($$QMAKE_LRELEASE -silent $$_PRO_FILE_) diff --git a/win32_mxe_crosscompile_triangles-qt.pro b/win32_mxe_crosscompile_triangles-qt.pro deleted file mode 100644 index 776164b..0000000 --- a/win32_mxe_crosscompile_triangles-qt.pro +++ /dev/null @@ -1,588 +0,0 @@ -TEMPLATE = app -TARGET = triangles-qt - -VERSION = 4.2.1.0 -INCLUDEPATH += src src/json src/qt src/qt/plugins/mrichtexteditor -DEFINES += QT_GUI BOOST_THREAD_USE_LIB BOOST_SPIRIT_THREADSAFE BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN __NO_SYSTEM_INCLUDES -CONFIG += no_include_pwd -CONFIG += thread - -QMAKE_CXXFLAGS = -fpermissive - -greaterThan(QT_MAJOR_VERSION, 4) { - QT += widgets - DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 -} - -#INCLUDEPATH += /usr/include/i386-linux-gnu -INCLUDEPATH += /opt/mxe/usr/i686-pc-mingw32.static/include -LIBS_PATH=/opt/mxe/usr/i686-pc-mingw32.static/lib -LIBS += $$join(LIBS_PATH,,-L,) - -# for boost 1.37, add -mt to the boost libraries -# use: qmake BOOST_LIB_SUFFIX=-mt -# for boost thread win32 with _win32 sufix -# use: BOOST_THREAD_LIB_SUFFIX=_win32-... -# or when linking against a specific BerkelyDB version: BDB_LIB_SUFFIX=-4.8 - -# Dependency library locations can be customized with: -# BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH, -# BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively - -OBJECTS_DIR = build -MOC_DIR = build -UI_DIR = build - -# use: qmake "RELEASE=1" -contains(RELEASE, 1) { - # Mac: compile for maximum compatibility (10.5, 32-bit) - macx:QMAKE_CXXFLAGS += -mmacosx-version-min=10.5 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk - - !windows:!macx { - # Linux: static link - LIBS += -Wl,-Bstatic - } -} - -!win32 { -# for extra security against potential buffer overflows: enable GCCs Stack Smashing Protection -QMAKE_CXXFLAGS *= -fstack-protector-all --param ssp-buffer-size=1 -QMAKE_LFLAGS *= -fstack-protector-all --param ssp-buffer-size=1 -# We need to exclude this for Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable! -# This can be enabled for Windows, when we switch to MinGW >= 4.4.x. -} -# for extra security on Windows: enable ASLR and DEP via GCC linker flags -win32:QMAKE_LFLAGS *= -Wl,--large-address-aware -static -win32:QMAKE_LFLAGS += -static-libgcc -static-libstdc++ -lessThan(QT_MAJOR_VERSION, 5): win32: QMAKE_LFLAGS *= -static - -# use: qmake "USE_QRCODE=1" -# libqrencode (http://fukuchi.org/works/qrencode/index.en.html) must be installed for support -contains(USE_QRCODE, 1) { - message(Building with QRCode support) - DEFINES += USE_QRCODE - LIBS += -lqrencode -} - -#triangles: use UPNP with TOR -USE_UPNP=1 -# use: qmake "USE_UPNP=1" ( enabled by default; default) -# or: qmake "USE_UPNP=0" (disabled by default) -# or: qmake "USE_UPNP=-" (not supported) -# miniupnpc (http://miniupnp.free.fr/files/) must be installed for support -contains(USE_UPNP, -) { - message(Building without UPNP support) -} else { - message(Building with UPNP support) - count(USE_UPNP, 0) { - USE_UPNP=1 - } - DEFINES += USE_UPNP=$$USE_UPNP STATICLIB - INCLUDEPATH += $$MINIUPNPC_INCLUDE_PATH - LIBS += $$join(MINIUPNPC_LIB_PATH,,-L,) -lminiupnpc - win32:LIBS += -liphlpapi -} - - -# use: qmake "USE_DBUS=1" -contains(USE_DBUS, 1) { - message(Building with DBUS (Freedesktop notifications) support) - DEFINES += USE_DBUS - QT += dbus -} - -# use: qmake "USE_IPV6=1" ( enabled by default; default) -# or: qmake "USE_IPV6=0" (disabled by default) -# or: qmake "USE_IPV6=-" (not supported) -contains(USE_IPV6, -) { - message(Building without IPv6 support) -} else { - count(USE_IPV6, 0) { - USE_IPV6=1 - } - DEFINES += USE_IPV6=$$USE_IPV6 -} - -contains(TRIANGLES_NEED_QT_PLUGINS, 1) { - message(Building with Qt Plugins) - DEFINES += TRIANGLES_NEED_QT_PLUGINS - QTPLUGIN += qcncodecs qjpcodecs qtwcodecs qkrcodecs qtaccessiblewidgets -} else { - message(Building without Qt Plugins) -} - -INCLUDEPATH += src/leveldb/include src/leveldb/helpers -LIBS += $$PWD/src/leveldb/libleveldb.a $$PWD/src/leveldb/libmemenv.a -SOURCES += src/txdb-leveldb.cpp \ - src/blake.c \ - src/groestl.c \ - src/jh.c \ - src/keccak.c \ - src/skein.c \ - src/aes_helper.c \ - src/bmw.c \ - src/cubehash.c \ - src/echo.c \ - src/fugue.c \ - src/hamsi.c \ - src/hamsi_helper.c \ - src/luffa.c \ - src/shavite.c \ - src/simd.c - -!win32 { - # we use QMAKE_CXXFLAGS_RELEASE even without RELEASE=1 because we use RELEASE to indicate linking preferences not -O preferences - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a -} else { - # make an educated guess about what the ranlib command is called - isEmpty(QMAKE_RANLIB) { - QMAKE_RANLIB = $$replace(QMAKE_STRIP, strip, ranlib) - } - LIBS += -lshlwapi - genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a -} -genleveldb.target = $$PWD/src/leveldb/libleveldb.a -genleveldb.depends = FORCE -PRE_TARGETDEPS += $$PWD/src/leveldb/libleveldb.a -QMAKE_EXTRA_TARGETS += genleveldb -# Gross ugly hack that depends on qmake internals, unfortunately there is no other way to do it. -QMAKE_CLEAN += $$PWD/src/leveldb/libleveldb.a; cd $$PWD/src/leveldb ; $(MAKE) clean - -# regenerate src/build.h -!windows|contains(USE_BUILD_INFO, 1) { - genbuild.depends = FORCE - genbuild.commands = cd $$PWD; /bin/sh share/genbuild.sh $$OUT_PWD/build/build.h - genbuild.target = $$OUT_PWD/build/build.h - PRE_TARGETDEPS += $$OUT_PWD/build/build.h - QMAKE_EXTRA_TARGETS += genbuild - DEFINES += HAVE_BUILD_INFO -} - -contains(USE_O3, 1) { - message(Building O3 optimization flag) - QMAKE_CXXFLAGS_RELEASE -= -O2 - QMAKE_CFLAGS_RELEASE -= -O2 - QMAKE_CXXFLAGS += -O3 - QMAKE_CFLAGS += -O3 -} - -win32-g++ { - message("32 platform, adding -msse2 flag") - - QMAKE_CXXFLAGS += -msse2 - QMAKE_CFLAGS += -msse2 -} - -QMAKE_CXXFLAGS_WARN_ON = -fdiagnostics-show-option -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector - - -# Input -DEPENDPATH += src src/json src/qt -HEADERS += src/qt/trianglesgui.h \ - src/qt/transactiontablemodel.h \ - src/qt/addresstablemodel.h \ - src/qt/optionsdialog.h \ - src/qt/coincontroldialog.h \ - src/qt/coincontroltreewidget.h \ - src/qt/sendcoinsdialog.h \ - src/qt/addressbookpage.h \ - src/qt/aboutdialog.h \ - src/qt/editaddressdialog.h \ - src/qt/trianglesaddressvalidator.h \ - src/alert.h \ - src/addrman.h \ - src/base58.h \ - src/bignum.h \ - src/checkpoints.h \ - src/compat.h \ - src/coincontrol.h \ - src/sync.h \ - src/util.h \ - src/uint256.h \ - src/kernel.h \ - src/scrypt.h \ - src/pbkdf2.h \ - src/serialize.h \ - src/strlcpy.h \ - src/smessage.h \ - src/main.h \ - src/miner.h \ - src/net.h \ - src/key.h \ - src/db.h \ - src/txdb.h \ - src/walletdb.h \ - src/script.h \ - src/init.h \ - src/irc.h \ - src/mruset.h \ - src/json/json_spirit_writer_template.h \ - src/json/json_spirit_writer.h \ - src/json/json_spirit_value.h \ - src/json/json_spirit_utils.h \ - src/json/json_spirit_stream_reader.h \ - src/json/json_spirit_reader_template.h \ - src/json/json_spirit_reader.h \ - src/json/json_spirit_error_position.h \ - src/json/json_spirit.h \ - src/qt/clientmodel.h \ - src/qt/guiutil.h \ - src/qt/transactionrecord.h \ - src/qt/guiconstants.h \ - src/qt/optionsmodel.h \ - src/qt/monitoreddatamapper.h \ - src/qt/transactiondesc.h \ - src/qt/transactiondescdialog.h \ - src/qt/trianglesamountfield.h \ - src/wallet.h \ - src/keystore.h \ - src/qt/transactionfilterproxy.h \ - src/qt/transactionview.h \ - src/qt/walletmodel.h \ - src/trianglesrpc.h \ - src/qt/overviewpage.h \ - src/qt/csvmodelwriter.h \ - src/crypter.h \ - src/qt/sendcoinsentry.h \ - src/qt/qvalidatedlineedit.h \ - src/qt/trianglesunits.h \ - src/qt/qvaluecombobox.h \ - src/qt/askpassphrasedialog.h \ - src/protocol.h \ - src/qt/notificator.h \ - src/qt/qtipcserver.h \ - src/allocators.h \ - src/ui_interface.h \ - src/qt/rpcconsole.h \ - src/version.h \ - src/netbase.h \ - src/clientversion.h \ - src/hashblock.h \ - src/sph_blake.h \ - src/sph_groestl.h \ - src/sph_jh.h \ - src/sph_keccak.h \ - src/sph_skein.h \ - src/sph_types.h \ - src/qt/messagepage.h \ - src/qt/dialog_move_handler.h \ - src/qt/signmessagepage.h \ - src/qt/verifymessagepage.h \ - src/qt/messagemodel.h \ - src/qt/sendmessagesdialog.h \ - src/qt/sendmessagesentry.h \ - src/qt/plugins/mrichtexteditor/mrichtextedit.h \ - src/qt/qvalidatedtextedit.h \ - src/txdb-leveldb.h \ - src/onionseed.h \ - src/sph_bmw.h \ - src/sph_cubehash.h \ - src/sph_echo.h \ - src/sph_fugue.h \ - src/sph_hamsi.h \ - src/sph_luffa.h \ - src/sph_shavite.h \ - src/sph_simd.h - -SOURCES += src/qt/triangles.cpp src/qt/trianglesgui.cpp \ - src/qt/transactiontablemodel.cpp \ - src/qt/addresstablemodel.cpp \ - src/qt/optionsdialog.cpp \ - src/qt/sendcoinsdialog.cpp \ - src/qt/coincontroldialog.cpp \ - src/qt/coincontroltreewidget.cpp \ - src/qt/addressbookpage.cpp \ - src/qt/aboutdialog.cpp \ - src/qt/editaddressdialog.cpp \ - src/qt/trianglesaddressvalidator.cpp \ - src/tor/address.c \ - src/tor/addressmap.c \ - src/tor/aes.c \ - src/tor/backtrace.c \ - src/tor/buffers.c \ - src/tor/channel.c \ - src/tor/channeltls.c \ - src/tor/circpathbias.c \ - src/tor/circuitbuild.c \ - src/tor/circuitlist.c \ - src/tor/circuitmux.c \ - src/tor/circuitmux_ewma.c \ - src/tor/circuitstats.c \ - src/tor/circuituse.c \ - src/tor/command.c \ - src/tor/compat.c \ - src/tor/compat_libevent.c \ - src/tor/config.c \ - src/tor/config_codedigest.c \ - src/tor/confparse.c \ - src/tor/connection.c \ - src/tor/connection_edge.c \ - src/tor/connection_or.c \ - src/tor/container.c \ - src/tor/control.c \ - src/tor/cpuworker.c \ - src/tor/crypto.c \ - src/tor/crypto_curve25519.c \ - src/tor/crypto_format.c \ - src/tor/curve25519-donna.c \ - src/tor/di_ops.c \ - src/tor/directory.c \ - src/tor/dirserv.c \ - src/tor/dirvote.c \ - src/tor/dns.c \ - src/tor/dnsserv.c \ - src/tor/entrynodes.c \ - src/tor/ext_orport.c \ - src/tor/fp_pair.c \ - src/tor/geoip.c \ - src/tor/hibernate.c \ - src/tor/log.c \ - src/tor/memarea.c \ - src/tor/mempool.c \ - src/tor/microdesc.c \ - src/tor/networkstatus.c \ - src/tor/nodelist.c \ - src/tor/onion.c \ - src/tor/onion_fast.c \ - src/tor/onion_main.c \ - src/tor/onion_ntor.c \ - src/tor/onion_tap.c \ - src/tor/policies.c \ - src/tor/anonymize.cpp \ - src/tor/procmon.c \ - src/tor/reasons.c \ - src/tor/relay.c \ - src/tor/rendclient.c \ - src/tor/rendcommon.c \ - src/tor/rendmid.c \ - src/tor/rendservice.c \ - src/tor/rephist.c \ - src/tor/replaycache.c \ - src/tor/router.c \ - src/tor/routerlist.c \ - src/tor/routerparse.c \ - src/tor/routerset.c \ - src/tor/sandbox.c \ - src/tor/statefile.c \ - src/tor/status.c \ - src/tor/strlcat.c \ - src/tor/strlcpy.c \ - src/tor/tor_util.c \ - src/tor/torgzip.c \ - src/tor/tortls.c \ - src/tor/transports.c \ - src/tor/util_codedigest.c \ - src/alert.cpp \ - src/version.cpp \ - src/sync.cpp \ - src/smessage.cpp \ - src/util.cpp \ - src/netbase.cpp \ - src/key.cpp \ - src/script.cpp \ - src/main.cpp \ - src/miner.cpp \ - src/init.cpp \ - src/net.cpp \ - src/irc.cpp \ - src/checkpoints.cpp \ - src/addrman.cpp \ - src/db.cpp \ - src/walletdb.cpp \ - src/qt/clientmodel.cpp \ - src/qt/guiutil.cpp \ - src/qt/transactionrecord.cpp \ - src/qt/optionsmodel.cpp \ - src/qt/monitoreddatamapper.cpp \ - src/qt/transactiondesc.cpp \ - src/qt/transactiondescdialog.cpp \ - src/qt/trianglesstrings.cpp \ - src/qt/trianglesamountfield.cpp \ - src/wallet.cpp \ - src/keystore.cpp \ - src/qt/transactionfilterproxy.cpp \ - src/qt/transactionview.cpp \ - src/qt/walletmodel.cpp \ - src/trianglesrpc.cpp \ - src/rpcdump.cpp \ - src/rpcnet.cpp \ - src/rpcmining.cpp \ - src/rpcwallet.cpp \ - src/rpcblockchain.cpp \ - src/rpcrawtransaction.cpp \ - src/rpcsmessage.cpp \ - src/qt/overviewpage.cpp \ - src/qt/csvmodelwriter.cpp \ - src/crypter.cpp \ - src/qt/sendcoinsentry.cpp \ - src/qt/qvalidatedlineedit.cpp \ - src/qt/trianglesunits.cpp \ - src/qt/qvaluecombobox.cpp \ - src/qt/askpassphrasedialog.cpp \ - src/protocol.cpp \ - src/qt/notificator.cpp \ - src/qt/qtipcserver.cpp \ - src/qt/rpcconsole.cpp \ - src/qt/messagepage.cpp \ - src/qt/dialog_move_handler.cpp \ - src/qt/signmessagepage.cpp \ - src/qt/verifymessagepage.cpp \ - src/qt/messagemodel.cpp \ - src/qt/sendmessagesdialog.cpp \ - src/qt/sendmessagesentry.cpp \ - src/qt/qvalidatedtextedit.cpp \ - src/qt/plugins/mrichtexteditor/mrichtextedit.cpp \ - src/noui.cpp \ - src/kernel.cpp \ - src/scrypt-arm.S \ - src/scrypt-x86.S \ - src/scrypt-x86_64.S \ - src/scrypt.cpp \ - src/pbkdf2.cpp - -RESOURCES += \ - src/qt/triangles.qrc - -FORMS += \ - src/qt/forms/coincontroldialog.ui \ - src/qt/forms/sendcoinsdialog.ui \ - src/qt/forms/addressbookpage.ui \ - src/qt/forms/aboutdialog.ui \ - src/qt/forms/editaddressdialog.ui \ - src/qt/forms/transactiondescdialog.ui \ - src/qt/forms/overviewpage.ui \ - src/qt/forms/sendcoinsentry.ui \ - src/qt/forms/askpassphrasedialog.ui \ - src/qt/forms/rpcconsole.ui \ - src/qt/forms/optionsdialog.ui \ - src/qt/forms/messagepage.ui \ - src/qt/forms/sendmessagesentry.ui \ - src/qt/forms/sendmessagesdialog.ui \ - src/qt/plugins/mrichtexteditor/mrichtextedit.ui \ - src/qt/forms/mainwindow.ui \ - src/qt/forms/signmessagepage.ui \ - src/qt/forms/verifymessagepage.ui \ - src/qt/forms/transactionspage.ui - - -contains(USE_QRCODE, 1) { -HEADERS += src/qt/qrcodedialog.h -SOURCES += src/qt/qrcodedialog.cpp -FORMS += src/qt/forms/qrcodedialog.ui -} - -CODECFORTR = UTF-8 - -# for lrelease/lupdate -# also add new translations to src/qt/triangles.qrc under translations/ -TRANSLATIONS = $$files(src/qt/locale/triangles_*.ts) - -isEmpty(QMAKE_LRELEASE) { - win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe - else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease -} -isEmpty(QM_DIR):QM_DIR = $$PWD/src/qt/locale -# automatically build translations, so they can be included in resource file -TSQM.name = lrelease ${QMAKE_FILE_IN} -TSQM.input = TRANSLATIONS -TSQM.output = $$QM_DIR/${QMAKE_FILE_BASE}.qm -TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} -TSQM.CONFIG = no_link -QMAKE_EXTRA_COMPILERS += TSQM - -# "Other files" to show in Qt Creator -OTHER_FILES += \ - doc/*.rst doc/*.txt doc/README README.md res/triangles-qt.rc - -# platform specific defaults, if not overridden on command line -isEmpty(BOOST_LIB_SUFFIX) { - macx:BOOST_LIB_SUFFIX = -mt - windows:BOOST_LIB_SUFFIX = -mt -} - -isEmpty(BOOST_THREAD_LIB_SUFFIX) { - win32:BOOST_THREAD_LIB_SUFFIX = _win32$$BOOST_LIB_SUFFIX - else:BOOST_THREAD_LIB_SUFFIX = $$BOOST_LIB_SUFFIX -} - -isEmpty(BDB_LIB_PATH) { - macx:BDB_LIB_PATH = /opt/local/lib/db48 -} - -isEmpty(BDB_LIB_SUFFIX) { - macx:BDB_LIB_SUFFIX = -4.8 -} - -isEmpty(BDB_INCLUDE_PATH) { - macx:BDB_INCLUDE_PATH = /opt/local/include/db48 -} - -isEmpty(BOOST_LIB_PATH) { - macx:BOOST_LIB_PATH = /opt/local/lib -} - -isEmpty(BOOST_INCLUDE_PATH) { - macx:BOOST_INCLUDE_PATH = /opt/local/include -} - -windows:DEFINES += WIN32 -windows:RC_FILE = src/qt/res/triangles-qt.rc - -windows:!contains(MINGW_THREAD_BUGFIX, 0) { - # At least qmake's win32-g++-cross profile is missing the -lmingwthrd - # thread-safety flag. GCC has -mthreads to enable this, but it doesn't - # work with static linking. -lmingwthrd must come BEFORE -lmingw, so - # it is prepended to QMAKE_LIBS_QT_ENTRY. - # It can be turned off with MINGW_THREAD_BUGFIX=0, just in case it causes - # any problems on some untested qmake profile now or in the future. - DEFINES += _MT - QMAKE_LIBS_QT_ENTRY = -lmingwthrd $$QMAKE_LIBS_QT_ENTRY -} - -!windows:!macx { - DEFINES += LINUX - LIBS += -lrt -} - -macx:HEADERS += src/qt/macdockiconhandler.h \ - src/qt/macnotificationhandler.h -macx:OBJECTIVE_SOURCES += src/qt/macdockiconhandler.mm \ - src/qt/macnotificationhandler.mm -macx:LIBS += -framework Foundation -framework ApplicationServices -framework AppKit -macx:DEFINES += MAC_OSX MSG_NOSIGNAL=0 -macx:ICON = src/qt/res/icons/triangles.icns -macx:TARGET = "Triangles-Qt" -macx:QMAKE_CFLAGS_THREAD += -pthread -macx:QMAKE_LFLAGS_THREAD += -pthread -macx:QMAKE_CXXFLAGS_THREAD += -pthread - -# Set libraries and includes at end, to use platform-defined defaults if not overridden -#$$join(ADDITIONAL_LIBS_PATH,,-L,) -INCLUDEPATH += $$BOOST_INCLUDE_PATH \ - $$BDB_INCLUDE_PATH \ - $$OPENSSL_INCLUDE_PATH \ - #$$QRENCODE_INCLUDE_PATH \ - $$EVENT_INCLUDE_PATH - -LIBS += $$join(BOOST_LIB_PATH,,-L,) \ - $$join(BDB_LIB_PATH,,-L,) \ - $$join(OPENSSL_LIB_PATH,,-L,) \ - #$$join(QRENCODE_LIB_PATH,,-L,) \ - $$join(EVENT_LIB_PATH,,-L,) - -LIBS += -lssl -lcrypto -ldb_cxx$$BDB_LIB_SUFFIX -LIBS += -levent -lz -# -lgdi32 has to happen after -lcrypto (see #681) -windows:LIBS += -lws2_32 -lshlwapi -lmswsock -lole32 -loleaut32 -luuid -lgdi32 - -LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX -windows:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX - -contains(RELEASE, 1) { - !windows:!macx { - # Linux: turn dynamic linking back on for c/c++ runtime libraries - LIBS += -Wl,-Bdynamic - } -} - -system($$QMAKE_LRELEASE -silent $$_PRO_FILE_)