From 7a477d70cabe15fa66fd0f32fab5e95841a500e5 Mon Sep 17 00:00:00 2001 From: grischka Date: Wed, 6 Feb 2013 19:01:07 +0100 Subject: [PATCH] lib/Makefile: use CC, add bcheck to libtcc1.a Also: - fix "make tcc_p" (profiling version) - remove old gcc flags: -mpreferred-stack-boundary=2 -march=i386 -falign-functions=0 - remove test "hello" for Darwin (cannot compile to file) --- Makefile | 37 +++++++------------------------------ lib/Makefile | 42 +++++++++++++++++++++++------------------- lib/bcheck.c | 5 +++-- libtcc.c | 4 ++++ tcc.h | 8 +++----- tccelf.c | 4 ---- tests/Makefile | 2 +- 7 files changed, 41 insertions(+), 61 deletions(-) diff --git a/Makefile b/Makefile index 1179dbd1..23045eb7 100644 --- a/Makefile +++ b/Makefile @@ -20,17 +20,6 @@ ifneq ($(GCC_MAJOR),3) CFLAGS+=-Wno-pointer-sign -Wno-sign-compare endif endif - -ifneq ($(TARGETOS),Darwin) -ifeq ($(ARCH),i386) -CFLAGS+=-mpreferred-stack-boundary=2 -ifeq ($(GCC_MAJOR),2) -CFLAGS+=-m386 -malign-functions=0 -else -CFLAGS+=-march=i386 -falign-functions=0 -endif -endif -endif endif ifdef CONFIG_WIN64 @@ -50,10 +39,8 @@ NATIVE_DEFINES+=\ $(if $(wildcard /lib/i386-linux-gnu),-DCONFIG_MULTIARCHDIR=\"i386-linux-gnu\",\ $(if $(wildcard /lib/i386-kfreebsd-gnu),-DCONFIG_MULTIARCHDIR=\"i386-kfreebsd-gnu\",\ $(if $(wildcard /lib/i386-gnu),-DCONFIG_MULTIARCHDIR=\"i386-gnu\"))) -CFLAGS+=-m32 else ifeq ($(ARCH),x86-64) NATIVE_DEFINES=-DTCC_TARGET_X86_64 -CFLAGS+=-m64 NATIVE_DEFINES+=\ $(if $(wildcard /usr/lib64),-DCONFIG_LDDIR=\"lib64\",\ $(if $(wildcard /lib/x86_64-linux-gnu),-DCONFIG_MULTIARCHDIR=\"x86_64-linux-gnu\",\ @@ -79,7 +66,6 @@ endif ifneq ($(wildcard /lib/ld-uClibc.so.0),) NATIVE_DEFINES+=-DTCC_UCLIBC -CONFIG_UCLIBC = 1 endif # make libtcc as static or dynamic library? @@ -136,7 +122,6 @@ NATIVE_FILES=$(I386_FILES) PROGS_CROSS=$(X64_CROSS) $(WIN32_CROSS) $(WIN64_CROSS) $(ARM_CROSS) $(C67_CROSS) LIBTCC1_CROSS=lib/i386-win32/libtcc1.a lib/x86_64-win32/libtcc1.a LIBTCC1=libtcc1.a -BCHECK_O=bcheck.o else ifeq ($(ARCH),x86-64) NATIVE_FILES=$(X86_64_FILES) PROGS_CROSS=$(I386_CROSS) $(WIN32_CROSS) $(WIN64_CROSS) $(ARM_CROSS) $(C67_CROSS) @@ -147,11 +132,7 @@ NATIVE_FILES=$(ARM_FILES) PROGS_CROSS=$(I386_CROSS) $(X64_CROSS) $(WIN32_CROSS) $(WIN64_CROSS) $(C67_CROSS) endif -ifdef CONFIG_UCLIBC -BCHECK_O= -endif ifeq ($(TARGETOS),Darwin) -BCHECK_O= PROGS+=tiny_libmaker$(EXESUF) endif @@ -159,7 +140,7 @@ ifdef CONFIG_USE_LIBGCC LIBTCC1= endif -TCCLIBS = $(LIBTCC1) $(LIBTCC) $(BCHECK_O) +TCCLIBS = $(LIBTCC1) $(LIBTCC) TCCDOCS = tcc.1 tcc-doc.html tcc-doc.info ifdef CONFIG_CROSS @@ -177,6 +158,10 @@ tcc$(EXESUF): tcc.o $(LIBTCC) %-tcc$(EXESUF): tcc.c $(CC) -o $@ $< -DONE_SOURCE $(DEFINES) $(CPPFLAGS) $(CFLAGS) $(LIBS) $(LDFLAGS) +# profiling version +tcc_p$(EXESUF): $(NATIVE_FILES) + $(CC) -o $@ $< -DONE_SOURCE $(NATIVE_DEFINES) $(CPPFLAGS_P) $(CFLAGS_P) $(LIBS_P) $(LDFLAGS_P) + $(I386_CROSS): DEFINES = -DTCC_TARGET_I386 \ -DCONFIG_TCCDIR="\"$(tccdir)/i386\"" $(X64_CROSS): DEFINES = -DTCC_TARGET_X86_64 @@ -222,10 +207,6 @@ libtcc.so.1.0: $(LIBTCC_OBJ) libtcc.so.1.0: CFLAGS+=-fPIC -# profiling version -tcc_p$(EXESUF): $(NATIVE_FILES) - $(CC) -o $@ $< $(NATIVE_DEFINES) $(CPPFLAGS_P) $(CFLAGS_P) $(LIBS_P) $(LDFLAGS_P) - # windows utilities tiny_impdef$(EXESUF): win32/tools/tiny_impdef.c $(CC) -o $@ $< $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) @@ -237,8 +218,7 @@ libtcc1.a : FORCE @$(MAKE) -C lib native lib/%/libtcc1.a : FORCE $(PROGS_CROSS) @$(MAKE) -C lib cross TARGET=$* -bcheck.o : lib/bcheck.c - $(CC) -c $< -o $@ $(CPPFLAGS) $(CFLAGS) + FORCE: # install @@ -267,9 +247,6 @@ endif ifneq ($(LIBTCC1),) $(INSTALL) -m644 $(LIBTCC1) "$(tccdir)" endif -ifneq ($(BCHECK_O),) - $(INSTALL) -m644 $(BCHECK_O) "$(tccdir)" -endif $(INSTALL) -m644 $(addprefix $(top_srcdir)/include/,$(TCC_INCLUDES)) "$(tccdir)/include" mkdir -p "$(libdir)" $(INSTALL) -m755 $(LIBTCC) "$(libdir)" @@ -298,7 +275,7 @@ endif uninstall: rm -fv $(foreach P,$(PROGS),"$(bindir)/$P") - rm -fv $(foreach P,$(LIBTCC1) $(BCHECK_O),"$(tccdir)/$P") + rm -fv $(foreach P,$(LIBTCC1),"$(tccdir)/$P") rm -fv $(foreach P,$(TCC_INCLUDES),"$(tccdir)/include/$P") rm -fv "$(docdir)/tcc-doc.html" "$(mandir)/man1/tcc.1" "$(infodir)/tcc-doc.info" rm -fv "$(libdir)/$(LIBTCC)" "$(includedir)/libtcc.h" diff --git a/lib/Makefile b/lib/Makefile index 895c4bef..9a029d24 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -15,15 +15,15 @@ ifndef TARGET else ifeq ($(ARCH),i386) TARGET = i386 - ifneq ($(TARGETOS),Darwin) - XCC = gcc -O2 -m32 - endif + ifneq ($(TARGETOS),Darwin) + XCC = $(CC) + endif else ifeq ($(ARCH),x86-64) TARGET = x86_64 - ifneq ($(TARGETOS),Darwin) - XCC = gcc -O2 -m64 - endif + ifneq ($(TARGETOS),Darwin) + XCC = $(CC) + endif endif endif endif @@ -38,9 +38,11 @@ cross : $(DIR)/libtcc1.a native : TCC = $(TOP)/tcc$(EXESUF) cross : TCC = $(TOP)/$(TARGET)-tcc$(EXESUF) -I386_O = libtcc1.o alloca86.o alloca86-bt.o +BCHECK_O = bcheck.o + +I386_O = libtcc1.o alloca86.o alloca86-bt.o $(BCHECK_O) X86_64_O = libtcc1.o alloca86_64.o -WIN32_O = $(I386_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o bcheck.o +WIN32_O = $(I386_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o WIN64_O = $(X86_64_O) crt1.o wincrt1.o dllcrt1.o dllmain.o chkstk.o ifeq "$(TARGET)" "i386-win32" @@ -58,18 +60,12 @@ else ifeq "$(TARGET)" "i386" OBJ = $(addprefix $(DIR)/,$(I386_O)) TGT = -DTCC_TARGET_I386 - XCC ?= $(TCC) -B$(TOP) -m32 -D_ANSI_SOURCE - ifeq ($(TARGETOS),Darwin) - XAR = $(DIR)/tiny_libmaker$(EXESUF) - endif + XCC ?= $(TCC) -B$(TOP) else ifeq "$(TARGET)" "x86_64" OBJ = $(addprefix $(DIR)/,$(X86_64_O)) TGT = -DTCC_TARGET_X86_64 - XCC ?= $(TCC) -B$(TOP) -m64 -D_ANSI_SOURCE - ifeq ($(TARGETOS),Darwin) - XAR = $(DIR)/tiny_libmaker$(EXESUF) - endif + XCC ?= $(TCC) -B$(TOP) else $(error libtcc1.a not supported on target '$(TARGET)') endif @@ -77,6 +73,14 @@ endif endif endif +XFLAGS = $(CPPFLAGS) $(CFLAGS) $(TGT) + +ifeq ($(TARGETOS),Darwin) + XAR = $(DIR)/tiny_libmaker$(EXESUF) + XFLAGS += -D_ANSI_SOURCE + BCHECK_O = +endif + ifdef XAR AR = $(XAR) endif @@ -84,11 +88,11 @@ endif $(DIR)/libtcc1.a ../libtcc1.a : $(OBJ) $(XAR) $(AR) rcs $@ $(OBJ) $(DIR)/%.o : %.c - $(XCC) -c $< -o $@ $(CPPFLAGS) $(TGT) $(CFLAGS) + $(XCC) -c $< -o $@ $(XFLAGS) $(DIR)/%.o : %.S - $(XCC) -c $< -o $@ $(CPPFLAGS) $(TGT) $(CFLAGS) + $(XCC) -c $< -o $@ $(XFLAGS) $(DIR)/%$(EXESUF) : $(TOP)/win32/tools/%.c - $(CC) -Os -s -w -o $@ $< $(CPPFLAGS) $(TGT) $(CFLAGS) $(LDFLAGS) + $(CC) -Os -s -w -o $@ $< $(XFLAGS) $(LDFLAGS) $(OBJ) $(XAR) : $(DIR)/exists $(DIR)/exists : diff --git a/lib/bcheck.c b/lib/bcheck.c index 998e3043..54124b9e 100644 --- a/lib/bcheck.c +++ b/lib/bcheck.c @@ -41,7 +41,8 @@ #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \ || defined(__DragonFly__) || defined(__dietlibc__) \ - || defined(__UCLIBC__) || defined(__OpenBSD__) || defined(_WIN32) + || defined(__UCLIBC__) || defined(__OpenBSD__) \ + || defined(_WIN32) || defined(TCC_UCLIBC) #warning Bound checking does not support malloc (etc.) in this environment. #undef CONFIG_TCC_MALLOC_HOOKS #undef HAVE_MEMALIGN @@ -377,7 +378,7 @@ void __bound_init(void) size = BOUND_T23_SIZE; mark_invalid(start, size); -#if !defined(__TINYC__) && defined(CONFIG_TCC_MALLOC_HOOKS) +#if defined(CONFIG_TCC_MALLOC_HOOKS) /* malloc zone is also marked invalid. can only use that with * hooks because all libs should use the same malloc. The solution * would be to build a new malloc for tcc. diff --git a/libtcc.c b/libtcc.c index 79542b39..0242dc4e 100644 --- a/libtcc.c +++ b/libtcc.c @@ -105,12 +105,14 @@ static void tcc_set_lib_path_w32(TCCState *s) tcc_set_lib_path(s, path); } +#ifdef TCC_TARGET_PE static void tcc_add_systemdir(TCCState *s) { char buf[1000]; GetSystemDirectory(buf, sizeof buf); tcc_add_library_path(s, normalize_slashes(buf)); } +#endif #ifndef CONFIG_TCC_STATIC void dlclose(void *p) @@ -1169,9 +1171,11 @@ ST_FUNC int tcc_add_file_internal(TCCState *s1, const char *filename, int flags) #ifndef TCC_TARGET_PE if (ehdr.e_type == ET_DYN) { if (s1->output_type == TCC_OUTPUT_MEMORY) { +#ifdef TCC_IS_NATIVE void *h; h = dlopen(filename, RTLD_GLOBAL | RTLD_LAZY); if (h) +#endif ret = 0; } else { ret = tcc_load_dll(s1, fd, filename, diff --git a/tcc.h b/tcc.h index 8e6b0a52..885951c8 100644 --- a/tcc.h +++ b/tcc.h @@ -47,7 +47,9 @@ # include # include # include -# include +# ifndef CONFIG_TCC_STATIC +# include +# endif #else # include # include @@ -134,10 +136,6 @@ #define CONFIG_TCC_BCHECK /* enable bound checking code */ #endif -#if defined(_WIN32) && !defined(TCC_TARGET_PE) -#define CONFIG_TCC_STATIC -#endif - /* define it to include assembler support */ #if !defined(TCC_TARGET_ARM) && !defined(TCC_TARGET_C67) #define CONFIG_TCC_ASM diff --git a/tccelf.c b/tccelf.c index cba47b1d..781c3224 100644 --- a/tccelf.c +++ b/tccelf.c @@ -1338,10 +1338,6 @@ ST_FUNC void tcc_add_bcheck(TCCState *s1) add_elf_sym(symtab_section, 0, 0, ELFW(ST_INFO)(STB_GLOBAL, STT_NOTYPE), 0, bounds_section->sh_num, "__bounds_start"); - /* add bound check code */ -#ifndef TCC_TARGET_PE - tcc_add_support(s1, "bcheck.o"); -#endif #ifdef TCC_TARGET_I386 if (s1->output_type != TCC_OUTPUT_MEMORY) { /* add 'call __bound_init()' in .init section */ diff --git a/tests/Makefile b/tests/Makefile index 76854599..0e6fc46f 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -26,7 +26,7 @@ ifdef CONFIG_WIN32 TESTS := $(filter-out test3,$(TESTS)) endif ifeq ($(TARGETOS),Darwin) - TESTS := $(filter-out test3 btest,$(TESTS)) + TESTS := $(filter-out hello test3 btest,$(TESTS)) endif ifdef DISABLE_STATIC -- 2.11.4.GIT