Skip to content

Commit de1fafb

Browse files
authored
Merge pull request #536 from Interlisp/fgh_fix-2164-WSL1-try2
To fix Issue#2164, create infrastructure to compile Maiko for Windows System for Linux v1 as a separate OS from Linux Created makefile-wsl1-* files as well as makefile-init-wsl1-* files. Modified bin/osversion to detect wsl1 as a special case of linux so that the wsl1 makefiles would be selected appropriately by makeright. Did not make CMAKE changes for WSL1. Changed Build Release workflow (via changes to Dockerfile-maiko) to build wsl1 versions of lde, ldex, ldesdl and ldeinit for x86_64 and aarch64. These are now included in the release tars.
2 parents 9343f58 + 6f42b35 commit de1fafb

10 files changed

+198
-5
lines changed

.github/workflows/Dockerfile_maiko

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,17 @@ COPY . ${INSTALL_LOCATION}
1818
# Build maiko
1919
RUN cd ${INSTALL_LOCATION}/bin \
2020
&& ./makeright x cleanup \
21-
&& ./makeright x
22-
RUN cd ${INSTALL_LOCATION}/bin \
21+
&& ./makeright x \
2322
&& if [ "$(./machinetype)" = "x86_64" ]; then \
2423
./makeright init; \
2524
fi
25+
# Build specially for WSL1 by "fooling" a linux build
26+
RUN cd ${INSTALL_LOCATION}/bin \
27+
&& arch="$(./machinetype)" \
28+
&& if [ "$arch" = "x86_64" ] || [ "$arch" = "aarch64" ]; then \
29+
export LDEARCH="${arch}-microsoft-wsl1" \
30+
&& ./makeright x cleanup \
31+
&& ./makeright x \
32+
&& ./makeright init \
33+
; \
34+
fi

.github/workflows/buildRelease.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,13 @@ jobs:
224224
RELEASE_TAG: ${{ steps.tag.outputs.release_tag }}
225225
run: |
226226
mkdir -p /tmp/release_tars
227-
for OSARCH in "linux.x86_64:linux_amd64" "linux.aarch64:linux_arm64" "linux.armv7l:linux_arm_v7" ; \
227+
for OSARCH in \
228+
"linux.x86_64:linux_amd64" \
229+
"linux.aarch64:linux_arm64" \
230+
"linux.armv7l:linux_arm_v7" \
231+
"wsl1.x86_64:linux_amd64" \
232+
"wsl1.aarch64:linux_arm64" \
233+
; \
228234
do \
229235
pushd /tmp/docker_images/${OSARCH##*:}/usr/local/interlisp >/dev/null ; \
230236
/usr/bin/tar -c -z \
@@ -246,6 +252,8 @@ jobs:
246252
artifacts:
247253
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-linux.x86_64.tgz,
248254
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-linux.aarch64.tgz,
255+
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-wsl1.x86_64.tgz,
256+
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-wsl1.aarch64.tgz,
249257
/tmp/release_tars/${{ steps.tag.outputs.release_tag }}-linux.armv7l.tgz
250258
tag: ${{ steps.tag.outputs.release_tag }}
251259
draft: ${{ needs.inputs.outputs.draft }}

bin/makefile-init-wsl1.aarch64

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Options for Windows System for Linux v1, aarch64 processor, X windows, for INIT processing
2+
3+
CC = gcc $(GCC_CFLAGS)
4+
#CC = clang $(CLANG_CFLAGS)
5+
6+
XFILES = $(OBJECTDIR)xmkicon.o \
7+
$(OBJECTDIR)xbbt.o \
8+
$(OBJECTDIR)dspif.o \
9+
$(OBJECTDIR)xinit.o \
10+
$(OBJECTDIR)xscroll.o \
11+
$(OBJECTDIR)xcursor.o \
12+
$(OBJECTDIR)xlspwin.o \
13+
$(OBJECTDIR)xrdopt.o \
14+
$(OBJECTDIR)xwinman.o
15+
16+
17+
XFLAGS = -DXWINDOW
18+
19+
# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it
20+
OPTFLAGS = -O0 -g
21+
DEBUGFLAGS =
22+
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT -D__wsl1__
23+
24+
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
25+
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
26+
27+
OBJECTDIR = ../$(RELEASENAME)/
28+
29+
default : ../$(OSARCHNAME)/ldeinit

bin/makefile-init-wsl1.x86_64

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Options for Windows System for Linux v1, Intel x86_64 processor, X windows, for INIT processing
2+
3+
CC = gcc $(GCC_CFLAGS)
4+
#CC = clang $(CLANG_CFLAGS)
5+
6+
XFILES = $(OBJECTDIR)xmkicon.o \
7+
$(OBJECTDIR)xbbt.o \
8+
$(OBJECTDIR)dspif.o \
9+
$(OBJECTDIR)xinit.o \
10+
$(OBJECTDIR)xscroll.o \
11+
$(OBJECTDIR)xcursor.o \
12+
$(OBJECTDIR)xlspwin.o \
13+
$(OBJECTDIR)xrdopt.o \
14+
$(OBJECTDIR)xwinman.o
15+
16+
17+
XFLAGS = -DXWINDOW
18+
19+
# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it
20+
OPTFLAGS = -O0 -g
21+
DEBUGFLAGS =
22+
DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT -D__wsl1__
23+
24+
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
25+
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
26+
27+
OBJECTDIR = ../$(RELEASENAME)/
28+
29+
default : ../$(OSARCHNAME)/ldeinit

bin/makefile-wsl1.aarch64-sdl

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Options for Windows System for Linux v1, ARM64 and SDL
2+
3+
CC = gcc $(GCC_CFLAGS)
4+
#CC = clang $(CLANG_CFLAGS)
5+
6+
XFILES = $(OBJECTDIR)sdl.o
7+
8+
#
9+
# For SDL version 2
10+
# -DSDL=2 in SDLFLAGS and -lSDL2 in LDFLAGS
11+
# For SDL version 3
12+
# -DSDL=3 in SDLFLAGS and -lSDL3 in LDFLAGS
13+
#
14+
SDLFLAGS = -DSDL=2
15+
16+
# OPTFLAGS is normally -O2.
17+
OPTFLAGS = -O2 -g3
18+
DFLAGS = $(SDLFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__
19+
20+
LDFLAGS = -lSDL2 -lm
21+
LDELDFLAGS =
22+
23+
OBJECTDIR = ../$(RELEASENAME)/
24+
25+
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl

bin/makefile-wsl1.aarch64-x

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Options for Windows System for Linux v1, aarch64 and X-Window
2+
3+
CC = gcc $(GCC_CFLAGS)
4+
#CC = clang $(CLANG_CFLAGS)
5+
6+
XFILES = $(OBJECTDIR)xmkicon.o \
7+
$(OBJECTDIR)xbbt.o \
8+
$(OBJECTDIR)dspif.o \
9+
$(OBJECTDIR)xinit.o \
10+
$(OBJECTDIR)xscroll.o \
11+
$(OBJECTDIR)xcursor.o \
12+
$(OBJECTDIR)xlspwin.o \
13+
$(OBJECTDIR)xrdopt.o \
14+
$(OBJECTDIR)xwinman.o
15+
16+
XFLAGS = -DXWINDOW
17+
18+
# OPTFLAGS is normally -O2.
19+
OPTFLAGS = -O2 -g3
20+
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__
21+
22+
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
23+
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
24+
25+
OBJECTDIR = ../$(RELEASENAME)/
26+
27+
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex

bin/makefile-wsl1.x86_64-sdl

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Options for Windows System for Linux v1, Intel x86_64 and SDL
2+
3+
CC = gcc -m64 $(GCC_CFLAGS)
4+
# CC = clang -m64 $(CLANG_CFLAGS)
5+
6+
XFILES = $(OBJECTDIR)sdl.o
7+
8+
#
9+
# For SDL version 2
10+
# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS
11+
# For SDL version 3
12+
# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS
13+
#
14+
XFLAGS = -DSDL=2
15+
16+
# OPTFLAGS is normally -O2.
17+
OPTFLAGS = -O2 -g3
18+
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__
19+
20+
LDFLAGS = -lm -lSDL2
21+
LDELDFLAGS =
22+
23+
OBJECTDIR = ../$(RELEASENAME)/
24+
25+
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl

bin/makefile-wsl1.x86_64-x

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Options for Windows System for Linux v1, Intel x86_64 and X-Window
2+
3+
CC = gcc -m64 $(GCC_CFLAGS)
4+
# CC = clang -m64 $(CLANG_CFLAGS)
5+
6+
XFILES = $(OBJECTDIR)xmkicon.o \
7+
$(OBJECTDIR)xbbt.o \
8+
$(OBJECTDIR)dspif.o \
9+
$(OBJECTDIR)xinit.o \
10+
$(OBJECTDIR)xscroll.o \
11+
$(OBJECTDIR)xcursor.o \
12+
$(OBJECTDIR)xlspwin.o \
13+
$(OBJECTDIR)xrdopt.o \
14+
$(OBJECTDIR)xwinman.o
15+
16+
17+
XFLAGS = -DXWINDOW
18+
19+
# OPTFLAGS is normally -O2.
20+
OPTFLAGS = -O2 -g3
21+
DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__
22+
23+
LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
24+
LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm
25+
26+
OBJECTDIR = ../$(RELEASENAME)/
27+
28+
default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex

bin/osversion

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ case "$os" in
88
*-*-solaris2*) echo sunos5 ;;
99
alpha-dec-osf1) echo osf1 ;;
1010
*-apple-darwin*) echo darwin ;;
11-
*-*-linux*) echo linux ;;
11+
*-*-linux*)
12+
if [ -n "${WSL_DISTRO_NAME}" ] && [ -z "${WSL_INTEROP}" ];
13+
then echo wsl1; else echo linux; fi ;;
1214
*-*-openbsd*) echo openbsd ;;
1315
*-*-freebsd*) echo freebsd ;;
1416
*-*-cygwin*) echo cygwin ;;
1517
*-*-haiku*) echo haiku ;;
18+
*-microsoft-wsl1) echo wsl1 ;;
1619
esac
1720
### Don't leave the variable set.
1821
unset os

inc/maiko/platform.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,23 @@
3838
# define MAIKO_OS_DETECTED 1
3939
#endif
4040

41-
#ifdef __linux__
41+
#if defined(__linux__) && !defined(__wsl1__)
4242
# define MAIKO_OS_LINUX 1
4343
# define MAIKO_OS_NAME "Linux"
4444
# define MAIKO_OS_UNIX_LIKE 1
4545
# define MAIKO_OS_DETECTED 1
4646
#endif
4747

48+
#if defined(__linux__) && defined(__wsl1__)
49+
# define MAIKO_OS_LINUX 1
50+
# define MAIKO_OS_WSL1 1
51+
# define MAIKO_OS_NAME "Windows System for Linux v1"
52+
# define MAIKO_OS_UNIX_LIKE 1
53+
# define MAIKO_EMULATE_TIMER_INTERRUPTS 1
54+
# define MAIKO_EMULATE_ASYNC_INTERRUPTS 1
55+
# define MAIKO_OS_DETECTED 1
56+
#endif
57+
4858
#ifdef __NetBSD__
4959
# define MAIKO_OS_NETBSD 1
5060
# define MAIKO_OS_NAME "NetBSD"

0 commit comments

Comments
 (0)