diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 141ec6c47..91ef365a0 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -2,88 +2,14 @@ name: Build
on:
push:
- branches: [main]
+ branches: [main, master]
pull_request:
- branches: [main]
+ branches: [main, master]
+ workflow_dispatch:
jobs:
- build-glfw-linux-x86_64:
- name: Build (GLFW/Linux x86_64)
- runs-on: ubuntu-24.04
- steps:
- - uses: actions/checkout@v4
-
- - name: Get commit info
- id: commit-info
- run: |
- echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
-
- - name: Install dependencies
- run: sudo apt-get update && sudo apt-get install -y cmake libglfw3-dev libbz2-dev
-
- - name: Configure
- run: cmake -B build -DWERROR=ON -DDESKTOP_BACKEND=glfw3 -DCMAKE_BUILD_TYPE=Release "-DBUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }}" "-DBUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}"
-
- - name: Build
- run: cmake --build build -j$(nproc)
-
- - name: Upload artifact
- uses: actions/upload-artifact@v4
- with:
- name: butterscotch-glfw-linux-x86_64
- path: build/butterscotch
-
- build-glfw-windows-x86_64:
- name: Build (GLFW/Windows x86_64)
- runs-on: ubuntu-24.04
- steps:
- - uses: actions/checkout@v4
-
- - name: Get commit info
- id: commit-info
- run: |
- echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
-
- - name: Install MinGW and dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y cmake mingw-w64
-
- - name: Build GLFW for MinGW
- run: |
- git clone https://github.com/glfw/glfw.git /tmp/glfw
- git -C /tmp/glfw checkout fdd14e65b1c29e4e6df875fb5669ec00d6793531
- cmake -B /tmp/glfw/build -S /tmp/glfw \
- -DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/cmake/mingw-w64.cmake \
- -DCMAKE_INSTALL_PREFIX=/usr/x86_64-w64-mingw32 \
- -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF
- make -C /tmp/glfw/build -j$(nproc)
- sudo make -C /tmp/glfw/build install
-
- - name: Build bzip2 for MinGW
- run: |
- curl -L https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz -o /tmp/bzip2.tar.gz
- tar -xf /tmp/bzip2.tar.gz -C /tmp
- make -C /tmp/bzip2-1.0.8 libbz2.a CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-ar RANLIB=x86_64-w64-mingw32-ranlib -j$(nproc)
- sudo cp /tmp/bzip2-1.0.8/libbz2.a /usr/x86_64-w64-mingw32/lib/
- sudo cp /tmp/bzip2-1.0.8/bzlib.h /usr/x86_64-w64-mingw32/include/
-
- - name: Configure
- run: cmake -B build -DCMAKE_TOOLCHAIN_FILE=cmake/mingw-w64.cmake -DWERROR=ON -DDESKTOP_BACKEND=glfw3 -DCMAKE_BUILD_TYPE=Release "-DBUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }}" "-DBUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}"
-
- - name: Build
- run: cmake --build build -j$(nproc)
-
- - name: Upload artifact
- uses: actions/upload-artifact@v4
- with:
- name: butterscotch-glfw-windows-x86_64
- path: build/butterscotch.exe
-
- build-glfw-linux-x86:
- name: Build (GLFW/Linux x86)
+ build-android:
+ name: Build (Android .so)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
@@ -94,236 +20,68 @@ jobs:
echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
- - name: Install 32-bit toolchain and dependencies
+ - name: Build Android arm64-v8a & armeabi-v7a
run: |
- sudo dpkg --add-architecture i386
- sudo apt-get update
- sudo apt-get install -y cmake gcc-multilib g++-multilib pkg-config libbz2-dev:i386 libx11-dev:i386 libxrandr-dev:i386 libxinerama-dev:i386 libxcursor-dev:i386 libxi-dev:i386 libgl-dev:i386
-
- - name: Build GLFW (32-bit)
- run: |
- git clone https://github.com/glfw/glfw.git /tmp/glfw
- git -C /tmp/glfw checkout fdd14e65b1c29e4e6df875fb5669ec00d6793531
- cmake -B /tmp/glfw/build -S /tmp/glfw \
- -DCMAKE_C_FLAGS=-m32 \
- -DCMAKE_INSTALL_PREFIX=/usr/local/glfw-x86 \
- -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF -DGLFW_BUILD_WAYLAND=OFF
- make -C /tmp/glfw/build -j$(nproc)
- sudo make -C /tmp/glfw/build install
-
- - name: Configure
- run: |
- export PKG_CONFIG_PATH=/usr/local/glfw-x86/lib/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig
- cmake -B build -DWERROR=ON -DDESKTOP_BACKEND=glfw3 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS=-m32 -DCMAKE_EXE_LINKER_FLAGS=-m32 "-DBUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }}" "-DBUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}"
-
- - name: Build
- run: cmake --build build -j$(nproc)
-
- - name: Upload artifact
- uses: actions/upload-artifact@v4
- with:
- name: butterscotch-glfw-linux-x86
- path: build/butterscotch
-
- build-glfw-windows-x86:
- name: Build (GLFW/Windows x86)
- runs-on: ubuntu-24.04
- steps:
- - uses: actions/checkout@v4
-
- - name: Get Time
- id: get-time
- run: echo "time=$(date -u '+%Y-%m-%d-%H:%M:%S')" >> $GITHUB_OUTPUT
- - uses: actions/cache@v5
- with:
- path: ~/ccache.tar.xz
- key: win32-artifact-${{ steps.get-time.outputs.time }}
- restore-keys: win32-artifact-
- - name: Unpack cache
- run: |
- cd ~
- [ -f ccache.tar.xz ] && tar xf ccache.tar.xz || true
- [ -f workspacecache.tar ] && mv workspacecache.tar ${{ github.workspace }} || true
-
- - name: Get commit info
- id: commit-info
- run: |
- echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
-
- - name: Install MinGW and dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y ccache libgmp-dev libmpfr-dev libmpc-dev
- [ -f workspacecache.tar ] && tar xf workspacecache.tar
- ARCH=i486 ./artifacts/windows/build-toolchain.sh
- tar cf workspacecache.tar artifacts/windows/build/toolchain-i486
- mv workspacecache.tar ~
-
- - name: Build
- run: |
- PATH="$PWD/artifacts/windows/build/toolchain-i486/bin:$PATH" make \
- NO_COLOR=1 \
- VERBOSE=1 \
- CC='ccache i486-w64-mingw32-gcc' \
- DESKTOP_BACKEND=glfw2 \
- GLFW2_LIBS='-lglfw -lopengl32' \
- EXTRALIBS='-latomic' \
- BUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }} \
- BUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}
-
- - name: Upload artifact
- uses: actions/upload-artifact@v4
- with:
- name: butterscotch-glfw-windows-x86
- path: build/butterscotch.exe
- - name: Pack cache
- run: cd ~ && tar cJf ccache.tar.xz .cache/ccache workspacecache.tar
-
- build-ps2:
- name: Build (PS2)${{ matrix.label }}
- runs-on: ubuntu-24.04
- container:
- image: ps2dev/ps2dev:latest
- strategy:
- fail-fast: false
- matrix:
- include:
- - label: ""
- artifact: butterscotch-ps2
- extra_flags: ""
- - label: " [WAD Version 14]"
- artifact: butterscotch-ps2-wad14
- extra_flags: "-DENABLE_WAD14=ON -DENABLE_WAD16=OFF -DENABLE_WAD17=OFF"
- - label: " [WAD Version 16]"
- artifact: butterscotch-ps2-wad16
- extra_flags: "-DENABLE_WAD14=OFF -DENABLE_WAD16=ON -DENABLE_WAD17=OFF"
- - label: " [WAD Version 17]"
- artifact: butterscotch-ps2-wad17
- extra_flags: "-DENABLE_WAD14=OFF -DENABLE_WAD16=OFF -DENABLE_WAD17=ON"
- steps:
- - name: Install build tools
- run: apk add --no-cache cmake make gmp-dev mpfr-dev mpc1-dev git
-
- - uses: actions/checkout@v4
-
- # Yeah, the safe.directory is needed because "fatal: detected dubious ownership in repository at '/__w/Butterscotch/Butterscotch'"
- - name: Get commit info
- id: commit-info
- run: |
- git config --global --add safe.directory "$GITHUB_WORKSPACE"
- echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- echo "date=$(git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S')" >> $GITHUB_OUTPUT
-
- - name: Configure
- run: |
- mkdir -p build
- export CFLAGS="-fopt-info-inline-optimized=$PWD/build/inline_report.txt"
- cmake -B build -DCMAKE_TOOLCHAIN_FILE=$PS2SDK/ps2dev.cmake -DWERROR=ON -DPLATFORM=ps2 ${{ matrix.extra_flags }} -DCMAKE_BUILD_TYPE=Release "-DBUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }}" "-DBUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}"
-
- - name: Build
- run: |
- cmake --build build -j$(nproc)
- cp build/butterscotch build/butterscotch.elf
-
- - name: Check executeLoop I-Cache fit
- run: |
- # Extract executeLoop function size(s) from the ELF symbol table.
- # GCC IPA passes (constprop/isra/part) may clone a static function and
- # suffix the clones (e.g. "executeLoop.constprop.0"). Sum all variants
- # since they all share the 16 KB I-Cache budget.
- # nm -S prints: address size type name
- echo "Getting executeLoop size from ELF symbol table..."
- SYMBOL_LINES=$(mips64r5900el-ps2-elf-nm -S build/butterscotch.elf | grep -E ' executeLoop(\..*)?$' || true)
- if [ -z "$SYMBOL_LINES" ]; then
- echo "::error::Could not find executeLoop symbol in ELF (is it stripped?)"
- exit 1
+ NDK_PATH=$ANDROID_NDK_LATEST_HOME
+ if [ -z "$NDK_PATH" ]; then
+ NDK_PATH=$(find $ANDROID_SDK_ROOT/ndk -maxdepth 1 -mindepth 1 | head -n 1)
fi
- echo "$SYMBOL_LINES"
- SIZE_DEC=0
- VARIANT_COUNT=0
- for SIZE_HEX in $(echo "$SYMBOL_LINES" | awk '{print $2}'); do
- SIZE_DEC=$((SIZE_DEC + 0x$SIZE_HEX))
- VARIANT_COUNT=$((VARIANT_COUNT + 1))
- done
- LIMIT=16384
- if [ "$SIZE_DEC" -gt "$LIMIT" ]; then
- echo "::error::executeLoop is $SIZE_DEC bytes across $VARIANT_COUNT variant(s), exceeding the PS2 16 KB I-Cache ($LIMIT bytes) by $((SIZE_DEC - LIMIT)) bytes"
- echo "| Function | Size | Limit | Status |" >> $GITHUB_STEP_SUMMARY
- echo "|----------|------|-------|--------|" >> $GITHUB_STEP_SUMMARY
- echo "| \`executeLoop\` ($VARIANT_COUNT variant(s)) | $SIZE_DEC bytes | $LIMIT bytes (16 KB) | **EXCEEDED** by $((SIZE_DEC - LIMIT)) bytes |" >> $GITHUB_STEP_SUMMARY
- exit 1
- fi
- echo "| Function | Size | Limit | Status |" >> $GITHUB_STEP_SUMMARY
- echo "|----------|------|-------|--------|" >> $GITHUB_STEP_SUMMARY
- echo "| \`executeLoop\` ($VARIANT_COUNT variant(s)) | $SIZE_DEC bytes | $LIMIT bytes (16 KB) | $((LIMIT - SIZE_DEC)) bytes remaining |" >> $GITHUB_STEP_SUMMARY
- - name: Report executeLoop inlining
- run: |
- REPORT=build/inline_report.txt
- if [ ! -s "$REPORT" ]; then
- echo "::warning::No inline report produced at $REPORT"
- exit 0
+ # Derleyici Optimizasyon Bayrakları (Boyut Küçültme -Os & LTO)
+ OPT_FLAGS="-Os -flto -ffunction-sections -fdata-sections"
+ LINK_FLAGS="-Wl,--gc-sections -Wl,--strip-all"
+
+ # 1. arm64-v8a Derlemesi
+ mkdir -p build_arm64
+ cmake -B build_arm64 \
+ -DCMAKE_TOOLCHAIN_FILE=$NDK_PATH/build/cmake/android.toolchain.cmake \
+ -DANDROID_ABI=arm64-v8a \
+ -DANDROID_PLATFORM=android-21 \
+ -DPLATFORM=android \
+ -DCMAKE_BUILD_TYPE=MinSizeRel \
+ -DCMAKE_C_FLAGS="$OPT_FLAGS" \
+ -DCMAKE_SHARED_LINKER_FLAGS="$LINK_FLAGS" \
+ "-DBUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }}" \
+ "-DBUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}"
+ cmake --build build_arm64 -j$(nproc)
+
+ # 2. armeabi-v7a Derlemesi
+ mkdir -p build_armv7
+ cmake -B build_armv7 \
+ -DCMAKE_TOOLCHAIN_FILE=$NDK_PATH/build/cmake/android.toolchain.cmake \
+ -DANDROID_ABI=armeabi-v7a \
+ -DANDROID_PLATFORM=android-21 \
+ -DPLATFORM=android \
+ -DCMAKE_BUILD_TYPE=MinSizeRel \
+ -DCMAKE_C_FLAGS="$OPT_FLAGS" \
+ -DCMAKE_SHARED_LINKER_FLAGS="$LINK_FLAGS" \
+ "-DBUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }}" \
+ "-DBUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}"
+ cmake --build build_armv7 -j$(nproc)
+
+ # 3. jniLibs Klasörüne Kopyala & Strip İşlemi
+ mkdir -p jniLibs/arm64-v8a
+ mkdir -p jniLibs/armeabi-v7a
+
+ cp build_arm64/libbutterscotch.so jniLibs/arm64-v8a/
+ cp build_armv7/libbutterscotch.so jniLibs/armeabi-v7a/
+
+ # NDK içindeki strip aracıyla debug verilerini temizle
+ STRIP_TOOL=$(find $NDK_PATH -name "llvm-strip" | head -n 1)
+ if [ -n "$STRIP_TOOL" ]; then
+ $STRIP_TOOL --strip-all jniLibs/arm64-v8a/libbutterscotch.so
+ $STRIP_TOOL --strip-all jniLibs/armeabi-v7a/libbutterscotch.so
fi
- # Extract callees that GCC reported as inlined into executeLoop
- INLINED=$(grep -E "Inlin(ed|ing) .* into executeLoop" "$REPORT" \
- | awk '{for(i=1;i<=NF;i++) if($i=="into" && $(i+1) ~ /^executeLoop/) {name=$(i-1); sub(/\/[0-9]+$/,"",name); print name}}' \
- | sort -u)
- # Cross-check: jal targets still present in the compiled executeLoop
- # (including GCC-cloned variants like executeLoop.constprop.0).
- VARIANT_NAMES=$(mips64r5900el-ps2-elf-nm build/butterscotch.elf | awk '/ executeLoop(\..*)?$/ {print $3}')
- DISASM_ARGS=""
- for NAME in $VARIANT_NAMES; do
- DISASM_ARGS="$DISASM_ARGS --disassemble=$NAME"
- done
- NOT_INLINED=$(mips64r5900el-ps2-elf-objdump -d $DISASM_ARGS build/butterscotch.elf 2>/dev/null \
- | grep -oE "jal[[:space:]]+[0-9a-f]+ <[^>]+>" \
- | sed -E 's/.*<([^>]+)>/\1/' \
- | sort -u)
- INLINED_COUNT=$(printf "%s\n" "$INLINED" | grep -c . || true)
- NOT_INLINED_COUNT=$(printf "%s\n" "$NOT_INLINED" | grep -c . || true)
- {
- echo ""
- echo "### \`executeLoop\` inlining report"
- echo ""
- echo "Inlined into executeLoop ($INLINED_COUNT callees, per GCC -fopt-info-inline-optimized)
"
- echo ""
- echo '```'
- printf "%s\n" "$INLINED"
- echo '```'
- echo ""
- echo " "
- echo ""
- echo "Still called via jal from executeLoop ($NOT_INLINED_COUNT symbols, per objdump)
"
- echo ""
- echo '```'
- printf "%s\n" "$NOT_INLINED"
- echo '```'
- echo ""
- echo " "
- } >> $GITHUB_STEP_SUMMARY
- - name: Upload artifact
+ - name: Upload Android JNI Artifacts
uses: actions/upload-artifact@v4
with:
- name: ${{ matrix.artifact }}
- path: build/butterscotch.elf
+ name: butterscotch-android-jniLibs
+ path: jniLibs/
- build-web:
- name: Build (Web)${{ matrix.label }}
+ build-glfw-linux-x86_64:
+ name: Build (GLFW/Linux x86_64)
runs-on: ubuntu-24.04
- strategy:
- fail-fast: false
- matrix:
- include:
- - label: ""
- platform: web
- artifact: butterscotch-web
- output_glob: build/butterscotch.*
- - label: " [Meta]"
- platform: web-meta
- artifact: butterscotch-web-meta
- output_glob: build/butterscotch-meta.*
steps:
- uses: actions/checkout@v4
@@ -333,13 +91,11 @@ jobs:
echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "date=$(git log -1 --format=%cd --date=short)" >> $GITHUB_OUTPUT
- - name: Setup Emscripten SDK
- uses: mymindstorm/setup-emsdk@v14
- with:
- version: latest
+ - name: Install dependencies
+ run: sudo apt-get update && sudo apt-get install -y cmake libglfw3-dev libbz2-dev
- name: Configure
- run: emcmake cmake -B build -DWERROR=ON -DPLATFORM=${{ matrix.platform }} -DCMAKE_BUILD_TYPE=Release "-DBUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }}" "-DBUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}"
+ run: cmake -B build -DWERROR=ON -DDESKTOP_BACKEND=glfw3 -DCMAKE_BUILD_TYPE=Release "-DBUTTERSCOTCH_COMMIT_HASH=${{ steps.commit-info.outputs.hash }}" "-DBUTTERSCOTCH_COMMIT_DATE=${{ steps.commit-info.outputs.date }}"
- name: Build
run: cmake --build build -j$(nproc)
@@ -347,76 +103,5 @@ jobs:
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
- name: ${{ matrix.artifact }}
- path: ${{ matrix.output_glob }}
-
- build-ps3:
- name: Build (PS3)
- runs-on: ubuntu-24.04
- container: scummvm/dockerized-toolchains:ps3
- steps:
- - uses: actions/checkout@v4
-
- - name: Configure
- run: cmake -B build -DWERROR=ON -DPLATFORM=ps3 -DCMAKE_TOOLCHAIN_FILE=cmake/ppu.cmake -DCMAKE_BUILD_TYPE=Release
-
- - name: Build bzip2 for PS3
- run: |
- curl -L https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz -o /tmp/bzip2.tar.gz
- tar -xf /tmp/bzip2.tar.gz -C /tmp
- make -C /tmp/bzip2-1.0.8 libbz2.a CFLAGS="-mcpu=cell -mtune=cell -maltivec -mhard-float -fmodulo-sched -ffunction-sections -fdata-sections -fomit-frame-pointer -fstrict-aliasing -funroll-loops -ftree-vectorize -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64" CC=powerpc64-ps3-elf-gcc AR=powerpc64-ps3-elf-ar RANLIB=powerpc64-ps3-elf-ranlib -j$(nproc)
- cp /tmp/bzip2-1.0.8/libbz2.a /usr/local/ps3dev/portlibs/ppu/lib/
- cp /tmp/bzip2-1.0.8/bzlib.h /usr/local/ps3dev/portlibs/ppu/include/
-
- - name: Build
- run: |
- cmake --build build -j$(nproc)
- sprxlinker build/butterscotch.elf
-
- - name: Upload artifact
- uses: actions/upload-artifact@v4
- with:
- name: butterscotch-ps3
- path: build/butterscotch.elf
-
- build-old-gcc:
- strategy:
- fail-fast: false
- matrix:
- include:
- - name: GCC 3.0
- compiler: gcc-3.0
- flags: '-std=gnu99 -w'
- - name: GCC 2.95
- compiler: g++-2.95
- flags: '-w'
- name: Build (${{ matrix.name }})
- runs-on: ubuntu-24.04
- steps:
- - name: Create Debian Woody chroot
- run: |
- sudo apt-get install --no-install-recommends -y debootstrap
- sudo debootstrap --arch=i386 --include='${{ matrix.compiler }},make,libsdl1.2-dev' woody ~/woody http://archive.debian.org/debian
-
- - name: Checkout repo
- uses: actions/checkout@v4
- with:
- path: butterscotch
-
- - name: Build
- run: |
- sudo mv butterscotch ~/woody
- sudo chroot ~/woody /bin/sh --login -c 'make -C /butterscotch NO_COLOR=1 VERBOSE=1 CC="${{ matrix.compiler }} ${{ matrix.flags }}" DESKTOP_BACKEND=sdl1 AUDIO_BACKEND=none SDL1_LIBS='-lSDL' DISABLE_MMD=1'
-
- build-cxx:
- name: Build as C++
- runs-on: ubuntu-24.04
- steps:
- - name: Checkout repo
- uses: actions/checkout@v4
-
- - name: Install dependencies
- run: sudo apt-get update && sudo apt-get install -y libglfw3-dev
-
- - name: Build
- run: make CC='g++ -std=gnu++98 -Wall -Wvla -Werror' NO_COLOR=1 VERBOSE=1
+ name: butterscotch-glfw-linux-x86_64
+ path: build/butterscotch
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 000000000..5e2ba01ae
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,63 @@
+name: Build Android Shared Library (.so)
+
+on:
+ push:
+ branches: [ main, master ]
+ pull_request:
+ branches: [ main, master ]
+ workflow_dispatch:
+
+jobs:
+ build-android:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout Source Code
+ uses: actions/checkout@v4
+ with:
+ submodules: recursive
+
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'temurin'
+ java-version: '17'
+
+ - name: Configure CMake and Build
+ run: |
+ # Android NDK yolunu dinamik olarak bul
+ NDK_PATH=$(find $ANDROID_SDK_ROOT/ndk -maxdepth 1 -mindepth 1 | head -n 1)
+ if [ -z "$NDK_PATH" ]; then
+ NDK_PATH=$ANDROID_NDK_LATEST_HOME
+ fi
+ echo "Kullanılan NDK Yolu: $NDK_PATH"
+
+ # 1. arm64-v8a Derlemesi
+ mkdir -p build_arm64 && cd build_arm64
+ cmake -DCMAKE_TOOLCHAIN_FILE=$NDK_PATH/build/cmake/android.toolchain.cmake \
+ -DANDROID_ABI=arm64-v8a \
+ -DANDROID_PLATFORM=android-21 \
+ -DCMAKE_BUILD_TYPE=Release ..
+ make -j$(nproc)
+ cd ..
+
+ # 2. armeabi-v7a Derlemesi
+ mkdir -p build_armv7 && cd build_armv7
+ cmake -DCMAKE_TOOLCHAIN_FILE=$NDK_PATH/build/cmake/android.toolchain.cmake \
+ -DANDROID_ABI=armeabi-v7a \
+ -DANDROID_PLATFORM=android-21 \
+ -DCMAKE_BUILD_TYPE=Release ..
+ make -j$(nproc)
+ cd ..
+
+ # 3. Çıktıları jniLibs Yapısına Kopyala
+ mkdir -p jniLibs/arm64-v8a
+ mkdir -p jniLibs/armeabi-v7a
+ find build_arm64 -name "*.so" -exec cp {} jniLibs/arm64-v8a/ \;
+ find build_armv7 -name "*.so" -exec cp {} jniLibs/armeabi-v7a/ \;
+
+ - name: Upload .so Artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: butterscotch-jniLibs
+ path: jniLibs/
diff --git a/src/android/main.c b/src/android/main.c
index 741eb4df9..effcd397c 100644
--- a/src/android/main.c
+++ b/src/android/main.c
@@ -171,7 +171,12 @@ JNIEXPORT void JNICALL JNI_FN(setNormalizedCursorPosition)(MAYBE_UNUSED JNIEnv*
JNIEXPORT void JNICALL JNI_FN(setMouseButtonState)(MAYBE_UNUSED JNIEnv* env, MAYBE_UNUSED jclass cls, jint button, jboolean down) {
Runner* runner = gRunner;
- if (runner == nullptr) return;
+ if (runner == nullptr) {
+ printf("setMouseButtonState: gRunner NULL! button=%d down=%d\n", button, down);
+ return;
+ }
+
+ printf("setMouseButtonState: button=%d down=%d cursorX=%.3f cursorY=%.3f\n", button, down, gNormalizedCursorX, gNormalizedCursorY);
if (down) {
RunnerMouse_onButtonDown(runner->mouse, button);