[331] | 1 | # --------------------------------------------------------------------------
|
---|
| 2 | #
|
---|
| 3 | # Tiny C Compiler Makefile
|
---|
| 4 | #
|
---|
| 5 |
|
---|
| 6 | ifndef TOP
|
---|
| 7 | TOP = .
|
---|
| 8 | INCLUDED = no
|
---|
| 9 | endif
|
---|
| 10 |
|
---|
| 11 | include $(TOP)/config.mak
|
---|
| 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)
|
---|
| 32 | else
|
---|
| 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)
|
---|
| 66 |
|
---|
| 67 | CONFIG_$(ARCH) = yes
|
---|
| 68 | NATIVE_DEFINES_$(CONFIG_i386) += -DTCC_TARGET_I386
|
---|
| 69 | NATIVE_DEFINES_$(CONFIG_x86_64) += -DTCC_TARGET_X86_64
|
---|
| 70 | NATIVE_DEFINES_$(CONFIG_WIN32) += -DTCC_TARGET_PE
|
---|
| 71 | NATIVE_DEFINES_$(CONFIG_OSX) += -DTCC_TARGET_MACHO
|
---|
| 72 | NATIVE_DEFINES_$(CONFIG_uClibc) += -DTCC_UCLIBC
|
---|
| 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
|
---|
| 77 | NATIVE_DEFINES_$(CONFIG_arm_eabihf) += -DTCC_ARM_EABI -DTCC_ARM_HARDFLOAT
|
---|
| 78 | NATIVE_DEFINES_$(CONFIG_arm_eabi) += -DTCC_ARM_EABI
|
---|
| 79 | NATIVE_DEFINES_$(CONFIG_arm_vfp) += -DTCC_ARM_VFP
|
---|
| 80 | NATIVE_DEFINES_$(CONFIG_arm64) += -DTCC_TARGET_ARM64
|
---|
| 81 | NATIVE_DEFINES += $(NATIVE_DEFINES_yes)
|
---|
| 82 |
|
---|
| 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
|
---|
| 159 | CORE_FILES += tcc.h config.h libtcc.h tcctok.h
|
---|
| 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
|
---|
| 191 |
|
---|
| 192 | # Host Tiny C Compiler
|
---|
| 193 | tcc$(EXESUF): tcc.o $(LIBTCC)
|
---|
| 194 | $(CC) -o $@ $^ $(LIBS) $(LDFLAGS) $(LINK_LIBTCC)
|
---|
| 195 |
|
---|
| 196 | # Cross Tiny C Compilers
|
---|
| 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)
|
---|
| 202 |
|
---|
| 203 | # profiling version
|
---|
| 204 | tcc_p$(EXESUF): $($T_FILES)
|
---|
| 205 | $(CC) -o $@ $< $(DEFINES) $(CFLAGS_P) $(LIBS_P) $(LDFLAGS_P)
|
---|
| 206 |
|
---|
| 207 | # static libtcc library
|
---|
| 208 | libtcc.a: $(LIBTCC_OBJ)
|
---|
| 209 | $(AR) rcs $@ $^
|
---|
| 210 |
|
---|
| 211 | # dynamic libtcc library
|
---|
| 212 | libtcc.so: $(LIBTCC_OBJ)
|
---|
| 213 | $(CC) -shared -Wl,-soname,$@ -o $@ $^ $(LDFLAGS)
|
---|
| 214 |
|
---|
| 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)
|
---|
| 227 |
|
---|
| 228 | # TinyCC runtime libraries
|
---|
| 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
|
---|
| 237 | FORCE:
|
---|
| 238 |
|
---|
| 239 | # --------------------------------------------------------------------------
|
---|
| 240 | # documentation and man page
|
---|
| 241 | tcc-doc.html: tcc-doc.texi
|
---|
| 242 | makeinfo --no-split --html --number-sections -o $@ $< || true
|
---|
| 243 |
|
---|
| 244 | tcc.1: tcc-doc.texi
|
---|
| 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
|
---|
| 248 |
|
---|
| 249 | tcc-doc.info: tcc-doc.texi
|
---|
| 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)
|
---|
| 327 |
|
---|
| 328 | # create release tarball from *current* git branch (including tcc-doc.html
|
---|
| 329 | # and converting two files to CRLF)
|
---|
| 330 | TCC-VERSION = tcc-$(VERSION)
|
---|
| 331 | tar: tcc-doc.html
|
---|
| 332 | mkdir $(TCC-VERSION)
|
---|
| 333 | ( cd $(TCC-VERSION) && git --git-dir ../.git checkout -f )
|
---|
| 334 | cp tcc-doc.html $(TCC-VERSION)
|
---|
| 335 | for f in tcc-win32.txt build-tcc.bat ; do \
|
---|
| 336 | cat win32/$$f | sed 's,\(.*\),\1\r,g' > $(TCC-VERSION)/win32/$$f ; \
|
---|
| 337 | done
|
---|
| 338 | tar cjf $(TCC-VERSION).tar.bz2 $(TCC-VERSION)
|
---|
| 339 | rm -rf $(TCC-VERSION)
|
---|
| 340 | git reset
|
---|
| 341 |
|
---|
| 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)
|
---|