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 /i386-linux:" + @echo " cross-compiler that expects the linux files in /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 old mode 100755 new mode 100644 index 2a019d8..4182f9a --- 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 */