aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile114
-rw-r--r--[-rwxr-xr-x]configure34
-rw-r--r--lib/Makefile18
-rw-r--r--libtcc.c27
-rw-r--r--tccasm.c4
-rw-r--r--tccgen.c9
-rw-r--r--tccpe.c6
-rw-r--r--tccpp.c32
-rw-r--r--tcctools.c6
-rw-r--r--tests/Makefile31
-rw-r--r--tests/tests2/Makefile33
-rw-r--r--win32/build-tcc.bat2
-rw-r--r--win32/include/_mingw.h1
13 files changed, 158 insertions, 159 deletions
diff --git a/Makefile b/Makefile
index b8e749c..28193a5 100644
--- a/Makefile
+++ b/Makefile
@@ -4,8 +4,8 @@
#
ifndef TOP
-TOP = .
-INCLUDED = no
+ TOP = .
+ INCLUDED = no
endif
include $(TOP)/config.mak
@@ -31,26 +31,11 @@ VPATH = $(TOPSRC)
ifdef CONFIG_WIN32
ifneq ($(DISABLE_STATIC),no)
- LIBTCC = libtcc.dll
+ LIBTCC = libtcc$(DLLSUF)
LIBTCCDEF = libtcc.def
endif
CFGWIN = -win
- NATIVE_TARGET = $(ARCH)-$(if $(eq $(ARCH),arm),wince,win32)
-else ifdef CONFIG_OSX
- LIBS=-lm
- ifndef CONFIG_NOLDL
- LIBS+=-ldl
- endif
- # make libtcc as static or dynamic library?
- ifeq ($(DISABLE_STATIC),yes)
- LIBTCC=libtcc.dylib
- ifndef DISABLE_RPATH
- LINK_LIBTCC += -Wl,-rpath,"$(libdir)"
- export LD_LIBRARY_PATH := $(CURDIR)/$(TOP)
- endif
- endif
- CFGWIN =-unx
- NATIVE_TARGET = $(ARCH)-osx
+ NATIVE_TARGET = $(ARCH)-win$(if $(findstring arm,$(ARCH)),ce,32)
else
LIBS=-lm
ifndef CONFIG_NOLDL
@@ -58,19 +43,19 @@ else
endif
# make libtcc as static or dynamic library?
ifeq ($(DISABLE_STATIC),yes)
- LIBTCC=libtcc.so
+ LIBTCC=libtcc$(DLLSUF)
+ export LD_LIBRARY_PATH := $(CURDIR)/$(TOP)
ifndef DISABLE_RPATH
LINK_LIBTCC += -Wl,-rpath,"$(libdir)"
- export LD_LIBRARY_PATH := $(CURDIR)/$(TOP)
endif
endif
CFGWIN =-unx
NATIVE_TARGET = $(ARCH)
-endif
-
-ifeq ($(TARGETOS),Darwin)
- LDFLAGS += -flat_namespace -undefined warning
- export MACOSX_DEPLOYMENT_TARGET:=10.2
+ ifdef CONFIG_OSX
+ NATIVE_TARGET = $(ARCH)-osx
+ LDFLAGS += -flat_namespace -undefined warning
+ export MACOSX_DEPLOYMENT_TARGET := 10.2
+ endif
endif
# run local version of tcc with local libraries and includes
@@ -78,16 +63,19 @@ TCCFLAGS-unx = -B$(TOP) -I$(TOPSRC)/include -I$(TOPSRC) -I$(TOP)
TCCFLAGS-win = -B$(TOPSRC)/win32 -I$(TOPSRC)/include -I$(TOPSRC) -I$(TOP) -L$(TOP)
TCCFLAGS = $(TCCFLAGS$(CFGWIN))
TCC = $(TOP)/tcc$(EXESUF) $(TCCFLAGS)
+ifdef CONFIG_OSX
+ TCCFLAGS += -D_ANSI_SOURCE
+endif
CFLAGS_P = $(CFLAGS) -pg -static -DCONFIG_TCC_STATIC -DTCC_PROFILE
-LIBS_P= $(LIBS)
+LIBS_P = $(LIBS)
LDFLAGS_P = $(LDFLAGS)
CONFIG_$(ARCH) = yes
NATIVE_DEFINES_$(CONFIG_i386) += -DTCC_TARGET_I386
NATIVE_DEFINES_$(CONFIG_x86_64) += -DTCC_TARGET_X86_64
NATIVE_DEFINES_$(CONFIG_WIN32) += -DTCC_TARGET_PE
-NATIVE_DEFINES_$(CONFIG_OSX) += -DTCC_TARGET_X86_64 -DTCC_TARGET_MACHO
+NATIVE_DEFINES_$(CONFIG_OSX) += -DTCC_TARGET_MACHO
NATIVE_DEFINES_$(CONFIG_uClibc) += -DTCC_UCLIBC
NATIVE_DEFINES_$(CONFIG_musl) += -DTCC_MUSL
NATIVE_DEFINES_$(CONFIG_arm) += -DTCC_TARGET_ARM
@@ -117,12 +105,8 @@ LIBTCC1_X = i386 x86_64 i386-win32 x86_64-win32 x86_64-osx arm arm64 arm-wince
PROGS_CROSS = $(foreach X,$(TCC_X),$X-tcc$(EXESUF))
LIBTCC1_CROSS = $(foreach X,$(LIBTCC1_X),libtcc1-$X.a)
-ifdef CONFIG_CROSS
-all : $(LIBTCC1_CROSS) $(PROGS_CROSS)
-endif
-
# build cross compilers & libs
-cross: all $(LIBTCC1_CROSS) $(PROGS_CROSS)
+cross: $(LIBTCC1_CROSS) $(PROGS_CROSS)
# build specific cross compiler & lib
cross-%: %-tcc$(EXESUF) libtcc1-%.a ;
@@ -130,6 +114,10 @@ cross-%: %-tcc$(EXESUF) libtcc1-%.a ;
install: install$(CFGWIN)
uninstall: uninstall$(CFGWIN)
+ifdef CONFIG_CROSS
+all : cross
+endif
+
# --------------------------------------------
T = $(or $(CROSS_TARGET),$(NATIVE_TARGET),unknown)
@@ -206,7 +194,7 @@ $(X)tcc.o : tcctools.c
$(X)arm-gen.o : arm-asm.c
# Host Tiny C Compiler
-tcc$(EXESUF): $(X)tcc.o $(LIBTCC)
+tcc$(EXESUF): tcc.o $(LIBTCC)
$(CC) -o $@ $^ $(DEFINES) $(CFLAGS) $(LIBS) $(LDFLAGS) $(LINK_LIBTCC)
# Cross Tiny C Compilers
@@ -218,7 +206,7 @@ $(CROSS_TARGET)-tcc$(EXESUF): $(TCC_FILES)
# profiling version
tcc_p$(EXESUF): $($T_FILES)
- $(CC) -o $@ $< -$(DEFINES) $(CFLAGS_P) $(LIBS_P) $(LDFLAGS_P)
+ $(CC) -o $@ $< $(DEFINES) -DONE_SOURCE $(CFLAGS_P) $(LIBS_P) $(LDFLAGS_P)
# static libtcc library
libtcc.a: $(LIBTCC_OBJ)
@@ -226,13 +214,13 @@ libtcc.a: $(LIBTCC_OBJ)
# dynamic libtcc library
libtcc.so: $(LIBTCC_OBJ)
- $(CC) -shared -Wl,-soname,$@ -o $@ $^ $(LDFLAGS)
+ $(CC) -shared -Wl,-soname,$@ -o $@ $^ $(CFLAGS) $(LDFLAGS)
libtcc.so: CFLAGS+=-fPIC
# windows dynamic libtcc library
libtcc.dll : $(LIBTCC_OBJ)
- $(CC) -shared $(LIBTCC_OBJ) -o $@ $(LDFLAGS)
+ $(CC) -shared -o $@ $^ $(CFLAGS) $(LDFLAGS)
libtcc.def : libtcc.dll tcc$(EXESUF)
./tcc$(EXESUF) -impdef $< -o $@
@@ -241,11 +229,11 @@ libtcc.dll : DEFINES += -DLIBTCC_AS_DLL
# TinyCC runtime libraries
libtcc1.a : tcc$(EXESUF) FORCE
- @$(MAKE) -f lib/Makefile BIN=$@ $@ TOP=. --no-print-directory
+ @$(MAKE) -C lib
# Cross libtcc1.a
libtcc1-%.a : %-tcc$(EXESUF) FORCE
- @$(MAKE) -f lib/Makefile BIN=$@ $@ CROSS_TARGET=$* TOP=. --no-print-directory
+ @$(MAKE) -C lib CROSS_TARGET=$*
FORCE:
@@ -290,19 +278,21 @@ install-unx:
$(call TRY-INSTALL,tcc.1,"$(mandir)/man1")
$(call TRY-INSTALL,tcc-doc.info,"$(infodir)")
$(call TRY-INSTALL,tcc-doc.html,"$(docdir)")
- mkdir -p "$(tccdir)/win32/include"
- cp -r $(TOPSRC)/include/. "$(tccdir)/win32/include"
- cp -r $(TOPSRC)/win32/include/. "$(tccdir)/win32/include"
+ifneq "$(LIBTCC1_W)" ""
mkdir -p "$(tccdir)/win32/lib"
$(INSTALL) $(TOPSRC)/win32/lib/*.def $(LIBTCC1_W) "$(tccdir)/win32/lib"
+ mkdir -p "$(tccdir)/win32/include"
+ cp -r $(TOPSRC)/win32/include/. "$(tccdir)/win32/include"
+ $(INSTALL) $(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h "$(tccdir)/win32/include"
+endif
# uninstall
uninstall-unx:
- rm -fv $(foreach P,$(PROGS) $(PROGS_CROSS),"$(bindir)/$P")
- rm -fv "$(libdir)/$(LIBTCC)" "$(includedir)/libtcc.h"
- rm -fv "$(mandir)/man1/tcc.1" "$(infodir)/tcc-doc.info"
- rm -fv "$(docdir)/tcc-doc.html"
- rm -rv "$(tccdir)"
+ @rm -fv $(foreach P,$(PROGS) $(PROGS_CROSS),"$(bindir)/$P")
+ @rm -fv "$(libdir)/libtcc.a" "$(libdir)/libtcc.so" "$(includedir)/libtcc.h"
+ @rm -fv "$(mandir)/man1/tcc.1" "$(infodir)/tcc-doc.info"
+ @rm -fv "$(docdir)/tcc-doc.html"
+ rm -r "$(tccdir)"
# install progs & libs on windows
install-win:
@@ -310,12 +300,10 @@ install-win:
$(INSTALL) $(PROGS) $(subst libtcc.a,,$(LIBTCC)) $(PROGS_X) "$(tccdir)"
mkdir -p "$(tccdir)/lib"
$(INSTALL) $(TOPSRC)/win32/lib/*.def "$(tccdir)/lib"
- $(INSTALL) libtcc1.a $(LIBTCC1_W) $(LIBTCC1_U) "$(tccdir)/lib"
+ $(INSTALL) libtcc1.a $(LIBTCC1_W) "$(tccdir)/lib"
mkdir -p "$(tccdir)/include"
cp -r $(TOPSRC)/win32/include/. "$(tccdir)/include"
$(INSTALL) $(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h "$(tccdir)/include"
- mkdir -p "$(tccdir)/lib/include";
- $(INSTALL) $(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h "$(tccdir)/lib/include"
mkdir -p "$(tccdir)/examples"
cp -r $(TOPSRC)/win32/examples/. "$(tccdir)/examples"
$(INSTALL) $(TOPSRC)/tests/libtcc_test.c "$(tccdir)/examples"
@@ -323,13 +311,18 @@ install-win:
$(INSTALL) $(TOPSRC)/libtcc.h $(subst .dll,.def,$(LIBTCC)) "$(tccdir)/libtcc"
mkdir -p "$(tccdir)/doc"
$(INSTALL) $(TOPSRC)/win32/tcc-win32.txt $(wildcard tcc-doc.html) "$(tccdir)/doc"
+ifneq "$(LIBTCC1_U)" ""
+ $(INSTALL) $(LIBTCC1_U) "$(tccdir)/lib"
+ mkdir -p "$(tccdir)/lib/include";
+ $(INSTALL) $(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h "$(tccdir)/lib/include"
+endif
# the msys-git shell works to configure && make except it does not have install
install-win : INSTALL = cp
# uninstall on windows
uninstall-win:
- rm -rfv "$(tccdir)/"*
+ rm -r "$(tccdir)/"*
# --------------------------------------------------------------------------
# other stuff
@@ -341,7 +334,7 @@ ETAGS : ; etags $(TAGFILES)
# create release tarball from *current* git branch (including tcc-doc.html
# and converting two files to CRLF)
-TCC-VERSION = $(VERSION)
+TCC-VERSION = tcc-$(VERSION)
tar: tcc-doc.html
mkdir $(TCC-VERSION)
( cd $(TCC-VERSION) && git --git-dir ../.git checkout -f )
@@ -361,11 +354,10 @@ test:
$(MAKE) -C tests
clean:
- rm -f $(PROGS) $(PROGS_CROSS) tcc_p$(EXESUF) tcc.pod \
- *~ *.o *.a *.so* *.out *.log lib*.def *.exe *.dll a.out \
- tags TAGS libtcc_test$(EXESUF)
- $(MAKE) -C tests $@
- $(MAKE) -C lib $@
+ rm -f $(PROGS) $(PROGS_CROSS) tcc_p$(EXESUF) tcc.pod
+ rm -f *~ *.o *.a *.so* *.out *.log lib*.def *.exe *.dll a.out tags TAGS
+ @$(MAKE) -C tests $@
+ @$(MAKE) -C lib $@
distclean: clean
rm -f config.h config.mak config.texi tcc.1 tcc-doc.info tcc-doc.html
@@ -389,12 +381,12 @@ help:
@echo "Cross compiler configuration:"
@echo " make will read custom configuration for cross compilers from a file"
@echo " 'config-cross.mak' if present. For example for a windows->i386-linux"
- @echo " cross-compiler that expects the linux files in <prefix>/i386-linux:"
+ @echo " cross-compiler that expects the linux files in <tccdir>/i386-linux:"
@echo ""
@echo " ROOT-i386 = {B}/i386-linux"
- @echo " CRT-i386 = $(ROOT-i386)/usr/lib"
- @echo " LIB-i386 = $(ROOT-i386)/lib:$(ROOT-i386)/usr/lib"
- @echo " INC-i386 = {B}/lib/include:$(ROOT-i386)/usr/include"
+ @echo " CRT-i386 = {B}/i386-linux/usr/lib"
+ @echo " LIB-i386 = {B}/i386-linux/lib:{B}/i386-linux/usr/lib"
+ @echo " INC-i386 = {B}/lib/include:{B}/i386-linux/usr/include"
@echo " DEF-i386 += -D__linux__"
@echo ""
@echo "Other supported make targets:"
diff --git a/configure b/configure
index 2a019d8..4182f9a 100755..100644
--- a/configure
+++ b/configure
@@ -33,7 +33,7 @@ cross_prefix=""
cc="gcc"
ar="ar"
strip="strip"
-cygwin="no"
+noldl="no"
gprof="no"
bigendian="no"
mingw32="no"
@@ -53,28 +53,26 @@ cpu=
# OS specific
targetos=`uname`
case $targetos in
- Darwin) osx=yes;;
- MINGW*) mingw32=yes;;
- MSYS*) mingw32=yes;;
- CYGWIN*) mingw32=yes; cygwin=yes; cross_prefix="mingw32-";;
- DragonFly) noldl=yes;;
- OpenBSD) noldl=yes;;
- FreeBSD) noldl=yes;;
- NetBSD) noldl=yes;;
- *) ;;
+ Darwin)
+ osx=yes
+ ;;
+ MINGW*|MSYS*|CYGWIN*)
+ mingw32=yes
+ ;;
+ DragonFly|OpenBSD|FreeBSD|NetBSD)
+ noldl=yes
+ ;;
+ *)
+ ;;
esac
# find source path
-# XXX: we assume an absolute path is given when launching configure,
-# except in './configure' case.
source_path=${0%configure}
source_path=${source_path%/}
source_path_used="yes"
if test -z "$source_path" -o "$source_path" = "." ; then
source_path=`pwd`
source_path_used="no"
- # mingw compilers might not understand cygwin paths
- if test $cygwin = "yes"; then source_path="."; fi
fi
for opt do
@@ -130,7 +128,7 @@ for opt do
;;
--enable-gprof) gprof="yes"
;;
- --enable-mingw32) mingw32="yes" ; cross_prefix="i686-pc-mingw32-" ; cpu=x86
+ --enable-mingw32) mingw32="yes"
;;
--enable-cross) build_cross="yes"
;;
@@ -211,6 +209,12 @@ if test -z "$CFLAGS"; then
fi
if test "$mingw32" = "yes" ; then
+ if test "$source_path_used" = "no"; then
+ source_path="."
+ fi
+ if test "$cc" = gcc; then
+ test -z "$LDFLAGS" && LDFLAGS="-static"
+ fi
if test x"$tccdir" = x""; then
tccdir="tcc"
fi
diff --git a/lib/Makefile b/lib/Makefile
index 2ac3126..00ab7dc 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -7,6 +7,7 @@ include $(TOP)/Makefile
VPATH = $(TOPSRC)/lib $(TOPSRC)/win32/lib
T = $(or $(CROSS_TARGET),$(NATIVE_TARGET),unknown)
X = $(if $(CROSS_TARGET),$(CROSS_TARGET)-)
+BIN = $(TOP)/libtcc1$(if $(CROSS_TARGET),-$(CROSS_TARGET)).a
TCC = $(TOP)/$(X)tcc$(EXESUF)
XCC = $(TCC)
@@ -25,25 +26,24 @@ ifeq ($(X),)
endif
endif
-ifeq ($(TARGETOS),Darwin)
+ifdef CONFIG_OSX
XFLAGS += -D_ANSI_SOURCE
- BCHECK_O =
endif
ifeq ($(CONFIG_musl),yes)
BCHECK_O =
endif
-I386_O = libtcc1.o alloca86.o alloca86-bt.o $(BCHECK_O)
-X86_64_O = libtcc1.o alloca86_64.o alloca86_64-bt.o $(BCHECK_O)
+I386_O = libtcc1.o alloca86.o alloca86-bt.o
+X86_64_O = libtcc1.o alloca86_64.o alloca86_64-bt.o
ARM_O = libtcc1.o armeabi.o alloca-arm.o
ARM64_O = lib-arm64.o
WIN_O = crt1.o crt1w.o wincrt1.o wincrt1w.o dllcrt1.o dllmain.o
-OBJ-i386 = $(I386_O)
+OBJ-i386 = $(I386_O) $(BCHECK_O)
TGT-i386 = -DTCC_TARGET_I386
-OBJ-x86_64 = $(X86_64_O)
+OBJ-x86_64 = $(X86_64_O) $(BCHECK_O)
TGT-x86_64 = -DTCC_TARGET_X86_64
OBJ-x86_64-osx = $(X86_64_O)
@@ -55,17 +55,15 @@ TGT-arm = -DTCC_TARGET_ARM
OBJ-arm64 = $(ARM64_O)
TGT-arm64 = -DTCC_TARGET_ARM64
-OBJ-i386-win32 = $(I386_O) chkstk.o $(WIN_O)
+OBJ-i386-win32 = $(I386_O) chkstk.o bcheck.o $(WIN_O)
TGT-i386-win32 = -DTCC_TARGET_I386 -DTCC_TARGET_PE
-OBJ-x86_64-win32 = $(X86_64_O) chkstk.o $(WIN_O)
+OBJ-x86_64-win32 = $(X86_64_O) chkstk.o bcheck.o $(WIN_O)
TGT-x86_64-win32 = -DTCC_TARGET_X86_64 -DTCC_TARGET_PE
OBJ-arm-wince = $(ARM_O) $(WIN_O)
TGT-arm-wince = -DTCC_TARGET_ARM -DTCC_TARGET_PE
-all : $(BIN)
-
$(BIN) : $(patsubst %.o,$(X)%.o,$(OBJ-$T))
$(XAR) rcs $@ $^
diff --git a/libtcc.c b/libtcc.c
index b4b2615..9243e49 100644
--- a/libtcc.c
+++ b/libtcc.c
@@ -1054,6 +1054,11 @@ ST_FUNC int tcc_add_file_internal(TCCState *s1, const char *filename, int flags)
/* do not display line number if error */
file->line_num = 0;
+#ifdef TCC_TARGET_MACHO
+ if (0 == obj_type && 0 == strcmp(tcc_fileextension(filename), "dylib"))
+ obj_type = AFF_BINTYPE_DYN;
+#endif
+
switch (obj_type) {
case AFF_BINTYPE_REL:
ret = tcc_load_object_file(s1, fd, 0);
@@ -1081,19 +1086,7 @@ ST_FUNC int tcc_add_file_internal(TCCState *s1, const char *filename, int flags)
break;
#endif
default:
-#if defined(TCC_TARGET_MACHO)
- if (s1->output_type == TCC_OUTPUT_MEMORY) {
- ret = 0;
-#ifdef TCC_IS_NATIVE
- if (NULL == dlopen(filename, RTLD_GLOBAL | RTLD_LAZY)) {
- ret = -1;
- }
-#endif /* TCC_TARGET_MACHO */
- } else {
- ret = tcc_load_dll(s1, fd, filename,
- (flags & AFF_REFERENCED_DLL) != 0);
- }
-#elif defined(TCC_TARGET_PE)
+#ifdef TCC_TARGET_PE
ret = pe_load_file(s1, filename, fd);
#else
/* as GNU ld, consider it is an ld script if not recognized */
@@ -1155,12 +1148,12 @@ ST_FUNC int tcc_add_crt(TCCState *s, const char *filename)
/* the library name is the same as the argument of the '-l' option */
LIBTCCAPI int tcc_add_library(TCCState *s, const char *libraryname)
{
-#if defined(TCC_TARGET_MACHO)
- const char *libs[] = { "%s/lib%s.dylib", "%s/lib%s.a", NULL };
- const char **pp = s->static_link ? libs + 1 : libs;
-#elif defined(TCC_TARGET_PE)
+#if defined TCC_TARGET_PE
const char *libs[] = { "%s/%s.def", "%s/lib%s.def", "%s/%s.dll", "%s/lib%s.dll", "%s/lib%s.a", NULL };
const char **pp = s->static_link ? libs + 4 : libs;
+#elif defined TCC_TARGET_MACHO
+ const char *libs[] = { "%s/lib%s.dylib", "%s/lib%s.a", NULL };
+ const char **pp = s->static_link ? libs + 1 : libs;
#else
const char *libs[] = { "%s/lib%s.so", "%s/lib%s.a", NULL };
const char **pp = s->static_link ? libs + 1 : libs;
diff --git a/tccasm.c b/tccasm.c
index b833408..5356b62 100644
--- a/tccasm.c
+++ b/tccasm.c
@@ -87,13 +87,13 @@ static void asm_expr_unary(TCCState *s1, ExprValue *pe)
{
Sym *sym;
int op, label;
- unsigned long n;
+ uint64_t n;
const char *p;
switch(tok) {
case TOK_PPNUM:
p = tokc.str.data;
- n = strtoul(p, (char **)&p, 0);
+ n = strtoull(p, (char **)&p, 0);
if (*p == 'b' || *p == 'f') {
/* backward or forward label */
label = asm_get_local_label_name(s1, n);
diff --git a/tccgen.c b/tccgen.c
index 4c5e4d6..2cdb4f1 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -906,10 +906,6 @@ ST_FUNC void save_reg_upstack(int r, int n)
#else
type = &int_type;
#endif
- if ((type->t & VT_BTYPE) == VT_FLOAT) {
- /* cast to DOUBLE to avoid precision loss */
- type->t = (type->t & ~VT_BTYPE) | VT_DOUBLE;
- }
size = type_size(type, &align);
loc = (loc - size) & -align;
sv.type.t = type->t;
@@ -2383,11 +2379,6 @@ static void gen_cast(CType *type)
vpushi(0);
gen_op(TOK_NE);
} else {
- if (sbt == VT_FLOAT) {
- /* cast to DOUBLE to avoid precision loss */
- gen_cvt_ftof(VT_DOUBLE);
- vtop->type.t = (vtop->type.t & ~VT_BTYPE) | VT_DOUBLE;
- }
/* we handle char/short/etc... with generic code */
if (dbt != (VT_INT | VT_UNSIGNED) &&
dbt != (VT_LLONG | VT_UNSIGNED) &&
diff --git a/tccpe.c b/tccpe.c
index 2b0ea9a..91b1a32 100644
--- a/tccpe.c
+++ b/tccpe.c
@@ -28,10 +28,6 @@
#define strnicmp strncasecmp
#endif
-#ifndef MAX_PATH
-#define MAX_PATH 260
-#endif
-
#ifdef TCC_TARGET_X86_64
# define ADDR3264 ULONGLONG
# define REL_TYPE_DIRECT R_X86_64_64
@@ -907,7 +903,7 @@ static void pe_build_exports(struct pe_info *pe)
struct pe_sort_sym **sorted, *p;
FILE *op;
- char buf[MAX_PATH];
+ char buf[260];
const char *dllname;
const char *name;
diff --git a/tccpp.c b/tccpp.c
index a27ca42..720115d 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -1021,8 +1021,38 @@ ST_FUNC void restore_parse_state(ParseState *s)
tokc = s->tokc;
}
-/* token string handling */
+#if 0
+/* return the number of additional 'ints' necessary to store the
+ token */
+static inline int tok_size(const int *p)
+{
+ switch(*p) {
+ /* 4 bytes */
+ case TOK_CINT:
+ case TOK_CUINT:
+ case TOK_CCHAR:
+ case TOK_LCHAR:
+ case TOK_CFLOAT:
+ case TOK_LINENUM:
+ return 1 + 1;
+ case TOK_STR:
+ case TOK_LSTR:
+ case TOK_PPNUM:
+ case TOK_PPSTR:
+ return 1 + ((sizeof(CString) + ((CString *)(p+1))->size + 3) >> 2);
+ case TOK_CDOUBLE:
+ case TOK_CLLONG:
+ case TOK_CULLONG:
+ return 1 + 2;
+ case TOK_CLDOUBLE:
+ return 1 + LDOUBLE_SIZE / 4;
+ default:
+ return 1 + 0;
+ }
+}
+#endif
+/* token string handling */
ST_INLN void tok_str_new(TokenString *s)
{
s->str = NULL;
diff --git a/tcctools.c b/tcctools.c
index 235b783..21aa2a7 100644
--- a/tcctools.c
+++ b/tcctools.c
@@ -304,15 +304,15 @@ the_end:
ST_FUNC int tcc_tool_impdef(TCCState *s1, int argc, char **argv)
{
int ret, v, i;
- char infile[MAX_PATH];
- char outfile[MAX_PATH];
+ char infile[260];
+ char outfile[260];
const char *file;
char *p, *q;
FILE *fp, *op;
#ifdef _WIN32
- char path[MAX_PATH];
+ char path[260];
#endif
infile[0] = outfile[0] = 0;
diff --git a/tests/Makefile b/tests/Makefile
index e4e2556..7de3d81 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -5,7 +5,7 @@
TOP = ..
include $(TOP)/Makefile
VPATH = $(TOPSRC)/tests $(TOPSRC) $(TOP)
-CFLAGS := $(filter-out -W% -g% -O%,$(CFLAGS)) -I$(TOPSRC)
+CFLAGS := $(filter-out -W% -g% -O%,$(CFLAGS)) -I$(TOPSRC) $(LDFLAGS)
# what tests to run
TESTS = \
@@ -34,8 +34,8 @@ endif
ifdef CONFIG_WIN32
TESTS := $(filter-out $(BTESTS),$(TESTS))
endif
-ifeq ($(TARGETOS),Darwin)
- TESTS := $(filter-out hello-exe test3 $(BTESTS),$(TESTS))
+ifdef CONFIG_OSX # -run only
+ TESTS := hello-run libtest tests2-dir pp-dir
endif
ifeq (,$(filter arm64 i386 x86_64,$(ARCH)))
TESTS := $(filter-out vla_test-run,$(TESTS))
@@ -51,28 +51,23 @@ ifndef CONFIG_CROSS
endif
ifdef CONFIG_WIN32
- PATH := $(CURDIR)/$(TOP):$(PATH) # for libtcc_test to find libtcc.dll
-endif
-
-ifeq ($(TARGETOS),Darwin)
- CFLAGS += -Wl,-flat_namespace,-undefined,warning
- TCCFLAGS += -D_ANSI_SOURCE
- export MACOSX_DEPLOYMENT_TARGET:=10.2
+ SEP = $(if $(findstring :\,$(PATH)),;,:)
+ PATH := $(CURDIR)/$(TOP)$(SEP)$(PATH) # for libtcc_test to find libtcc.dll
endif
RUN_TCC = $(NATIVE_DEFINES) -DONE_SOURCE -run $(TOPSRC)/tcc.c $(TCCFLAGS)
-
DISAS = objdump -d
+DUMPTCC = (set -x; $(TOP)/tcc -vv; ldd $(TOP)/tcc; exit 1)
all test : clean-s $(TESTS)
hello-exe: ../examples/ex1.c
@echo ------------ $@ ------------
- $(TCC) $< -o hello$(EXESUF) || ($(TOP)/tcc -vv; exit 1) && ./hello$(EXESUF)
+ $(TCC) $< -o hello$(EXESUF) && ./hello$(EXESUF) || $(DUMPTCC)
hello-run: ../examples/ex1.c
@echo ------------ $@ ------------
- $(TCC) -run $<
+ $(TCC) -run $< || $(DUMPTCC)
libtest: libtcc_test$(EXESUF)
@echo ------------ $@ ------------
@@ -263,11 +258,11 @@ cache: tcc_g
# clean
clean:
- rm -f *~ *.o *.a *.bin *.i *.ref *.out *.out? *.out?b *.cc *.gcc \
- *-cc *-gcc *-tcc *.exe hello libtcc_test vla_test tcctest[1234] \
- ex? tcc_g *.def weaktest.*.txt
- $(MAKE) -C tests2 $@
- $(MAKE) -C pp $@
+ rm -f *~ *.o *.a *.bin *.i *.ref *.out *.out? *.out?b *.cc *.gcc
+ rm -f *-cc *-gcc *-tcc *.exe hello libtcc_test vla_test tcctest[1234]
+ rm -f ex? tcc_g weaktest.*.txt *.def
+ @$(MAKE) -C tests2 $@
+ @$(MAKE) -C pp $@
# silent clean, used before running tests
clean-s:
diff --git a/tests/tests2/Makefile b/tests/tests2/Makefile
index b8d6a49..e921f57 100644
--- a/tests/tests2/Makefile
+++ b/tests/tests2/Makefile
@@ -5,23 +5,6 @@ VPATH = $(SRC)
TESTS = $(patsubst %.c,%.test,$(sort $(notdir $(wildcard $(SRC)/*.c))))
-# 34_array_assignment.test -- array assignment is not in C standard
-SKIP = 34_array_assignment.test
-
-# some tests do not pass on all platforms, remove them for now
-ifeq ($(CONFIG_arm_eabi),yes) # not ARM soft-float
- SKIP += 22_floating_point.test
-endif
-ifeq ($(TARGETOS),Darwin)
- SKIP += 40_stdio.test
-endif
-ifeq ($(ARCH),x86_64)
- SKIP += 73_arm64.test
-endif
-ifeq (,$(filter i386 x86_64,$(ARCH)))
- SKIP += 85_asm-outside-function.test
-endif
-
# Some tests might need arguments
ARGS =
31_args.test : ARGS = arg1 arg2 arg3 arg4 arg5
@@ -42,6 +25,22 @@ ifeq (-$(findstring arm,$(ARCH))-,-arm-)
FILTER += 2>&1 | grep -v 'warning: soft float ABI currently not supported'
endif
+# some tests do not pass on all platforms, remove them for now
+SKIP = 34_array_assignment.test # array assignment is not in C standard
+ifeq ($(CONFIG_arm_eabi),yes) # not ARM soft-float
+ SKIP += 22_floating_point.test
+endif
+ifdef CONFIG_OSX
+ SKIP += 40_stdio.test 42_function_pointer.test
+ FLAGS += -w
+endif
+ifeq ($(ARCH),x86_64)
+ SKIP += 73_arm64.test
+endif
+ifeq (,$(filter i386 x86_64,$(ARCH)))
+ SKIP += 85_asm-outside-function.test
+endif
+
all test: $(filter-out $(SKIP),$(TESTS))
%.test: %.c %.expect
diff --git a/win32/build-tcc.bat b/win32/build-tcc.bat
index 880a25f..9a9184b 100644
--- a/win32/build-tcc.bat
+++ b/win32/build-tcc.bat
@@ -5,7 +5,7 @@
@echo off
setlocal
-set CC=gcc -Os -s
+set CC=gcc -Os -s -static
set /p VERSION= < ..\VERSION
set INST=
set DOC=no
diff --git a/win32/include/_mingw.h b/win32/include/_mingw.h
index 41247e6..2fc9798 100644
--- a/win32/include/_mingw.h
+++ b/win32/include/_mingw.h
@@ -165,5 +165,6 @@ typedef struct localeinfo_struct _locale_tstruct,*_locale_t;
#define __C89_NAMELESS
#define __MINGW_EXTENSION
#define WINAPI_FAMILY_PARTITION(X) 1
+#define MINGW_HAS_SECURE_API
#endif /* __MINGW_H */