Changeset 331 for EcnlProtoTool/trunk/tcc-0.9.27/Makefile
- Timestamp:
- Jan 21, 2018, 12:10:09 AM (6 years ago)
- Location:
- EcnlProtoTool/trunk/tcc-0.9.27
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/tcc-0.9.27/Makefile
r279 r331 1 # -------------------------------------------------------------------------- 1 2 # 2 3 # Tiny C Compiler Makefile 3 4 # 4 5 5 TOP ?= . 6 ifndef TOP 7 TOP = . 8 INCLUDED = no 9 endif 10 6 11 include $(TOP)/config.mak 7 VPATH = $(top_srcdir) 8 9 CPPFLAGS = -I$(TOP) # for config.h 10 11 ifeq (-$(findstring gcc,$(CC))-,-gcc-) 12 ifeq (-$(findstring $(GCC_MAJOR),01)-,--) 13 CFLAGS+=-fno-strict-aliasing 14 ifeq (-$(findstring $(GCC_MAJOR),23)-,--) 15 CFLAGS+=-Wno-pointer-sign -Wno-sign-compare 16 ifeq (-$(GCC_MAJOR)-$(findstring $(GCC_MINOR),56789)-,-4--) 17 CFLAGS+=-D_FORTIFY_SOURCE=0 12 13 ifeq (-$(CC)-$(GCC_MAJOR)-$(findstring $(GCC_MINOR),56789)-,-gcc-4--) 14 CFLAGS += -D_FORTIFY_SOURCE=0 15 endif 16 17 LIBTCC = libtcc.a 18 LIBTCC1 = libtcc1.a 19 LINK_LIBTCC = 20 LIBS = 21 CFLAGS += -I$(TOP) 22 CFLAGS += $(CPPFLAGS) 23 VPATH = $(TOPSRC) 24 25 ifdef CONFIG_WIN32 26 ifneq ($(CONFIG_static),yes) 27 LIBTCC = libtcc$(DLLSUF) 28 LIBTCCDEF = libtcc.def 29 endif 30 CFGWIN = -win 31 NATIVE_TARGET = $(ARCH)-win$(if $(findstring arm,$(ARCH)),ce,32) 18 32 else 19 CFLAGS+=-Wno-unused-result 20 endif 21 endif 22 endif 23 else # not GCC 24 ifeq (-$(findstring clang,$(CC))-,-clang-) 25 # make clang accept gnuisms in libtcc1.c 26 CFLAGS+=-fheinous-gnu-extensions 27 endif 28 endif 29 30 CPPFLAGS_P=$(CPPFLAGS) -DCONFIG_TCC_STATIC 31 CFLAGS_P=$(CFLAGS) -pg -static 32 LIBS_P= 33 LDFLAGS_P=$(LDFLAGS) 34 35 ifdef CONFIG_WIN64 36 CONFIG_WIN32=yes 37 endif 38 39 ifndef CONFIG_WIN32 40 LIBS=-lm 41 ifndef CONFIG_NOLDL 42 LIBS+=-ldl 43 endif 44 endif 45 46 # make libtcc as static or dynamic library? 47 ifdef DISABLE_STATIC 48 LIBTCC=libtcc.so.1.0 49 LINK_LIBTCC=-Wl,-rpath,"$(libdir)" 50 ifdef DISABLE_RPATH 51 LINK_LIBTCC= 52 endif 53 else 54 LIBTCC=libtcc.a 55 LINK_LIBTCC= 56 endif 33 LIBS=-lm 34 ifneq ($(CONFIG_ldl),no) 35 LIBS+=-ldl 36 endif 37 # make libtcc as static or dynamic library? 38 ifeq ($(CONFIG_static),no) 39 LIBTCC=libtcc$(DLLSUF) 40 export LD_LIBRARY_PATH := $(CURDIR)/$(TOP) 41 ifneq ($(CONFIG_rpath),no) 42 LINK_LIBTCC += -Wl,-rpath,"$(libdir)" 43 endif 44 endif 45 CFGWIN =-unx 46 NATIVE_TARGET = $(ARCH) 47 ifdef CONFIG_OSX 48 NATIVE_TARGET = $(ARCH)-osx 49 LDFLAGS += -flat_namespace -undefined warning 50 export MACOSX_DEPLOYMENT_TARGET := 10.2 51 endif 52 endif 53 54 # run local version of tcc with local libraries and includes 55 TCCFLAGS-unx = -B$(TOP) -I$(TOPSRC)/include -I$(TOPSRC) -I$(TOP) 56 TCCFLAGS-win = -B$(TOPSRC)/win32 -I$(TOPSRC)/include -I$(TOPSRC) -I$(TOP) -L$(TOP) 57 TCCFLAGS = $(TCCFLAGS$(CFGWIN)) 58 TCC = $(TOP)/tcc$(EXESUF) $(TCCFLAGS) 59 ifdef CONFIG_OSX 60 TCCFLAGS += -D_ANSI_SOURCE 61 endif 62 63 CFLAGS_P = $(CFLAGS) -pg -static -DCONFIG_TCC_STATIC -DTCC_PROFILE 64 LIBS_P = $(LIBS) 65 LDFLAGS_P = $(LDFLAGS) 57 66 58 67 CONFIG_$(ARCH) = yes 59 68 NATIVE_DEFINES_$(CONFIG_i386) += -DTCC_TARGET_I386 60 NATIVE_DEFINES_$(CONFIG_x86 -64) += -DTCC_TARGET_X86_6469 NATIVE_DEFINES_$(CONFIG_x86_64) += -DTCC_TARGET_X86_64 61 70 NATIVE_DEFINES_$(CONFIG_WIN32) += -DTCC_TARGET_PE 71 NATIVE_DEFINES_$(CONFIG_OSX) += -DTCC_TARGET_MACHO 62 72 NATIVE_DEFINES_$(CONFIG_uClibc) += -DTCC_UCLIBC 63 NATIVE_DEFINES_$(CONFIG_arm) += -DTCC_TARGET_ARM -DWITHOUT_LIBTCC 73 NATIVE_DEFINES_$(CONFIG_musl) += -DTCC_MUSL 74 NATIVE_DEFINES_$(CONFIG_libgcc) += -DCONFIG_USE_LIBGCC 75 NATIVE_DEFINES_$(CONFIG_selinux) += -DHAVE_SELINUX 76 NATIVE_DEFINES_$(CONFIG_arm) += -DTCC_TARGET_ARM 64 77 NATIVE_DEFINES_$(CONFIG_arm_eabihf) += -DTCC_ARM_EABI -DTCC_ARM_HARDFLOAT 65 78 NATIVE_DEFINES_$(CONFIG_arm_eabi) += -DTCC_ARM_EABI 66 79 NATIVE_DEFINES_$(CONFIG_arm_vfp) += -DTCC_ARM_VFP 80 NATIVE_DEFINES_$(CONFIG_arm64) += -DTCC_TARGET_ARM64 67 81 NATIVE_DEFINES += $(NATIVE_DEFINES_yes) 68 82 69 ifeq ($(TOP),.) 70 71 PROGS=tcc$(EXESUF) 72 I386_CROSS = i386-tcc$(EXESUF) 73 WIN32_CROSS = i386-win32-tcc$(EXESUF) 74 WIN64_CROSS = x86_64-win32-tcc$(EXESUF) 75 WINCE_CROSS = arm-win32-tcc$(EXESUF) 76 X64_CROSS = x86_64-tcc$(EXESUF) 77 ARM_FPA_CROSS = arm-fpa-tcc$(EXESUF) 78 ARM_FPA_LD_CROSS = arm-fpa-ld-tcc$(EXESUF) 79 ARM_VFP_CROSS = arm-vfp-tcc$(EXESUF) 80 ARM_EABI_CROSS = arm-eabi-tcc$(EXESUF) 81 ARM_CROSS = $(ARM_FPA_CROSS) $(ARM_FPA_LD_CROSS) $(ARM_VFP_CROSS) $(ARM_EABI_CROSS) 82 C67_CROSS = c67-tcc$(EXESUF) 83 84 CORE_FILES = tcc.c libtcc.c tccpp.c tccgen.c tccelf.c tccasm.c tccrun.c 83 ifeq ($(INCLUDED),no) 84 # -------------------------------------------------------------------------- 85 # running top Makefile 86 87 PROGS = tcc$(EXESUF) 88 TCCLIBS = $(LIBTCC1) $(LIBTCC) $(LIBTCCDEF) 89 TCCDOCS = tcc.1 tcc-doc.html tcc-doc.info 90 91 all: $(PROGS) $(TCCLIBS) $(TCCDOCS) 92 93 # cross compiler targets to build 94 TCC_X = i386 x86_64 i386-win32 x86_64-win32 x86_64-osx arm arm64 arm-wince c67 95 # TCC_X += arm-fpa arm-fpa-ld arm-vfp arm-eabi 96 97 # cross libtcc1.a targets to build 98 LIBTCC1_X = i386 x86_64 i386-win32 x86_64-win32 x86_64-osx arm arm64 arm-wince 99 100 PROGS_CROSS = $(foreach X,$(TCC_X),$X-tcc$(EXESUF)) 101 LIBTCC1_CROSS = $(foreach X,$(LIBTCC1_X),$X-libtcc1.a) 102 103 # build cross compilers & libs 104 cross: $(LIBTCC1_CROSS) $(PROGS_CROSS) 105 106 # build specific cross compiler & lib 107 cross-%: %-tcc$(EXESUF) %-libtcc1.a ; 108 109 install: ; @$(MAKE) --no-print-directory install$(CFGWIN) 110 install-strip: ; @$(MAKE) --no-print-directory install$(CFGWIN) CONFIG_strip=yes 111 uninstall: ; @$(MAKE) --no-print-directory uninstall$(CFGWIN) 112 113 ifdef CONFIG_cross 114 all : cross 115 endif 116 117 # -------------------------------------------- 118 119 T = $(or $(CROSS_TARGET),$(NATIVE_TARGET),unknown) 120 X = $(if $(CROSS_TARGET),$(CROSS_TARGET)-) 121 122 DEF-i386 = -DTCC_TARGET_I386 123 DEF-x86_64 = -DTCC_TARGET_X86_64 124 DEF-i386-win32 = -DTCC_TARGET_PE -DTCC_TARGET_I386 125 DEF-x86_64-win32= -DTCC_TARGET_PE -DTCC_TARGET_X86_64 126 DEF-x86_64-osx = -DTCC_TARGET_MACHO -DTCC_TARGET_X86_64 127 DEF-arm-wince = -DTCC_TARGET_PE -DTCC_TARGET_ARM -DTCC_ARM_EABI -DTCC_ARM_VFP -DTCC_ARM_HARDFLOAT 128 DEF-arm64 = -DTCC_TARGET_ARM64 129 DEF-c67 = -DTCC_TARGET_C67 -w # disable warnigs 130 DEF-arm-fpa = -DTCC_TARGET_ARM 131 DEF-arm-fpa-ld = -DTCC_TARGET_ARM -DLDOUBLE_SIZE=12 132 DEF-arm-vfp = -DTCC_TARGET_ARM -DTCC_ARM_VFP 133 DEF-arm-eabi = -DTCC_TARGET_ARM -DTCC_ARM_VFP -DTCC_ARM_EABI 134 DEF-arm-eabihf = -DTCC_TARGET_ARM -DTCC_ARM_VFP -DTCC_ARM_EABI -DTCC_ARM_HARDFLOAT 135 DEF-arm = $(DEF-arm-eabihf) 136 DEF-$(NATIVE_TARGET) = $(NATIVE_DEFINES) 137 138 DEFINES += $(DEF-$T) $(DEF-all) 139 DEFINES += $(if $(ROOT-$T),-DCONFIG_SYSROOT="\"$(ROOT-$T)\"") 140 DEFINES += $(if $(CRT-$T),-DCONFIG_TCC_CRTPREFIX="\"$(CRT-$T)\"") 141 DEFINES += $(if $(LIB-$T),-DCONFIG_TCC_LIBPATHS="\"$(LIB-$T)\"") 142 DEFINES += $(if $(INC-$T),-DCONFIG_TCC_SYSINCLUDEPATHS="\"$(INC-$T)\"") 143 DEFINES += $(DEF-$(or $(findstring win,$T),unx)) 144 145 ifneq ($(X),) 146 ifeq ($(CONFIG_WIN32),yes) 147 DEF-win += -DTCC_LIBTCC1="\"$(X)libtcc1.a\"" 148 DEF-unx += -DTCC_LIBTCC1="\"lib/$(X)libtcc1.a\"" 149 else 150 DEF-all += -DTCC_LIBTCC1="\"$(X)libtcc1.a\"" 151 DEF-win += -DCONFIG_TCCDIR="\"$(tccdir)/win32\"" 152 endif 153 endif 154 155 # include custom configuration (see make help) 156 -include config-extra.mak 157 158 CORE_FILES = tcc.c tcctools.c libtcc.c tccpp.c tccgen.c tccelf.c tccasm.c tccrun.c 85 159 CORE_FILES += tcc.h config.h libtcc.h tcctok.h 86 CORE_FILES += dummy.c 87 I386_FILES = $(CORE_FILES) i386-gen.c i386-asm.c i386-asm.h i386-tok.h 88 WIN32_FILES = $(CORE_FILES) i386-gen.c i386-asm.c i386-asm.h i386-tok.h tccpe.c 89 WIN64_FILES = $(CORE_FILES) x86_64-gen.c i386-asm.c x86_64-asm.h tccpe.c 90 WINCE_FILES = $(CORE_FILES) arm-gen.c tccpe.c 91 X86_64_FILES = $(CORE_FILES) x86_64-gen.c i386-asm.c x86_64-asm.h 92 ARM_FILES = $(CORE_FILES) arm-gen.c 93 C67_FILES = $(CORE_FILES) c67-gen.c tcccoff.c 94 95 ifdef CONFIG_WIN64 96 PROGS+=tiny_impdef$(EXESUF) tiny_libmaker$(EXESUF) 97 NATIVE_FILES=$(WIN64_FILES) 98 PROGS_CROSS=$(WIN32_CROSS) $(I386_CROSS) $(X64_CROSS) $(ARM_CROSS) $(C67_CROSS) 99 LIBTCC1_CROSS=lib/i386-win32/libtcc1.a 100 LIBTCC1=libtcc1.a 101 else ifdef CONFIG_WIN32 102 PROGS+=tiny_impdef$(EXESUF) tiny_libmaker$(EXESUF) 103 NATIVE_FILES=$(WIN32_FILES) 104 PROGS_CROSS=$(WIN64_CROSS) $(I386_CROSS) $(X64_CROSS) $(ARM_CROSS) $(C67_CROSS) 105 LIBTCC1_CROSS=lib/x86_64-win32/libtcc1.a 106 LIBTCC1=libtcc1.a 107 else ifeq ($(ARCH),i386) 108 NATIVE_FILES=$(I386_FILES) 109 PROGS_CROSS=$(X64_CROSS) $(WIN32_CROSS) $(WIN64_CROSS) $(ARM_CROSS) $(C67_CROSS) 110 LIBTCC1_CROSS=lib/i386-win32/libtcc1.a lib/x86_64-win32/libtcc1.a 111 LIBTCC1=libtcc1.a 112 else ifeq ($(ARCH),x86-64) 113 NATIVE_FILES=$(X86_64_FILES) 114 PROGS_CROSS=$(I386_CROSS) $(WIN32_CROSS) $(WIN64_CROSS) $(ARM_CROSS) $(C67_CROSS) 115 LIBTCC1_CROSS=lib/i386-win32/libtcc1.a lib/x86_64-win32/libtcc1.a lib/i386/libtcc1.a 116 LIBTCC1=libtcc1.a 117 else ifeq ($(ARCH),arm) 118 NATIVE_FILES=$(ARM_FILES) 119 PROGS_CROSS=$(I386_CROSS) $(X64_CROSS) $(WIN32_CROSS) $(WIN64_CROSS) $(C67_CROSS) 120 endif 121 122 ifeq ($(TARGETOS),Darwin) 123 PROGS+=tiny_libmaker$(EXESUF) 124 endif 125 126 ifdef CONFIG_USE_LIBGCC 127 LIBTCC1= 128 endif 129 130 TCCLIBS = $(LIBTCC1) $(LIBTCC) 131 TCCDOCS = tcc.1 tcc-doc.html tcc-doc.info 132 133 ifdef CONFIG_CROSS 134 PROGS+=$(PROGS_CROSS) 135 TCCLIBS+=$(LIBTCC1_CROSS) 136 endif 137 138 all: $(PROGS) $(TCCLIBS) $(TCCDOCS) 160 i386_FILES = $(CORE_FILES) i386-gen.c i386-link.c i386-asm.c i386-asm.h i386-tok.h 161 i386-win32_FILES = $(i386_FILES) tccpe.c 162 x86_64_FILES = $(CORE_FILES) x86_64-gen.c x86_64-link.c i386-asm.c x86_64-asm.h 163 x86_64-win32_FILES = $(x86_64_FILES) tccpe.c 164 x86_64-osx_FILES = $(x86_64_FILES) 165 arm_FILES = $(CORE_FILES) arm-gen.c arm-link.c arm-asm.c 166 arm-wince_FILES = $(arm_FILES) tccpe.c 167 arm64_FILES = $(CORE_FILES) arm64-gen.c arm64-link.c 168 c67_FILES = $(CORE_FILES) c67-gen.c c67-link.c tcccoff.c 169 170 # libtcc sources 171 LIBTCC_SRC = $(filter-out tcc.c tcctools.c,$(filter %.c,$($T_FILES))) 172 173 ifeq ($(ONE_SOURCE),yes) 174 LIBTCC_OBJ = $(X)libtcc.o 175 LIBTCC_INC = $($T_FILES) 176 TCC_FILES = $(X)tcc.o 177 tcc.o : DEFINES += -DONE_SOURCE=0 178 else 179 LIBTCC_OBJ = $(patsubst %.c,$(X)%.o,$(LIBTCC_SRC)) 180 LIBTCC_INC = $(filter %.h %-gen.c %-link.c,$($T_FILES)) 181 TCC_FILES = $(X)tcc.o $(LIBTCC_OBJ) 182 $(TCC_FILES) : DEFINES += -DONE_SOURCE=0 183 endif 184 185 # target specific object rule 186 $(X)%.o : %.c $(LIBTCC_INC) 187 $(CC) -o $@ -c $< $(DEFINES) $(CFLAGS) 188 189 # additional dependencies 190 $(X)tcc.o : tcctools.c 139 191 140 192 # Host Tiny C Compiler 141 193 tcc$(EXESUF): tcc.o $(LIBTCC) 142 $(CC) -o $@ $^ $(LIBS) $( CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(LINK_LIBTCC)194 $(CC) -o $@ $^ $(LIBS) $(LDFLAGS) $(LINK_LIBTCC) 143 195 144 196 # Cross Tiny C Compilers 145 %-tcc$(EXESUF): tcc.c 146 $(CC) -o $@ $< -DONE_SOURCE $(DEFINES) $(CPPFLAGS) $(CFLAGS) $(LIBS) $(LDFLAGS) 197 %-tcc$(EXESUF): FORCE 198 @$(MAKE) --no-print-directory $@ CROSS_TARGET=$* ONE_SOURCE=$(or $(ONE_SOURCE),yes) 199 200 $(CROSS_TARGET)-tcc$(EXESUF): $(TCC_FILES) 201 $(CC) -o $@ $^ $(LIBS) $(LDFLAGS) 147 202 148 203 # profiling version 149 tcc_p$(EXESUF): $(NATIVE_FILES) 150 $(CC) -o $@ $< -DONE_SOURCE $(NATIVE_DEFINES) $(CPPFLAGS_P) $(CFLAGS_P) $(LIBS_P) $(LDFLAGS_P) 151 152 $(I386_CROSS): DEFINES = -DTCC_TARGET_I386 \ 153 -DCONFIG_TCCDIR="\"$(tccdir)/i386\"" 154 $(X64_CROSS): DEFINES = -DTCC_TARGET_X86_64 155 $(WIN32_CROSS): DEFINES = -DTCC_TARGET_I386 -DTCC_TARGET_PE \ 156 -DCONFIG_TCCDIR="\"$(tccdir)/win32\"" \ 157 -DCONFIG_TCC_LIBPATHS="\"{B}/lib/32;{B}/lib\"" 158 $(WIN64_CROSS): DEFINES = -DTCC_TARGET_X86_64 -DTCC_TARGET_PE \ 159 -DCONFIG_TCCDIR="\"$(tccdir)/win32\"" \ 160 -DCONFIG_TCC_LIBPATHS="\"{B}/lib/64;{B}/lib\"" 161 $(WINCE_CROSS): DEFINES = -DTCC_TARGET_PE 162 $(C67_CROSS): DEFINES = -DTCC_TARGET_C67 163 $(ARM_FPA_CROSS): DEFINES = -DTCC_TARGET_ARM 164 $(ARM_FPA_LD_CROSS)$(EXESUF): DEFINES = -DTCC_TARGET_ARM -DLDOUBLE_SIZE=12 165 $(ARM_VFP_CROSS): DEFINES = -DTCC_TARGET_ARM -DTCC_ARM_VFP 166 $(ARM_EABI_CROSS): DEFINES = -DTCC_TARGET_ARM -DTCC_ARM_EABI 167 168 $(I386_CROSS): $(I386_FILES) 169 $(X64_CROSS): $(X86_64_FILES) 170 $(WIN32_CROSS): $(WIN32_FILES) 171 $(WIN64_CROSS): $(WIN64_FILES) 172 $(WINCE_CROSS): $(WINCE_FILES) 173 $(C67_CROSS): $(C67_FILES) 174 $(ARM_FPA_CROSS) $(ARM_FPA_LD_CROSS) $(ARM_VFP_CROSS) $(ARM_EABI_CROSS): $(ARM_FILES) 175 176 # libtcc generation and test 177 ifndef ONE_SOURCE 178 LIBTCC_OBJ = $(filter-out tcc.o,$(patsubst %.c,%.o,$(filter %.c,$(NATIVE_FILES)))) 179 LIBTCC_INC = $(filter %.h,$(CORE_FILES)) $(filter-out $(CORE_FILES),$(NATIVE_FILES)) 180 else 181 LIBTCC_OBJ = libtcc.o 182 LIBTCC_INC = $(NATIVE_FILES) 183 libtcc.o : NATIVE_DEFINES += -DONE_SOURCE 184 endif 185 186 $(LIBTCC_OBJ) tcc.o : %.o : %.c $(LIBTCC_INC) 187 $(CC) -o $@ -c $< $(NATIVE_DEFINES) $(CPPFLAGS) $(CFLAGS) 188 204 tcc_p$(EXESUF): $($T_FILES) 205 $(CC) -o $@ $< $(DEFINES) $(CFLAGS_P) $(LIBS_P) $(LDFLAGS_P) 206 207 # static libtcc library 189 208 libtcc.a: $(LIBTCC_OBJ) 190 209 $(AR) rcs $@ $^ 191 210 192 libtcc.so.1.0: $(LIBTCC_OBJ) 211 # dynamic libtcc library 212 libtcc.so: $(LIBTCC_OBJ) 193 213 $(CC) -shared -Wl,-soname,$@ -o $@ $^ $(LDFLAGS) 194 214 195 libtcc.so.1.0: CFLAGS+=-fPIC 196 197 # windows utilities 198 tiny_impdef$(EXESUF): win32/tools/tiny_impdef.c 199 $(CC) -o $@ $< $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) 200 tiny_libmaker$(EXESUF): win32/tools/tiny_libmaker.c 201 $(CC) -o $@ $< $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) 215 libtcc.so: CFLAGS+=-fPIC 216 libtcc.so: LDFLAGS+=-fPIC 217 218 # windows dynamic libtcc library 219 libtcc.dll : $(LIBTCC_OBJ) 220 $(CC) -shared -o $@ $^ $(LDFLAGS) 221 libtcc.dll : DEFINES += -DLIBTCC_AS_DLL 222 223 # import file for windows libtcc.dll 224 libtcc.def : libtcc.dll tcc$(EXESUF) 225 $(XTCC) -impdef $< -o $@ 226 XTCC ?= ./tcc$(EXESUF) 202 227 203 228 # TinyCC runtime libraries 204 libtcc1.a : FORCE 205 $(MAKE) -C lib native 206 lib/%/libtcc1.a : FORCE $(PROGS_CROSS) 207 $(MAKE) -C lib cross TARGET=$* 208 229 libtcc1.a : tcc$(EXESUF) FORCE 230 @$(MAKE) -C lib DEFINES='$(DEF-$T)' 231 232 # Cross libtcc1.a 233 %-libtcc1.a : %-tcc$(EXESUF) FORCE 234 @$(MAKE) -C lib DEFINES='$(DEF-$*)' CROSS_TARGET=$* 235 236 .PRECIOUS: %-libtcc1.a 209 237 FORCE: 210 238 211 # install 212 TCC_INCLUDES = stdarg.h stddef.h stdbool.h float.h varargs.h tcclib.h 213 INSTALL=install 214 ifdef STRIP_BINARIES 215 INSTALLBIN=$(INSTALL) -s 216 else 217 INSTALLBIN=$(INSTALL) 218 endif 219 220 ifndef CONFIG_WIN32 221 install: $(PROGS) $(TCCLIBS) $(TCCDOCS) 222 mkdir -p "$(bindir)" 223 ifeq ($(CC),tcc) 224 $(INSTALL) -m755 $(PROGS) "$(bindir)" 225 else 226 $(INSTALLBIN) -m755 $(PROGS) "$(bindir)" 227 endif 228 mkdir -p "$(mandir)/man1" 229 -$(INSTALL) tcc.1 "$(mandir)/man1" 230 mkdir -p "$(infodir)" 231 -$(INSTALL) tcc-doc.info "$(infodir)" 232 mkdir -p "$(tccdir)" 233 mkdir -p "$(tccdir)/include" 234 ifneq ($(LIBTCC1),) 235 $(INSTALL) -m644 $(LIBTCC1) "$(tccdir)" 236 endif 237 $(INSTALL) -m644 $(addprefix $(top_srcdir)/include/,$(TCC_INCLUDES)) "$(tccdir)/include" 238 mkdir -p "$(libdir)" 239 $(INSTALL) -m755 $(LIBTCC) "$(libdir)" 240 ifdef DISABLE_STATIC 241 ln -sf "$(ln_libdir)/libtcc.so.1.0" "$(libdir)/libtcc.so.1" 242 ln -sf "$(ln_libdir)/libtcc.so.1.0" "$(libdir)/libtcc.so" 243 endif 244 mkdir -p "$(includedir)" 245 $(INSTALL) -m644 $(top_srcdir)/libtcc.h "$(includedir)" 246 mkdir -p "$(docdir)" 247 -$(INSTALL) -m644 tcc-doc.html "$(docdir)" 248 ifdef CONFIG_CROSS 249 mkdir -p "$(tccdir)/win32/lib/32" 250 mkdir -p "$(tccdir)/win32/lib/64" 251 ifeq ($(ARCH),x86-64) 252 mkdir -p "$(tccdir)/i386" 253 $(INSTALL) -m644 lib/i386/libtcc1.a "$(tccdir)/i386" 254 cp -r "$(tccdir)/include" "$(tccdir)/i386" 255 endif 256 $(INSTALL) -m644 win32/lib/*.def "$(tccdir)/win32/lib" 257 $(INSTALL) -m644 lib/i386-win32/libtcc1.a "$(tccdir)/win32/lib/32" 258 $(INSTALL) -m644 lib/x86_64-win32/libtcc1.a "$(tccdir)/win32/lib/64" 259 cp -r win32/include/. "$(tccdir)/win32/include" 260 cp -r include/. "$(tccdir)/win32/include" 261 endif 262 263 uninstall: 264 rm -fv $(foreach P,$(PROGS),"$(bindir)/$P") 265 rm -fv $(foreach P,$(LIBTCC1),"$(tccdir)/$P") 266 rm -fv $(foreach P,$(TCC_INCLUDES),"$(tccdir)/include/$P") 267 rm -fv "$(docdir)/tcc-doc.html" "$(mandir)/man1/tcc.1" "$(infodir)/tcc-doc.info" 268 rm -fv "$(libdir)/$(LIBTCC)" "$(includedir)/libtcc.h" 269 rm -fv "$(libdir)/libtcc.so*" 270 rm -rf "$(tccdir)/win32" 271 -rmdir $(tccdir)/include 272 ifeq ($(ARCH),x86-64) 273 rm -rf "$(tccdir)/i386" 274 endif 275 else 276 # on windows 277 install: $(PROGS) $(TCCLIBS) $(TCCDOCS) 278 mkdir -p "$(tccdir)" 279 mkdir -p "$(tccdir)/lib" 280 mkdir -p "$(tccdir)/include" 281 mkdir -p "$(tccdir)/examples" 282 mkdir -p "$(tccdir)/doc" 283 mkdir -p "$(tccdir)/libtcc" 284 $(INSTALLBIN) -m755 $(PROGS) "$(tccdir)" 285 $(INSTALL) -m644 $(LIBTCC1) win32/lib/*.def "$(tccdir)/lib" 286 cp -r win32/include/. "$(tccdir)/include" 287 cp -r win32/examples/. "$(tccdir)/examples" 288 $(INSTALL) -m644 $(addprefix include/,$(TCC_INCLUDES)) "$(tccdir)/include" 289 $(INSTALL) -m644 tcc-doc.html win32/tcc-win32.txt "$(tccdir)/doc" 290 $(INSTALL) -m644 $(LIBTCC) libtcc.h "$(tccdir)/libtcc" 291 ifdef CONFIG_CROSS 292 mkdir -p "$(tccdir)/lib/32" 293 mkdir -p "$(tccdir)/lib/64" 294 -$(INSTALL) -m644 lib/i386-win32/libtcc1.a "$(tccdir)/lib/32" 295 -$(INSTALL) -m644 lib/x86_64-win32/libtcc1.a "$(tccdir)/lib/64" 296 endif 297 298 uninstall: 299 rm -rfv "$(tccdir)/*" 300 endif 301 239 # -------------------------------------------------------------------------- 302 240 # documentation and man page 303 241 tcc-doc.html: tcc-doc.texi 304 -texi2html -monolithic -number $<242 makeinfo --no-split --html --number-sections -o $@ $< || true 305 243 306 244 tcc.1: tcc-doc.texi 307 -$(top_srcdir)/texi2pod.pl $< tcc.pod 308 -pod2man --section=1 --center=" " --release=" " tcc.pod > $@ 245 $(TOPSRC)/texi2pod.pl $< tcc.pod \ 246 && pod2man --section=1 --center="Tiny C Compiler" --release="$(VERSION)" tcc.pod >tmp.1 \ 247 && mv tmp.1 $@ || rm -f tmp.1 309 248 310 249 tcc-doc.info: tcc-doc.texi 311 -makeinfo $< 312 313 # in tests subdir 314 export LIBTCC1 315 316 %est: 317 $(MAKE) -C tests $@ 318 319 clean: 320 rm -vf $(PROGS) tcc_p$(EXESUF) tcc.pod *~ *.o *.a *.so* *.out *.exe libtcc_test$(EXESUF) 321 $(MAKE) -C tests $@ 322 ifneq ($(LIBTCC1),) 323 $(MAKE) -C lib $@ 324 endif 325 326 distclean: clean 327 rm -vf config.h config.mak config.texi tcc.1 tcc-doc.info tcc-doc.html 328 329 config.mak: 330 @echo "Please run ./configure." 331 @exit 1 250 makeinfo $< || true 251 252 # -------------------------------------------------------------------------- 253 # install 254 255 INSTALL = install -m644 256 INSTALLBIN = install -m755 $(STRIP_$(CONFIG_strip)) 257 STRIP_yes = -s 258 259 LIBTCC1_W = $(filter %-win32-libtcc1.a %-wince-libtcc1.a,$(LIBTCC1_CROSS)) 260 LIBTCC1_U = $(filter-out $(LIBTCC1_W),$(LIBTCC1_CROSS)) 261 IB = $(if $1,mkdir -p $2 && $(INSTALLBIN) $1 $2) 262 IBw = $(call IB,$(wildcard $1),$2) 263 IF = $(if $1,mkdir -p $2 && $(INSTALL) $1 $2) 264 IFw = $(call IF,$(wildcard $1),$2) 265 IR = mkdir -p $2 && cp -r $1/. $2 266 267 # install progs & libs 268 install-unx: 269 $(call IBw,$(PROGS) $(PROGS_CROSS),"$(bindir)") 270 $(call IFw,$(LIBTCC1) $(LIBTCC1_U),"$(tccdir)") 271 $(call IF,$(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h,"$(tccdir)/include") 272 $(call $(if $(findstring .so,$(LIBTCC)),IBw,IFw),$(LIBTCC),"$(libdir)") 273 $(call IF,$(TOPSRC)/libtcc.h,"$(includedir)") 274 $(call IFw,tcc.1,"$(mandir)/man1") 275 $(call IFw,tcc-doc.info,"$(infodir)") 276 $(call IFw,tcc-doc.html,"$(docdir)") 277 ifneq "$(wildcard $(LIBTCC1_W))" "" 278 $(call IFw,$(TOPSRC)/win32/lib/*.def $(LIBTCC1_W),"$(tccdir)/win32/lib") 279 $(call IR,$(TOPSRC)/win32/include,"$(tccdir)/win32/include") 280 $(call IF,$(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h,"$(tccdir)/win32/include") 281 endif 282 283 # uninstall 284 uninstall-unx: 285 @rm -fv $(foreach P,$(PROGS) $(PROGS_CROSS),"$(bindir)/$P") 286 @rm -fv "$(libdir)/libtcc.a" "$(libdir)/libtcc.so" "$(includedir)/libtcc.h" 287 @rm -fv "$(mandir)/man1/tcc.1" "$(infodir)/tcc-doc.info" 288 @rm -fv "$(docdir)/tcc-doc.html" 289 rm -r "$(tccdir)" 290 291 # install progs & libs on windows 292 install-win: 293 $(call IBw,$(PROGS) $(PROGS_CROSS) $(subst libtcc.a,,$(LIBTCC)),"$(bindir)") 294 $(call IF,$(TOPSRC)/win32/lib/*.def,"$(tccdir)/lib") 295 $(call IFw,libtcc1.a $(LIBTCC1_W),"$(tccdir)/lib") 296 $(call IF,$(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h,"$(tccdir)/include") 297 $(call IR,$(TOPSRC)/win32/include,"$(tccdir)/include") 298 $(call IR,$(TOPSRC)/win32/examples,"$(tccdir)/examples") 299 $(call IF,$(TOPSRC)/tests/libtcc_test.c,"$(tccdir)/examples") 300 $(call IFw,$(TOPSRC)/libtcc.h $(subst .dll,.def,$(LIBTCC)),"$(libdir)") 301 $(call IFw,$(TOPSRC)/win32/tcc-win32.txt tcc-doc.html,"$(docdir)") 302 ifneq "$(wildcard $(LIBTCC1_U))" "" 303 $(call IFw,$(LIBTCC1_U),"$(tccdir)/lib") 304 $(call IF,$(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h,"$(tccdir)/lib/include") 305 endif 306 307 # the msys-git shell works to configure && make except it does not have install 308 ifeq "$(and $(CONFIG_WIN32),$(shell which install >/dev/null 2>&1 || echo no))" "no" 309 install-win : INSTALL = cp 310 install-win : INSTALLBIN = cp 311 endif 312 313 # uninstall on windows 314 uninstall-win: 315 @rm -fv $(foreach P,$(PROGS) $(PROGS_CROSS) libtcc.dll,"$(bindir)/$P") 316 @rm -fv $(foreach F,tcc-doc.html tcc-win32.txt,"$(docdir)/$F") 317 @rm -fv $(foreach F,libtcc.h libtcc.def libtcc.a,"$(libdir)/$F") 318 rm -r "$(tccdir)" 319 320 # -------------------------------------------------------------------------- 321 # other stuff 322 323 TAGFILES = *.[ch] include/*.h lib/*.[chS] 324 tags : ; ctags $(TAGFILES) 325 # cannot have both tags and TAGS on windows 326 ETAGS : ; etags $(TAGFILES) 332 327 333 328 # create release tarball from *current* git branch (including tcc-doc.html 334 329 # and converting two files to CRLF) 335 TCC-VERSION := tcc-$(shell cat $(top_srcdir)/VERSION)330 TCC-VERSION = tcc-$(VERSION) 336 331 tar: tcc-doc.html 337 332 mkdir $(TCC-VERSION) … … 345 340 git reset 346 341 347 348 .PHONY: all clean tar distclean install uninstall FORCE 349 350 endif # ifeq ($(TOP),.) 342 config.mak: 343 $(if $(wildcard $@),,@echo "Please run ./configure." && exit 1) 344 345 # run all tests 346 test: 347 $(MAKE) -C tests 348 # run test(s) from tests2 subdir (see make help) 349 tests2.%: 350 $(MAKE) -C tests/tests2 $@ 351 352 clean: 353 rm -f tcc$(EXESUF) tcc_p$(EXESUF) *-tcc$(EXESUF) tcc.pod 354 rm -f *~ *.o *.a *.so* *.out *.log lib*.def *.exe *.dll a.out tags TAGS 355 @$(MAKE) -C lib $@ 356 @$(MAKE) -C tests $@ 357 358 distclean: clean 359 rm -f config.h config.mak config.texi tcc.1 tcc-doc.info tcc-doc.html 360 361 .PHONY: all clean test tar tags ETAGS distclean install uninstall FORCE 362 363 help: 364 @echo "make" 365 @echo " build native compiler (from separate objects)" 366 @echo "" 367 @echo "make cross" 368 @echo " build cross compilers (from one source)" 369 @echo "" 370 @echo "make ONE_SOURCE=yes / no" 371 @echo " force building from one source / separate objects" 372 @echo "" 373 @echo "make cross-TARGET" 374 @echo " build one specific cross compiler for 'TARGET', as in" 375 @echo " $(TCC_X)" 376 @echo "" 377 @echo "Custom configuration:" 378 @echo " The makefile includes a file 'config-extra.mak' if it is present." 379 @echo " This file may contain some custom configuration. For example:" 380 @echo "" 381 @echo " NATIVE_DEFINES += -D..." 382 @echo "" 383 @echo " Or for example to configure the search paths for a cross-compiler" 384 @echo " that expects the linux files in <tccdir>/i386-linux:" 385 @echo "" 386 @echo " ROOT-i386 = {B}/i386-linux" 387 @echo " CRT-i386 = {B}/i386-linux/usr/lib" 388 @echo " LIB-i386 = {B}/i386-linux/lib:{B}/i386-linux/usr/lib" 389 @echo " INC-i386 = {B}/lib/include:{B}/i386-linux/usr/include" 390 @echo " DEF-i386 += -D__linux__" 391 @echo "" 392 @echo "make test" 393 @echo " run all tests" 394 @echo "" 395 @echo "make tests2.all / make tests2.37 / make tests2.37+" 396 @echo " run all/single test(s) from tests2, optionally update .expect" 397 @echo "" 398 @echo "Other supported make targets:" 399 @echo " install install-strip tags ETAGS tar clean distclean help" 400 @echo "" 401 402 # -------------------------------------------------------------------------- 403 endif # ($(INCLUDED),no)
Note:
See TracChangeset
for help on using the changeset viewer.