SDL: updates to os/2 build

From 836a4ec7b1c8ad2793f899cf7b4a114e14314951 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Sat, 8 Jan 2022 22:35:02 +0300
Subject: [PATCH] updates to os/2 build

---
 Makefile.os2                  | 158 +++++++++++++++++++++++++++-------
 build-scripts/os2-buildbot.sh |   5 +-
 test/Makefile.os2             |  21 +----
 3 files changed, 129 insertions(+), 55 deletions(-)

diff --git a/Makefile.os2 b/Makefile.os2
index 7f79dca560a..856bec8ccc7 100644
--- a/Makefile.os2
+++ b/Makefile.os2
@@ -21,26 +21,29 @@ INCPATH = -I"$(%WATCOM)/h/os2" -I"$(%WATCOM)/h"
 INCPATH+= -Iinclude
 
 LIBM = SDL2libm.lib
+TLIB = SDL2test.lib
 LIBS = mmpm2.lib $(LIBM)
 CFLAGS = -bt=os2 -d0 -q -bm -5s -fp5 -fpi87 -sg -oteanbmier -ei
 # max warnings:
 CFLAGS+= -wx
 # newer OpenWatcom versions enable W303 by default
 CFLAGS+= -wcd=303
+# the include paths :
+CFLAGS+= $(INCPATH)
+CFLAGS_STATIC=$(CFLAGS)
 # building dll:
-CFLAGS+= -bd
+CFLAGS_DLL =$(CFLAGS)
+CFLAGS_DLL+= -bd
 # iconv:
 LIBICONV_LIB=iconv2.lib
 !ifeq LIBICONV 1
-CFLAGS+= -DHAVE_ICONV=1 -DHAVE_ICONV_H=1
+CFLAGS_DLL+= -DHAVE_ICONV=1 -DHAVE_ICONV_H=1
 LIBS+= $(ICONVLIB)
 !else
 LIBS+= libuls.lib libconv.lib
 !endif
-# the include paths :
-CFLAGS+= $(INCPATH)
 # building SDL itself (for DECLSPEC):
-CFLAGS+= -DBUILD_SDL
+CFLAGS_DLL+= -DBUILD_SDL
 
 # Debug options:
 # - debug messages from OS/2 related code to stdout:
@@ -48,10 +51,6 @@ CFLAGS+= -DBUILD_SDL
 # - debug messages from OS/2 code via SDL_LogDebug():
 #CFLAGS+= -DOS2DEBUG=2
 
-MSRCS= e_atan2.c e_exp.c e_fmod.c e_log10.c e_log.c e_pow.c e_rem_pio2.c e_sqrt.c &
-       k_cos.c k_rem_pio2.c k_sin.c k_tan.c &
-       s_atan.c s_copysign.c s_cos.c s_fabs.c s_floor.c s_scalbn.c s_sin.c s_tan.c
-
 SRCS = SDL.c SDL_assert.c SDL_error.c SDL_log.c SDL_dataqueue.c SDL_hints.c
 SRCS+= SDL_getenv.c SDL_iconv.c SDL_malloc.c SDL_qsort.c SDL_stdlib.c SDL_string.c SDL_strtokr.c SDL_crc32.c
 SRCS+= SDL_cpuinfo.c SDL_atomic.c SDL_spinlock.c SDL_thread.c SDL_timer.c
@@ -92,7 +91,6 @@ SRCS+= SDL_os2video.c SDL_os2util.c SDL_os2dive.c SDL_os2vman.c &
 SRCS+= SDL_dynapi.c
 
 OBJS = $(SRCS:.c=.obj)
-MOBJS= $(MSRCS:.c=.obj)
 
 .extensions:
 .extensions: .lib .dll .obj .c .asm
@@ -103,9 +101,12 @@ MOBJS= $(MSRCS:.c=.obj)
 .c: ./src/core/os2/geniconv;
 .c: ./src/locale/;./src/locale/unix;./src/misc;./src/misc/dummy;./src/joystick/hidapi;./src/hidapi
 
-all: $(DLLFILE) $(LIBFILE) .symbolic
+all: $(DLLFILE) $(LIBFILE) $(TLIB) .symbolic
+
+build_dll: .symbolic
+    @echo * Compiling dll objects
 
-$(DLLFILE): $(OBJS) $(LIBM) $(LIBICONV_LIB) $(LNKFILE)
+$(DLLFILE): build_dll $(OBJS) $(LIBM) $(LIBICONV_LIB) $(LNKFILE)
     @echo * Linking: $@
     wlink @$(LNKFILE)
 
@@ -114,39 +115,131 @@ $(LIBFILE): $(DLLFILE)
     wlib -q -b -n -c -pa -s -t -zld -ii -io $* $(DLLFILE)
 
 .c.obj:
-    wcc386 $(CFLAGS) -fo=$^@ $<
+    wcc386 $(CFLAGS_DLL) -fo=$^@ $<
 
 SDL_syscond.obj: "src/thread/generic/SDL_syscond.c"
-    wcc386 $(CFLAGS) -fo=$^@ $<
-
+    wcc386 $(CFLAGS_DLL) -fo=$^@ $<
 SDL_cpuinfo.obj: SDL_cpuinfo.c
-    wcc386 $(CFLAGS) -wcd=200 -fo=$^@ $<
-
+    wcc386 $(CFLAGS_DLL) -wcd=200 -fo=$^@ $<
 SDL_wave.obj: SDL_wave.c
-    wcc386 $(CFLAGS) -wcd=124 -fo=$^@ $<
-
+    wcc386 $(CFLAGS_DLL) -wcd=124 -fo=$^@ $<
 SDL_blendfillrect.obj: SDL_blendfillrect.c
-    wcc386 $(CFLAGS) -wcd=200 -fo=$^@ $<
-
+    wcc386 $(CFLAGS_DLL) -wcd=200 -fo=$^@ $<
 SDL_blendline.obj: SDL_blendline.c
-    wcc386 $(CFLAGS) -wcd=200 -fo=$^@ $<
-
+    wcc386 $(CFLAGS_DLL) -wcd=200 -fo=$^@ $<
 SDL_blendpoint.obj: SDL_blendpoint.c
-    wcc386 $(CFLAGS) -wcd=200 -fo=$^@ $<
-
+    wcc386 $(CFLAGS_DLL) -wcd=200 -fo=$^@ $<
 SDL_RLEaccel.obj: SDL_RLEaccel.c
-    wcc386 $(CFLAGS) -wcd=201 -fo=$^@ $<
-
+    wcc386 $(CFLAGS_DLL) -wcd=201 -fo=$^@ $<
 # c99 mode needed because of structs with flexible array members in libusb.h
 SDL_hidapi.obj: SDL_hidapi.c
-    wcc386 $(CFLAGS) -za99 -fo=$^@ $<
+    wcc386 $(CFLAGS_DLL) -za99 -fo=$^@ $<
+
+$(LIBICONV_LIB):  "src/core/os2/iconv2.lbc"
+    @echo * Creating: $@
+    wlib -q -b -n -c -pa -s -t -zld -ii -io $@ @$<
+
+# SDL2libm
+MSRCS= e_atan2.c e_exp.c e_fmod.c e_log10.c e_log.c e_pow.c e_rem_pio2.c e_sqrt.c &
+       k_cos.c k_rem_pio2.c k_sin.c k_tan.c &
+       s_atan.c s_copysign.c s_cos.c s_fabs.c s_floor.c s_scalbn.c s_sin.c s_tan.c
+MOBJS= $(MSRCS:.c=.obj)
 
 .c: ./src/libm;
-$(LIBM): $(MOBJS)
+e_atan2.obj: e_atan2.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+e_exp.obj: e_exp.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+e_fmod.obj: e_fmod.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+e_log10.obj: e_log10.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+e_log.obj: e_log.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+e_pow.obj: e_pow.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+e_rem_pio2.obj: e_rem_pio2.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+e_sqrt.obj: e_sqrt.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+k_cos.obj: k_cos.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+k_rem_pio2.obj: k_rem_pio2.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+k_sin.obj: k_sin.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+k_tan.obj: k_tan.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+s_atan.obj: s_atan.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+s_copysign.obj: s_copysign.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+s_cos.obj: s_cos.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+s_fabs.obj: s_fabs.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+s_floor.obj: s_floor.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+s_scalbn.obj: s_scalbn.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+s_sin.obj: s_sin.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+s_tan.obj: s_tan.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+
+build_libm: .symbolic
+    @echo * Compiling libm objects
+$(LIBM): build_libm $(MOBJS)
+    @echo * Creating: $@
     wlib -q -b -n -c -pa -s -t -zld -ii -io $@ $(MOBJS)
 
-$(LIBICONV_LIB):  "src/core/os2/iconv2.lbc"
-    wlib -q -b -n -c -pa -s -t -zld -ii -io $@ @$<
+# SDL2test
+TSRCS = SDL_test_assert.c SDL_test_common.c SDL_test_compare.c &
+        SDL_test_crc32.c SDL_test_font.c SDL_test_fuzzer.c SDL_test_harness.c &
+        SDL_test_imageBlit.c SDL_test_imageBlitBlend.c SDL_test_imageFace.c &
+        SDL_test_imagePrimitives.c SDL_test_imagePrimitivesBlend.c &
+        SDL_test_log.c SDL_test_md5.c SDL_test_random.c SDL_test_memory.c
+TOBJS= $(TSRCS:.c=.obj)
+
+.c: ./src/test;
+SDL_test_assert.obj: SDL_test_assert.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_common.obj: SDL_test_common.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_compare.obj: SDL_test_compare.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_crc32.obj: SDL_test_crc32.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_font.obj: SDL_test_font.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_fuzzer.obj: SDL_test_fuzzer.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_harness.obj: SDL_test_harness.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_imageBlit.obj: SDL_test_imageBlit.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_imageBlitBlend.obj: SDL_test_imageBlitBlend.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_imageFace.obj: SDL_test_imageFace.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_imagePrimitives.obj: SDL_test_imagePrimitives.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_imagePrimitivesBlend.obj: SDL_test_imagePrimitivesBlend.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_log.obj: SDL_test_log.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_md5.obj: SDL_test_md5.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_random.obj: SDL_test_random.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+SDL_test_memory.obj: SDL_test_memory.c
+    wcc386 $(CFLAGS_STATIC) -fo=$^@ $<
+
+build_tlib: .symbolic
+    @echo * Compiling testlib objects
+$(TLIB): build_tlib $(TOBJS)
+    @echo * Creating: $@
+    wlib -q -b -n -c -pa -s -t -zld -ii -io $@ $(TOBJS)
 
 $(LNKFILE):
     @echo * Creating linker file: $@
@@ -165,7 +258,7 @@ $(LNKFILE):
     @%append $@ OPTION SHOWDEAD
 
 clean: .SYMBOLIC
-    @ echo * Clean: $(LIBNAME)
+    @echo * Clean: $(LIBNAME)
     @if exist *.obj rm *.obj
     @if exist *.err rm *.err
     @if exist $(LNKFILE) rm $(LNKFILE)
@@ -177,3 +270,4 @@ distclean: .SYMBOLIC clean
     @if exist $(LIBHOME)/*.map rm $(LIBHOME)/*.map
     @if exist $(LIBFILE) rm $(LIBFILE)
     @if exist $(DLLFILE) rm $(DLLFILE)
+    @if exist $(TLIB) rm $(TLIB)
diff --git a/build-scripts/os2-buildbot.sh b/build-scripts/os2-buildbot.sh
index e0a53c8d058..ff4b5f64be6 100755
--- a/build-scripts/os2-buildbot.sh
+++ b/build-scripts/os2-buildbot.sh
@@ -12,7 +12,6 @@ if [ -z "$WATCOM" ]; then
     echo "This is often something like '/usr/local/share/watcom'" 1>&2
     exit 1
 fi
-
 export PATH="$WATCOM/binl:$PATH"
 
 ZIPFILE="$1"
@@ -31,8 +30,8 @@ rm -f $ZIPFILE
 wmake -f Makefile.os2
 rm -rf $ZIPDIR
 mkdir -p $ZIPDIR
-chmod a+r SDL2.lib SDL2.dll
-mv SDL2.lib SDL2.dll $ZIPDIR/
+chmod 644 SDL2.dll SDL2.lib SDL2test.lib
+mv SDL2.dll SDL2.lib SDL2test.lib $ZIPDIR/
 cp -R include $ZIPDIR/
 zip -9r "buildbot/$ZIPFILE" $ZIPDIR
 
diff --git a/test/Makefile.os2 b/test/Makefile.os2
index dd2dbaddcaf..e238af4be2d 100644
--- a/test/Makefile.os2
+++ b/test/Makefile.os2
@@ -7,7 +7,7 @@ CFLAGS = $(INCPATH) -bt=os2 -d0 -q -bm -5s -fp5 -fpi87 -sg -oteanbmier -ei
 CFLAGS+= -wx -wcd=303
 
 LIBPATH = ..
-LIBS    = SDL2.lib $(TESTLIB)
+LIBS    = SDL2.lib SDL2test.lib
 
 #CFLAGS+= -DHAVE_SDL_TTF
 #TTFLIBS = SDL2ttf.lib
@@ -29,14 +29,6 @@ TARGETS = testatomic.exe testdisplayinfo.exe testbounds.exe testdraw2.exe &
           testsurround.exe testyuv.exe testgl2.exe testvulkan.exe testnative.exe &
           testautomation.exe
 
-# SDL2test.lib sources (../src/test)
-CSRCS = SDL_test_assert.c SDL_test_common.c SDL_test_compare.c &
-        SDL_test_crc32.c SDL_test_font.c SDL_test_fuzzer.c SDL_test_harness.c &
-        SDL_test_imageBlit.c SDL_test_imageBlitBlend.c SDL_test_imageFace.c &
-        SDL_test_imagePrimitives.c SDL_test_imagePrimitivesBlend.c &
-        SDL_test_log.c SDL_test_md5.c SDL_test_random.c SDL_test_memory.c
-TESTLIB = SDL2test.lib
-
 # testautomation sources
 TASRCS = testautomation.c testautomation_audio.c testautomation_clipboard.c &
          testautomation_events.c testautomation_hints.c &
@@ -56,11 +48,7 @@ all: $(TARGETS)
 
 .c: ../src/test
 
-$(TESTLIB): $(COBJS)
-  wlib -q -b -n -c -pa -s -t -zld -ii -io $@ $(COBJS)
-
 .obj.exe:
-  @%make $(TESTLIB)
   wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS)} op q op el file {$<} name $@
 
 .c.obj:
@@ -68,29 +56,22 @@ $(TESTLIB): $(COBJS)
 
 # specials
 testautomation.exe: $(TAOBJS)
-  @%make $(TESTLIB)
   wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS)} op q op el file {$<} name $@
 
 testnative.exe: testnative.obj testnativeos2.obj
-  @%make $(TESTLIB)
   wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS)} op q op el file {$<} name $@
 
 testoverlay2.exe: testoverlay2.obj testyuv_cvt.obj
-  @%make $(TESTLIB)
   wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS)} op q op el file {$<} name $@
 
 testyuv.exe: testyuv.obj testyuv_cvt.obj
-  @%make $(TESTLIB)
   wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS)} op q op el file {$<} name $@
 
 testime.exe: testime.obj
-  @%make $(TESTLIB)
   wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS) $(TTFLIBS)} op q op el file {$<} name $@
 
 clean: .SYMBOLIC
   @if exist *.obj rm *.obj
   @if exist *.err rm *.err
-
 distclean: .SYMBOLIC clean
   @if exist *.exe rm *.exe
-  @if exist $(TESTLIB) rm $(TESTLIB)