Makefile revision 201852
1221167Sgnn# $FreeBSD: head/gnu/lib/libgcc/Makefile 201852 2010-01-08 23:11:23Z imp $ 2221167SgnnGCCDIR= ${.CURDIR}/../../../contrib/gcc 3221167SgnnGCCLIB= ${.CURDIR}/../../../contrib/gcclibs 4221167Sgnn 5221167SgnnLIB= gcc 6221167SgnnSHLIB_NAME= libgcc_s.so.1 7221167SgnnSHLIBDIR?= /lib 8221167Sgnn 9221167Sgnn.include <bsd.own.mk> 10221167Sgnn# 11221167Sgnn# libgcc is linked in last and thus cannot depend on ssp symbols coming 12221167Sgnn# from earlier libraries. Disable stack protection for this library. 13221167Sgnn# 14221167SgnnMK_SSP= no 15221167Sgnn 16221167Sgnn.include "${.CURDIR}/../../usr.bin/cc/Makefile.tgt" 17221167Sgnn 18221167Sgnn.PATH: ${GCCDIR}/config/${GCC_CPU} ${GCCDIR}/config ${GCCDIR} 19221167Sgnn 20221167SgnnCFLAGS+= -DIN_GCC -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED \ 21221167Sgnn -DHAVE_GTHR_DEFAULT \ 22221167Sgnn -I${GCCLIB}/include \ 23221167Sgnn -I${GCCDIR}/config -I${GCCDIR} -I. \ 24221167Sgnn -I${.CURDIR}/../../usr.bin/cc/cc_tools 25221167Sgnn 26221167SgnnLDFLAGS+= -nodefaultlibs 27221167SgnnLDADD+= -lc 28221167Sgnn 29221167SgnnOBJS= # added to below in various ways depending on TARGET_ARCH 30221167Sgnn 31221167Sgnn#--------------------------------------------------------------------------- 32221167Sgnn# 33221167Sgnn# When upgrading GCC, get the following defintions straight from Makefile.in 34221167Sgnn# 35221167Sgnn# Library members defined in libgcc2.c. 36221167SgnnLIB2FUNCS= _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 \ 37221167Sgnn _cmpdi2 _ucmpdi2 _clear_cache \ 38221167Sgnn _enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3 \ 39221167Sgnn _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors \ 40221167Sgnn _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab \ 41221167Sgnn _popcountsi2 _popcountdi2 _paritysi2 _paritydi2 _powisf2 _powidf2 \ 42221167Sgnn _powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 \ 43221167Sgnn _divxc3 _divtc3 44221167Sgnn 45221167Sgnn# The floating-point conversion routines that involve a single-word integer. 46221167Sgnn.for mode in sf df xf 47221167SgnnLIB2FUNCS+= _fixuns${mode}si 48221167Sgnn.endfor 49221167Sgnn 50221167Sgnn# Likewise double-word routines. 51221167Sgnn.for mode in sf df xf tf 52221167SgnnLIB2FUNCS+= _fix${mode}di _fixuns${mode}di 53221167SgnnLIB2FUNCS+= _floatdi${mode} _floatundi${mode} 54221167Sgnn.endfor 55221167Sgnn 56221167SgnnLIB2ADD = $(LIB2FUNCS_EXTRA) 57221167SgnnLIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA) 58221167Sgnn 59221167Sgnn# Additional sources to handle exceptions; overridden by targets as needed. 60221167SgnnLIB2ADDEH = unwind-dw2.c unwind-dw2-fde-glibc.c unwind-sjlj.c gthr-gnat.c \ 61221167Sgnn unwind-c.c 62221167SgnnLIB2ADDEHSTATIC = $(LIB2ADDEH) 63221167SgnnLIB2ADDEHSHARED = $(LIB2ADDEH) 64221167Sgnn 65221167Sgnn# List of extra C and assembler files to add to static and shared libgcc2. 66221167Sgnn# Assembler files should have names ending in `.asm'. 67221167SgnnLIB2FUNCS_EXTRA = 68221167Sgnn 69221167Sgnn# List of extra C and assembler files to add to static libgcc2. 70221167Sgnn# Assembler files should have names ending in `.asm'. 71221167SgnnLIB2FUNCS_STATIC_EXTRA = 72221167Sgnn 73221167Sgnn# Defined in libgcc2.c, included only in the static library. 74221167Sgnn# KAN: Excluded _sf_to_tf and _df_to_tf as TPBIT_FUNCS are not 75221167Sgnn# built on any of our platforms. 76221167SgnnLIB2FUNCS_ST = _eprintf __gcc_bcmp 77221167Sgnn 78221167SgnnFPBIT_FUNCS = _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \ 79221167Sgnn _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \ 80221167Sgnn _lt_sf _le_sf _unord_sf _si_to_sf _sf_to_si _negate_sf _make_sf \ 81221167Sgnn _sf_to_df _thenan_sf _sf_to_usi _usi_to_sf 82221167Sgnn 83221167SgnnDPBIT_FUNCS = _pack_df _unpack_df _addsub_df _mul_df _div_df \ 84221167Sgnn _fpcmp_parts_df _compare_df _eq_df _ne_df _gt_df _ge_df \ 85221167Sgnn _lt_df _le_df _unord_df _si_to_df _df_to_si _negate_df _make_df \ 86221167Sgnn _df_to_sf _thenan_df _df_to_usi _usi_to_df 87221167Sgnn 88221167SgnnTPBIT_FUNCS = _pack_tf _unpack_tf _addsub_tf _mul_tf _div_tf \ 89221167Sgnn _fpcmp_parts_tf _compare_tf _eq_tf _ne_tf _gt_tf _ge_tf \ 90221167Sgnn _lt_tf _le_tf _unord_tf _si_to_tf _tf_to_si _negate_tf _make_tf \ 91221167Sgnn _tf_to_df _tf_to_sf _thenan_tf _tf_to_usi _usi_to_tf 92221167Sgnn 93221167Sgnn# These might cause a divide overflow trap and so are compiled with 94221167Sgnn# unwinder info. 95221167SgnnLIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4 96221167Sgnn 97221167Sgnn#----------------------------------------------------------------------- 98221167Sgnn# 99221167Sgnn# Platform specific bits. 100221167Sgnn# When upgrading GCC, get the following definitions from config/<cpu>/t-* 101221167Sgnn# 102221167Sgnn.if ${TARGET_ARCH} == "arm" 103221167Sgnn# from config/arm/t-strongarm-elf 104221167SgnnCFLAGS+= -Dinhibit_libc -fno-inline 105221167SgnnLIB1ASMSRC = lib1funcs.asm 106221167SgnnLIB1ASMFUNCS = _dvmd_tls _bb_init_func 107221167SgnnLIB2FUNCS_EXTRA = floatunsidf.c floatunsisf.c 108221167Sgnn 109221167Sgnn# Not now 110221167Sgnn#LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func 111221167Sgnn#LIB1ASMFUNCS+= _call_via_rX _interwork_call_via_rX \ 112221167Sgnn# _lshrdi3 _ashrdi3 _ashldi3 \ 113221167Sgnn# _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \ 114221167Sgnn# _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \ 115221167Sgnn# _fixsfsi _fixunssfsi _floatdidf _floatdisf 116221167Sgnn.endif 117221167Sgnn 118221167Sgnn.if ${TARGET_ARCH} == "mips" 119221167SgnnLIB2FUNCS_EXTRA = floatunsidf.c floatunsisf.c 120221167Sgnn.endif 121221167Sgnn 122221167Sgnn.if ${TARGET_ARCH} == "ia64" 123221167Sgnn# from config/ia64/t-ia64 124221167SgnnLIB1ASMSRC = lib1funcs.asm 125221167SgnnLIB1ASMFUNCS = __divxf3 __divdf3 __divsf3 \ 126221167Sgnn __divdi3 __moddi3 __udivdi3 __umoddi3 \ 127221167Sgnn __divsi3 __modsi3 __udivsi3 __umodsi3 __save_stack_nonlocal \ 128221167Sgnn __nonlocal_goto __restore_stack_nonlocal __trampoline \ 129221167Sgnn _fixtfdi _fixunstfdi _floatditf 130221167SgnnLIB2ADDEH = unwind-ia64.c unwind-sjlj.c unwind-c.c 131221167Sgnn.endif 132221167Sgnn 133221167Sgnn.if ${TARGET_ARCH} == "powerpc" 134221167Sgnn# from config/rs6000/t-ppccomm 135221167SgnnLIB2FUNCS_EXTRA = tramp.asm 136221167SgnnLIB2FUNCS_STATIC_EXTRA = eabi.asm 137221167Sgnn.endif 138221167Sgnn 139221167Sgnn.if ${TARGET_ARCH} == "sparc64" 140221167Sgnn# from config/sparc/t-elf 141221167SgnnLIB1ASMSRC = lb1spc.asm 142221167SgnnLIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3 143221167Sgnn.endif 144221167Sgnn 145221167Sgnn#----------------------------------------------------------------------- 146221167Sgnn 147221167Sgnn# Remove any objects from LIB2FUNCS and LIB2_DIVMOD_FUNCS that are 148221167Sgnn# defined as optimized assembly code in LIB1ASMFUNCS. 149221167Sgnn.if defined(LIB1ASMFUNCS) 150221167Sgnn.for sym in ${LIB1ASMFUNCS} 151221167SgnnLIB2FUNCS:= ${LIB2FUNCS:S/${sym}//g} 152221167SgnnLIB2_DIVMOD_FUNCS:= ${LIB2_DIVMOD_FUNCS:S/${sym}//g} 153221167Sgnn.endfor 154221167Sgnn.endif 155221167Sgnn 156221167SgnnCOMMONHDRS= tm.h tconfig.h options.h unwind.h gthr-default.h 157221167Sgnn 158221167Sgnn#----------------------------------------------------------------------- 159221167Sgnn# 160221167Sgnn# Helpful shortcuts for compiler invocations. 161221167Sgnn# 162221167SgnnHIDE = -fvisibility=hidden -DHIDE_EXPORTS 163221167SgnnCC_T = ${CC} -c ${CFLAGS} ${HIDE} -fPIC 164221167SgnnCC_P = ${CC} -c ${CFLAGS} ${HIDE} -p -fPIC 165221167SgnnCC_S = ${CC} -c ${CFLAGS} ${PICFLAG} -DSHARED 166221167Sgnn 167221167Sgnn#----------------------------------------------------------------------- 168221167Sgnn# 169221167Sgnn# Functions from libgcc2.c 170221167Sgnn# 171221167SgnnSTD_CFLAGS = 172221167SgnnDIV_CFLAGS = -fexceptions -fnon-call-exceptions 173221167Sgnn 174221167SgnnSTD_FUNCS = ${LIB2FUNCS} 175221167SgnnDIV_FUNCS = ${LIB2_DIVMOD_FUNCS} 176221167Sgnn 177221167SgnnSTD_CFILE = libgcc2.c 178221167SgnnDIV_CFILE = libgcc2.c 179221167Sgnn 180221167SgnnOBJ_GRPS = STD DIV 181221167Sgnn 182221167Sgnn#----------------------------------------------------------------------- 183221167Sgnn# 184221167Sgnn# Floating point emulation functions 185221167Sgnn# 186221167Sgnn.if ${TARGET_ARCH} == "armNOT_YET" || \ 187221167Sgnn ${TARGET_ARCH} == "powerpc" || ${TARGET_ARCH} == "sparc64" 188221167Sgnn 189221167SgnnFPBIT_CFLAGS = -DFINE_GRAINED_LIBRARIES -DFLOAT 190221167SgnnDPBIT_CFLAGS = -DFINE_GRAINED_LIBRARIES 191221167Sgnn 192221167SgnnFPBIT_CFILE = config/fp-bit.c 193221167SgnnDPBIT_CFILE = config/fp-bit.c 194221167Sgnn 195221167SgnnOBJ_GRPS += FPBIT DPBIT 196221167Sgnn.endif 197221167Sgnn 198221167Sgnn#----------------------------------------------------------------------- 199221167Sgnn# 200221167Sgnn# Generic build rules for object groups defined above 201221167Sgnn# 202221167Sgnn.for T in ${OBJ_GRPS} 203221167Sgnn${T}_OBJS_T = ${${T}_FUNCS:S/$/.o/} 204221167Sgnn${T}_OBJS_P = ${${T}_FUNCS:S/$/.po/} 205221167Sgnn${T}_OBJS_S = ${${T}_FUNCS:S/$/.So/} 206221167SgnnOBJS += ${${T}_FUNCS:S/$/.o/} 207221167Sgnn 208221167Sgnn${${T}_OBJS_T}: ${${T}_CFILE} ${COMMONHDRS} 209221167Sgnn ${CC_T} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} 210221167Sgnn${${T}_OBJS_P}: ${${T}_CFILE} ${COMMONHDRS} 211221167Sgnn ${CC_P} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} 212221167Sgnn${${T}_OBJS_S}: ${${T}_CFILE} ${COMMONHDRS} 213221167Sgnn ${CC_S} ${${T}_CFLAGS} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} 214221167Sgnn.endfor 215221167Sgnn 216221167Sgnn#----------------------------------------------------------------------- 217221167Sgnn# 218221167Sgnn# Extra objects coming from separate files 219221167Sgnn# 220221167Sgnn.if !empty(LIB2ADD) 221221167SgnnOBJS += ${LIB2ADD:R:S/$/.o/} 222221167SgnnSOBJS += ${LIB2ADD:R:S/$/.So/} 223221167SgnnPOBJS += ${LIB2ADD:R:S/$/.po/} 224221167Sgnn.endif 225221167Sgnn 226221167Sgnn#----------------------------------------------------------------------- 227221167Sgnn# 228221167Sgnn# Objects that should be in static library only. 229221167Sgnn# 230221167SgnnSYMS_ST = ${LIB2FUNCS_ST} ${LIB2ADD_ST} 231221167SgnnSTAT_OBJS_T = ${SYMS_ST:S/$/.o/} 232221167SgnnSTAT_OBJS_P = ${SYMS_ST:S/$/.po/} 233221167SgnnSTATICOBJS = ${SYMS_ST:S/$/.o/} 234221167Sgnn 235221167Sgnn${STAT_OBJS_T}: ${STD_CFILE} ${COMMONHDRS} 236221167Sgnn ${CC_T} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} 237221167Sgnn${STAT_OBJS_P}: ${STD_CFILE} ${COMMONHDRS} 238221167Sgnn ${CC_P} -DL${.PREFIX} -o ${.TARGET} ${.ALLSRC:M*.c} 239221167Sgnn 240221167Sgnn#----------------------------------------------------------------------- 241221167Sgnn# 242221167Sgnn# Assembler files. 243221167Sgnn# 244221167Sgnn.if defined(LIB1ASMSRC) 245221167SgnnASM_T = ${LIB1ASMFUNCS:S/$/.o/} 246221167SgnnASM_P = ${LIB1ASMFUNCS:S/$/.po/} 247221167SgnnASM_S = ${LIB1ASMFUNCS:S/$/.So/} 248221167SgnnASM_V = ${LIB1ASMFUNCS:S/$/.vis/} 249221167SgnnOBJS += ${LIB1ASMFUNCS:S/$/.o/} 250221167Sgnn 251221167Sgnn${ASM_T}: ${LIB1ASMSRC} ${.PREFIX}.vis 252221167Sgnn ${CC} -x assembler-with-cpp -c ${CFLAGS} -DL${.PREFIX} \ 253221167Sgnn -o ${.TARGET} -include ${.PREFIX}.vis ${.ALLSRC:N*.h:N*.vis} 254221167Sgnn${ASM_P}: ${LIB1ASMSRC} ${.PREFIX}.vis 255221167Sgnn ${CC} -x assembler-with-cpp -p -c ${CFLAGS} -DL${.PREFIX} \ 256221167Sgnn -o ${.TARGET} -include ${.PREFIX}.vis ${.ALLSRC:N*.h:N*.vis} 257221167Sgnn${ASM_S}: ${LIB1ASMSRC} 258221167Sgnn ${CC} -x assembler-with-cpp -c ${PICFLAG} ${CFLAGS} -DL${.PREFIX} \ 259221167Sgnn -o ${.TARGET} ${.ALLSRC:N*.h} 260221167Sgnn${ASM_V}: ${LIB1ASMSRC} 261221167Sgnn ${CC} -x assembler-with-cpp -c ${CFLAGS} -DL${.PREFIX} \ 262221167Sgnn -o ${.PREFIX}.vo ${.ALLSRC:N*.h} 263221167Sgnn ( nm -pg ${.PREFIX}.vo | \ 264221167Sgnn awk 'NF == 3 && $$2 !~ /^[UN]$$/ { print "\t.hidden ", $$3 }'\ 265221167Sgnn ) > ${.TARGET} 266221167Sgnn 267221167SgnnCLEANFILES += ${ASM_V} ${ASM_V:R:S/$/.vo/} 268221167Sgnn.endif 269221167Sgnn 270221167Sgnn#----------------------------------------------------------------------- 271221167Sgnn# 272221167Sgnn# Exception handling / unwinding support. 273221167Sgnn# 274221167SgnnEH_OBJS_T = ${LIB2ADDEHSTATIC:R:S/$/.o/} 275221167SgnnEH_OBJS_P = ${LIB2ADDEHSTATIC:R:S/$/.po/} 276221167SgnnEH_OBJS_S = ${LIB2ADDEHSHARED:R:S/$/.So/} 277221167SgnnEH_CFLAGS = -fexceptions -D__GLIBC__=3 -DElfW=__ElfN 278221167SgnnSOBJS += ${EH_OBJS_S} 279221167Sgnn 280221167Sgnn.for _src in ${LIB2ADDEHSTATIC} 281221167Sgnn${_src:R:S/$/.o/}: ${_src} ${COMMONHDRS} 282221167Sgnn ${CC_T} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC} 283221167Sgnn${_src:R:S/$/.po/}: ${_src} ${COMMONHDRS} 284221167Sgnn ${CC_P} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC} 285221167Sgnn.endfor 286221167Sgnn.for _src in ${LIB2ADDEHSHARED} 287221167Sgnn${_src:R:S/$/.So/}: ${_src} ${COMMONHDRS} 288221167Sgnn ${CC_S} ${EH_CFLAGS} -o ${.TARGET} ${.IMPSRC} 289221167Sgnn.endfor 290221167Sgnn 291221167Sgnn 292221167Sgnn#----------------------------------------------------------------------- 293221167Sgnn# 294221167Sgnn# Generated headers 295221167Sgnn# 296221167Sgnn${COMMONHDRS}: ${.CURDIR}/../../usr.bin/cc/cc_tools/Makefile 297221167Sgnn ${MAKE} -f ${.ALLSRC} MFILE=${.ALLSRC} GCCDIR=${GCCDIR} ${.TARGET} 298221167Sgnn 299221167SgnnCLEANFILES += ${COMMONHDRS} 300221167SgnnCLEANFILES += cs-*.h option* 301221167Sgnn 302221167Sgnn#----------------------------------------------------------------------- 303221167Sgnn# 304221167Sgnn# Build symbol version map 305221167Sgnn# 306221167SgnnSHLIB_MKMAP = ${GCCDIR}/mkmap-symver.awk 307221167SgnnSHLIB_MKMAP_OPTS = 308221167SgnnSHLIB_MAPFILES = ${GCCDIR}/libgcc-std.ver 309221167SgnnVERSION_MAP = libgcc.map 310221167Sgnn 311221167Sgnnlibgcc.map: ${SHLIB_MKMAP} ${SHLIB_MAPFILES} ${SOBJS} ${OBJS:R:S/$/.So/} 312221167Sgnn ( nm -pg ${SOBJS};echo %% ; \ 313221167Sgnn cat ${SHLIB_MAPFILES} \ 314221167Sgnn | sed -e '/^[ ]*#/d' \ 315221167Sgnn -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \ 316221167Sgnn | ${CC} ${CFLAGS} -E -xassembler-with-cpp -; \ 317221167Sgnn ) | awk -f ${SHLIB_MKMAP} ${SHLIB_MKMAP_OPTS} > ${.TARGET} 318221167Sgnn 319221167SgnnCLEANFILES += libgcc.map 320221167Sgnn 321221167Sgnn#----------------------------------------------------------------------- 322221167Sgnn# 323221167Sgnn# Build additional static libgcc_eh[_p].a libraries. 324221167Sgnn# 325221167Sgnnlib${LIB}_eh.a: ${EH_OBJS_T} 326221167Sgnn @${ECHO} building static ${LIB}_eh library 327221167Sgnn @rm -f ${.TARGET} 328221167Sgnn @${AR} cq ${.TARGET} `lorder ${EH_OBJS_T} | tsort -q` 329221167Sgnn ${RANLIB} ${.TARGET} 330221167Sgnn 331221167Sgnnall: lib${LIB}_eh.a 332221167Sgnn 333221167Sgnn.if ${MK_PROFILE} != "no" 334221167Sgnnlib${LIB}_eh_p.a: ${EH_OBJS_P} 335221167Sgnn @${ECHO} building profiled ${LIB}_eh library 336221167Sgnn @rm -f ${.TARGET} 337221167Sgnn @${AR} cq ${.TARGET} `lorder ${EH_OBJS_P} | tsort -q` 338221167Sgnn ${RANLIB} ${.TARGET} 339221167Sgnnall: lib${LIB}_eh_p.a 340221167Sgnn.endif 341221167Sgnn 342221167Sgnn_libinstall: _lib-eh-install 343221167Sgnn 344221167Sgnn_lib-eh-install: 345221167Sgnn.if ${MK_INSTALLLIB} != "no" 346221167Sgnn ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 347221167Sgnn ${_INSTALLFLAGS} lib${LIB}_eh.a ${DESTDIR}${LIBDIR} 348221167Sgnn.endif 349221167Sgnn.if ${MK_PROFILE} != "no" 350221167Sgnn ${INSTALL} -C -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ 351221167Sgnn ${_INSTALLFLAGS} lib${LIB}_eh_p.a ${DESTDIR}${LIBDIR} 352221167Sgnn.endif 353221167Sgnn 354221167SgnnCLEANFILES+= lib${LIB}_eh.a lib${LIB}_eh_p.a ${EH_OBJS_T} ${EH_OBJS_P} 355221167Sgnn 356221167Sgnn.include <bsd.lib.mk> 357221167Sgnn 358221167Sgnn.SUFFIXES: .vis .vo 359221167Sgnn