blob: a29793991ebb2593b8bec4d070ec51b321224380 [file] [log] [blame]
# These are the functions which clang needs when it is targetting a previous
# version of the OS. The issue is that the backend may use functions which were
# not present in the libgcc that shipped on the platform. In such cases, we link
# with a version of the library which contains private_extern definitions of all
# the extra functions which might be referenced.
Description := Static runtime libraries for clang/Darwin.
Configs :=
UniversalArchs :=
# Configuration solely for providing access to an eprintf symbol, which may
# still be referenced from Darwin system headers. This symbol is only ever
# needed on i386.
Configs += eprintf
UniversalArchs.eprintf := i386
# Configuration for targetting 10.4. We need a few functions missing from
# libgcc_s.10.4.dylib. We only build x86 slices since clang doesn't really
# support targetting PowerPC.
Configs += 10.4
UniversalArchs.10.4 := i386 x86_64
# Configuration for targetting armv6. We need a few additional functions which
# must be in the same linkage unit.
Configs += armv6
UniversalArchs.armv6 := armv6
# Configuration for use with kernel/kexts.
Configs += cc_kext
UniversalArchs.cc_kext := armv6 armv7 i386 x86_64
###
CC := gcc
# Forcibly strip off any -arch, as that totally breaks our universal support.
override CC := $(subst -arch ,-arch_,$(CC))
override CC := $(patsubst -arch_%,,$(CC))
CFLAGS := -Wall -Werror -O3 -fomit-frame-pointer
FUNCTIONS.eprintf := eprintf
FUNCTIONS.10.4 := eprintf floatundidf floatundisf floatundixf
FUNCTIONS.armv6 := switch16 switch32 switch8 switchu8 \
save_vfp_d8_d15_regs restore_vfp_d8_d15_regs
CCKEXT_COMMON_FUNCTIONS := \
absvdi2 \
absvsi2 \
addvdi3 \
addvsi3 \
ashldi3 \
ashrdi3 \
bswapdi2 \
bswapsi2 \
clzdi2 \
clzsi2 \
cmpdi2 \
ctzdi2 \
ctzsi2 \
divdc3 \
divdi3 \
divsc3 \
do_global_dtors \
eprintf \
ffsdi2 \
fixdfdi \
fixsfdi \
fixunsdfdi \
fixunsdfsi \
fixunssfdi \
fixunssfsi \
floatdidf \
floatdisf \
floatundidf \
floatundisf \
gcc_bcmp \
lshrdi3 \
moddi3 \
muldc3 \
muldi3 \
mulsc3 \
mulvdi3 \
mulvsi3 \
negdi2 \
negvdi2 \
negvsi2 \
paritydi2 \
paritysi2 \
popcountdi2 \
popcountsi2 \
powidf2 \
powisf2 \
subvdi3 \
subvsi3 \
ucmpdi2 \
udiv_w_sdiv \
udivdi3 \
udivmoddi4 \
umoddi3
CCKEXT_ARM_FUNCTIONS := $(CCKEXT_COMMON_FUNCTIONS) \
adddf3 \
addsf3 \
aeabi_cdcmpeq \
aeabi_cdrcmple \
aeabi_cfcmpeq \
aeabi_cfrcmple \
aeabi_dcmpeq \
aeabi_dcmpge \
aeabi_dcmpgt \
aeabi_dcmple \
aeabi_dcmplt \
aeabi_drsub \
aeabi_fcmpeq \
aeabi_fcmpge \
aeabi_fcmpgt \
aeabi_fcmple \
aeabi_fcmplt \
aeabi_frsub \
aeabi_idivmod \
aeabi_uidivmod \
cmpdf2 \
cmpsf2 \
div0 \
divdf3 \
divsf3 \
divsi3 \
extendsfdf2 \
ffssi2 \
fixdfsi \
fixsfsi \
floatsidf \
floatsisf \
floatunsidf \
floatunsisf \
gtdf2 \
gtsf2 \
ltdf2 \
ltsf2 \
modsi3 \
muldf3 \
mulsf3 \
negdf2 \
negsf2 \
subdf3 \
subsf3 \
switch16 \
switch32 \
switch8 \
switchu8 \
truncdfsf2 \
udivsi3 \
umodsi3 \
unorddf2 \
unordsf2
FUNCTIONS.cc_kext.armv6 := $(CCKEXT_ARM_FUNCTIONS)
FUNCTIONS.cc_kext.armv7 := $(CCKEXT_ARM_FUNCTIONS)
CFLAGS.cc_kext.armv6 := $(CFLAGS) -mthumb
CFLAGS.cc_kext.armv7 := $(CFLAGS) -mthumb
CCKEXT_X86_FUNCTIONS := $(CCKEXT_COMMON_FUNCTIONS) \
divxc3 \
fixunsxfdi \
fixunsxfsi \
fixxfdi \
floatdixf \
floatundixf \
mulxc3 \
powixf2
FUNCTIONS.cc_kext.i386 := $(CCKEXT_X86_FUNCTIONS) \
ffssi2 \
i686.get_pc_thunk.eax \
i686.get_pc_thunk.ebp \
i686.get_pc_thunk.ebx \
i686.get_pc_thunk.ecx \
i686.get_pc_thunk.edi \
i686.get_pc_thunk.edx \
i686.get_pc_thunk.esi
FUNCTIONS.cc_kext.x86_64 := $(CCKEXT_X86_FUNCTIONS) \
absvti2 \
addvti3 \
ashlti3 \
ashrti3 \
clzti2 \
cmpti2 \
ctzti2 \
divti3 \
ffsti2 \
fixdfti \
fixsfti \
fixunsdfti \
fixunssfti \
fixunsxfti \
fixxfti \
floattidf \
floattisf \
floattixf \
floatuntidf \
floatuntisf \
floatuntixf \
lshrti3 \
modti3 \
multi3 \
mulvti3 \
negti2 \
negvti2 \
parityti2 \
popcountti2 \
subvti3 \
ucmpti2 \
udivmodti4 \
udivti3 \
umodti3
# FIXME: Currently, compiler-rt is missing implementations for a number of the
# functions that need to go into libcc_kext.a. Filter them out for now.
CCKEXT_MISSING_FUNCTIONS := \
adddf3 addsf3 cmpdf2 cmpsf2 div0 divdf3 divsf3 \
extendsfdf2 ffssi2 fixdfsi fixsfsi floatsidf floatsisf \
floatunsidf floatunsisf gtdf2 gtsf2 ltdf2 ltsf2 \
muldf3 mulsf3 negdf2 negsf2 subdf3 subsf3 \
truncdfsf2 udiv_w_sdiv unorddf2 unordsf2 bswapdi2 \
bswapsi2 \
gcc_bcmp \
do_global_dtors \
i686.get_pc_thunk.eax i686.get_pc_thunk.ebp i686.get_pc_thunk.ebx \
i686.get_pc_thunk.ecx i686.get_pc_thunk.edi i686.get_pc_thunk.edx \
i686.get_pc_thunk.esi \
aeabi_cdcmpeq aeabi_cdrcmple aeabi_cfcmpeq aeabi_cfrcmple aeabi_dcmpeq \
aeabi_dcmpge aeabi_dcmpgt aeabi_dcmple aeabi_dcmplt aeabi_drsub aeabi_fcmpeq \
aeabi_fcmpge aeabi_fcmpgt aeabi_fcmple aeabi_fcmplt aeabi_frsub aeabi_idivmod \
aeabi_uidivmod
FUNCTIONS.cc_kext.armv6 := \
$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.armv6))
FUNCTIONS.cc_kext.armv7 := \
$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.armv7))
FUNCTIONS.cc_kext.i386 := \
$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.i386))
FUNCTIONS.cc_kext.x86_64 := \
$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.x86_64))
KERNEL_USE.cc_kext := 1
VISIBILITY_HIDDEN := 1