[PATCH] D17452: [CMake] Add partial support for MSVC in compiler-rt builtins
Roman Shirokiy via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 19 08:56:35 PST 2016
roman.shirokiy created this revision.
roman.shirokiy added reviewers: rnk, majnemer, beanz, pcc.
roman.shirokiy added a subscriber: cfe-commits.
This enables MSVC build of complex number arithmetic compiler-rt builtins.
Consider Clang which is built under native Windows environment. Compiling the following code will result in "unresolved external symbol __divsc3 referenced in function main"
int main(){
float _Complex a, b, c;
c = a / b;
return 0;
}
Clang front-end generates calls to complex number arithmetic functions, which are nowhere to be found in Microsoft runtime libs. The idea of this patch is to enable MSVC build of compiler-rt builtins library with certain subset of ported-to-CL sources and link this lib in case if user has explicitly demanded so through "--rtlib" option. This will allow to compile code with usage of complex number arithmetic in general and spec2006/462.libquantum in particular.
http://reviews.llvm.org/D17452
Files:
CMakeLists.txt
lib/builtins/CMakeLists.txt
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -241,6 +241,8 @@
# FIXME: In fact, sanitizers should support both /MT and /MD, see PR20214.
if(COMPILER_RT_HAS_MT_FLAG)
foreach(flag_var
+ CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
+ CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
string(REGEX REPLACE "/M[DT]d" "/MT" ${flag_var} "${${flag_var}}")
Index: lib/builtins/CMakeLists.txt
===================================================================
--- lib/builtins/CMakeLists.txt
+++ lib/builtins/CMakeLists.txt
@@ -143,6 +143,15 @@
umodsi3.c
umodti3.c)
+set(MSVC_SOURCES
+ divsc3.c
+ divdc3.c
+ divxc3.c
+ mulsc3.c
+ muldc3.c
+ mulxc3.c)
+
+
if(APPLE)
set(GENERIC_SOURCES
${GENERIC_SOURCES}
@@ -216,14 +225,15 @@
${i386_SOURCES})
else () # MSVC
# Use C versions of functions when building on MSVC
- # MSVC's assembler takes Intel syntax, not AT&T syntax
+ # MSVC's assembler takes Intel syntax, not AT&T syntax.
+ # Also use only MSVC compilable builtin implementations.
set(x86_64_SOURCES
x86_64/floatdidf.c
x86_64/floatdisf.c
x86_64/floatdixf.c
- ${GENERIC_SOURCES})
+ ${MSVC_SOURCES})
set(x86_64h_SOURCES ${x86_64_SOURCES})
- set(i386_SOURCES ${GENERIC_SOURCES})
+ set(i386_SOURCES ${MSVC_SOURCES})
set(i686_SOURCES ${i386_SOURCES})
endif () # if (NOT MSVC)
@@ -363,7 +373,7 @@
add_subdirectory(Darwin-excludes)
add_subdirectory(macho_embedded)
darwin_add_builtin_libraries(${BUILTIN_SUPPORTED_OS})
-elseif (NOT WIN32 OR MINGW)
+else ()
append_string_if(COMPILER_RT_HAS_STD_C99_FLAG -std=c99 maybe_stdc99)
foreach (arch ${BUILTIN_SUPPORTED_ARCH})
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D17452.48489.patch
Type: text/x-patch
Size: 1911 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160219/dba9e38e/attachment.bin>
More information about the cfe-commits
mailing list