summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild_w32.bat51
-rw-r--r--src/config.h.W32.template16
2 files changed, 59 insertions, 8 deletions
diff --git a/build_w32.bat b/build_w32.bat
index 553e9d9c..da770223 100755
--- a/build_w32.bat
+++ b/build_w32.bat
@@ -37,6 +37,7 @@ set COMPILER=cl.exe
set O=obj
set ARCH=x64
set DEBUG=N
+set DIRENT=Y
if exist maintMakefile (
set MAINT=Y
@@ -49,6 +50,7 @@ if "%1" == "--debug" goto SetDebug
if "%1" == "--without-guile" goto NoGuile
if "%1" == "--x86" goto Set32Bit
if "%1" == "gcc" goto SetCC
+if "%1" == "tcc" goto SetTCC
if "%1" == "" goto DoneSW
goto Usage
@@ -77,10 +79,18 @@ echo - Building with GCC
shift
goto ParseSW
+:SetTCC
+set COMPILER=tcc
+set O=o
+echo - Building with TinyC
+shift
+goto ParseSW
+
:DoneSW
if "%MAINT%" == "Y" echo - Enabling maintainer mode
if "%COMPILER%" == "gcc" goto FindGcc
+if "%COMPILER%" == "tcc" goto FindTcc
:: Find a compiler. Visual Studio requires a lot of effort to locate :-/.
%COMPILER% >nul 2>&1
@@ -172,6 +182,7 @@ goto Build
set OUTDIR=.\GccRel
set LNKOUT=./GccRel
set OPTS=-O2
+set DIRENT=N
if "%DEBUG%" == "Y" set OPTS=-O0
if "%DEBUG%" == "Y" set OUTDIR=.\GccDebug
if "%DEBUG%" == "Y" set LNKOUT=./GccDebug
@@ -183,6 +194,21 @@ if not ERRORLEVEL 1 goto Build
echo No %COMPILER% found.
exit 1
+:FindTcc
+set OUTDIR=.\TccRel
+set LNKOUT=./TccRel
+set OPTS=-O2
+if "%DEBUG%" == "Y" set OPTS=-O0
+if "%DEBUG%" == "Y" set OUTDIR=.\TccDebug
+if "%DEBUG%" == "Y" set LNKOUT=./TccDebug
+if "%MAINT%" == "Y" set "OPTS=%OPTS% -DMAKE_MAINTAINER_MODE"
+:: Show the compiler version that we found
+echo.
+%COMPILER% -v
+if not ERRORLEVEL 1 goto Build
+echo No %COMPILER% found.
+exit 1
+
:Build
:: Clean the directory if it exists
if exist %OUTDIR%\nul rmdir /S /Q %OUTDIR%
@@ -246,7 +272,8 @@ call :Compile lib/fnmatch
call :Compile lib/glob
call :Compile lib/getloadavg
-if not "%COMPILER%" == "gcc" call :Compile src\w32\compat\dirent
+:: Compile dirent unless it is supported by compiler library (like with gcc).
+if "%DIRENT%" == "Y" call :Compile src\w32\compat\dirent
call :Link
@@ -272,6 +299,7 @@ set EXTRAS=
if "%2" == "GUILE" set "EXTRAS=%GUILECFLAGS%"
if exist "%OUTDIR%\%1.%O%" del "%OUTDIR%\%1.%O%"
if "%COMPILER%" == "gcc" goto GccCompile
+if "%COMPILER%" == "tcc" goto TccCompile
:: MSVC Compile
echo on
@@ -284,6 +312,14 @@ goto CompileDone
echo on
%COMPILER% -mthreads -Wall -std=gnu99 -gdwarf-2 -g3 %OPTS% -I%OUTDIR%/src -I./src -I%OUTDIR%/lib -I./lib -I./src/w32/include -DWINDOWS32 -DHAVE_CONFIG_H %EXTRAS% -o %OUTDIR%/%1.%O% -c %1.c
@echo off
+goto CompileDone
+
+:TccCompile
+:: TCC Compile
+echo on
+%COMPILER% -mthreads -Wall -std=c11 %OPTS% -I%OUTDIR%/src -I./src -I%OUTDIR%/lib -I./lib -I./src/w32/include -D_cdecl= -D_MSC_VER -DWINDOWS32 -DHAVE_CONFIG_H %EXTRAS% -o %OUTDIR%/%1.%O% -c %1.c
+@echo off
+goto CompileDone
:CompileDone
if not exist "%OUTDIR%\%1.%O%" exit 1
@@ -293,6 +329,7 @@ goto :EOF
echo.
echo Linking %LNKOUT%/%MAKE%.exe
if "%COMPILER%" == "gcc" goto GccLink
+if "%COMPILER%" == "tcc" goto TccLink
:: MSVC Link
echo %GUILELIBS% kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib >>%OUTDIR%\link.sc
@@ -309,6 +346,14 @@ echo %GUILELIBS% -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -l
@echo off
goto :EOF
+:TccLink
+:: TCC Link
+echo on
+echo %GUILELIBS% -lkernel32 -luser32 -lgdi32 -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lodbc32 -lodbccp32 >>%OUTDIR%\link.sc
+%COMPILER% -mthreads %OPTS% -o %LNKOUT%/%MAKE%.exe @%LNKOUT%/link.sc
+@echo off
+goto :EOF
+
:ConfigSCM
echo Generating config from SCM templates
sed -n "s/^AC_INIT(\[GNU make\],\[\([^]]\+\)\].*/s,%%VERSION%%,\1,g/p" configure.ac > %OUTDIR%\src\config.h.W32.sed
@@ -375,12 +420,14 @@ if ERRORLEVEL 1 exit /b 1
goto :EOF
:Usage
-echo Usage: %0 [options] [gcc]
+echo Usage: %0 [options] [gcc] OR [tcc]
echo Options:
echo. --without-guile Do not compile Guile support even if found
echo. --debug Make a Debug build--default is Release
echo. --x86 Make a 32bit binary--default is 64bit
echo. --help Display these instructions and exit
+echo.
+echo. "gcc" means compile with GCC, "tcc" means compile with Tiny C's TCC
goto :EOF
:Reset
diff --git a/src/config.h.W32.template b/src/config.h.W32.template
index 9a9ccfe4..347f4201 100644
--- a/src/config.h.W32.template
+++ b/src/config.h.W32.template
@@ -102,7 +102,7 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if you have the <direct.h> header file, and it defines getcwd()
and chdir().
*/
-#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(__INTERIX)
+#if (defined(_MSC_VER) || defined(__BORLANDC__) || defined(__TINYC__)) && !defined(__INTERIX)
# define HAVE_DIRECT_H 1
#endif
@@ -247,7 +247,7 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the 'strcasecmp' function. */
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(__TINYC__)
#define HAVE_STRCASECMP 1
#endif
@@ -273,7 +273,7 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the 'strncasecmp' function. */
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(__TINYC__)
#define HAVE_STRNCASECMP 1
#endif
@@ -305,7 +305,7 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
char *ttyname (int);
/* Define to 1 if you have the `umask' function. */
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(__TINYC__)
# define HAVE_UMASK 1
#endif
@@ -525,10 +525,14 @@ char *ttyname (int);
/*
* If you have a shell that does not grok 'sh -c quoted-command-line'
- * correctly, you need this setting. Please see below for specific
- * shell support.
+ * correctly, you need this setting; it is the default for tcc.
+ * Please see below for specific shell support.
*/
+#if defined(__TINYC__)
+#define BATCH_MODE_ONLY_SHELL 1
+#else
/*#define BATCH_MODE_ONLY_SHELL 1 */
+#endif
/*
* Define if you have the Cygnus "Cygwin" GNU Windows32 tool set.