SDL: cmake: fix sdl3.pc for Nintendo 3DS + add to test matrix

From 0a1479d58c4f617ffcb84a6977f57d8ddc703662 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sun, 15 Jan 2023 17:39:07 +0100
Subject: [PATCH] cmake: fix sdl3.pc for Nintendo 3DS + add to test matrix

---
 .github/cmake/CMakeLists.txt | 16 ++++++++++++++++
 .github/workflows/n3ds.yml   | 13 +++++++++++--
 .github/workflows/ps2.yml    |  2 +-
 .github/workflows/psp.yml    |  2 +-
 CMakeLists.txt               |  7 +++++++
 cmake/test/test_pkgconfig.sh | 30 +++++++++++++++---------------
 6 files changed, 51 insertions(+), 19 deletions(-)
 create mode 100644 .github/cmake/CMakeLists.txt

diff --git a/.github/cmake/CMakeLists.txt b/.github/cmake/CMakeLists.txt
new file mode 100644
index 000000000000..39ebaf8b8f32
--- /dev/null
+++ b/.github/cmake/CMakeLists.txt
@@ -0,0 +1,16 @@
+cmake_minimum_required(VERSION 3.0)
+project(ci_utils C CXX)
+
+set(txt "CC=${CMAKE_C_COMPILER}
+CXX=${CMAKE_CXX_COMPILER}
+CFLAGS=${CMAKE_C_FLAGS}
+CXXFLAGS=${CMAKE_CXX_FLAGS}
+LDFLAGS=${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_C_STANDARD_LIBRARIES}
+")
+
+message("${txt}")
+
+set(VAR_PATH "/tmp/env.txt" CACHE PATH "Where to write environment file")
+message(STATUS "Writing CC/CXX/CFLAGS/CXXFLAGS/LDFLAGS environment to ${VAR_PATH}")
+
+file(WRITE "${VAR_PATH}" "${txt}")
diff --git a/.github/workflows/n3ds.yml b/.github/workflows/n3ds.yml
index 9b11122f3bca..45adb110cd41 100644
--- a/.github/workflows/n3ds.yml
+++ b/.github/workflows/n3ds.yml
@@ -42,5 +42,14 @@ jobs:
             -DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} \
             -DCMAKE_BUILD_TYPE=Release
           cmake --build cmake_config_build --verbose
-      # Not running test_pkgconfig.sh and test_sdlconfig.sh
-      # as invoking the compiler manually is not supported
+      - name: Extract CC/CXX/CFLAGS/CXXFLAGS from CMake toolchain
+        run: |
+          cmake -S .github/cmake -B /tmp/cmake_extract \
+            -DCMAKE_TOOLCHAIN_FILE=${DEVKITPRO}/cmake/3DS.cmake \
+            -DCMAKE_BUILD_TYPE=Release \
+            -DVAR_PATH=/tmp/n3ds_env.txt
+          cat /tmp/n3ds_env.txt >> $GITHUB_ENV
+      - name: Verify sdl3.pc
+        run: |
+          export PKG_CONFIG_PATH=${{ env.SDL3_DIR }}/lib/pkgconfig
+          cmake/test/test_pkgconfig.sh
diff --git a/.github/workflows/ps2.yml b/.github/workflows/ps2.yml
index a0f90201f570..29b4c9e7cedf 100644
--- a/.github/workflows/ps2.yml
+++ b/.github/workflows/ps2.yml
@@ -54,7 +54,7 @@ jobs:
     - name: Verify sdl3.pc
       run: |
         export CC=mips64r5900el-ps2-elf-gcc
-        export EXTRA_LDFLAGS="-L$PS2DEV/ps2sdk/ee/lib -L$PS2DEV/gsKit/lib -L$PS2DEV/ps2sdk/ports/lib"
+        export LDFLAGS="-L$PS2DEV/ps2sdk/ee/lib -L$PS2DEV/gsKit/lib -L$PS2DEV/ps2sdk/ports/lib"
         export PKG_CONFIG_PATH=${{ env.SDL3_DIR }}/lib/pkgconfig
         cmake/test/test_pkgconfig.sh
     
diff --git a/.github/workflows/psp.yml b/.github/workflows/psp.yml
index feade4e1ed72..073ed0db0adf 100644
--- a/.github/workflows/psp.yml
+++ b/.github/workflows/psp.yml
@@ -43,6 +43,6 @@ jobs:
     - name: Verify sdl3.pc
       run: |
         export CC=psp-gcc
+        export LDFLAGS="-L$PSPDEV/lib -L$PSPDEV/psp/lib -L$PSPDEV/psp/sdk/lib"
         export PKG_CONFIG_PATH=${{ env.SDL3_DIR }}/lib/pkgconfig
-        export EXTRA_LDFLAGS="-L$PSPDEV/lib -L$PSPDEV/psp/lib -L$PSPDEV/psp/sdk/lib"
         cmake/test/test_pkgconfig.sh
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 28c8cb2547fe..86b7d478c253 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2721,6 +2721,13 @@ elseif(N3DS)
   else()
     message_error("SDL_FILE must be enabled to build on N3DS")
   endif()
+
+  foreach(lib ${CMAKE_C_STANDARD_LIBRARIES})
+    if(lib MATCHES "^-l")
+      string(SUBSTRING "${lib}" 2 -1 lib)
+    endif()
+    list(APPEND SDL_EXTRA_LIBS ${lib})
+  endforeach()
 endif()
 
 if(HAVE_VULKAN AND NOT SDL_LOADSO)
diff --git a/cmake/test/test_pkgconfig.sh b/cmake/test/test_pkgconfig.sh
index c2aa3408cfbf..5bb84df2cd4d 100755
--- a/cmake/test/test_pkgconfig.sh
+++ b/cmake/test/test_pkgconfig.sh
@@ -13,7 +13,7 @@ case "$machine" in
     *android* )
         EXEPREFIX="lib"
         EXESUFFIX=".so"
-        EXTRA_LDFLAGS="$EXTRA_LDFLAGS -shared"
+        LDFLAGS="$EXTRA_LDFLAGS -shared"
         ;;
     * )
         EXEPREFIX=""
@@ -25,20 +25,20 @@ set -e
 
 # Get the canonical path of the folder containing this script
 testdir=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)")
-CFLAGS="$( pkg-config sdl3 --cflags )"
-LDFLAGS="$( pkg-config sdl3 --libs )"
-STATIC_LDFLAGS="$( pkg-config sdl3 --libs --static )"
-
-compile_cmd="$CC -c "$testdir/main_gui.c" -o main_gui_pkgconfig.c.o $CFLAGS $EXTRA_CFLAGS"
-link_cmd="$CC main_gui_pkgconfig.c.o -o ${EXEPREFIX}main_gui_pkgconfig${EXESUFFIX} $LDFLAGS $EXTRA_LDFLAGS"
-static_link_cmd="$CC main_gui_pkgconfig.c.o -o ${EXEPREFIX}main_gui_pkgconfig_static${EXESUFFIX} $STATIC_LDFLAGS $EXTRA_LDFLAGS"
-
-echo "-- CC:                $CC"
-echo "-- CFLAGS:            $CFLAGS"
-echo "-- EXTRA_CFLAGS:      $EXTRA_CFLAGS"
-echo "-- LDFLASG:           $LDFLAGS"
-echo "-- STATIC_LDFLAGS:    $STATIC_LDFLAGS"
-echo "-- EXTRA_LDFLAGS:     $EXTRA_LDFLAGS"
+SDL_CFLAGS="$( pkg-config sdl3 --cflags )"
+SDL_LDFLAGS="$( pkg-config sdl3 --libs )"
+SDL_STATIC_LDFLAGS="$( pkg-config sdl3 --libs --static )"
+
+compile_cmd="$CC -c "$testdir/main_gui.c" -o main_gui_pkgconfig.c.o $SDL_CFLAGS $CFLAGS"
+link_cmd="$CC main_gui_pkgconfig.c.o -o ${EXEPREFIX}main_gui_pkgconfig${EXESUFFIX} $SDL_LDFLAGS $LDFLAGS"
+static_link_cmd="$CC main_gui_pkgconfig.c.o -o ${EXEPREFIX}main_gui_pkgconfig_static${EXESUFFIX} $SDL_STATIC_LDFLAGS $LDFLAGS"
+
+echo "-- CC:                 $CC"
+echo "-- CFLAGS:             $CFLAGS"
+echo "-- LDFLASG:            $LDFLAGS"
+echo "-- SDL_CFLAGS:         $SDL_CFLAGS"
+echo "-- SDL_LDFLAGS:        $SDL_LDFLAGS"
+echo "-- SDL_STATIC_LDFLAGS: $SDL_STATIC_LDFLAGS"
 
 echo "-- COMPILE:       $compile_cmd"
 echo "-- LINK:          $link_cmd"