From 3797d2acbca0100663bdaa1bcbb781d98dfaba59 Mon Sep 17 00:00:00 2001
From: Connor McLaughlin <stenzek@gmail.com>
Date: Sun, 22 Nov 2020 01:23:11 +1000
Subject: [PATCH] CI: Generate armv7 libretro cores

---
 .github/workflows/rolling-release.yml    | 36 ++++++++++++++++++++++--
 CMakeModules/armv7-cross-toolchain.cmake | 14 +++++++++
 2 files changed, 48 insertions(+), 2 deletions(-)
 create mode 100644 CMakeModules/armv7-cross-toolchain.cmake

diff --git a/.github/workflows/rolling-release.yml b/.github/workflows/rolling-release.yml
index c3f544e39..37e8552ce 100644
--- a/.github/workflows/rolling-release.yml
+++ b/.github/workflows/rolling-release.yml
@@ -148,7 +148,7 @@ jobs:
       shell: bash
       run: |
         sudo apt-get update
-        sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
+        sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
 
     - name: Compile and zip Linux x64 libretro core
       shell: bash
@@ -165,6 +165,21 @@ jobs:
         name: "linux-libretro"
         path: "build-libretro-linux-x64/duckstation_libretro_x64.so.zip"
 
+    - name: Compile and zip Linux armv7 libretro core
+      shell: bash
+      run: |
+        mkdir build-libretro-linux-armv7
+        cd build-libretro-linux-armv7
+        cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_LIBRETRO_CORE=ON -DCMAKE_TOOLCHAIN_FILE=../CMakeModules/armv7-cross-toolchain.cmake ..
+        cmake --build . --parallel 2
+        zip -j duckstation_libretro_linux_armv7.so.zip duckstation_libretro.so
+
+    - name: Upload Linux AArch64 libretro core
+      uses: actions/upload-artifact@v1
+      with:
+        name: "linux-libretro"
+        path: "build-libretro-linux-armv7/duckstation_libretro_linux_armv7.so.zip"
+      
     - name: Compile and zip Linux AArch64 libretro core
       shell: bash
       run: |
@@ -173,13 +188,28 @@ jobs:
         cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_LIBRETRO_CORE=ON -DCMAKE_TOOLCHAIN_FILE=../CMakeModules/aarch64-cross-toolchain.cmake ..
         cmake --build . --parallel 2
         zip -j duckstation_libretro_linux_aarch64.so.zip duckstation_libretro.so
-      
+
     - name: Upload Linux AArch64 libretro core
       uses: actions/upload-artifact@v1
       with:
         name: "linux-libretro"
         path: "build-libretro-linux-aarch64/duckstation_libretro_linux_aarch64.so.zip"
 
+    - name: Compile and zip Android armv7 libretro core
+      shell: bash
+      run: |
+        mkdir build-libretro-android-armv7
+        cd build-libretro-android-armv7
+        cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_LIBRETRO_CORE=ON -DANDROID_ABI=armeabi-v7a -DANDROID_ARM_NEON=ON -DCMAKE_TOOLCHAIN_FILE=${ANDROID_SDK_ROOT}/ndk-bundle/build/cmake/android.toolchain.cmake ..
+        cmake --build . --parallel 2
+        zip -j duckstation_libretro_android_armv7.so.zip duckstation_libretro_android.so
+      
+    - name: Upload Android armv7 libretro core
+      uses: actions/upload-artifact@v1
+      with:
+        name: "linux-libretro"
+        path: "build-libretro-android-armv7/duckstation_libretro_android_armv7.so.zip"
+
     - name: Compile and zip Android AArch64 libretro core
       shell: bash
       run: |
@@ -348,7 +378,9 @@ jobs:
             linux-x64-appimage-qt/duckstation-qt-x64.AppImage
             linux-x64-appimage-qt-zsync/duckstation-qt-x64.AppImage.zsync
             linux-libretro/duckstation_libretro_x64.so.zip
+            linux-libretro/duckstation_libretro_linux_armv7.so.zip
             linux-libretro/duckstation_libretro_linux_aarch64.so.zip
+            linux-libretro/duckstation_libretro_android_armv7.so.zip
             linux-libretro/duckstation_libretro_android_aarch64.so.zip
             android/duckstation-android.apk
             macos-x64/duckstation-mac-release.zip
diff --git a/CMakeModules/armv7-cross-toolchain.cmake b/CMakeModules/armv7-cross-toolchain.cmake
new file mode 100644
index 000000000..25eba97c5
--- /dev/null
+++ b/CMakeModules/armv7-cross-toolchain.cmake
@@ -0,0 +1,14 @@
+# Source: https://github.com/stenzek/duckstation/issues/626#issuecomment-660718306
+
+# Target system
+SET(CMAKE_SYSTEM_NAME Linux)
+SET(CMAKE_SYSTEM_PROCESSOR armv7l)
+SET(CMAKE_SYSTEM_VERSION 1)
+set(CMAKE_CROSSCOMPILING TRUE)
+
+# Cross compiler
+SET(CMAKE_C_COMPILER   arm-linux-gnueabihf-gcc)
+SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
+set(CMAKE_LIBRARY_ARCHITECTURE arm-linux-gnueabihf)
+
+set(THREADS_PTHREAD_ARG "0" CACHE STRING "Result from TRY_RUN" FORCE)