Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compact #6

Merged
merged 8 commits into from
Mar 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/LuaWatcom.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ jobs:
submodules: recursive
fetch-depth: 0

- name: Patch Lua Source Code for Open Watcom
run: |
patch -p0 -i lua.pat

- name: Build Lua for DOS 16-bit
run: |
export INCLUDE=$WATCOM/h
Expand Down
8 changes: 3 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,9 @@ To build Lua with Open Watcom you will need the following:
* Download the Lua 5.4.x sources tarballs from https://lua.org/ftp/, extract them and copy all files in `src` to `Lua`
2) Patch the source code for Watcom (optional):

| GNU Patch | DifPat |
|-------------------------------------|------------------------------------|
| `patch lua/luaconf.h luaconf.pat` | `pat luaconf.pat lua\luaconf.h` |
| `patch lua/lopcodes.h lopcodes.pat` | `pat lopcodes.pat lua\lopcodes.h ` |
| `patch lua/lutf8lib.c lutf8lib.pat` | `pat lutf8lib.pat lua\lutf8lib.c` |
| GNU Patch | DifPat |
|------------------------|-----------------|
| `patch -p0 -i lua.pat` | `pat lua.pat .` |
> If no patching program is available mimic the changes in each `.pat` file manually.
> Patch changes are minimal and only serve to silence Watcom compiler warnings

Expand Down
65 changes: 65 additions & 0 deletions common.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# This file is part of wmake but should not be run directly.
# It depends on other makefiles to setup variables for the target first
# and stores only common tasks amongst all platform build processes.

objs = $(OBJDIR)$(SEP)lapi.obj $(OBJDIR)$(SEP)lctype.obj &
$(OBJDIR)$(SEP)lfunc.obj $(OBJDIR)$(SEP)lmathlib.obj &
$(OBJDIR)$(SEP)loslib.obj $(OBJDIR)$(SEP)ltable.obj &
$(OBJDIR)$(SEP)lundump.obj $(OBJDIR)$(SEP)lauxlib.obj &
$(OBJDIR)$(SEP)ldblib.obj $(OBJDIR)$(SEP)lgc.obj &
$(OBJDIR)$(SEP)lmem.obj $(OBJDIR)$(SEP)lparser.obj &
$(OBJDIR)$(SEP)ltablib.obj $(OBJDIR)$(SEP)lutf8lib.obj &
$(OBJDIR)$(SEP)lbaselib.obj $(OBJDIR)$(SEP)ldebug.obj &
$(OBJDIR)$(SEP)linit.obj $(OBJDIR)$(SEP)loadlib.obj &
$(OBJDIR)$(SEP)lstate.obj $(OBJDIR)$(SEP)ltm.obj &
$(OBJDIR)$(SEP)lvm.obj $(OBJDIR)$(SEP)lcode.obj &
$(OBJDIR)$(SEP)ldo.obj $(OBJDIR)$(SEP)liolib.obj &
$(OBJDIR)$(SEP)lobject.obj $(OBJDIR)$(SEP)lstring.obj &
$(OBJDIR)$(SEP)lzio.obj $(OBJDIR)$(SEP)lcorolib.obj &
$(OBJDIR)$(SEP)ldump.obj $(OBJDIR)$(SEP)llex.obj &
$(OBJDIR)$(SEP)lopcodes.obj $(OBJDIR)$(SEP)lstrlib.obj

lua_obj = $(OBJDIR)$(SEP)lua.obj
luac_obj = $(OBJDIR)$(SEP)luac.obj

!ifdef __UNIX__
SEP = /
!else
SEP = \
!endif

BINDIR = dist$(SEP)bin
OBJDIR = obj$(SEP)$(PLATFORM)
SRCDIR = lua

$(BINDIR)$(SEP)lua$(PLATFORM).exe: $(OBJDIR) $(BINDIR) $(objs) $(lua_obj)
*wlink NAME $@ $(LFLAGS) FILE {$(objs) $(lua_obj)}

$(BINDIR)$(SEP)luac$(PLATFORM).exe: $(BINDIR) $(OBJDIR) $(objs) $(luac_obj)
*wlink NAME $@ $(LFLAGS) FILE {$(objs) $(luac_obj)}

{$(SRCDIR)}.c{$(OBJDIR)}.obj:
$(CC) $(CFLAGS) -fo=$@ $<

clean: .SYMBOLIC
!ifdef __UNIX__
@!if [ -e $(OBJDIR) ]; then rm -R $(OBJDIR); fi
@!if [ -e $(BINDIR)lua$(PLATFORM).exe ]; then rm $(BINDIR)lua$(PLATFORM).exe; fi
@!if [ -e $(BINDIR)luac$(PLATFORM).exe ]; then rm $(BINDIR)luac$(PLATFORM).exe; fi
!else # Assuming DOS 5.0 +
@!if exist $(BINDIR)$(SEP)lua$(PLATFORM).exe del $(BINDIR)$(SEP)lua$(PLATFORM).exe
@!if exist $(BINDIR)$(SEP)luac$(PLATFORM).exe del $(BINDIR)$(SEP)luac$(PLATFORM).exe
@!if exist $(OBJDIR)$(SEP)*.* echo Run `DEL $(OBJDIR)$(SEP)*.* && RD $(OBJDIR)` to clean compiler objects
!endif

dist:
mkdir dist

obj:
mkdir obj

$(BINDIR): dist
mkdir $(BINDIR)

$(OBJDIR): obj
mkdir $(OBJDIR)
14 changes: 0 additions & 14 deletions lopcodes.pat

This file was deleted.

71 changes: 71 additions & 0 deletions lua.pat
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
--- lua/lopcodes.h
+++ lua/lopcodes.h
@@ -65,10 +65,16 @@ enum OpMode {iABC, iABx, iAsBx, iAx, isJ}; /* basic instruction formats */
*/

/* Check whether type 'int' has at least 'b' bits ('b' < 32) */
+#if defined(_M_I86)
+/* Hardcoded due to bugs in some 16-bit compilers */
+#define L_INTHASBITS(b) ((0xFFFF >> ((b) - 1)) >= 1)
+#else
#define L_INTHASBITS(b) ((UINT_MAX >> ((b) - 1)) >= 1)
+#endif

-
-#if L_INTHASBITS(SIZE_Bx)
+#if defined(_M_I86)
+#define MAXARG_Bx 0xFFFF
+#elif L_INTHASBITS(SIZE_Bx)
#define MAXARG_Bx ((1<<SIZE_Bx)-1)
#else
#define MAXARG_Bx MAX_INT
@@ -76,14 +82,17 @@ enum OpMode {iABC, iABx, iAsBx, iAx, isJ}; /* basic instruction formats */

#define OFFSET_sBx (MAXARG_Bx>>1) /* 'sBx' is signed */

-
-#if L_INTHASBITS(SIZE_Ax)
+#if defined(_M_I86)
+#define MAXARG_Ax 0xFFFF
+#elif L_INTHASBITS(SIZE_Ax)
#define MAXARG_Ax ((1<<SIZE_Ax)-1)
#else
#define MAXARG_Ax MAX_INT
#endif

-#if L_INTHASBITS(SIZE_sJ)
+#if defined(_M_I86)
+#define MAXARG_sJ 0xFFFF
+#elif L_INTHASBITS(SIZE_sJ)
#define MAXARG_sJ ((1 << SIZE_sJ) - 1)
#else
#define MAXARG_sJ MAX_INT
--- lua/luaconf.h
+++ lua/luaconf.h
@@ -79,7 +79,12 @@
/*
@@ LUAI_IS32INT is true iff 'int' has (at least) 32 bits.
*/
+#if defined(_M_I86)
+/* Hardcoded due to bugs in some 16-bit compilers */
+#define LUAI_IS32INT 0
+#else
#define LUAI_IS32INT ((UINT_MAX >> 30) >= 3)
+#endif

/* }================================================================== */


--- lua/lutf8lib.c
+++ lua/lutf8lib.c
@@ -31,7 +31,9 @@
/*
** Integer type for decoded UTF-8 values; MAXUTF needs 31 bits.
*/
-#if (UINT_MAX >> 30) >= 1
+#if defined(_M_I86)
+typedef unsigned long utfint;
+#elif (UINT_MAX >> 30) >= 1
typedef unsigned int utfint;
#else
typedef unsigned long utfint;
21 changes: 0 additions & 21 deletions luaconf.pat

This file was deleted.

20 changes: 0 additions & 20 deletions lutf8lib.pat

This file was deleted.

66 changes: 1 addition & 65 deletions wm_dos16.mak
Original file line number Diff line number Diff line change
Expand Up @@ -3,75 +3,11 @@
# There are no configurable parts to this file
# Run with `wmake -f mw_dos16.mak`

objs = $(OBJDIR)lapi.obj $(OBJDIR)lctype.obj &
$(OBJDIR)lfunc.obj $(OBJDIR)lmathlib.obj &
$(OBJDIR)loslib.obj $(OBJDIR)ltable.obj &
$(OBJDIR)lundump.obj $(OBJDIR)lauxlib.obj &
$(OBJDIR)ldblib.obj $(OBJDIR)lgc.obj &
$(OBJDIR)lmem.obj $(OBJDIR)lparser.obj &
$(OBJDIR)ltablib.obj $(OBJDIR)lutf8lib.obj &
$(OBJDIR)lbaselib.obj $(OBJDIR)ldebug.obj &
$(OBJDIR)linit.obj $(OBJDIR)loadlib.obj &
$(OBJDIR)lstate.obj $(OBJDIR)ltm.obj &
$(OBJDIR)lvm.obj $(OBJDIR)lcode.obj &
$(OBJDIR)ldo.obj $(OBJDIR)liolib.obj &
$(OBJDIR)lobject.obj $(OBJDIR)lstring.obj &
$(OBJDIR)lzio.obj $(OBJDIR)lcorolib.obj &
$(OBJDIR)ldump.obj $(OBJDIR)llex.obj &
$(OBJDIR)lopcodes.obj $(OBJDIR)lstrlib.obj

lua_obj = $(OBJDIR)lua.obj
luac_obj = $(OBJDIR)luac.obj

CC = *wcc

CFLAGS = -q -bt=dos -ml -0 -d0 -osr -zc
LFLAGS = SYS dos OPT st=8192

PLATFORM = 16

!ifdef __UNIX__
BINDIR = dist/bin/
OBJDIR = obj/$(PLATFORM)/
SRCDIR = lua/
!else
BINDIR = dist\bin\ #
OBJDIR = obj\$(PLATFORM)\ #
SRCDIR = lua\ #
!endif

$(BINDIR)lua$(PLATFORM).exe: $(OBJDIR) $(BINDIR) $(objs) $(lua_obj)
*wlink NAME $@ $(LFLAGS) FILE {$(objs) $(lua_obj)}

$(BINDIR)luac$(PLATFORM).exe: $(BINDIR) $(OBJDIR) $(objs) $(luac_obj)
*wlink NAME $@ $(LFLAGS) FILE {$(objs) $(luac_obj)}

{$(SRCDIR)}.c{$(OBJDIR)}.obj:
$(CC) $(CFLAGS) -fo=$@ $<

clean: .SYMBOLIC
!ifdef __UNIX__
@!if [ -e $(OBJDIR) ]; then rm -R $(OBJDIR); fi
@!if [ -e $(BINDIR)lua$(PLATFORM).exe ]; then rm $(BINDIR)lua$(PLATFORM).exe; fi
@!if [ -e $(BINDIR)luac$(PLATFORM).exe ]; then rm $(BINDIR)luac$(PLATFORM).exe; fi
!else
!ifdef __NT__
@!if exist $(OBJDIR) rd /S /Q $(OBJDIR)
!else
@!if exist $(OBJDIR) deltree /Y $(OBJDIR)
!endif
@!if exist $(BINDIR)lua$(PLATFORM).exe del $(BINDIR)lua$(PLATFORM).exe
@!if exist $(BINDIR)luac$(PLATFORM).exe del $(BINDIR)luac$(PLATFORM).exe
!endif

dist:
mkdir dist

obj:
mkdir obj

$(BINDIR): dist
mkdir $(BINDIR)

$(OBJDIR): obj
mkdir $(OBJDIR)
!include common.inc
66 changes: 1 addition & 65 deletions wm_dos4g.mak
Original file line number Diff line number Diff line change
Expand Up @@ -3,75 +3,11 @@
# There are no configurable parts to this file
# Run with `wmake -f wm_dos4g.mak`

objs = $(OBJDIR)lapi.obj $(OBJDIR)lctype.obj &
$(OBJDIR)lfunc.obj $(OBJDIR)lmathlib.obj &
$(OBJDIR)loslib.obj $(OBJDIR)ltable.obj &
$(OBJDIR)lundump.obj $(OBJDIR)lauxlib.obj &
$(OBJDIR)ldblib.obj $(OBJDIR)lgc.obj &
$(OBJDIR)lmem.obj $(OBJDIR)lparser.obj &
$(OBJDIR)ltablib.obj $(OBJDIR)lutf8lib.obj &
$(OBJDIR)lbaselib.obj $(OBJDIR)ldebug.obj &
$(OBJDIR)linit.obj $(OBJDIR)loadlib.obj &
$(OBJDIR)lstate.obj $(OBJDIR)ltm.obj &
$(OBJDIR)lvm.obj $(OBJDIR)lcode.obj &
$(OBJDIR)ldo.obj $(OBJDIR)liolib.obj &
$(OBJDIR)lobject.obj $(OBJDIR)lstring.obj &
$(OBJDIR)lzio.obj $(OBJDIR)lcorolib.obj &
$(OBJDIR)ldump.obj $(OBJDIR)llex.obj &
$(OBJDIR)lopcodes.obj $(OBJDIR)lstrlib.obj

lua_obj = $(OBJDIR)lua.obj
luac_obj = $(OBJDIR)luac.obj

CC = *wcc386

CFLAGS = -q -bt=dos4g -mf -3 -d0 -osr -zc
LFLAGS = SYS dos4g OPT st=8192

PLATFORM = 4g

!ifdef __UNIX__
BINDIR = dist/bin/
OBJDIR = obj/$(PLATFORM)/
SRCDIR = lua/
!else
BINDIR = dist\bin\ #
OBJDIR = obj\$(PLATFORM)\ #
SRCDIR = lua\ #
!endif

$(BINDIR)lua$(PLATFORM).exe: $(OBJDIR) $(BINDIR) $(objs) $(lua_obj)
*wlink NAME $@ $(LFLAGS) FILE {$(objs) $(lua_obj)}

$(BINDIR)luac$(PLATFORM).exe: $(BINDIR) $(OBJDIR) $(objs) $(luac_obj)
*wlink NAME $@ $(LFLAGS) FILE {$(objs) $(luac_obj)}

{$(SRCDIR)}.c{$(OBJDIR)}.obj:
$(CC) $(CFLAGS) -fo=$@ $<

clean: .SYMBOLIC
!ifdef __UNIX__
@!if [ -e $(OBJDIR) ]; then rm -R $(OBJDIR); fi
@!if [ -e $(BINDIR)lua$(PLATFORM).exe ]; then rm $(BINDIR)lua$(PLATFORM).exe; fi
@!if [ -e $(BINDIR)luac$(PLATFORM).exe ]; then rm $(BINDIR)luac$(PLATFORM).exe; fi
!else
!ifdef __NT__
@!if exist $(OBJDIR) rd /S /Q $(OBJDIR)
!else
@!if exist $(OBJDIR) deltree /Y $(OBJDIR)
!endif
@!if exist $(BINDIR)lua$(PLATFORM).exe del $(BINDIR)lua$(PLATFORM).exe
@!if exist $(BINDIR)luac$(PLATFORM).exe del $(BINDIR)luac$(PLATFORM).exe
!endif

dist:
mkdir dist

obj:
mkdir obj

$(BINDIR): dist
mkdir $(BINDIR)

$(OBJDIR): obj
mkdir $(OBJDIR)
!include common.inc
Loading