support Windows build on Bash/WSL
original commit: 7e4782db08210cbacd1bbe46b3a5e166d8dbe20f
This commit is contained in:
parent
15343364a9
commit
2d63f03442
13
BUILDING
13
BUILDING
|
@ -167,15 +167,18 @@ The make file supports several targets:
|
|||
|
||||
WINDOWS
|
||||
|
||||
Building Chez Scheme under Windows with Cygwin follows the
|
||||
instructions above except that make install is not supported:
|
||||
Building Chez Scheme under Windows with Cygwin or Bash/WSL follows the
|
||||
instructions above, except that 'make install' is not supported, and
|
||||
the 'OS' environment variable must be set to 'Windows_NT' on Bash/WSL
|
||||
(to indicate a build for Windows, as opposed to a build for Linux on
|
||||
Windows):
|
||||
|
||||
./configure
|
||||
make
|
||||
env OS=Windows_NT ./configure
|
||||
env OS=Windows_NT make
|
||||
|
||||
Prerequisites:
|
||||
|
||||
* Cygwin with bash, grep, make, sed, etc.
|
||||
* Cygwin or Bash/WSL with bash, grep, make, sed, etc.
|
||||
* Microsoft Visual Studio 2015
|
||||
* WiX Toolset (for making an install)
|
||||
|
||||
|
|
3
LOG
3
LOG
|
@ -450,3 +450,6 @@
|
|||
Also add a simplification for for-each with empty lists
|
||||
with optimization level 2.
|
||||
cp0.ss, 4.ms, primdata.ss
|
||||
- support Windows build on Bash/WSL
|
||||
BUILDING, configure, workarea, c/vs.bat (new), mats/vs.bat (new),
|
||||
c/Mf-*nt, mats/Mf-*, s/Mf-base
|
||||
|
|
20
c/Mf-a6nt
20
c/Mf-a6nt
|
@ -25,27 +25,11 @@ mdclean=vs.bat make.bat scheme.res ../bin/$m/*.exp mtscheme.exe* mdscheme.exe*
|
|||
include Mf-base
|
||||
|
||||
${Scheme}: make.bat
|
||||
./make.bat
|
||||
cmd.exe /c make.bat
|
||||
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
||||
|
||||
vs.bat:
|
||||
echo '@echo off' > $@
|
||||
echo 'if "%VS140COMNTOOLS%" neq "" goto :VS' >> $@
|
||||
echo 'echo Visual Studio 2015 must be installed.' >> $@
|
||||
echo 'exit 1' >> $@
|
||||
echo ':VS' >> $@
|
||||
echo 'set INCLUDE=' >> $@
|
||||
echo 'set LIB=' >> $@
|
||||
echo 'set LIBPATH=' >> $@
|
||||
echo 'set MACHINETYPE=amd64' >> $@
|
||||
echo 'if exist "%VS140COMNTOOLS%..\..\VC\bin\x86_amd64\vcvarsx86_amd64.bat" set MACHINETYPE=x86_amd64' >> $@
|
||||
echo 'if exist "%VS140COMNTOOLS%..\..\VC\bin\amd64\vcvars64.bat" set MACHINETYPE=amd64' >> $@
|
||||
echo 'call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" %MACHINETYPE%' >> $@
|
||||
echo '%*' >> $@
|
||||
chmod +x $@
|
||||
|
||||
make.bat: vs.bat
|
||||
echo '@echo off' > $@
|
||||
echo 'set MAKEFLAGS=' >> $@
|
||||
echo 'call vs.bat nmake /f Makefile.$m /nologo %*' >> $@
|
||||
echo 'vs.bat x86_amd64 amd64 && nmake /f Makefile.$m /nologo %*' >> $@
|
||||
chmod +x $@
|
||||
|
|
17
c/Mf-i3nt
17
c/Mf-i3nt
|
@ -25,24 +25,11 @@ mdclean=vs.bat make.bat scheme.res ../bin/$m/*.exp mtscheme.exe* mdscheme.exe*
|
|||
include Mf-base
|
||||
|
||||
${Scheme}: make.bat
|
||||
./make.bat
|
||||
cmd.exe /c make.bat
|
||||
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
||||
|
||||
vs.bat:
|
||||
echo '@echo off' > $@
|
||||
echo 'if "%VS140COMNTOOLS%" neq "" goto :VS' >> $@
|
||||
echo 'echo Visual Studio 2015 must be installed.' >> $@
|
||||
echo 'exit 1' >> $@
|
||||
echo ':VS' >> $@
|
||||
echo 'set INCLUDE=' >> $@
|
||||
echo 'set LIB=' >> $@
|
||||
echo 'set LIBPATH=' >> $@
|
||||
echo 'call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86' >> $@
|
||||
echo '%*' >> $@
|
||||
chmod +x $@
|
||||
|
||||
make.bat: vs.bat
|
||||
echo '@echo off' > $@
|
||||
echo 'set MAKEFLAGS=' >> $@
|
||||
echo 'call vs.bat nmake /f Makefile.$m /nologo %*' >> $@
|
||||
echo 'vs.bat x86 && nmake /f Makefile.$m /nologo %*' >> $@
|
||||
chmod +x $@
|
||||
|
|
20
c/Mf-ta6nt
20
c/Mf-ta6nt
|
@ -25,27 +25,11 @@ mdclean=vs.bat make.bat scheme.res ../bin/$m/*.exp mtscheme.exe* mdscheme.exe*
|
|||
include Mf-base
|
||||
|
||||
${Scheme}: make.bat
|
||||
./make.bat
|
||||
cmd.exe /c make.bat
|
||||
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
||||
|
||||
vs.bat:
|
||||
echo '@echo off' > $@
|
||||
echo 'if "%VS140COMNTOOLS%" neq "" goto :VS' >> $@
|
||||
echo 'echo Visual Studio 2015 must be installed.' >> $@
|
||||
echo 'exit 1' >> $@
|
||||
echo ':VS' >> $@
|
||||
echo 'set INCLUDE=' >> $@
|
||||
echo 'set LIB=' >> $@
|
||||
echo 'set LIBPATH=' >> $@
|
||||
echo 'set MACHINETYPE=amd64' >> $@
|
||||
echo 'if exist "%VS140COMNTOOLS%..\..\VC\bin\x86_amd64\vcvarsx86_amd64.bat" set MACHINETYPE=x86_amd64' >> $@
|
||||
echo 'if exist "%VS140COMNTOOLS%..\..\VC\bin\amd64\vcvars64.bat" set MACHINETYPE=amd64' >> $@
|
||||
echo 'call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" %MACHINETYPE%' >> $@
|
||||
echo '%*' >> $@
|
||||
chmod +x $@
|
||||
|
||||
make.bat: vs.bat
|
||||
echo '@echo off' > $@
|
||||
echo 'set MAKEFLAGS=' >> $@
|
||||
echo 'call vs.bat nmake /f Makefile.$m /nologo %*' >> $@
|
||||
echo 'vs.bat x86_amd64 amd64 && nmake /f Makefile.$m /nologo %*' >> $@
|
||||
chmod +x $@
|
||||
|
|
17
c/Mf-ti3nt
17
c/Mf-ti3nt
|
@ -25,24 +25,11 @@ mdclean=vs.bat make.bat scheme.res ../bin/$m/*.exp mtscheme.exe* mdscheme.exe*
|
|||
include Mf-base
|
||||
|
||||
${Scheme}: make.bat
|
||||
./make.bat
|
||||
cmd.exe /c make.bat
|
||||
cp ../bin/$m/scheme.exe ../bin/$m/petite.exe
|
||||
|
||||
vs.bat:
|
||||
echo '@echo off' > $@
|
||||
echo 'if "%VS140COMNTOOLS%" neq "" goto :VS' >> $@
|
||||
echo 'echo Visual Studio 2015 must be installed.' >> $@
|
||||
echo 'exit 1' >> $@
|
||||
echo ':VS' >> $@
|
||||
echo 'set INCLUDE=' >> $@
|
||||
echo 'set LIB=' >> $@
|
||||
echo 'set LIBPATH=' >> $@
|
||||
echo 'call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x86' >> $@
|
||||
echo '%*' >> $@
|
||||
chmod +x $@
|
||||
|
||||
make.bat: vs.bat
|
||||
echo '@echo off' > $@
|
||||
echo 'set MAKEFLAGS=' >> $@
|
||||
echo 'call vs.bat nmake /f Makefile.$m /nologo %*' >> $@
|
||||
echo 'vs.bat x86 && nmake /f Makefile.$m /nologo %*' >> $@
|
||||
chmod +x $@
|
||||
|
|
39
c/vs.bat
Normal file
39
c/vs.bat
Normal file
|
@ -0,0 +1,39 @@
|
|||
@echo off
|
||||
|
||||
:: Set up Visual Studio command line environment variables given a
|
||||
:: sequence of machine types to try ("x86", "x86_amd64", and "amd64").
|
||||
|
||||
:: Note: VS 11.0 (2012) and earlier won't work, because they
|
||||
:: don't support C99 mid-block declarations. Also, there's no
|
||||
:: such thing as VS 13.0.
|
||||
|
||||
:: Clear environment variables that we might otherwise inherit
|
||||
set INCLUDE=
|
||||
set LIB=
|
||||
set LIBPATH=
|
||||
|
||||
:: Find visual studio
|
||||
set VCDIR=%VS140COMNTOOLS%\..\..\vc
|
||||
if not exist "%VCDIR%\vcvarsall.bat" set VCDIR=%VS120COMNTOOLS%\..\..\vc
|
||||
|
||||
:: Loop to find a requested machine type
|
||||
if exist "%VCDIR%\vcvarsall.bat" goto :VCDIR
|
||||
echo Could not find Visual Studio installed.
|
||||
exit 1
|
||||
|
||||
:VCDIR
|
||||
|
||||
set MACHINETYPE=%1
|
||||
if "%MACHINETYPE%" neq "" goto :MACHINE
|
||||
echo Could not find working machine type.
|
||||
exit 1
|
||||
|
||||
:MACHINE
|
||||
if "%MACHINETYPE%" == "x86" goto :VS
|
||||
if exist "%VCDIR%\bin\%MACHINETYPE%\vcvars%MACHINETYPE%.bat" goto :VS
|
||||
shift
|
||||
goto :VCDIR
|
||||
|
||||
:: Set environment variables
|
||||
:VS
|
||||
"%VCDIR%\vcvarsall.bat" %MACHINETYPE%
|
10
configure
vendored
10
configure
vendored
|
@ -41,7 +41,15 @@ installscriptname="scheme-script"
|
|||
: ${CFLAGS:=""}
|
||||
: ${LDFLAGS:=""}
|
||||
|
||||
case `uname` in
|
||||
# On WSL, set OS to "Windows_NT" to create a Windows
|
||||
# build instead of a Linux (on Windows) build:
|
||||
if [ "$OS" = "Windows_NT" ] ; then
|
||||
CONFIG_UNAME="CYGWIN_NT-"
|
||||
else
|
||||
CONFIG_UNAME=`uname`
|
||||
fi
|
||||
|
||||
case "${CONFIG_UNAME}" in
|
||||
Linux)
|
||||
if uname -a | egrep 'i386|i686|amd64|athlon|x86_64' > /dev/null 2>&1 ; then
|
||||
m32=i3le
|
||||
|
|
|
@ -22,7 +22,7 @@ mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj for
|
|||
include Mf-base
|
||||
|
||||
foreign1.so: $(fsrc)
|
||||
../c/vs.bat cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)
|
||||
cmd.exe /c "vs.bat x86_amd64 amd64 && cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)"
|
||||
|
||||
cat_flush: cat_flush.c
|
||||
../c/vs.bat cl /DWIN32 /DX86_64 /MD /nologo $<
|
||||
cmd.exe /c "vs.bat x86_amd64 amd64 && cl /DWIN32 /DX86_64 /MD /nologo $<"
|
||||
|
|
10
mats/Mf-base
10
mats/Mf-base
|
@ -39,9 +39,17 @@ ifeq (${OS},Windows_NT)
|
|||
else
|
||||
dirsep = :
|
||||
endif
|
||||
|
||||
# Explicit ".exe" needed for WSL
|
||||
ifeq ($(OS),Windows_NT)
|
||||
ExeSuffix = .exe
|
||||
else
|
||||
ExeSuffix =
|
||||
endif
|
||||
|
||||
# Scheme is the scheme executable to test, and SCHEMEHEAPDIRS tells
|
||||
# it where to find its boot files
|
||||
Scheme = ../bin/$m/scheme
|
||||
Scheme = ../bin/$m/scheme${ExeSuffix}
|
||||
export SCHEMEHEAPDIRS=.${dirsep}../boot/%m
|
||||
|
||||
# Include is the directory holding scheme.h.
|
||||
|
|
|
@ -22,7 +22,7 @@ mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj for
|
|||
include Mf-base
|
||||
|
||||
foreign1.so: $(fsrc)
|
||||
../c/vs.bat cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)
|
||||
cmd.exe /c "vs.bat x86 && cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)"
|
||||
|
||||
cat_flush: cat_flush.c
|
||||
../c/vs.bat cl /DWIN32 /MD /nologo $<
|
||||
cmd.exe /c "vs.bat x86 && cl /DWIN32 /MD /nologo $<"
|
||||
|
|
|
@ -22,7 +22,7 @@ mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj for
|
|||
include Mf-base
|
||||
|
||||
foreign1.so: $(fsrc)
|
||||
../c/vs.bat cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)
|
||||
cmd.exe /c "vs.bat x86_amd64 amd64 && cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)"
|
||||
|
||||
cat_flush: cat_flush.c
|
||||
../c/vs.bat cl /DWIN32 /DX86_64 /MD /nologo $<
|
||||
cmd.exe /c "vs.bat x86_amd64 amd64 && cl /DWIN32 /DX86_64 /MD /nologo $<"
|
||||
|
|
|
@ -22,7 +22,7 @@ mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj for
|
|||
include Mf-base
|
||||
|
||||
foreign1.so: $(fsrc)
|
||||
../c/vs.bat cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)
|
||||
cmd.exe /c "vs.bat x86 && cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv941.lib $(fsrc)"
|
||||
|
||||
cat_flush: cat_flush.c
|
||||
../c/vs.bat cl /DWIN32 /MD /nologo $<
|
||||
cmd.exe /c "vs.bat x86 && cl /DWIN32 /MD /nologo $<"
|
||||
|
|
3
mats/vs.bat
Normal file
3
mats/vs.bat
Normal file
|
@ -0,0 +1,3 @@
|
|||
:: Redirect to "..\c\vs.bat" without having to use
|
||||
:: backslashes in the makefile
|
||||
..\c\vs.bat %*
|
11
s/Mf-base
11
s/Mf-base
|
@ -67,10 +67,17 @@ gic = f
|
|||
# pps determines whether pass timings are printed
|
||||
pps = f
|
||||
|
||||
# Explicit ".exe" needed for WSL
|
||||
ifeq ($(OS),Windows_NT)
|
||||
ExeSuffix = .exe
|
||||
else
|
||||
ExeSuffix =
|
||||
endif
|
||||
|
||||
# The following control where files sit and typically don't need to be changed, except
|
||||
# that Scheme and SCHEMEHEAPDIRS are set by Mf-cross to point to the host Scheme
|
||||
# implementation
|
||||
Scheme = ../bin/$m/scheme
|
||||
Scheme = ../bin/$m/scheme${ExeSuffix}
|
||||
export SCHEMEHEAPDIRS=../boot/%m
|
||||
|
||||
# Define the libdirs separator character
|
||||
|
@ -278,7 +285,7 @@ checkboot:
|
|||
'(#%$$fasl-file-equal? "../boot/$m/sbb" "../boot/$m/petite.boot" #t)'\
|
||||
'(#%$$fasl-file-equal? "../boot/$m/scb" "../boot/$m/scheme.boot" #t)'\
|
||||
'(printf "bootfile comparison succeeded\n"))'\
|
||||
| ../bin/$m/scheme -b ../boot/$m/sbb -q
|
||||
| ../bin/$m/scheme${ExeSuffix} -b ../boot/$m/sbb -q
|
||||
|
||||
xcheckboot: ${macroobj} ${patchfile}
|
||||
@echo '(reset-handler abort)'\
|
||||
|
|
11
workarea
11
workarea
|
@ -133,6 +133,12 @@ fi
|
|||
if [ ! -e $W/c/Mf-config ] ; then
|
||||
touch $W/c/Mf-config
|
||||
fi
|
||||
case $M in
|
||||
*nt)
|
||||
(cd $W/c; workln ../../c/vs.bat vs.bat)
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
workdir $W/s
|
||||
(cd $W/s; workln ../../s/Mf-$M Mf-$M)
|
||||
|
@ -147,6 +153,11 @@ workdir $W/mats
|
|||
(cd $W/mats; forceworkln Mf-$M Makefile)
|
||||
(cd $W/mats; workln ../../mats/Mf-base Mf-base)
|
||||
(cd $W/mats; workln ../../mats/Mf-exobj Mf-exobj)
|
||||
case $M in
|
||||
*nt)
|
||||
(cd $W/mats; workln ../../mats/vs.bat vs.bat)
|
||||
;;
|
||||
esac
|
||||
|
||||
for dir in `echo examples unicode` ; do
|
||||
workdir $W/$dir
|
||||
|
|
Loading…
Reference in New Issue
Block a user