Index: libcxx/trunk/CMakeLists.txt =================================================================== --- libcxx/trunk/CMakeLists.txt +++ libcxx/trunk/CMakeLists.txt @@ -39,6 +39,12 @@ build directory and run 'cmake /path/to/${PROJECT_NAME} [options]' there." ) +if (MSVC) + set(LIBCXX_TARGETING_MSVC ON) +else() + set(LIBCXX_TARGETING_MSVC OFF) +endif() + #=============================================================================== # Setup CMake Options #=============================================================================== @@ -377,6 +383,11 @@ endif() remove_flags(-stdlib=libc++ -stdlib=libstdc++) +# FIXME: Remove all debug flags and flags that change which Windows +# default libraries are linked. Currently we only support linking the +# non-debug DLLs +remove_flags("/D_DEBUG" "/MTd" "/MDd" "/MT" "/Md" "/RTC1") + # FIXME(EricWF): See the FIXME on LIBCXX_ENABLE_PEDANTIC. # Remove the -pedantic flag and -Wno-pedantic and -pedantic-errors # so they don't get transformed into -Wno and -errors respectivly. @@ -476,7 +487,7 @@ define_if_not(LIBCXX_ENABLE_ASSERTIONS -DNDEBUG) if (LIBCXX_ENABLE_ASSERTIONS) # MSVC doesn't like _DEBUG on release builds. See PR 4379. - define_if_not(MSVC -D_DEBUG) + define_if_not(LIBCXX_TARGETING_MSVC -D_DEBUG) endif() # Modules flags =============================================================== Index: libcxx/trunk/cmake/Modules/HandleLibcxxFlags.cmake =================================================================== --- libcxx/trunk/cmake/Modules/HandleLibcxxFlags.cmake +++ libcxx/trunk/cmake/Modules/HandleLibcxxFlags.cmake @@ -26,6 +26,10 @@ # or added in other parts of LLVM's cmake configuration. macro(remove_flags) foreach(var ${ARGN}) + string(REPLACE "${var}" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") + string(REPLACE "${var}" "" CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_DEBUG}") + string(REPLACE "${var}" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG}") + string(REPLACE "${var}" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_DEBUG}") string(REPLACE "${var}" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REPLACE "${var}" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") string(REPLACE "${var}" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") Index: libcxx/trunk/lib/CMakeLists.txt =================================================================== --- libcxx/trunk/lib/CMakeLists.txt +++ libcxx/trunk/lib/CMakeLists.txt @@ -104,6 +104,17 @@ endif() add_link_flags_if_supported(-nodefaultlibs) +if (LIBCXX_TARGETING_MSVC) + add_compile_flags(/Zl) + add_link_flags(/nodefaultlib) + add_library_flags(ucrt) # Universal C runtime + add_library_flags(vcruntime) # C++ runtime + add_library_flags(msvcrt) # C runtime startup files + # Required for standards-complaint wide character formatting functions + # (e.g. `printfw`/`scanfw`) + add_library_flags(iso_stdio_wide_specifiers) +endif() + if (LIBCXX_OSX_REEXPORT_SYSTEM_ABI_LIBRARY) if (NOT DEFINED LIBCXX_LIBCPPABI_VERSION) set(LIBCXX_LIBCPPABI_VERSION "2") # Default value Index: libcxx/trunk/test/libcxx/test/config.py =================================================================== --- libcxx/trunk/test/libcxx/test/config.py +++ libcxx/trunk/test/libcxx/test/config.py @@ -667,7 +667,7 @@ self.cxx.link_flags += ['-lcxxrt'] elif cxx_abi == 'none' or cxx_abi == 'default': if self.is_windows: - self.cxx.link_flags += ['-lmsvcrtd'] + self.cxx.link_flags += ['-lmsvcrt'] else: self.lit_config.fatal( 'C++ ABI setting %s unsupported for tests' % cxx_abi)