Home | History | Annotate | Download | only in platform
      1 # These are the functions which clang needs when it is targeting a previous
      2 # version of the OS. The issue is that the backend may use functions which were
      3 # not present in the libgcc that shipped on the platform. In such cases, we link
      4 # with a version of the library which contains private_extern definitions of all
      5 # the extra functions which might be referenced.
      6 
      7 Description := Static runtime libraries for clang/Darwin.
      8 
      9 # A function that ensures we don't try to build for architectures that we
     10 # don't have working toolchains for.
     11 CheckArches = \
     12   $(shell \
     13     result=""; \
     14     for arch in $(1); do \
     15       if $(CC) -arch $$arch -c \
     16           -integrated-as \
     17           $(ProjSrcRoot)/make/platform/clang_darwin_test_input.c \
     18           -isysroot $(ProjSrcRoot)/SDKs/darwin \
     19           -o /dev/null > /dev/null 2> /dev/null; then \
     20         if $(LD) -v 2>&1 | grep "configured to support" \
     21            | tr ' ' '\n' | grep "^$$arch$$" >/dev/null 2>/dev/null; then \
     22           result="$$result$$arch "; \
     23         else \
     24           printf 1>&2 \
     25             "warning: clang_darwin.mk: dropping arch '$$arch' from lib '$(2)'"; \
     26           printf 1>&2 " (ld does not support it)\n"; \
     27         fi; \
     28       else \
     29         printf 1>&2 \
     30           "warning: clang_darwin.mk: dropping arch '$$arch' from lib '$(2)'"; \
     31         printf 1>&2 " (clang does not support it)\n"; \
     32       fi; \
     33     done; \
     34     echo $$result)
     35 
     36 XCRun = \
     37   $(shell \
     38     result=`xcrun -find $(1) 2> /dev/null`; \
     39     if [ "$$?" != "0" ]; then result=$(1); fi; \
     40     echo $$result)
     41 XCRunSdkPath = \
     42   $(shell \
     43     result=`xcrun --sdk $(1) --show-sdk-path 2> /dev/null`; \
     44     if [ "$$?" != "0" ]; then result=""; fi; \
     45     echo $$result)
     46 ###
     47 
     48 CC       := $(call XCRun,clang)
     49 LD       := $(shell $(CC) -print-prog-name=ld)
     50 AR       := $(call XCRun,ar)
     51 RANLIB   := $(call XCRun,ranlib)
     52 STRIP    := $(call XCRun,strip)
     53 LIPO     := $(call XCRun,lipo)
     54 DSYMUTIL := $(call XCRun,dsymutil)
     55 
     56 Configs :=
     57 UniversalArchs :=
     58 
     59 # Configuration solely for providing access to an eprintf symbol, which may
     60 # still be referenced from Darwin system headers. This symbol is only ever
     61 # needed on i386.
     62 Configs += eprintf
     63 UniversalArchs.eprintf := $(call CheckArches,i386,eprintf)
     64 
     65 # Configuration for targeting 10.4. We need a few functions missing from
     66 # libgcc_s.10.4.dylib. We only build x86 slices since clang doesn't really
     67 # support targeting PowerPC.
     68 Configs += 10.4
     69 UniversalArchs.10.4 := $(call CheckArches,i386 x86_64,10.4)
     70 
     71 # Configuration for targeting iOS for a couple of functions that didn't
     72 # make it into libSystem.
     73 Configs += ios
     74 UniversalArchs.ios := $(call CheckArches,i386 x86_64 x86_64h armv7,ios)
     75 
     76 # Configuration for targeting OSX. These functions may not be in libSystem
     77 # so we should provide our own.
     78 Configs += osx
     79 UniversalArchs.osx := $(call CheckArches,i386 x86_64 x86_64h,osx)
     80 
     81 # Configuration for use with kernel/kexts.
     82 Configs += cc_kext
     83 UniversalArchs.cc_kext := $(call CheckArches,armv7 i386 x86_64 x86_64h,cc_kext)
     84 
     85 # Configuration for use with kernel/kexts for iOS 5.0 and earlier (which used 
     86 # a different code generation strategy).
     87 Configs += cc_kext_ios5
     88 UniversalArchs.cc_kext_ios5 := $(call CheckArches,x86_64 x86_64h armv7,cc_kext_ios5)
     89 
     90 # Configurations which define the profiling support functions.
     91 Configs += profile_osx
     92 UniversalArchs.profile_osx := $(call CheckArches,i386 x86_64 x86_64h,profile_osx)
     93 Configs += profile_ios
     94 UniversalArchs.profile_ios := $(call CheckArches,i386 x86_64 x86_64h armv7,profile_ios)
     95 
     96 # Configurations which define the ASAN support functions.
     97 Configs += asan_osx_dynamic
     98 UniversalArchs.asan_osx_dynamic := $(call CheckArches,i386 x86_64 x86_64h,asan_osx_dynamic)
     99 
    100 IOSSIM_SDK_PATH := $(call XCRunSdkPath,iphonesimulator)
    101 ifneq ($(IOSSIM_SDK_PATH),)
    102 Configs += asan_iossim_dynamic
    103 UniversalArchs.asan_iossim_dynamic := $(call CheckArches,i386 x86_64 x86_64h,asan_iossim_dynamic)
    104 endif
    105 
    106 Configs += ubsan_osx
    107 UniversalArchs.ubsan_osx := $(call CheckArches,i386 x86_64 x86_64h,ubsan_osx)
    108 
    109 # Darwin 10.6 has a bug in cctools that makes it unable to use ranlib on our ARM
    110 # object files. If we are on that platform, strip out all ARM archs. We still
    111 # build the libraries themselves so that Clang can find them where it expects
    112 # them, even though they might not have an expected slice.
    113 ifneq ($(shell test -x /usr/bin/sw_vers && sw_vers -productVersion | grep 10.6),)
    114 UniversalArchs.ios := $(filter-out armv7, $(UniversalArchs.ios))
    115 UniversalArchs.cc_kext := $(filter-out armv7, $(UniversalArchs.cc_kext))
    116 UniversalArchs.cc_kext_ios5 := $(filter-out armv7, $(UniversalArchs.cc_kext_ios5))
    117 UniversalArchs.profile_ios := $(filter-out armv7, $(UniversalArchs.profile_ios))
    118 endif
    119 
    120 # If RC_SUPPORTED_ARCHS is defined, treat it as a list of the architectures we
    121 # are intended to support and limit what we try to build to that.
    122 #
    123 # We make sure to remove empty configs if we end up dropping all the requested
    124 # archs for a particular config.
    125 ifneq ($(RC_SUPPORTED_ARCHS),)
    126 $(foreach config,$(Configs),\
    127   $(call Set,UniversalArchs.$(config),\
    128 	$(filter $(RC_SUPPORTED_ARCHS),$(UniversalArchs.$(config))))\
    129   $(if $(UniversalArchs.$(config)),,\
    130 	$(call Set,Configs,$(filter-out $(config),$(Configs)))))
    131 endif
    132 
    133 ###
    134 
    135 # Forcibly strip off any -arch, as that totally breaks our universal support.
    136 override CC := $(subst -arch ,-arch_,$(CC))
    137 override CC := $(patsubst -arch_%,,$(CC))
    138 
    139 CFLAGS := -Wall -Werror -O3 -fomit-frame-pointer
    140 
    141 # Always set deployment target arguments for every build, these libraries should
    142 # never depend on the environmental overrides. We simply set them to minimum
    143 # supported deployment target -- nothing in the compiler-rt libraries should
    144 # actually depend on the deployment target.
    145 OSX_DEPLOYMENT_ARGS := -mmacosx-version-min=10.4
    146 IOS_DEPLOYMENT_ARGS := -mios-version-min=1.0
    147 IOS6_DEPLOYMENT_ARGS := -mios-version-min=6.0
    148 IOSSIM_DEPLOYMENT_ARGS := -mios-simulator-version-min=1.0
    149 
    150 # Use our stub SDK as the sysroot to support more portable building.
    151 OSX_DEPLOYMENT_ARGS += -isysroot $(ProjSrcRoot)/SDKs/darwin
    152 IOS_DEPLOYMENT_ARGS += -isysroot $(ProjSrcRoot)/SDKs/darwin
    153 IOS6_DEPLOYMENT_ARGS += -isysroot $(ProjSrcRoot)/SDKs/darwin
    154 IOSSIM_DEPLOYMENT_ARGS += -isysroot $(ProjSrcRoot)/SDKs/darwin
    155 
    156 CFLAGS.eprintf		:= $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
    157 CFLAGS.10.4		:= $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
    158 # FIXME: We can't build ASAN with our stub SDK yet.
    159 CFLAGS.asan_osx_dynamic := \
    160 	$(CFLAGS) -mmacosx-version-min=10.6 -fno-builtin \
    161 	-gline-tables-only \
    162 	-DMAC_INTERPOSE_FUNCTIONS=1
    163 
    164 CFLAGS.asan_iossim_dynamic := \
    165 	$(CFLAGS) -mios-simulator-version-min=7.0 \
    166         -isysroot $(IOSSIM_SDK_PATH) \
    167         -fno-builtin \
    168 	-gline-tables-only \
    169 	-DMAC_INTERPOSE_FUNCTIONS=1
    170 
    171 CFLAGS.ubsan_osx := $(CFLAGS) -mmacosx-version-min=10.6 -fno-builtin
    172 
    173 CFLAGS.ios.i386		:= $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
    174 CFLAGS.ios.x86_64	:= $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
    175 CFLAGS.ios.x86_64h	:= $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
    176 CFLAGS.ios.armv7	:= $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
    177 CFLAGS.ios.armv7k	:= $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
    178 CFLAGS.ios.armv7s	:= $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
    179 CFLAGS.osx.i386		:= $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
    180 CFLAGS.osx.x86_64	:= $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
    181 CFLAGS.osx.x86_64h	:= $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
    182 CFLAGS.cc_kext.i386	:= $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
    183 CFLAGS.cc_kext.x86_64	:= $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
    184 CFLAGS.cc_kext.x86_64h	:= $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
    185 CFLAGS.cc_kext.armv7	:= $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS)
    186 CFLAGS.cc_kext.armv7k	:= $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS)
    187 CFLAGS.cc_kext.armv7s	:= $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS)
    188 CFLAGS.cc_kext_ios5.armv7  := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
    189 CFLAGS.cc_kext_ios5.armv7k := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
    190 CFLAGS.cc_kext_ios5.armv7s := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
    191 CFLAGS.profile_osx.i386    := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
    192 CFLAGS.profile_osx.x86_64  := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
    193 CFLAGS.profile_osx.x86_64h := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS)
    194 CFLAGS.profile_ios.i386    := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
    195 CFLAGS.profile_ios.x86_64  := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
    196 CFLAGS.profile_ios.x86_64h := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS)
    197 CFLAGS.profile_ios.armv7  := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
    198 CFLAGS.profile_ios.armv7k := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
    199 CFLAGS.profile_ios.armv7s := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS)
    200 
    201 # Configure the asan_osx_dynamic library to be built shared.
    202 SHARED_LIBRARY.asan_osx_dynamic := 1
    203 LDFLAGS.asan_osx_dynamic := -lstdc++ -undefined dynamic_lookup
    204 
    205 # Configure the asan_iossim_dynamic library to be built shared.
    206 SHARED_LIBRARY.asan_iossim_dynamic := 1
    207 # configure+make uses Clang, so we're using isysroot instead of --sysroot
    208 # or -Wl,-syslibroot.
    209 LDFLAGS.asan_iossim_dynamic := -undefined dynamic_lookup \
    210   -Wl,-ios_simulator_version_min,7.0.0 \
    211   -mios-simulator-version-min=7.0 -isysroot $(IOSSIM_SDK_PATH)
    212 
    213 FUNCTIONS.eprintf := eprintf
    214 FUNCTIONS.10.4 := eprintf floatundidf floatundisf floatundixf
    215 
    216 FUNCTIONS.ios	    := divmodsi4 udivmodsi4 mulosi4 mulodi4 muloti4
    217 # On x86, the divmod functions reference divsi.
    218 FUNCTIONS.ios.i386    := $(FUNCTIONS.ios) \
    219                          divsi3 udivsi3
    220 FUNCTIONS.ios.x86_64  := $(FUNCTIONS.ios.i386)
    221 FUNCTIONS.ios.x86_64h := $(FUNCTIONS.ios.x86_64)
    222 
    223 FUNCTIONS.osx	:= mulosi4 mulodi4 muloti4
    224 
    225 FUNCTIONS.profile_osx := GCDAProfiling InstrProfiling InstrProfilingBuffer \
    226                          InstrProfilingFile InstrProfilingPlatformDarwin \
    227                          InstrProfilingRuntime
    228 FUNCTIONS.profile_ios := $(FUNCTIONS.profile_osx)
    229 
    230 FUNCTIONS.asan_osx_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \
    231                               $(InterceptionFunctions) \
    232                               $(SanitizerCommonFunctions) \
    233 	                      $(AsanDynamicFunctions)
    234 
    235 FUNCTIONS.asan_iossim_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \
    236                                  $(InterceptionFunctions) \
    237                                  $(SanitizerCommonFunctions) \
    238 	                         $(AsanDynamicFunctions)
    239 
    240 FUNCTIONS.ubsan_osx := $(UbsanFunctions) $(UbsanCXXFunctions) \
    241                        $(SanitizerCommonFunctions)
    242 
    243 CCKEXT_COMMON_FUNCTIONS := \
    244 	absvdi2 \
    245 	absvsi2 \
    246 	addvdi3 \
    247 	addvsi3 \
    248 	ashldi3 \
    249 	ashrdi3 \
    250 	bswapdi2 \
    251 	bswapsi2 \
    252 	clzdi2 \
    253 	clzsi2 \
    254 	cmpdi2 \
    255 	ctzdi2 \
    256 	ctzsi2 \
    257 	divdc3 \
    258 	divdi3 \
    259 	divsc3 \
    260 	divmodsi4 \
    261 	udivmodsi4 \
    262 	do_global_dtors \
    263 	eprintf \
    264 	ffsdi2 \
    265 	fixdfdi \
    266 	fixsfdi \
    267 	fixunsdfdi \
    268 	fixunsdfsi \
    269 	fixunssfdi \
    270 	fixunssfsi \
    271 	floatdidf \
    272 	floatdisf \
    273 	floatundidf \
    274 	floatundisf \
    275 	gcc_bcmp \
    276 	lshrdi3 \
    277 	moddi3 \
    278 	muldc3 \
    279 	muldi3 \
    280 	mulsc3 \
    281 	mulvdi3 \
    282 	mulvsi3 \
    283 	negdi2 \
    284 	negvdi2 \
    285 	negvsi2 \
    286 	paritydi2 \
    287 	paritysi2 \
    288 	popcountdi2 \
    289 	popcountsi2 \
    290 	powidf2 \
    291 	powisf2 \
    292 	subvdi3 \
    293 	subvsi3 \
    294 	ucmpdi2 \
    295 	udiv_w_sdiv \
    296 	udivdi3 \
    297 	udivmoddi4 \
    298 	umoddi3
    299 
    300 CCKEXT_ARM_FUNCTIONS := $(CCKEXT_COMMON_FUNCTIONS) \
    301 	adddf3 \
    302 	addsf3 \
    303 	aeabi_cdcmpeq \
    304 	aeabi_cdrcmple \
    305 	aeabi_cfcmpeq \
    306 	aeabi_cfrcmple \
    307 	aeabi_dcmpeq \
    308 	aeabi_dcmpge \
    309 	aeabi_dcmpgt \
    310 	aeabi_dcmple \
    311 	aeabi_dcmplt \
    312 	aeabi_drsub \
    313 	aeabi_fcmpeq \
    314 	aeabi_fcmpge \
    315 	aeabi_fcmpgt \
    316 	aeabi_fcmple \
    317 	aeabi_fcmplt \
    318 	aeabi_frsub \
    319 	aeabi_idivmod \
    320 	aeabi_uidivmod \
    321 	cmpdf2 \
    322 	cmpsf2 \
    323 	div0 \
    324 	divdf3 \
    325 	divsf3 \
    326 	divsi3 \
    327 	extendsfdf2 \
    328 	ffssi2 \
    329 	fixdfsi \
    330 	fixsfsi \
    331 	floatsidf \
    332 	floatsisf \
    333 	floatunsidf \
    334 	floatunsisf \
    335 	comparedf2 \
    336 	comparesf2 \
    337 	modsi3 \
    338 	muldf3 \
    339 	mulsf3 \
    340 	negdf2 \
    341 	negsf2 \
    342 	subdf3 \
    343 	subsf3 \
    344 	switch16 \
    345 	switch32 \
    346 	switch8 \
    347 	switchu8 \
    348 	truncdfsf2 \
    349 	udivsi3 \
    350 	umodsi3 \
    351 	unorddf2 \
    352 	unordsf2
    353 
    354 CCKEXT_ARMVFP_FUNCTIONS := $(CCKEXT_ARM_FUNCTIONS) \
    355 	adddf3vfp \
    356 	addsf3vfp \
    357 	divdf3vfp \
    358 	divsf3vfp \
    359 	eqdf2vfp \
    360 	eqsf2vfp \
    361 	extendsfdf2vfp \
    362 	fixdfsivfp \
    363 	fixsfsivfp \
    364 	fixunsdfsivfp \
    365 	fixunssfsivfp \
    366 	floatsidfvfp \
    367 	floatsisfvfp \
    368 	floatunssidfvfp \
    369 	floatunssisfvfp \
    370 	gedf2vfp \
    371 	gesf2vfp \
    372 	gtdf2vfp \
    373 	gtsf2vfp \
    374 	ledf2vfp \
    375 	lesf2vfp \
    376 	ltdf2vfp \
    377 	ltsf2vfp \
    378 	muldf3vfp \
    379 	mulsf3vfp \
    380 	nedf2vfp \
    381 	nesf2vfp \
    382 	subdf3vfp \
    383 	subsf3vfp \
    384 	truncdfsf2vfp \
    385 	unorddf2vfp \
    386 	unordsf2vfp
    387 
    388 FUNCTIONS.cc_kext.armv7 := $(CCKEXT_ARMVFP_FUNCTIONS)
    389 FUNCTIONS.cc_kext.armv7k := $(CCKEXT_ARMVFP_FUNCTIONS)
    390 FUNCTIONS.cc_kext.armv7s := $(CCKEXT_ARMVFP_FUNCTIONS)
    391 FUNCTIONS.cc_kext_ios5.armv7 := $(CCKEXT_ARMVFP_FUNCTIONS)
    392 FUNCTIONS.cc_kext_ios5.armv7k := $(CCKEXT_ARMVFP_FUNCTIONS)
    393 FUNCTIONS.cc_kext_ios5.armv7s := $(CCKEXT_ARMVFP_FUNCTIONS)
    394 
    395 CCKEXT_X86_FUNCTIONS := $(CCKEXT_COMMON_FUNCTIONS) \
    396 	divxc3 \
    397 	fixunsxfdi \
    398 	fixunsxfsi \
    399 	fixxfdi \
    400 	floatdixf \
    401 	floatundixf \
    402 	mulxc3 \
    403 	powixf2
    404 
    405 FUNCTIONS.cc_kext.i386 := $(CCKEXT_X86_FUNCTIONS) \
    406 	ffssi2 \
    407 	i686.get_pc_thunk.eax \
    408 	i686.get_pc_thunk.ebp \
    409 	i686.get_pc_thunk.ebx \
    410 	i686.get_pc_thunk.ecx \
    411 	i686.get_pc_thunk.edi \
    412 	i686.get_pc_thunk.edx \
    413 	i686.get_pc_thunk.esi
    414 
    415 FUNCTIONS.cc_kext.x86_64 := $(CCKEXT_X86_FUNCTIONS) \
    416 	absvti2 \
    417 	addvti3 \
    418 	ashlti3 \
    419 	ashrti3 \
    420 	clzti2 \
    421 	cmpti2 \
    422 	ctzti2 \
    423 	divti3 \
    424 	ffsti2 \
    425 	fixdfti \
    426 	fixsfti \
    427 	fixunsdfti \
    428 	fixunssfti \
    429 	fixunsxfti \
    430 	fixxfti \
    431 	floattidf \
    432 	floattisf \
    433 	floattixf \
    434 	floatuntidf \
    435 	floatuntisf \
    436 	floatuntixf \
    437 	lshrti3 \
    438 	modti3 \
    439 	multi3 \
    440 	mulvti3 \
    441 	negti2 \
    442 	negvti2 \
    443 	parityti2 \
    444 	popcountti2 \
    445 	subvti3 \
    446 	ucmpti2 \
    447 	udivmodti4 \
    448 	udivti3 \
    449 	umodti3
    450 
    451 FUNCTIONS.cc_kext.x86_64h := $(FUNCTIONS.cc_kext.x86_64)
    452 
    453 # FIXME: Currently, compiler-rt is missing implementations for a number of the
    454 # functions that need to go into libcc_kext.a. Filter them out for now.
    455 CCKEXT_MISSING_FUNCTIONS := \
    456 	cmpdf2 cmpsf2 div0 \
    457 	ffssi2 \
    458 	udiv_w_sdiv unorddf2 unordsf2 bswapdi2 \
    459 	bswapsi2 \
    460 	gcc_bcmp \
    461 	do_global_dtors \
    462 	i686.get_pc_thunk.eax i686.get_pc_thunk.ebp i686.get_pc_thunk.ebx \
    463 	i686.get_pc_thunk.ecx i686.get_pc_thunk.edi i686.get_pc_thunk.edx \
    464 	i686.get_pc_thunk.esi \
    465 	aeabi_cdcmpeq aeabi_cdrcmple aeabi_cfcmpeq aeabi_cfrcmple aeabi_dcmpeq \
    466 	aeabi_dcmpge aeabi_dcmpgt aeabi_dcmple aeabi_dcmplt aeabi_drsub aeabi_fcmpeq \
    467 	aeabi_fcmpge aeabi_fcmpgt aeabi_fcmple aeabi_fcmplt aeabi_frsub aeabi_idivmod \
    468 	aeabi_uidivmod
    469 
    470 FUNCTIONS.cc_kext.armv7 := \
    471 	$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.armv7))
    472 FUNCTIONS.cc_kext.armv7k := \
    473 	$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.armv7k))
    474 FUNCTIONS.cc_kext.armv7s := \
    475 	$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.armv7s))
    476 FUNCTIONS.cc_kext_ios5.armv7 := \
    477 	$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext_ios5.armv7))
    478 FUNCTIONS.cc_kext_ios5.armv7k := \
    479 	$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext_ios5.armv7k))
    480 FUNCTIONS.cc_kext_ios5.armv7s := \
    481 	$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext_ios5.armv7s))
    482 FUNCTIONS.cc_kext.i386 := \
    483 	$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.i386))
    484 FUNCTIONS.cc_kext.x86_64 := \
    485 	$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.x86_64))
    486 FUNCTIONS.cc_kext.x86_64h := \
    487 	$(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.x86_64h))
    488 
    489 KERNEL_USE.cc_kext := 1
    490 KERNEL_USE.cc_kext_ios5 := 1
    491 
    492 VISIBILITY_HIDDEN := 1
    493 
    494 SHARED_LIBRARY_SUFFIX := dylib
    495