Ignore:
Timestamp:
Jan 21, 2018, 12:10:09 AM (6 years ago)
Author:
coas-nagasima
Message:

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

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# --------------------------------------------------------------------------
    12#
    23# Tiny C Compiler Makefile
    34#
    45
    5 TOP ?= .
     6ifndef TOP
     7 TOP = .
     8 INCLUDED = no
     9endif
     10
    611include $(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
     13ifeq (-$(CC)-$(GCC_MAJOR)-$(findstring $(GCC_MINOR),56789)-,-gcc-4--)
     14 CFLAGS += -D_FORTIFY_SOURCE=0
     15endif
     16
     17LIBTCC = libtcc.a
     18LIBTCC1 = libtcc1.a
     19LINK_LIBTCC =
     20LIBS =
     21CFLAGS += -I$(TOP)
     22CFLAGS += $(CPPFLAGS)
     23VPATH = $(TOPSRC)
     24
     25ifdef 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)
    1832else
    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
     52endif
     53
     54# run local version of tcc with local libraries and includes
     55TCCFLAGS-unx = -B$(TOP) -I$(TOPSRC)/include -I$(TOPSRC) -I$(TOP)
     56TCCFLAGS-win = -B$(TOPSRC)/win32 -I$(TOPSRC)/include -I$(TOPSRC) -I$(TOP) -L$(TOP)
     57TCCFLAGS = $(TCCFLAGS$(CFGWIN))
     58TCC = $(TOP)/tcc$(EXESUF) $(TCCFLAGS)
     59ifdef CONFIG_OSX
     60 TCCFLAGS += -D_ANSI_SOURCE
     61endif
     62
     63CFLAGS_P = $(CFLAGS) -pg -static -DCONFIG_TCC_STATIC -DTCC_PROFILE
     64LIBS_P = $(LIBS)
     65LDFLAGS_P = $(LDFLAGS)
    5766
    5867CONFIG_$(ARCH) = yes
    5968NATIVE_DEFINES_$(CONFIG_i386) += -DTCC_TARGET_I386
    60 NATIVE_DEFINES_$(CONFIG_x86-64) += -DTCC_TARGET_X86_64
     69NATIVE_DEFINES_$(CONFIG_x86_64) += -DTCC_TARGET_X86_64
    6170NATIVE_DEFINES_$(CONFIG_WIN32) += -DTCC_TARGET_PE
     71NATIVE_DEFINES_$(CONFIG_OSX) += -DTCC_TARGET_MACHO
    6272NATIVE_DEFINES_$(CONFIG_uClibc) += -DTCC_UCLIBC
    63 NATIVE_DEFINES_$(CONFIG_arm) += -DTCC_TARGET_ARM -DWITHOUT_LIBTCC
     73NATIVE_DEFINES_$(CONFIG_musl) += -DTCC_MUSL
     74NATIVE_DEFINES_$(CONFIG_libgcc) += -DCONFIG_USE_LIBGCC
     75NATIVE_DEFINES_$(CONFIG_selinux) += -DHAVE_SELINUX
     76NATIVE_DEFINES_$(CONFIG_arm) += -DTCC_TARGET_ARM
    6477NATIVE_DEFINES_$(CONFIG_arm_eabihf) += -DTCC_ARM_EABI -DTCC_ARM_HARDFLOAT
    6578NATIVE_DEFINES_$(CONFIG_arm_eabi) += -DTCC_ARM_EABI
    6679NATIVE_DEFINES_$(CONFIG_arm_vfp) += -DTCC_ARM_VFP
     80NATIVE_DEFINES_$(CONFIG_arm64) += -DTCC_TARGET_ARM64
    6781NATIVE_DEFINES += $(NATIVE_DEFINES_yes)
    6882
    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
     83ifeq ($(INCLUDED),no)
     84# --------------------------------------------------------------------------
     85# running top Makefile
     86
     87PROGS = tcc$(EXESUF)
     88TCCLIBS = $(LIBTCC1) $(LIBTCC) $(LIBTCCDEF)
     89TCCDOCS = tcc.1 tcc-doc.html tcc-doc.info
     90
     91all: $(PROGS) $(TCCLIBS) $(TCCDOCS)
     92
     93# cross compiler targets to build
     94TCC_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
     98LIBTCC1_X = i386 x86_64 i386-win32 x86_64-win32 x86_64-osx arm arm64 arm-wince
     99
     100PROGS_CROSS = $(foreach X,$(TCC_X),$X-tcc$(EXESUF))
     101LIBTCC1_CROSS = $(foreach X,$(LIBTCC1_X),$X-libtcc1.a)
     102
     103# build cross compilers & libs
     104cross: $(LIBTCC1_CROSS) $(PROGS_CROSS)
     105
     106# build specific cross compiler & lib
     107cross-%: %-tcc$(EXESUF) %-libtcc1.a ;
     108
     109install: ; @$(MAKE) --no-print-directory install$(CFGWIN)
     110install-strip: ; @$(MAKE) --no-print-directory install$(CFGWIN) CONFIG_strip=yes
     111uninstall: ; @$(MAKE) --no-print-directory uninstall$(CFGWIN)
     112
     113ifdef CONFIG_cross
     114all : cross
     115endif
     116
     117# --------------------------------------------
     118
     119T = $(or $(CROSS_TARGET),$(NATIVE_TARGET),unknown)
     120X = $(if $(CROSS_TARGET),$(CROSS_TARGET)-)
     121
     122DEF-i386        = -DTCC_TARGET_I386
     123DEF-x86_64      = -DTCC_TARGET_X86_64
     124DEF-i386-win32  = -DTCC_TARGET_PE -DTCC_TARGET_I386
     125DEF-x86_64-win32= -DTCC_TARGET_PE -DTCC_TARGET_X86_64
     126DEF-x86_64-osx  = -DTCC_TARGET_MACHO -DTCC_TARGET_X86_64
     127DEF-arm-wince   = -DTCC_TARGET_PE -DTCC_TARGET_ARM -DTCC_ARM_EABI -DTCC_ARM_VFP -DTCC_ARM_HARDFLOAT
     128DEF-arm64       = -DTCC_TARGET_ARM64
     129DEF-c67         = -DTCC_TARGET_C67 -w # disable warnigs
     130DEF-arm-fpa     = -DTCC_TARGET_ARM
     131DEF-arm-fpa-ld  = -DTCC_TARGET_ARM -DLDOUBLE_SIZE=12
     132DEF-arm-vfp     = -DTCC_TARGET_ARM -DTCC_ARM_VFP
     133DEF-arm-eabi    = -DTCC_TARGET_ARM -DTCC_ARM_VFP -DTCC_ARM_EABI
     134DEF-arm-eabihf  = -DTCC_TARGET_ARM -DTCC_ARM_VFP -DTCC_ARM_EABI -DTCC_ARM_HARDFLOAT
     135DEF-arm         = $(DEF-arm-eabihf)
     136DEF-$(NATIVE_TARGET) = $(NATIVE_DEFINES)
     137
     138DEFINES += $(DEF-$T) $(DEF-all)
     139DEFINES += $(if $(ROOT-$T),-DCONFIG_SYSROOT="\"$(ROOT-$T)\"")
     140DEFINES += $(if $(CRT-$T),-DCONFIG_TCC_CRTPREFIX="\"$(CRT-$T)\"")
     141DEFINES += $(if $(LIB-$T),-DCONFIG_TCC_LIBPATHS="\"$(LIB-$T)\"")
     142DEFINES += $(if $(INC-$T),-DCONFIG_TCC_SYSINCLUDEPATHS="\"$(INC-$T)\"")
     143DEFINES += $(DEF-$(or $(findstring win,$T),unx))
     144
     145ifneq ($(X),)
     146ifeq ($(CONFIG_WIN32),yes)
     147DEF-win += -DTCC_LIBTCC1="\"$(X)libtcc1.a\""
     148DEF-unx += -DTCC_LIBTCC1="\"lib/$(X)libtcc1.a\""
     149else
     150DEF-all += -DTCC_LIBTCC1="\"$(X)libtcc1.a\""
     151DEF-win += -DCONFIG_TCCDIR="\"$(tccdir)/win32\""
     152endif
     153endif
     154
     155# include custom configuration (see make help)
     156-include config-extra.mak
     157
     158CORE_FILES = tcc.c tcctools.c libtcc.c tccpp.c tccgen.c tccelf.c tccasm.c tccrun.c
    85159CORE_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)
     160i386_FILES = $(CORE_FILES) i386-gen.c i386-link.c i386-asm.c i386-asm.h i386-tok.h
     161i386-win32_FILES = $(i386_FILES) tccpe.c
     162x86_64_FILES = $(CORE_FILES) x86_64-gen.c x86_64-link.c i386-asm.c x86_64-asm.h
     163x86_64-win32_FILES = $(x86_64_FILES) tccpe.c
     164x86_64-osx_FILES = $(x86_64_FILES)
     165arm_FILES = $(CORE_FILES) arm-gen.c arm-link.c arm-asm.c
     166arm-wince_FILES = $(arm_FILES) tccpe.c
     167arm64_FILES = $(CORE_FILES) arm64-gen.c arm64-link.c
     168c67_FILES = $(CORE_FILES) c67-gen.c c67-link.c tcccoff.c
     169
     170# libtcc sources
     171LIBTCC_SRC = $(filter-out tcc.c tcctools.c,$(filter %.c,$($T_FILES)))
     172
     173ifeq ($(ONE_SOURCE),yes)
     174LIBTCC_OBJ = $(X)libtcc.o
     175LIBTCC_INC = $($T_FILES)
     176TCC_FILES = $(X)tcc.o
     177tcc.o : DEFINES += -DONE_SOURCE=0
     178else
     179LIBTCC_OBJ = $(patsubst %.c,$(X)%.o,$(LIBTCC_SRC))
     180LIBTCC_INC = $(filter %.h %-gen.c %-link.c,$($T_FILES))
     181TCC_FILES = $(X)tcc.o $(LIBTCC_OBJ)
     182$(TCC_FILES) : DEFINES += -DONE_SOURCE=0
     183endif
     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
    139191
    140192# Host Tiny C Compiler
    141193tcc$(EXESUF): tcc.o $(LIBTCC)
    142         $(CC) -o $@ $^ $(LIBS) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(LINK_LIBTCC)
     194        $(CC) -o $@ $^ $(LIBS) $(LDFLAGS) $(LINK_LIBTCC)
    143195
    144196# 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)
    147202
    148203# 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 
     204tcc_p$(EXESUF): $($T_FILES)
     205        $(CC) -o $@ $< $(DEFINES) $(CFLAGS_P) $(LIBS_P) $(LDFLAGS_P)
     206
     207# static libtcc library
    189208libtcc.a: $(LIBTCC_OBJ)
    190209        $(AR) rcs $@ $^
    191210
    192 libtcc.so.1.0: $(LIBTCC_OBJ)
     211# dynamic libtcc library
     212libtcc.so: $(LIBTCC_OBJ)
    193213        $(CC) -shared -Wl,-soname,$@ -o $@ $^ $(LDFLAGS)
    194214
    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)
     215libtcc.so: CFLAGS+=-fPIC
     216libtcc.so: LDFLAGS+=-fPIC
     217
     218# windows dynamic libtcc library
     219libtcc.dll : $(LIBTCC_OBJ)
     220        $(CC) -shared -o $@ $^ $(LDFLAGS)
     221libtcc.dll : DEFINES += -DLIBTCC_AS_DLL
     222
     223# import file for windows libtcc.dll
     224libtcc.def : libtcc.dll tcc$(EXESUF)
     225        $(XTCC) -impdef $< -o $@
     226XTCC ?= ./tcc$(EXESUF)
    202227
    203228# 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 
     229libtcc1.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
    209237FORCE:
    210238
    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# --------------------------------------------------------------------------
    302240# documentation and man page
    303241tcc-doc.html: tcc-doc.texi
    304         -texi2html -monolithic -number $<
     242        makeinfo --no-split --html --number-sections -o $@ $< || true
    305243
    306244tcc.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
    309248
    310249tcc-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
     255INSTALL = install -m644
     256INSTALLBIN = install -m755 $(STRIP_$(CONFIG_strip))
     257STRIP_yes = -s
     258
     259LIBTCC1_W = $(filter %-win32-libtcc1.a %-wince-libtcc1.a,$(LIBTCC1_CROSS))
     260LIBTCC1_U = $(filter-out $(LIBTCC1_W),$(LIBTCC1_CROSS))
     261IB = $(if $1,mkdir -p $2 && $(INSTALLBIN) $1 $2)
     262IBw = $(call IB,$(wildcard $1),$2)
     263IF = $(if $1,mkdir -p $2 && $(INSTALL) $1 $2)
     264IFw = $(call IF,$(wildcard $1),$2)
     265IR = mkdir -p $2 && cp -r $1/. $2
     266
     267# install progs & libs
     268install-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)")
     277ifneq "$(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")
     281endif
     282
     283# uninstall
     284uninstall-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
     292install-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)")
     302ifneq "$(wildcard $(LIBTCC1_U))" ""
     303        $(call IFw,$(LIBTCC1_U),"$(tccdir)/lib")
     304        $(call IF,$(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h,"$(tccdir)/lib/include")
     305endif
     306
     307# the msys-git shell works to configure && make except it does not have install
     308ifeq "$(and $(CONFIG_WIN32),$(shell which install >/dev/null 2>&1 || echo no))" "no"
     309install-win : INSTALL = cp
     310install-win : INSTALLBIN = cp
     311endif
     312
     313# uninstall on windows
     314uninstall-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
     323TAGFILES = *.[ch] include/*.h lib/*.[chS]
     324tags : ; ctags $(TAGFILES)
     325# cannot have both tags and TAGS on windows
     326ETAGS : ; etags $(TAGFILES)
    332327
    333328# create release tarball from *current* git branch (including tcc-doc.html
    334329# and converting two files to CRLF)
    335 TCC-VERSION := tcc-$(shell cat $(top_srcdir)/VERSION)
     330TCC-VERSION = tcc-$(VERSION)
    336331tar:    tcc-doc.html
    337332        mkdir $(TCC-VERSION)
     
    345340        git reset
    346341
    347 
    348 .PHONY: all clean tar distclean install uninstall FORCE
    349 
    350 endif # ifeq ($(TOP),.)
     342config.mak:
     343        $(if $(wildcard $@),,@echo "Please run ./configure." && exit 1)
     344
     345# run all tests
     346test:
     347        $(MAKE) -C tests
     348# run test(s) from tests2 subdir (see make help)
     349tests2.%:
     350        $(MAKE) -C tests/tests2 $@
     351
     352clean:
     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
     358distclean: 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
     363help:
     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# --------------------------------------------------------------------------
     403endif # ($(INCLUDED),no)
Note: See TracChangeset for help on using the changeset viewer.