Skip to content

Update main.cpp

Update main.cpp #865

Workflow file for this run

name: Cross-Platform Build Matrix
on:
push:
branches: [ "main" ]
workflow_dispatch:
jobs:
build-snap-linux:
name: Linux x86 (Snap Publish)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake libopencv-dev libtbb-dev libomp-dev
- name: Configure and Build Tests (Linux)
run: |
mkdir build_test
cd build_test
cmake .. -DCMAKE_CXX_STANDARD=23 -DENABLE_CUDA=OFF
make -j$(nproc)
- name: Run Unit Tests (Linux)
run: |
cd build_test
echo "Running absTest..."
./absTest
echo "Running dct2Test..."
./dct2Test
echo "Running dct2Test3..."
./dct2Test3
- name: Upload Executable
uses: actions/upload-artifact@v4
with:
name: TinyDIP-build-${{ runner.os }}
path: |
build_test/*
retention-days: 90
- name: Clean up Build Artifacts
run: rm -rf build_test
- name: Build Snap Package
uses: snapcore/action-build@v1
id: build
- name: Publish Snap
uses: snapcore/action-publish@v1
env:
SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }}
with:
snap: ${{ steps.build.outputs.snap }}
release: edge
verify-linux-gcc-15-source:
name: Linux x86 (GCC 15.2.0 Source)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake libopencv-dev libtbb-dev libomp-dev flex bison libgmp-dev libmpfr-dev libmpc-dev
- name: Cache Custom GCC
id: cache-gcc
uses: actions/cache@v3
with:
path: /opt/gcc-15.2.0
key: gcc-15.2.0-source-build-${{ runner.os }}-v1
- name: Compile GCC 15.2.0 from Source
if: steps.cache-gcc.outputs.cache-hit != 'true'
run: |
echo "Compiling GCC 15.2.0 from source... This may take 1-2 hours."
wget https://ftp.gnu.org/gnu/gcc/gcc-15.2.0/gcc-15.2.0.tar.gz
tar xzf gcc-15.2.0.tar.gz
cd gcc-15.2.0
./contrib/download_prerequisites
mkdir build && cd build
../configure --prefix=/opt/gcc-15.2.0 --enable-languages=c,c++ --disable-multilib
make -j$(nproc)
sudo make install
cd ../..
rm -rf gcc-15.2.0 gcc-15.2.0.tar.gz
- name: Configure and Build Tests (Linux GCC 15)
run: |
mkdir build_test_gcc
cd build_test_gcc
cmake .. \
-DCMAKE_CXX_STANDARD=23 \
-DENABLE_CUDA=OFF \
-DCMAKE_C_COMPILER=/opt/gcc-15.2.0/bin/gcc \
-DCMAKE_CXX_COMPILER=/opt/gcc-15.2.0/bin/g++ \
-DCMAKE_CXX_FLAGS="-Wl,-rpath,/opt/gcc-15.2.0/lib64"
make -j$(nproc)
- name: Run Unit Tests (Linux GCC 15)
run: |
cd build_test_gcc
echo "Running absTest..."
./absTest
echo "Running dct2Test..."
./dct2Test
- name: Upload Executable (GCC 15)
uses: actions/upload-artifact@v4
with:
name: TinyDIP-build-gcc15-${{ runner.os }}
path: build_test_gcc/*
retention-days: 90
- name: Clean up Build Artifacts
run: rm -rf build_test_gcc
verify-linux-gcc-15-self-hosted:
name: Linux x86 (GCC 15.2.0 - Local Machine)
runs-on: [self-hosted, linux]
steps:
- uses: actions/checkout@v4
- name: Check Environment
run: |
g++ --version
cmake --version
/opt/gcc-15.2.0/bin/g++ --version
- name: Configure and Build Tests (Fast)
run: |
rm -rf build_test_gcc_local
mkdir build_test_gcc_local
cd build_test_gcc_local
cmake .. \
-DCMAKE_CXX_STANDARD=23 \
-DENABLE_CUDA=OFF \
-DCMAKE_C_COMPILER=/opt/gcc-15.2.0/bin/gcc \
-DCMAKE_CXX_COMPILER=/opt/gcc-15.2.0/bin/g++ \
-DCMAKE_CXX_FLAGS="-Wl,-rpath,/opt/gcc-15.2.0/lib64"
make -j$(nproc)
- name: Run Unit Tests
run: |
cd build_test_gcc_local
echo "Running absTest..."
./absTest
echo "Running dct2Test..."
./dct2Test
- name: Upload Executable
uses: actions/upload-artifact@v4
with:
name: TinyDIP-build-gcc15-self-hosted
path: build_test_gcc_local/*
retention-days: 90
- name: Final Clean up
if: always()
run: rm -rf build_test_gcc_local
linux-perf-profiling:
name: Linux x86 (Perf Profiling)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential cmake libopencv-dev libtbb-dev libomp-dev linux-tools-common linux-tools-generic linux-tools-azure
sudo apt-get install -y "linux-tools-$(uname -r)" "linux-cloud-tools-$(uname -r)" || true
find /usr/lib/linux-tools -name perf -type f -executable | head -n 1
- name: Configure and Build Tests (Linux)
run: |
mkdir build_test
cd build_test
cmake .. -DCMAKE_CXX_STANDARD=23 -DENABLE_CUDA=OFF -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer"
make -j$(nproc)
- name: Run Performance Profiling (perf)
run: |
cd build_test
echo "Listing /usr/lib/linux-tools contents:"
ls -R /usr/lib/linux-tools || true
PERF_BIN=""
echo "Searching for executable perf binary in /usr/lib/linux-tools/*/"
for p in /usr/lib/linux-tools/*/perf; do
if [ -x "$p" ]; then
echo "Found executable: $p"
PERF_BIN="$p"
break
fi
done
if [ -z "$PERF_BIN" ]; then
echo "Glob search failed. Trying recursive find without type constraints..."
PERF_BIN=$(find /usr/lib/linux-tools -name perf -executable 2>/dev/null | head -n 1)
fi
if [ -z "$PERF_BIN" ]; then
echo "Error: Could not find any perf binary."
exit 1
fi
echo "Selected perf binary: $PERF_BIN"
echo "========================================="
echo "Profiling ./absTest"
echo "========================================="
sudo "$PERF_BIN" record -o perf_abs.data --call-graph dwarf ./absTest
sudo "$PERF_BIN" report -i perf_abs.data --stdio
echo "========================================="
echo "Profiling ./dct2Test"
echo "========================================="
sudo "$PERF_BIN" record -o perf_dct2.data --call-graph dwarf ./dct2Test
sudo "$PERF_BIN" report -i perf_dct2.data --stdio
- name: Clean up Build Artifacts
run: rm -rf build_test
verify-macos:
name: macOS (GCC 14)
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Install Dependencies
run: |
brew update
brew install gcc cmake opencv tbb libomp
- name: Configure CMake (macOS)
run: |
mkdir build_mac
cd build_mac
cmake .. \
-DCMAKE_CXX_STANDARD=23 \
-DENABLE_CUDA=OFF \
-DCMAKE_C_COMPILER="gcc-14" \
-DCMAKE_CXX_COMPILER="g++-14"
- name: Build (macOS)
run: |
cd build_mac
make -j3
- name: Run Unit Tests (macOS)
run: |
cd build_mac
echo "Running Tests on macOS..."
echo "Running absTest..."
./absTest
echo "Running dct2Test..."
./dct2Test
- name: Clean up Build Artifacts
run: rm -rf build_mac
verify-windows:
name: Windows (MSVC)
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Restore vcpkg artifacts
uses: actions/cache@v3
with:
path: |
C:\vcpkg\installed
C:\vcpkg\packages
key: vcpkg-${{ runner.os }}-opencv-tbb-v1
- name: Install Libraries via vcpkg
run: |
vcpkg install opencv:x64-windows tbb:x64-windows boost:x64-windows
- name: Configure CMake
run: |
cmake -S . -B build_win `
-DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake `
-DCMAKE_CXX_STANDARD=23 `
-DENABLE_CUDA=OFF
- name: Build
run: cmake --build build_win --config Release
- name: Run Test
run: .\build_win\Release\absTest.exe
- name: Clean up Build Artifacts
run: rm -rf build_win
verify-linux-arm:
name: Linux ARM64 (QEMU)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build & Test in ARM64 Emulator
uses: uraimo/run-on-arch-action@v2
with:
arch: aarch64
distro: ubuntu22.04
run: |
apt-get update
apt-get install -y build-essential cmake libopencv-dev libtbb-dev libomp-dev
mkdir build_arm
cd build_arm
cmake .. -DCMAKE_CXX_STANDARD=23 -DENABLE_CUDA=OFF
make -j2
echo "Running ARM64 tests..."
./absTest
./dct2Test