SDL: ci: add os2/emx workflow.

From 3ac9fff183457e230efef41626b32c52fffa7c10 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Thu, 1 Oct 2026 23:56:50 +0300
Subject: [PATCH] ci: add os2/emx workflow.

Closes:  https://github.com/libsdl-org/SDL/issues/16403
---
 .github/workflows/create-test-plan.py | 14 ++++++++++++++
 .github/workflows/generic.yml         |  5 +++++
 2 files changed, 19 insertions(+)

diff --git a/.github/workflows/create-test-plan.py b/.github/workflows/create-test-plan.py
index 39462f4f975c1..5af85c8ab6c0a 100755
--- a/.github/workflows/create-test-plan.py
+++ b/.github/workflows/create-test-plan.py
@@ -52,6 +52,7 @@ class SdlPlatform(Enum):
     NetBSD = "netbsd"
     OpenBSD = "openbsd"
     Watcom = "watcom"
+    OS2EMX = "os2emx"
 
 
 class Msys2Platform(Enum):
@@ -135,6 +136,7 @@ class JobSpec:
     "freebsd": JobSpec(name="FreeBSD",                                      os=JobOs.UbuntuLatest,  platform=SdlPlatform.FreeBSD,     artifact="SDL-freebsd-x64", autotools=True, ),
     "watcom-win32": JobSpec(name="Watcom (Windows)",                        os=JobOs.WindowsLatest, platform=SdlPlatform.Watcom,      artifact="SDL-watcom-win32",  no_cmake=True, watcom_platform=WatcomPlatform.Windows ),
     "watcom-os2": JobSpec(name="Watcom (OS/2)",                             os=JobOs.WindowsLatest, platform=SdlPlatform.Watcom,      artifact="SDL-watcom-os2",  no_cmake=True, watcom_platform=WatcomPlatform.OS2 ),
+    "os2-emx": JobSpec(name="OS/2 EMX (KLIBC)",                             os=JobOs.UbuntuLatest,  platform=SdlPlatform.OS2EMX,      artifact="SDL-os2-emx", ),
     # "watcom-win32"
     # "watcom-os2"
 }
@@ -658,6 +660,18 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDeta
                     job.run_tests = True
                 case _:
                     raise ValueError(f"Unsupported watcom_platform=${spec.watcom_platform}")
+        case SdlPlatform.OS2EMX:
+            fpic = False
+            job.apt_packages = []
+            job.build_autotools_tests = False
+            job.run_tests = False
+            job.cmake_generator = "Unix Makefiles"
+            job.cmake_build_arguments.append("-j$(nproc)")
+            job.cc_from_cmake = True
+            job.cmake_toolchain_file = "$OS2EMX_CMAKE_TOOLCHAIN_FILE"
+            job.sudo = ""
+            job.shared_lib = SharedLibType.WIN32
+            #job.static_lib = StaticLibType.A
         case _:
             raise ValueError(f"Unsupported platform={spec.platform}")
 
diff --git a/.github/workflows/generic.yml b/.github/workflows/generic.yml
index 2234f613a9ecd..200944842222c 100644
--- a/.github/workflows/generic.yml
+++ b/.github/workflows/generic.yml
@@ -65,6 +65,11 @@ jobs:
         with:
           arch: ${{ matrix.platform.msvc-vcvars-arch }}
           sdk: ${{ matrix.platform.msvc-vcvars-sdk }}
+      - name: 'Set up OS2EMX cross-toolchain'
+        uses: komh/setup-cross-os2emx@v1
+        if: ${{ matrix.platform.platform == 'os2emx' }}
+        with:
+          platform: linux-x64
       - name: 'Set up Windows GDK Desktop'
         uses: ./.github/actions/setup-gdk-desktop
         if: ${{ matrix.platform.setup-gdk-folder != '' }}