diff options
Diffstat (limited to 'lib/builtins/CMakeLists.txt')
-rw-r--r-- | lib/builtins/CMakeLists.txt | 172 |
1 files changed, 131 insertions, 41 deletions
diff --git a/lib/builtins/CMakeLists.txt b/lib/builtins/CMakeLists.txt index 98d518a83e2c..5ffad1d47b17 100644 --- a/lib/builtins/CMakeLists.txt +++ b/lib/builtins/CMakeLists.txt @@ -2,6 +2,9 @@ # generic implementations of the core runtime library along with optimized # architecture-specific code in various subdirectories. +# TODO: Need to add a mechanism for logging errors when builtin source files are +# added to a sub-directory and not this CMakeLists file. + set(GENERIC_SOURCES absvdi2.c absvsi2.c @@ -38,6 +41,7 @@ set(GENERIC_SOURCES divsc3.c divsf3.c divsi3.c + divtc3.c divti3.c divtf3.c divxc3.c @@ -139,59 +143,102 @@ set(GENERIC_SOURCES umodsi3.c umodti3.c) +if(APPLE) + set(GENERIC_SOURCES + ${GENERIC_SOURCES} + atomic_flag_clear.c + atomic_flag_clear_explicit.c + atomic_flag_test_and_set.c + atomic_flag_test_and_set_explicit.c + atomic_signal_fence.c + atomic_thread_fence.c) +endif() + +if(NOT WIN32 OR MINGW) + set(GENERIC_SOURCES + ${GENERIC_SOURCES} + emutls.c) +endif() + if (HAVE_UNWIND_H) set(GENERIC_SOURCES ${GENERIC_SOURCES} gcc_personality_v0.c) endif () -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}) - -if(WIN32) +if (NOT MSVC) set(x86_64_SOURCES - ${x86_64_SOURCES} - x86_64/chkstk.S) -endif() + x86_64/chkstk.S + x86_64/chkstk2.S + 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(x86_64h_SOURCES ${x86_64_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}) + if (WIN32) + set(x86_64_SOURCES + ${x86_64_SOURCES} + x86_64/chkstk.S + x86_64/chkstk2.S) + endif() -if(WIN32) set(i386_SOURCES - ${i386_SOURCES} - i386/chkstk.S) -endif() + i386/ashldi3.S + i386/ashrdi3.S + i386/chkstk.S + i386/chkstk2.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}) + if (WIN32) + set(i386_SOURCES + ${i386_SOURCES} + i386/chkstk.S + i386/chkstk2.S) + endif() + + set(i686_SOURCES + ${i386_SOURCES}) +else () # MSVC + # Use C versions of functions when building on MSVC + # MSVC's assembler takes Intel syntax, not AT&T syntax + set(x86_64_SOURCES + x86_64/floatdidf.c + x86_64/floatdisf.c + x86_64/floatdixf.c + ${GENERIC_SOURCES}) + set(x86_64h_SOURCES ${x86_64_SOURCES}) + set(i386_SOURCES ${GENERIC_SOURCES}) + set(i686_SOURCES ${i386_SOURCES}) +endif () # if (NOT MSVC) set(arm_SOURCES arm/adddf3vfp.S arm/addsf3vfp.S + arm/aeabi_cdcmp.S + arm/aeabi_cdcmpeq_check_nan.c + arm/aeabi_cfcmp.S + arm/aeabi_cfcmpeq_check_nan.c arm/aeabi_dcmp.S arm/aeabi_div0.c + arm/aeabi_drsub.c arm/aeabi_fcmp.S + arm/aeabi_frsub.c arm/aeabi_idivmod.S arm/aeabi_ldivmod.S arm/aeabi_memcmp.S @@ -202,6 +249,8 @@ set(arm_SOURCES arm/aeabi_uldivmod.S arm/bswapdi2.S arm/bswapsi2.S + arm/clzdi2.S + arm/clzsi2.S arm/comparesf2.S arm/divdf3vfp.S arm/divmodsi4.S @@ -270,10 +319,50 @@ set(arm_SOURCES arm/unordsf2vfp.S ${GENERIC_SOURCES}) +set(aarch64_SOURCES + comparetf2.c + extenddftf2.c + extendsftf2.c + fixtfdi.c + fixtfsi.c + fixtfti.c + fixunstfdi.c + fixunstfsi.c + fixunstfti.c + floatditf.c + floatsitf.c + floatunditf.c + floatunsitf.c + multc3.c + trunctfdf2.c + trunctfsf2.c + ${GENERIC_SOURCES}) + +set(armhf_SOURCES ${arm_SOURCES}) +set(armv7_SOURCES ${arm_SOURCES}) +set(armv7s_SOURCES ${arm_SOURCES}) +set(arm64_SOURCES ${aarch64_SOURCES}) + +# macho_embedded archs +set(armv6m_SOURCES ${GENERIC_SOURCES}) +set(armv7m_SOURCES ${arm_SOURCES}) +set(armv7em_SOURCES ${arm_SOURCES}) + +set(mips_SOURCES ${GENERIC_SOURCES}) +set(mipsel_SOURCES ${mips_SOURCES}) +set(mips64_SOURCES ${mips_SOURCES}) +set(mips64el_SOURCES ${mips_SOURCES}) + add_custom_target(builtins) -if (NOT WIN32 OR MINGW) - foreach (arch x86_64 i386 i686 arm) +if (APPLE) + add_subdirectory(Darwin-excludes) + add_subdirectory(macho_embedded) + darwin_add_builtin_libraries(${BUILTIN_SUPPORTED_OS}) +elseif (NOT WIN32 OR MINGW) + append_string_if(COMPILER_RT_HAS_STD_C99_FLAG -std=c99 maybe_stdc99) + + foreach (arch ${BUILTIN_SUPPORTED_ARCH}) if (CAN_TARGET_${arch}) # Filter out generic versions of routines that are re-implemented in # architecture specific manner. This prevents multiple definitions of the @@ -286,11 +375,12 @@ if (NOT WIN32 OR MINGW) endif () endforeach () - set_source_files_properties(${${arch}_SOURCES} PROPERTIES LANGUAGE C) - add_compiler_rt_runtime(clang_rt.builtins-${arch} ${arch} STATIC + add_compiler_rt_runtime(clang_rt.builtins + STATIC + ARCHS ${arch} SOURCES ${${arch}_SOURCES} - CFLAGS "-std=c99") - add_dependencies(builtins clang_rt.builtins-${arch}) + CFLAGS ${maybe_stdc99} + PARENT_TARGET builtins) endif () endforeach () endif () |