Add CMake build and fix major Linux blockers.
llvm-svn: 121510
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: f5799be4a8971d09acf3bf4067aee815162c3c32
diff --git a/cmake/Modules/GetTriple.cmake b/cmake/Modules/GetTriple.cmake
new file mode 100644
index 0000000..c555931
--- /dev/null
+++ b/cmake/Modules/GetTriple.cmake
@@ -0,0 +1,53 @@
+# Define functions to get the host and target triple.
+
+function(get_host_triple out out_arch out_vendor out_os)
+ # Get the architecture.
+ set(arch ${CMAKE_HOST_SYSTEM_PROCESSOR})
+ if (arch STREQUAL "x86")
+ set(arch "i686")
+ endif()
+ # Get the vendor.
+ if (${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin")
+ set(vendor "apple")
+ else()
+ set(vendor "pc")
+ endif()
+ # Get os.
+ if (${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows")
+ set(os "win32")
+ else()
+ string(TOLOWER ${CMAKE_HOST_SYSTEM_NAME} os)
+ endif()
+ set(triple "${arch}-${vendor}-${os}")
+ set(${out} ${triple} PARENT_SCOPE)
+ set(${out_arch} ${arch} PARENT_SCOPE)
+ set(${out_vendor} ${vendor} PARENT_SCOPE)
+ set(${out_os} ${os} PARENT_SCOPE)
+ message(STATUS "Host triple: ${triple}")
+endfunction()
+
+function(get_target_triple out out_arch out_vendor out_os)
+ # Get the architecture.
+ set(arch ${CMAKE_SYSTEM_PROCESSOR})
+ if (arch STREQUAL "x86")
+ set(arch "i686")
+ endif()
+ # Get the vendor.
+ if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
+ set(vendor "apple")
+ else()
+ set(vendor "pc")
+ endif()
+ # Get os.
+ if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
+ set(os "win32")
+ else()
+ string(TOLOWER ${CMAKE_SYSTEM_NAME} os)
+ endif()
+ set(triple "${arch}-${vendor}-${os}")
+ set(${out} ${triple} PARENT_SCOPE)
+ set(${out_arch} ${arch} PARENT_SCOPE)
+ set(${out_vendor} ${vendor} PARENT_SCOPE)
+ set(${out_os} ${os} PARENT_SCOPE)
+ message(STATUS "Target triple: ${triple}")
+endfunction()
diff --git a/cmake/Modules/MacroEnsureOutOfSourceBuild.cmake b/cmake/Modules/MacroEnsureOutOfSourceBuild.cmake
new file mode 100644
index 0000000..a066936
--- /dev/null
+++ b/cmake/Modules/MacroEnsureOutOfSourceBuild.cmake
@@ -0,0 +1,18 @@
+# MACRO_ENSURE_OUT_OF_SOURCE_BUILD(<errorMessage>)
+
+macro( MACRO_ENSURE_OUT_OF_SOURCE_BUILD _errorMessage )
+
+string( COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" _insource )
+if( _insource )
+ message( SEND_ERROR "${_errorMessage}" )
+ message( FATAL_ERROR
+ "In-source builds are not allowed.
+ CMake would overwrite the makefiles distributed with Compiler-RT.
+ Please create a directory and run cmake from there, passing the path
+ to this source directory as the last argument.
+ This process created the file `CMakeCache.txt' and the directory `CMakeFiles'.
+ Please delete them."
+ )
+endif( _insource )
+
+endmacro( MACRO_ENSURE_OUT_OF_SOURCE_BUILD )
diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake
new file mode 100644
index 0000000..118d82f
--- /dev/null
+++ b/cmake/config-ix.cmake
@@ -0,0 +1,37 @@
+include(CheckLibraryExists)
+include(CheckCXXCompilerFlag)
+
+# Check compiler flags
+check_cxx_compiler_flag(-std=c++0x LIBCXX_HAS_STDCXX0X_FLAG)
+check_cxx_compiler_flag(-fPIC LIBCXX_HAS_FPIC_FLAG)
+check_cxx_compiler_flag(-nodefaultlibs LIBCXX_HAS_NODEFAULTLIBS_FLAG)
+check_cxx_compiler_flag(-nostdinc++ LIBCXX_HAS_NOSTDINCXX_FLAG)
+check_cxx_compiler_flag(-Wall LIBCXX_HAS_WALL_FLAG)
+check_cxx_compiler_flag(-W LIBCXX_HAS_W_FLAG)
+check_cxx_compiler_flag(-Wno-unused-parameter LIBCXX_HAS_WNO_UNUSED_PARAMETER_FLAG)
+check_cxx_compiler_flag(-Wwrite-strings LIBCXX_HAS_WWRITE_STRINGS_FLAG)
+check_cxx_compiler_flag(-Wno-long-long LIBCXX_HAS_WNO_LONG_LONG_FLAG)
+check_cxx_compiler_flag(-pedantic LIBCXX_HAS_PEDANTIC_FLAG)
+check_cxx_compiler_flag(-Werror LIBCXX_HAS_WERROR_FLAG)
+check_cxx_compiler_flag(-fno-exceptions LIBCXX_HAS_FNO_EXCEPTIONS_FLAG)
+check_cxx_compiler_flag(-fno-rtti LIBCXX_HAS_FNO_RTTI_FLAG)
+check_cxx_compiler_flag(/WX LIBCXX_HAS_WX_FLAG)
+check_cxx_compiler_flag(/EHsc LIBCXX_HAS_EHSC_FLAG)
+check_cxx_compiler_flag(/EHs- LIBCXX_HAS_NO_EHS_FLAG)
+check_cxx_compiler_flag(/EHa- LIBCXX_HAS_NO_EHA_FLAG)
+check_cxx_compiler_flag(/GR- LIBCXX_HAS_NO_GR_FLAG)
+
+# Check libraries
+check_library_exists(pthread pthread_create "" LIBCXX_HAS_PTHREAD_LIB)
+check_library_exists(c printf "" LIBCXX_HAS_C_LIB)
+check_library_exists(m ccos "" LIBCXX_HAS_M_LIB)
+check_library_exists(gcc_s __gcc_personality_v0 "" LIBCXX_HAS_GCC_S_LIB)
+
+# Check C++0x features
+if (LIBCXX_ENABLE_CXX0X)
+ if (LIBCXX_HAS_STDCXX0X_FLAG)
+ set(CMAKE_REQUIRED_DEFINITIONS -std=c++0x)
+ endif()
+else()
+ set(LIBCXX_HAS_STDCXX0X_FLAG FALSE)
+endif()