diff options
Diffstat (limited to 'lib/builtins/CMakeLists.txt')
-rw-r--r-- | lib/builtins/CMakeLists.txt | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/lib/builtins/CMakeLists.txt b/lib/builtins/CMakeLists.txt new file mode 100644 index 000000000000..999faa86739d --- /dev/null +++ b/lib/builtins/CMakeLists.txt @@ -0,0 +1,278 @@ +# This directory contains a large amount of C code which provides +# generic implementations of the core runtime library along with optimized +# architecture-specific code in various subdirectories. + +set(GENERIC_SOURCES + absvdi2.c + absvsi2.c + absvti2.c + adddf3.c + addsf3.c + addtf3.c + addvdi3.c + addvsi3.c + addvti3.c + apple_versioning.c + ashldi3.c + ashlti3.c + ashrdi3.c + ashrti3.c + # FIXME: atomic.c may only be compiled if host compiler understands _Atomic + # atomic.c + clear_cache.c + clzdi2.c + clzsi2.c + clzti2.c + cmpdi2.c + cmpti2.c + comparedf2.c + comparesf2.c + ctzdi2.c + ctzsi2.c + ctzti2.c + divdc3.c + divdf3.c + divdi3.c + divmoddi4.c + divmodsi4.c + divsc3.c + divsf3.c + divsi3.c + divti3.c + divtf3.c + divxc3.c + enable_execute_stack.c + eprintf.c + extendsfdf2.c + ffsdi2.c + ffsti2.c + fixdfdi.c + fixdfsi.c + fixdfti.c + fixsfdi.c + fixsfsi.c + fixsfti.c + fixunsdfdi.c + fixunsdfsi.c + fixunsdfti.c + fixunssfdi.c + fixunssfsi.c + fixunssfti.c + fixunsxfdi.c + fixunsxfsi.c + fixunsxfti.c + fixxfdi.c + fixxfti.c + floatdidf.c + floatdisf.c + floatdixf.c + floatsidf.c + floatsisf.c + floattidf.c + floattisf.c + floattixf.c + floatundidf.c + floatundisf.c + floatundixf.c + floatunsidf.c + floatunsisf.c + floatuntidf.c + floatuntisf.c + floatuntixf.c + gcc_personality_v0.c + int_util.c + lshrdi3.c + lshrti3.c + moddi3.c + modsi3.c + modti3.c + muldc3.c + muldf3.c + muldi3.c + mulodi4.c + mulosi4.c + muloti4.c + mulsc3.c + mulsf3.c + multi3.c + multf3.c + mulvdi3.c + mulvsi3.c + mulvti3.c + mulxc3.c + negdf2.c + negdi2.c + negsf2.c + negti2.c + negvdi2.c + negvsi2.c + negvti2.c + paritydi2.c + paritysi2.c + parityti2.c + popcountdi2.c + popcountsi2.c + popcountti2.c + powidf2.c + powisf2.c + powitf2.c + powixf2.c + subdf3.c + subsf3.c + subvdi3.c + subvsi3.c + subvti3.c + subtf3.c + trampoline_setup.c + truncdfsf2.c + ucmpdi2.c + ucmpti2.c + udivdi3.c + udivmoddi4.c + udivmodsi4.c + udivmodti4.c + udivsi3.c + udivti3.c + umoddi3.c + umodsi3.c + umodti3.c) + +set(x86_64_SOURCES + x86_64/floatdidf.c + x86_64/floatdisf.c + x86_64/floatdixf.c + x86_64/floatundidf.S + x86_64/floatundisf.S + x86_64/floatundixf.S + ${GENERIC_SOURCES}) + +set(i386_SOURCES + i386/ashldi3.S + i386/ashrdi3.S + i386/divdi3.S + i386/floatdidf.S + i386/floatdisf.S + i386/floatdixf.S + i386/floatundidf.S + i386/floatundisf.S + i386/floatundixf.S + i386/lshrdi3.S + i386/moddi3.S + i386/muldi3.S + i386/udivdi3.S + i386/umoddi3.S + ${GENERIC_SOURCES}) + +set(i686_SOURCES + ${i386_SOURCES}) + +set(arm_SOURCES + arm/adddf3vfp.S + arm/addsf3vfp.S + arm/aeabi_dcmp.S + arm/aeabi_div0.c + arm/aeabi_fcmp.S + arm/aeabi_idivmod.S + arm/aeabi_ldivmod.S + arm/aeabi_memcmp.S + arm/aeabi_memcpy.S + arm/aeabi_memmove.S + arm/aeabi_memset.S + arm/aeabi_uidivmod.S + arm/aeabi_uldivmod.S + arm/bswapdi2.S + arm/bswapsi2.S + arm/comparesf2.S + arm/divdf3vfp.S + arm/divmodsi4.S + arm/divsf3vfp.S + arm/divsi3.S + arm/eqdf2vfp.S + arm/eqsf2vfp.S + arm/extendsfdf2vfp.S + arm/fixdfsivfp.S + arm/fixsfsivfp.S + arm/fixunsdfsivfp.S + arm/fixunssfsivfp.S + arm/floatsidfvfp.S + arm/floatsisfvfp.S + arm/floatunssidfvfp.S + arm/floatunssisfvfp.S + arm/gedf2vfp.S + arm/gesf2vfp.S + arm/gtdf2vfp.S + arm/gtsf2vfp.S + arm/ledf2vfp.S + arm/lesf2vfp.S + arm/ltdf2vfp.S + arm/ltsf2vfp.S + arm/modsi3.S + arm/muldf3vfp.S + arm/mulsf3vfp.S + arm/nedf2vfp.S + arm/negdf2vfp.S + arm/negsf2vfp.S + arm/nesf2vfp.S + arm/restore_vfp_d8_d15_regs.S + arm/save_vfp_d8_d15_regs.S + arm/subdf3vfp.S + arm/subsf3vfp.S + arm/switch16.S + arm/switch32.S + arm/switch8.S + arm/switchu8.S + arm/sync_fetch_and_add_4.S + arm/sync_fetch_and_add_8.S + arm/sync_fetch_and_and_4.S + arm/sync_fetch_and_and_8.S + arm/sync_fetch_and_max_4.S + arm/sync_fetch_and_max_8.S + arm/sync_fetch_and_min_4.S + arm/sync_fetch_and_min_8.S + arm/sync_fetch_and_nand_4.S + arm/sync_fetch_and_nand_8.S + arm/sync_fetch_and_or_4.S + arm/sync_fetch_and_or_8.S + arm/sync_fetch_and_sub_4.S + arm/sync_fetch_and_sub_8.S + arm/sync_fetch_and_umax_4.S + arm/sync_fetch_and_umax_8.S + arm/sync_fetch_and_umin_4.S + arm/sync_fetch_and_umin_8.S + arm/sync_fetch_and_xor_4.S + arm/sync_fetch_and_xor_8.S + arm/sync_synchronize.S + arm/truncdfsf2vfp.S + arm/udivmodsi4.S + arm/udivsi3.S + arm/umodsi3.S + arm/unorddf2vfp.S + arm/unordsf2vfp.S + ${GENERIC_SOURCES}) + +add_custom_target(builtins) + +if (NOT WIN32) + foreach (arch x86_64 i386 i686 arm) + if (CAN_TARGET_${arch}) + # Filter out generic versions of routines that are re-implemented in + # architecture specific manner. This prevents multiple definitions of the + # same symbols, making the symbol selection non-deterministic. + foreach (_file ${${arch}_SOURCES}) + if (${_file} MATCHES ${arch}/*) + get_filename_component(_name ${_file} NAME) + string(REPLACE ".S" ".c" _cname "${_name}") + list(REMOVE_ITEM ${arch}_SOURCES ${_cname}) + endif () + endforeach () + + set_source_files_properties(${${arch}_SOURCES} PROPERTIES LANGUAGE C) + add_compiler_rt_runtime(clang_rt.builtins-${arch} ${arch} STATIC + SOURCES ${${arch}_SOURCES} + CFLAGS "-std=c99") + add_dependencies(builtins clang_rt.builtins-${arch}) + endif () + endforeach () +endif () + +add_dependencies(compiler-rt builtins) |