diff --git a/.github/workflows/Dockerfile_maiko b/.github/workflows/Dockerfile_maiko index 5f9cd45b..3b3e66d6 100755 --- a/.github/workflows/Dockerfile_maiko +++ b/.github/workflows/Dockerfile_maiko @@ -18,8 +18,22 @@ COPY . ${INSTALL_LOCATION} # Build maiko RUN cd ${INSTALL_LOCATION}/bin \ && ./makeright x cleanup \ - && ./makeright x -RUN cd ${INSTALL_LOCATION}/bin \ + && ./makeright x \ && if [ "$(./machinetype)" = "x86_64" ]; then \ ./makeright init; \ fi +# Build specially for WSL1 by "fooling" a linux build +RUN cd ${INSTALL_LOCATION}/bin \ + && arch="$(./machinetype)" \ + && if [ "$arch" = "x86_64" ] || [ "$arch" = "aarch64" ]; then \ + mv osversion osversion.hold \ + && echo "#!/bin/sh" > osversion \ + && echo "echo wsl1" >> osversion \ + && chmod ugo+x osversion \ + && ./makeright x cleanup \ + && ./makeright x \ + && ./makeright init \ + && mv osversion.hold osversion \ + && chmod ugo+x osversion \ + ; \ + fi diff --git a/.github/workflows/buildRelease.yml b/.github/workflows/buildRelease.yml index becc4d8c..ce998282 100644 --- a/.github/workflows/buildRelease.yml +++ b/.github/workflows/buildRelease.yml @@ -224,7 +224,13 @@ jobs: RELEASE_TAG: ${{ steps.tag.outputs.release_tag }} run: | mkdir -p /tmp/release_tars - for OSARCH in "linux.x86_64:linux_amd64" "linux.aarch64:linux_arm64" "linux.armv7l:linux_arm_v7" ; \ + for OSARCH in \ + "linux.x86_64:linux_amd64" \ + "linux.aarch64:linux_arm64" \ + "linux.armv7l:linux_arm_v7" \ + "wsl1.x86_64:linux_amd64" \ + "wsl1.aarch64:linux_arm64" \ + ; \ do \ pushd /tmp/docker_images/${OSARCH##*:}/usr/local/interlisp >/dev/null ; \ /usr/bin/tar -c -z \ @@ -246,6 +252,8 @@ jobs: artifacts: /tmp/release_tars/${{ steps.tag.outputs.release_tag }}-linux.x86_64.tgz, /tmp/release_tars/${{ steps.tag.outputs.release_tag }}-linux.aarch64.tgz, + /tmp/release_tars/${{ steps.tag.outputs.release_tag }}-wsl1.x86_64.tgz, + /tmp/release_tars/${{ steps.tag.outputs.release_tag }}-wsl1.aarch64.tgz, /tmp/release_tars/${{ steps.tag.outputs.release_tag }}-linux.armv7l.tgz tag: ${{ steps.tag.outputs.release_tag }} draft: ${{ needs.inputs.outputs.draft }} diff --git a/bin/makefile-init-wsl1.aarch64 b/bin/makefile-init-wsl1.aarch64 new file mode 100644 index 00000000..5362d82f --- /dev/null +++ b/bin/makefile-init-wsl1.aarch64 @@ -0,0 +1,29 @@ +# Options for Windows System for Linux v1, aarch64 processor, X windows, for INIT processing + +CC = gcc $(GCC_CFLAGS) +#CC = clang $(CLANG_CFLAGS) + +XFILES = $(OBJECTDIR)xmkicon.o \ + $(OBJECTDIR)xbbt.o \ + $(OBJECTDIR)dspif.o \ + $(OBJECTDIR)xinit.o \ + $(OBJECTDIR)xscroll.o \ + $(OBJECTDIR)xcursor.o \ + $(OBJECTDIR)xlspwin.o \ + $(OBJECTDIR)xrdopt.o \ + $(OBJECTDIR)xwinman.o + + +XFLAGS = -DXWINDOW + +# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it +OPTFLAGS = -O0 -g +DEBUGFLAGS = +DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT -D__wsl1__ + +LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm +LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm + +OBJECTDIR = ../$(RELEASENAME)/ + +default : ../$(OSARCHNAME)/ldeinit diff --git a/bin/makefile-init-wsl1.x86_64 b/bin/makefile-init-wsl1.x86_64 new file mode 100644 index 00000000..182631f8 --- /dev/null +++ b/bin/makefile-init-wsl1.x86_64 @@ -0,0 +1,29 @@ +# Options for Windows System for Linux v1, Intel x86_64 processor, X windows, for INIT processing + +CC = gcc $(GCC_CFLAGS) +#CC = clang $(CLANG_CFLAGS) + +XFILES = $(OBJECTDIR)xmkicon.o \ + $(OBJECTDIR)xbbt.o \ + $(OBJECTDIR)dspif.o \ + $(OBJECTDIR)xinit.o \ + $(OBJECTDIR)xscroll.o \ + $(OBJECTDIR)xcursor.o \ + $(OBJECTDIR)xlspwin.o \ + $(OBJECTDIR)xrdopt.o \ + $(OBJECTDIR)xwinman.o + + +XFLAGS = -DXWINDOW + +# OPTFLAGS is normally -O2, for INIT we want unoptimized in case we need to debug it +OPTFLAGS = -O0 -g +DEBUGFLAGS = +DFLAGS = $(DEBUGFLAGS) $(XFLAGS) -DRELEASE=$(RELEASE) -DNOVERSION -DINIT -D__wsl1__ + +LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm +LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm + +OBJECTDIR = ../$(RELEASENAME)/ + +default : ../$(OSARCHNAME)/ldeinit diff --git a/bin/makefile-wsl1.aarch64-sdl b/bin/makefile-wsl1.aarch64-sdl new file mode 100644 index 00000000..f3ce3cac --- /dev/null +++ b/bin/makefile-wsl1.aarch64-sdl @@ -0,0 +1,25 @@ +# Options for Windows System for Linux v1, ARM64 and SDL + +CC = gcc $(GCC_CFLAGS) +#CC = clang $(CLANG_CFLAGS) + +XFILES = $(OBJECTDIR)sdl.o + +# +# For SDL version 2 +# -DSDL=2 in SDLFLAGS and -lSDL2 in LDFLAGS +# For SDL version 3 +# -DSDL=3 in SDLFLAGS and -lSDL3 in LDFLAGS +# +SDLFLAGS = -DSDL=2 + +# OPTFLAGS is normally -O2. +OPTFLAGS = -O2 -g3 +DFLAGS = $(SDLFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__ + +LDFLAGS = -lSDL2 -lm +LDELDFLAGS = + +OBJECTDIR = ../$(RELEASENAME)/ + +default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl diff --git a/bin/makefile-wsl1.aarch64-x b/bin/makefile-wsl1.aarch64-x new file mode 100644 index 00000000..15964b5e --- /dev/null +++ b/bin/makefile-wsl1.aarch64-x @@ -0,0 +1,27 @@ +# Options for Windows System for Linux v1, aarch64 and X-Window + +CC = gcc $(GCC_CFLAGS) +#CC = clang $(CLANG_CFLAGS) + +XFILES = $(OBJECTDIR)xmkicon.o \ + $(OBJECTDIR)xbbt.o \ + $(OBJECTDIR)dspif.o \ + $(OBJECTDIR)xinit.o \ + $(OBJECTDIR)xscroll.o \ + $(OBJECTDIR)xcursor.o \ + $(OBJECTDIR)xlspwin.o \ + $(OBJECTDIR)xrdopt.o \ + $(OBJECTDIR)xwinman.o + +XFLAGS = -DXWINDOW + +# OPTFLAGS is normally -O2. +OPTFLAGS = -O2 -g3 +DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__ + +LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm +LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm + +OBJECTDIR = ../$(RELEASENAME)/ + +default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex diff --git a/bin/makefile-wsl1.x86_64-sdl b/bin/makefile-wsl1.x86_64-sdl new file mode 100644 index 00000000..ec16b95b --- /dev/null +++ b/bin/makefile-wsl1.x86_64-sdl @@ -0,0 +1,25 @@ +# Options for Windows System for Linux v1, Intel x86_64 and SDL + +CC = gcc -m64 $(GCC_CFLAGS) +# CC = clang -m64 $(CLANG_CFLAGS) + +XFILES = $(OBJECTDIR)sdl.o + +# +# For SDL version 2 +# -DSDL=2 in XFLAGS and -lSDL2 in LDFLAGS +# For SDL version 3 +# -DSDL=3 in XFLAGS and -lSDL3 in LDFLAGS +# +XFLAGS = -DSDL=2 + +# OPTFLAGS is normally -O2. +OPTFLAGS = -O2 -g3 +DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__ + +LDFLAGS = -lm -lSDL2 +LDELDFLAGS = + +OBJECTDIR = ../$(RELEASENAME)/ + +default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldesdl diff --git a/bin/makefile-wsl1.x86_64-x b/bin/makefile-wsl1.x86_64-x new file mode 100644 index 00000000..fe1b6c0e --- /dev/null +++ b/bin/makefile-wsl1.x86_64-x @@ -0,0 +1,28 @@ +# Options for Windows System for Linux v1, Intel x86_64 and X-Window + +CC = gcc -m64 $(GCC_CFLAGS) +# CC = clang -m64 $(CLANG_CFLAGS) + +XFILES = $(OBJECTDIR)xmkicon.o \ + $(OBJECTDIR)xbbt.o \ + $(OBJECTDIR)dspif.o \ + $(OBJECTDIR)xinit.o \ + $(OBJECTDIR)xscroll.o \ + $(OBJECTDIR)xcursor.o \ + $(OBJECTDIR)xlspwin.o \ + $(OBJECTDIR)xrdopt.o \ + $(OBJECTDIR)xwinman.o + + +XFLAGS = -DXWINDOW + +# OPTFLAGS is normally -O2. +OPTFLAGS = -O2 -g3 +DFLAGS = $(XFLAGS) -DRELEASE=$(RELEASE) -D__wsl1__ + +LDFLAGS = -L/usr/X11/lib -lX11 -lc -lm +LDELDFLAGS = -L/usr/X11/lib -lX11 -lc -lm + +OBJECTDIR = ../$(RELEASENAME)/ + +default : ../$(OSARCHNAME)/lde ../$(OSARCHNAME)/ldex diff --git a/bin/osversion b/bin/osversion index 80bf6bdd..b51d9199 100755 --- a/bin/osversion +++ b/bin/osversion @@ -8,7 +8,9 @@ case "$os" in *-*-solaris2*) echo sunos5 ;; alpha-dec-osf1) echo osf1 ;; *-apple-darwin*) echo darwin ;; - *-*-linux*) echo linux ;; + *-*-linux*) + if [ -n "${WSL_DISTRO_NAME}" ] && [ -z "${WSL_INTEROP}" ]; + then echo wsl1; else echo linux; fi ;; *-*-openbsd*) echo openbsd ;; *-*-freebsd*) echo freebsd ;; *-*-cygwin*) echo cygwin ;; diff --git a/inc/maiko/platform.h b/inc/maiko/platform.h index 725db07a..8769731d 100644 --- a/inc/maiko/platform.h +++ b/inc/maiko/platform.h @@ -38,13 +38,23 @@ # define MAIKO_OS_DETECTED 1 #endif -#ifdef __linux__ +#if defined(__linux__) && !defined(__wsl1__) # define MAIKO_OS_LINUX 1 # define MAIKO_OS_NAME "Linux" # define MAIKO_OS_UNIX_LIKE 1 # define MAIKO_OS_DETECTED 1 #endif +#if defined(__linux__) && defined(__wsl1__) +# define MAIKO_OS_LINUX 1 +# define MAIKO_OS_WSL1 1 +# define MAIKO_OS_NAME "Windows System for Linux v1" +# define MAIKO_OS_UNIX_LIKE 1 +# define MAIKO_EMULATE_TIMER_INTERRUPTS 1 +# define MAIKO_EMULATE_ASYNC_INTERRUPTS 1 +# define MAIKO_OS_DETECTED 1 +#endif + #ifdef __NetBSD__ # define MAIKO_OS_NETBSD 1 # define MAIKO_OS_NAME "NetBSD"