aboutsummaryrefslogtreecommitdiff
path: root/lib/builtins/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'lib/builtins/CMakeLists.txt')
-rw-r--r--lib/builtins/CMakeLists.txt172
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 ()