components/llvm/patches/031-solaris-build-system.patch
changeset 6512 92717ce71105
child 6637 22d5f6c97e6f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/llvm/patches/031-solaris-build-system.patch	Thu Jul 28 16:25:34 2016 -0700
@@ -0,0 +1,1257 @@
+# 24314621 LLVM should build using the new CMake based build system
+# CMake parts for upstream, Solaris-specific parts no.
+--- Makefile.config.in	2015-08-07 12:44:47.000000000 -0400
++++ Makefile.config.in	2016-05-08 23:19:20.538430899 -0400
+@@ -12,6 +12,12 @@
+ #
+ #===------------------------------------------------------------------------===#
+ 
++MACH = $(shell uname -p)
++MACH64=sparcv9
++ifeq ($(MACH),i386)
++  MACH64=amd64
++endif
++
+ # Define LLVM specific info and directories based on the autoconf variables
+ LLVMPackageName   := @PACKAGE_TARNAME@
+ LLVMVersion       := @PACKAGE_VERSION@
+@@ -185,6 +191,11 @@
+ # Path to the nm program
+ NM_PATH = @NM@
+ 
++# Solaris-specific filesystem locations
++ifeq ($(findstring m32,$(CXXFLAGS)),)
++  PROJ_libdir = $(PROJ_prefix)/lib/$(MACH64)
++endif
++
+ # The pathnames of the programs we require to build
+ CMP        := @CMP@
+ CP         := @CP@
+@@ -225,6 +236,12 @@
+ 
+ LIBS       := @LIBS@
+ 
++ifeq ($(HOST_OS), $(filter $(HOST_OS), SunOS))
++  ifeq ($(MACH),sparc)
++    LIBS += -lkstat
++  endif
++endif
++
+ # Targets that are possible to build
+ ALL_TARGETS := @ALL_TARGETS@
+ 
+@@ -347,14 +364,14 @@
+ ENABLE_EMBED_STDCXX := @ENABLE_EMBED_STDCXX@
+ 
+ # Use -fvisibility-inlines-hidden?
+-ENABLE_VISIBILITY_INLINES_HIDDEN := @ENABLE_VISIBILITY_INLINES_HIDDEN@
++ENABLE_VISIBILITY_INLINES_HIDDEN := 0
+ 
+ # Do we want to allow timestamping information into builds?
+ ENABLE_TIMESTAMPS := @ENABLE_TIMESTAMPS@
+ 
+ # This option tells the Makefiles to produce verbose output.
+ # It essentially prints the commands that make is executing
+-#VERBOSE = 1
++VERBOSE := 1
+ 
+ # Enable JIT for this platform
+ TARGET_HAS_JIT = @TARGET_HAS_JIT@
+###
+--- Makefile.rules	2015-11-09 08:10:00.000000000 -0800
++++ Makefile.rules	2016-05-28 17:08:22.413887137 -0700
+@@ -291,8 +291,8 @@
+   LD.Flags  += $(OPTIMIZE_OPTION)
+   ifdef DEBUG_SYMBOLS
+     BuildMode := $(BuildMode)+Debug
+-    CXX.Flags += -g
+-    C.Flags   += -g
++    CXX.Flags += -g3
++    C.Flags   += -g3
+     KEEP_SYMBOLS := 1
+   endif
+ else
+@@ -307,8 +307,8 @@
+     CXX.Flags += -gsplit-dwarf
+     C.Flags   += -gsplit-dwarf
+     else
+-    CXX.Flags += -g
+-    C.Flags   += -g
++    CXX.Flags += -g3
++    C.Flags   += -g3
+     endif
+     KEEP_SYMBOLS := 1
+   endif
+@@ -331,6 +331,13 @@
+  endif
+ endif
+ 
++ifeq ($(HOST_OS), $(filter $(HOST_OS), SunOS))
++  REQUIRES_EH := 1
++  REQUIRES_FRAME_POINTER := 1
++else
++  REQUIRES_EH := 0
++endif
++
+ ifeq ($(ENABLE_WERROR),1)
+   CXX.Flags += -Werror
+   C.Flags += -Werror
+@@ -355,14 +362,16 @@
+ endif
+ 
+ # IF REQUIRES_EH=1 is specified then don't disable exceptions
+-ifndef REQUIRES_EH
++ifneq ($(REQUIRES_EH), 1)
+   CXX.Flags += -fno-exceptions
++  REQUIRES_RTTI := 0
+ else
+   # If the library requires EH, it also requires RTTI.
++  CXX.Flags += -fexceptions
+   REQUIRES_RTTI := 1
+ endif
+ 
+-ifdef REQUIRES_FRAME_POINTER
++ifeq ($(REQUIRES_FRAME_POINTER), 1)
+   CXX.Flags := $(filter-out -fomit-frame-pointer,$(CXX.Flags))
+   C.Flags   := $(filter-out -fomit-frame-pointer,$(C.Flags))
+   LD.Flags  := $(filter-out -fomit-frame-pointer,$(LD.Flags))
+@@ -371,6 +380,8 @@
+ # If REQUIRES_RTTI=1 is specified then don't disable run-time type id.
+ ifneq ($(REQUIRES_RTTI), 1)
+   CXX.Flags += -fno-rtti
++else
++  CXX.Flags += -frtti
+ endif
+ 
+ ifeq ($(ENABLE_COVERAGE),1)
+@@ -596,7 +607,7 @@
+ endif
+ 
+ ifdef SHARED_LIBRARY
+-ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
++ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW SunOS))
+ ifneq ($(HOST_OS),Darwin)
+   LD.Flags += $(RPATH) -Wl,'$$ORIGIN'
+ else
+@@ -646,9 +657,13 @@
+     ifeq ($(HOST_OS),SunOS)
+       LD.Flags += -Wl,-z -Wl,discard-unused=sections
+     else
+-      ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
++      ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW SunOS))
+         LD.Flags += -Wl,--gc-sections
+       endif
++      ifeq ($(HOST_OS), $(filter $(HOST_OS), SunOS))
++	LD.Flags += -Wl,-z -Wl,discard-unused=sections
++	LD.Flags += -Wl,-M -Wl,$(PROJ_SRC_ROOT)/mapfiles/map.gnu-sections
++      endif
+     endif
+   endif
+ endif
+@@ -660,8 +675,14 @@
+   endif
+   ifneq ($(HOST_OS), Darwin)
+     ifdef TOOLNAME
++      ifneq ($(HOST_OS), $(filter $(HOST_OS), SunOS))
+       LD.Flags += $(RPATH) -Wl,'$$ORIGIN/../lib'
+     endif
++      ifeq ($(HOST_OS), $(filter $(HOST_OS), SunOS))
++	LD.Flags += -Wl,-z -Wl,discard-unused=sections
++	LD.Flags += -Wl,-M -Wl,$(PROJ_SRC_ROOT)/mapfiles/map.gnu-sections
++      endif
++    endif
+   else
+     ifneq ($(DARWIN_MAJVERS),4)
+       LD.Flags += $(RPATH) -Wl,@executable_path/../lib
+@@ -1105,6 +1126,18 @@
+ clean-local::
+ 	-$(Verb) $(RM) -f $(NativeExportsFile)
+ else
++ifeq ($(HOST_OS), $(filter $(HOST_OS), SunOS))
++# Solaris ld requires a version script rather than a plain list.
++NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE)).map
++$(NativeExportsFile): $(EXPORTED_SYMBOL_FILE) $(ObjDir)/.dir
++    $(Verb) echo "{" > $@
++    $(Verb) ggrep -q '[[:alnum:]_]' $< && echo "  global:" >> $@ || :
++    $(Verb) gsed -e 's/$$/;/' -e 's/^/    /' < $< >> $@
++    $(Verb) echo "  local: *;" >> $@
++    $(Verb) echo "};" >> $@
++clean-local::
++    -$(Verb) $(RM) -f $(NativeExportsFile)
++else
+ ifeq ($(HAVE_LINK_VERSION_SCRIPT),1)
+ # Gold and BFD ld require a version script rather than a plain list.
+ NativeExportsFile := $(ObjDir)/$(notdir $(EXPORTED_SYMBOL_FILE)).map
+@@ -1134,6 +1167,7 @@
+ endif
+ endif
+ endif
++endif
+ 
+ # Now add the linker command-line options to use the native export file.
+ 
+@@ -1153,6 +1187,11 @@
+ SharedLinkOptions += $(NativeExportsFile)
+ endif
+ 
++# Solaris
++ifeq ($(HOST_OS), $(filter $(HOST_OS), SunOS))
++LLVMLibsOptions += -Wl,-M -Wl,$(NativeExportsFile)
++endif
++
+ endif
+ 
+ ###############################################################################
+###
+--- lib/Support/CMakeLists.txt	2015-12-14 16:59:19.000000000 -0800
++++ lib/Support/CMakeLists.txt	2016-07-11 13:59:48.145404115 -0700
+@@ -28,6 +28,16 @@
+   endif( MINGW )
+ endif( NOT MSVC )
+ 
++# On Solaris, -lkstat is only needed on SPARC.
++if(CMAKE_HOST_SOLARIS)
++  set(UNAME "")
++  execute_process(COMMAND uname -p OUTPUT_VARIABLE UNAME)
++  if("${UNAME}" MATCHES "sparc")
++    message(INFO "Adding -lkstat to link line.")
++    set(system_libs ${system_libs} kstat)
++  endif()
++endif()
++
+ add_llvm_library(LLVMSupport
+   APFloat.cpp
+   APInt.cpp
+###
+--- tools/clang/include/clang/Basic/Makefile	2014-03-31 09:14:44.000000000 -0400
++++ tools/clang/include/clang/Basic/Makefile	2016-05-08 23:19:20.552431239 -0400
+@@ -16,8 +16,17 @@
+ 
+ INPUT_TDS = $(wildcard $(PROJ_SRC_DIR)/Diagnostic*.td)
+ 
++SVN_OR_RC :=
++
+ # Compute the Clang version from the LLVM version, unless specified explicitly.
+ ifndef CLANG_VERSION
++ifeq ($(LLVMVersion), $(findstring svn, $(LLVMVersion)), svn)
++  SVN_OR_RC := "svn"
++endif
++
++ifeq ($(LLVMVersion), $(findstring rc, $(LLVMVersion)), rc)
++  SVN_OR_RC := "rc"
++endif
+ CLANG_VERSION := $(subst svn,,$(LLVMVersion))
+ CLANG_VERSION := $(subst rc,,$(CLANG_VERSION))
+ endif
+@@ -26,6 +35,14 @@
+ CLANG_VERSION_MAJOR := $(word 1,$(CLANG_VERSION_COMPONENTS))
+ CLANG_VERSION_MINOR := $(word 2,$(CLANG_VERSION_COMPONENTS))
+ CLANG_VERSION_PATCHLEVEL := $(word 3,$(CLANG_VERSION_COMPONENTS))
++CLANG_VERSION_TAGGED_STRING :=
++
++ifeq ($(SVN_OR_RC),)
++  CLANG_VERSION_TAGGED_STRING := "\"\(tags/RELEASE_$(CLANG_VERSION_MAJOR)$(CLANG_VERSION_MINOR)$(CLANG_VERSION_PATCHLEVEL)/final\)\""
++else
++  CLANG_VERSION_TAGGED_STRING := "\"\(tags/RELEASE_$(CLANG_VERSION_MAJOR)$(CLANG_VERSION_MINOR)$(CLANG_VERSION_PATCHLEVEL)/$(SVN_OR_RC)\)\""
++endif
++
+ ifeq ($(CLANG_VERSION_PATCHLEVEL),)
+ CLANG_HAS_VERSION_PATCHLEVEL := 0
+ else
+@@ -67,4 +84,5 @@
+ 	           -e "s#@CLANG_VERSION_MINOR@#$(CLANG_VERSION_MINOR)#g" \
+ 	           -e "s#@CLANG_VERSION_PATCHLEVEL@#$(CLANG_VERSION_PATCHLEVEL)#g" \
+ 	           -e "s#@CLANG_HAS_VERSION_PATCHLEVEL@#$(CLANG_HAS_VERSION_PATCHLEVEL)#g" \
++		   -e "s#@CLANG_VERSION_TAGGED_STRING@#$(CLANG_VERSION_TAGGED_STRING:' '='')#g" \
+ 	           $< > $@
+###
+--- tools/clang/tools/libclang/Makefile	2015-07-07 21:00:30.000000000 -0400
++++ tools/clang/tools/libclang/Makefile	2016-05-08 23:19:20.577431847 -0400
+@@ -35,10 +35,16 @@
+ include $(CLANG_LEVEL)/Makefile
+ 
+ # Add soname to the library.
+-ifeq ($(HOST_OS), $(filter $(HOST_OS), Linux FreeBSD GNU GNU/kFreeBSD))
++ifeq ($(HOST_OS), $(filter $(HOST_OS), Linux FreeBSD GNU GNU/kFreeBSD SunOS))
+         LLVMLibsOptions += -Wl,-soname,lib$(LIBRARYNAME)$(SHLIBEXT)
+ endif
+ 
++# Extract everything necessary from Solaris *.a archives
++ifeq ($(HOST_OS), $(filter $(HOST_OS), SunOS))
++  SharedLinkOptions += -Wl,-z -Wl,rescan-now -Wl,-z -Wl,allextract
++  LLVMLibsOptions += -Wl,-z -Wl,defaultextract
++endif
++
+ ifeq ($(ENABLE_CLANG_ARCMT),1)
+   CXX.Flags += -DCLANG_ENABLE_ARCMT
+ endif
+###
+--- tools/llvm-shlib/Makefile	2014-08-01 02:16:03.000000000 -0400
++++ tools/llvm-shlib/Makefile	2016-05-08 23:19:20.579431896 -0400
+@@ -71,7 +71,10 @@
+ 
+ ifeq ($(HOST_OS),SunOS)
+     # add -z allextract ahead of other libraries on Solaris
+-    LLVMLibsOptions := -Wl,-z -Wl,allextract $(LLVMLibsOptions)
++    LLVMLibsOptions := -Wl,-z -Wl,rescan -Wl,-z -Wl,allextract $(LLVMLibsOptions)
++    LLVMLibsOptions += -Wl,-h -Wl,lib$(LIBRARYNAME)$(SHLIBEXT)
++    LLVMLibsOptions += -Wl,-z -Wl,defaultextract -Wl,-z -Wl,defs
++    LLVMLibsOptions += -lkstat
+ endif
+ 
+ ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
+###
+--- tools/clang/tools/libclang/CMakeLists.txt	2015-11-11 16:46:57.000000000 -0800
++++ tools/clang/tools/libclang/CMakeLists.txt	2016-05-15 17:35:29.587888133 -0700
+@@ -92,6 +92,7 @@
+ 
+   LINK_COMPONENTS
+   ${LLVM_TARGETS_TO_BUILD}
++
+   Core
+   Support
+   )
+@@ -108,6 +109,9 @@
+ 
+     set_property(TARGET libclang APPEND_STRING PROPERTY
+                  LINK_FLAGS ${LIBCLANG_LINK_FLAGS})
++  elseif(CMAKE_HOST_SOLARIS)
++    set(LIBCLANG_LINK_FLAGS " -Wl,-z -Wl,allextract -Wl,-z -Wl,defs -Bsymbolic-functions ")
++    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LIBCLANG_LINK_FLAGS}")
+   else()
+     set_target_properties(libclang
+       PROPERTIES
+###
+--- tools/llvm-shlib/CMakeLists.txt	2015-11-04 14:11:12.000000000 -0900
++++ tools/llvm-shlib/CMakeLists.txt	2016-07-05 22:08:15.168330085 -0800
+@@ -40,12 +40,18 @@
+ 
+ add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB SONAME ${SOURCES})
+ 
+-list(REMOVE_DUPLICATES LIB_NAMES)
++if (LIB_NAMES)
++  list(REMOVE_DUPLICATES "LIB_NAMES")
++endif()
++
+ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") # FIXME: It should be "GNU ld for elf"
+   # GNU ld doesn't resolve symbols in the version script.
+   set(LIB_NAMES -Wl,--whole-archive ${LIB_NAMES} -Wl,--no-whole-archive)
+ elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
+   set(LIB_NAMES -Wl,-all_load ${LIB_NAMES})
++elseif(CMAKE_HOST_SOLARIS)
++  set(LIB_NAMES -Wl,-z -Wl,defs -Wl,-Bsymbolic-functions -Wl,-z -Wl,allextract ${LIB_NAMES} -Wl,-z -Wl,defaultextract)
++  # message(STATUS "LIB_NAMES: ${LIB_NAMES}")
+ endif()
+ 
+ target_link_libraries(LLVM PRIVATE ${LIB_NAMES})
+###
+--- cmake/modules/HandleLLVMOptions.cmake	2016-01-06 11:05:19.000000000 -0800
++++ cmake/modules/HandleLLVMOptions.cmake	2016-05-18 19:22:28.803960478 -0700
+@@ -132,6 +132,7 @@
+ # Pass -Wl,-z,defs. This makes sure all symbols are defined. Otherwise a DSO
+ # build might work on ELF but fail on MachO/COFF.
+ if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR WIN32 OR CYGWIN OR
++        CMAKE_HOST_SOLARIS OR
+         ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR
+         ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD") AND
+    NOT LLVM_USE_SANITIZER)
+@@ -185,13 +186,13 @@
+   endif()
+ endif()
+ 
+-if(NOT WIN32 AND NOT CYGWIN)
++if(NOT WIN32 AND NOT CYGWIN AND NOT CMAKE_HOST_SOLARIS)
+   # MinGW warns if -fvisibility-inlines-hidden is used.
+   check_cxx_compiler_flag("-fvisibility-inlines-hidden" SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG)
+   append_if(SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG "-fvisibility-inlines-hidden" CMAKE_CXX_FLAGS)
+ endif()
+ 
+-if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
++if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 AND NOT CMAKE_HOST_SOLARIS )
+   # TODO: support other platforms and toolchains.
+   if( LLVM_BUILD_32_BITS )
+     message(STATUS "Building 32 bits executables and libraries.")
+@@ -200,10 +201,12 @@
+     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32")
+     set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -m32")
+   endif( LLVM_BUILD_32_BITS )
+-endif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
++endif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 AND NOT CMAKE_HOST_SOLARIS )
+ 
+ if (LLVM_BUILD_STATIC)
++  if (NOT CMAKE_HOST_SOLARIS)
+   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
++  endif(CMAKE_HOST_SOLARIS)
+ endif()
+ 
+ if( XCODE )
+###
+--- lib/Transforms/Hello/CMakeLists.txt	2015-06-15 17:44:12.000000000 -0700
++++ lib/Transforms/Hello/CMakeLists.txt	2016-05-17 18:08:53.730103135 -0700
+@@ -1,14 +1,18 @@
+ # If we don't need RTTI or EH, there's no reason to export anything
+ # from the hello plugin.
+-if( NOT LLVM_REQUIRES_RTTI )
+-  if( NOT LLVM_REQUIRES_EH )
+-    set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/Hello.exports)
+-  endif()
+-endif()
++# It doesn't export anything anyway, regardless of RTTI or no RTTI.
++# Why does it need an empty linker mapfile?
++IF (NOT CMAKE_HOST_SOLARIS)
++  IF (NOT LLVM_REQUIRES_RTTI)
++    IF (NOT LLVM_REQUIRES_EH)
++      SET (LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/Hello.exports)
++    ENDIF()
++  ENDIF()
++ENDIF()
+ 
+-if(WIN32 OR CYGWIN)
+-  set(LLVM_LINK_COMPONENTS Core Support)
+-endif()
++if(WIN32 OR CYGWIN OR CMAKE_HOST_SOLARIS)
++  SET (LLVM_LINK_COMPONENTS Core Support)
++ENDIF()
+ 
+ add_llvm_loadable_module( LLVMHello
+   Hello.cpp
+###
+--- tools/clang/tools/driver/CMakeLists.txt	2015-11-10 04:51:25.000000000 -0800
++++ tools/clang/tools/driver/CMakeLists.txt	2016-05-21 07:44:27.981263031 -0700
+@@ -1,3 +1,7 @@
++IF(CMAKE_HOST_SOLARIS)
++  include (GNUInstallDirs)
++ENDIF(CMAKE_HOST_SOLARIS)
++
+ set( LLVM_LINK_COMPONENTS
+   ${LLVM_TARGETS_TO_BUILD}
+   Analysis
+@@ -51,9 +55,15 @@
+ 
+ add_dependencies(clang clang-headers)
+ 
++IF(CMAKE_HOST_SOLARIS)
++  install(TARGETS clang
++    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
++    COMPONENT clang)
++ELSE()
+ install(TARGETS clang
+   RUNTIME DESTINATION bin
+   COMPONENT clang)
++ENDIF()
+ 
+ if(NOT CMAKE_CONFIGURATION_TYPES)
+   add_custom_target(install-clang
+--- tools/clang/tools/scan-view/CMakeLists.txt	2015-11-13 12:34:15.000000000 -0800
++++ tools/clang/tools/scan-view/CMakeLists.txt	2016-05-21 08:48:55.352488404 -0700
+@@ -1,3 +1,7 @@
++IF(CMAKE_HOST_SOLARIS)
++  include(GNUInstallDirs)
++ENDIF(CMAKE_HOST_SOLARIS)
++
+ option(CLANG_INSTALL_SCANVIEW "Install the scan-view tool" ON)
+ 
+ set(BinFiles
+@@ -21,7 +25,11 @@
+                          ${CMAKE_BINARY_DIR}/bin/
+                        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile})
+     list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile})
++    IF(CMAKE_HOST_SOLARIS)
++      install(PROGRAMS bin/${BinFile} DESTINATION ${CMAKE_INSTALL_BINDIR})
++    ELSE()
+     install(PROGRAMS bin/${BinFile} DESTINATION bin)
++    ENDIF()
+   endforeach()
+ 
+   foreach(ShareFile ${ShareFiles})
+@@ -33,7 +41,12 @@
+                          ${CMAKE_BINARY_DIR}/share/scan-view/
+                        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/share/${ShareFile})
+     list(APPEND Depends ${CMAKE_BINARY_DIR}/share/scan-view/${ShareFile})
++    IF(CMAKE_HOST_SOLARIS)
++      install(FILES share/${ShareFile} DESTINATION
++        ${CMAKE_INSTALL_DATAROOTDIR}//scan-view)
++    ELSE()
+     install(FILES share/${ShareFile} DESTINATION share/scan-view)
++    ENDIF()
+   endforeach()
+ 
+   add_custom_target(scan-view ALL DEPENDS ${Depends})
+--- tools/clang/tools/clang-check/CMakeLists.txt	2015-07-16 18:19:54.000000000 -0700
++++ tools/clang/tools/clang-check/CMakeLists.txt	2016-05-21 08:52:13.223643264 -0700
+@@ -1,3 +1,7 @@
++IF (CMAKE_HOST_SOLARIS)
++  include(GNUInstallDirs)
++ENDIF(CMAKE_HOST_SOLARIS)
++
+ set( LLVM_LINK_COMPONENTS
+   ${LLVM_TARGETS_TO_BUILD}
+   Option
+@@ -18,5 +22,9 @@
+   clangTooling
+   )
+ 
+-install(TARGETS clang-check
+-  RUNTIME DESTINATION bin)
++IF(CMAKE_HOST_SOLARIS)
++  install(TARGETS clang-check RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
++ELSE()
++  install(TARGETS clang-check RUNTIME DESTINATION bin)
++ENDIF()
++
+###
+--- tools/clang/tools/diagtool/CMakeLists.txt	2014-02-20 23:59:59.000000000 -0800
++++ tools/clang/tools/diagtool/CMakeLists.txt	2016-05-23 06:25:56.330339818 -0700
+@@ -1,6 +1,6 @@
+-set(LLVM_LINK_COMPONENTS
+-  Support
+-  )
++include(GNUInstallDirs)
++
++set(LLVM_LINK_COMPONENTS Support)
+ 
+ add_clang_executable(diagtool
+   diagtool_main.cpp
+@@ -13,11 +13,15 @@
+ 
+ target_link_libraries(diagtool
+   clangBasic
+-  clangFrontend
+-  )
++  clangFrontend)
+ 
+ if(UNIX)
+   set(CLANGXX_LINK_OR_COPY create_symlink)
+ else()
+   set(CLANGXX_LINK_OR_COPY copy)
+ endif()
++
++install(TARGETS diagtool
++        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
++        COMPONENT diagtool)
++
+--- tools/clang/tools/c-arcmt-test/CMakeLists.txt	2014-11-05 06:04:25.000000000 -0800
++++ tools/clang/tools/c-arcmt-test/CMakeLists.txt	2016-05-23 06:30:27.431481181 -0700
+@@ -1,17 +1,16 @@
+-add_clang_executable(c-arcmt-test
+-  c-arcmt-test.c
+-  )
++include(GNUInstallDirs)
++
++add_clang_executable(c-arcmt-test c-arcmt-test.c)
+ 
+ if (LLVM_BUILD_STATIC)
+-  target_link_libraries(c-arcmt-test
+-    libclang_static
+-    )
++  target_link_libraries(c-arcmt-test libclang_static)
+ else()
+-  target_link_libraries(c-arcmt-test
+-    libclang
+-    )
++  target_link_libraries(c-arcmt-test libclang)
+ endif()
+ 
+-set_target_properties(c-arcmt-test
+-  PROPERTIES
+-  LINKER_LANGUAGE CXX)
++set_target_properties(c-arcmt-test PROPERTIES LINKER_LANGUAGE CXX)
++
++install(TARGETS c-arcmt-test
++        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
++        COMPONENT c-arcmt-test)
++
+--- tools/clang/tools/arcmt-test/CMakeLists.txt	2014-01-31 10:09:49.000000000 -0800
++++ tools/clang/tools/arcmt-test/CMakeLists.txt	2016-05-23 06:29:00.860135211 -0700
+@@ -1,14 +1,16 @@
+-set(LLVM_LINK_COMPONENTS
+-  support
+-  )
++include(GNUInstallDirs)
+ 
+-add_clang_executable(arcmt-test
+-  arcmt-test.cpp
+-  )
++set(LLVM_LINK_COMPONENTS Support)
++
++add_clang_executable(arcmt-test arcmt-test.cpp)
+ 
+ target_link_libraries(arcmt-test
+   clangARCMigrate
+   clangBasic
+   clangFrontend
+-  clangLex
+-  )
++  clangLex)
++
++install(TARGETS arcmt-test
++        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
++        COMPONENT arcmt-test)
++
+###
+--- tools/clang/tools/c-index-test/CMakeLists.txt	2015-11-13 14:41:14.000000000 -0800
++++ tools/clang/tools/c-index-test/CMakeLists.txt	2016-05-23 07:56:42.716288730 -0700
+@@ -1,27 +1,18 @@
+-add_clang_executable(c-index-test
+-  c-index-test.c
+-  )
++include(GNUInstallDirs)
++
++add_clang_executable(c-index-test c-index-test.c)
+ 
+ if(NOT MSVC)
+-  set_property(
+-    SOURCE c-index-test.c
+-    PROPERTY COMPILE_FLAGS "-std=gnu89"
+-    )
++  set_property( SOURCE c-index-test.c PROPERTY COMPILE_FLAGS "-std=gnu89")
+ endif()
+ 
+ if (LLVM_BUILD_STATIC)
+-  target_link_libraries(c-index-test
+-    libclang_static
+-  )
++  target_link_libraries(c-index-test libclang_static)
+ else()
+-  target_link_libraries(c-index-test
+-    libclang
+-  )
++  target_link_libraries(c-index-test libclang)
+ endif()
+ 
+-set_target_properties(c-index-test
+-  PROPERTIES
+-  LINKER_LANGUAGE CXX)
++set_target_properties(c-index-test PROPERTIES LINKER_LANGUAGE CXX)
+ 
+ # If libxml2 is available, make it available for c-index-test.
+ if (CLANG_HAVE_LIBXML)
+@@ -31,9 +22,18 @@
+ 
+ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+   if(INTERNAL_INSTALL_PREFIX)
+-    set(INSTALL_DESTINATION "${INTERNAL_INSTALL_PREFIX}/bin")
++    if(CMAKE_HOST_SOLARIS)
++      set(INSTALL_DESTINATION
++          "${INTERNAL_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}")
++    else()
++      set(INSTALL_DESTINATION "${INTERNAL_INSTALL_PREFIX}/bin")
++    endif()
+   else()
+-    set(INSTALL_DESTINATION bin)
++    if (CMAKE_HOST_SOLARIS)
++      set(INSTALL_DESTINATION ${CMAKE_INSTALL_BINDIR})
++    else()
++      set(INSTALL_DESTINATION bin)
++    endif()
+   endif()
+ 
+   install(TARGETS c-index-test
+@@ -48,3 +48,4 @@
+               -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
+   endif()
+ endif()
++
+###
+--- tools/llvm-lto/CMakeLists.txt	2015-10-19 08:21:46.000000000 -0700
++++ tools/llvm-lto/CMakeLists.txt	2016-05-23 06:23:43.366481218 -0700
+@@ -1,3 +1,5 @@
++include(GNUInstallDirs)
++
+ set(LLVM_LINK_COMPONENTS
+   ${LLVM_TARGETS_TO_BUILD}
+   BitWriter
+@@ -6,10 +8,11 @@
+   MC
+   Object
+   Support
+-  Target
+-  )
++  Target)
++
++add_llvm_tool(llvm-lto llvm-lto.cpp)
+ 
+-add_llvm_tool(llvm-lto
+-  llvm-lto.cpp
+-  )
++install(TARGETS llvm-lto
++        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
++        COMPONENT llvm-lto)
+ 
+###
+--- tools/clang/tools/scan-build/CMakeLists.txt	2015-11-20 10:49:02.000000000 -0800
++++ tools/clang/tools/scan-build/CMakeLists.txt	2016-05-21 09:18:25.745824278 -0700
+@@ -38,7 +38,11 @@
+                          ${CMAKE_BINARY_DIR}/bin/
+                        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile})
+     list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile})
++    if (CMAKE_HOST_SOLARIS)
++      install(PROGRAMS bin/${BinFile} DESTINATION ${CMAKE_INSTALL_BINDIR})
++    else()
+     install(PROGRAMS bin/${BinFile} DESTINATION bin)
++    endif()
+   endforeach()
+ 
+   foreach(LibexecFile ${LibexecFiles})
+@@ -50,7 +54,12 @@
+                          ${CMAKE_BINARY_DIR}/libexec/
+                        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libexec/${LibexecFile})
+     list(APPEND Depends ${CMAKE_BINARY_DIR}/libexec/${LibexecFile})
++    if (CMAKE_HOST_SOLARIS)
++      install(PROGRAMS libexec/${LibexecFile} DESTINATION
++              ${CMAKE_INSTALL_LIBEXECDIR})
++    ELSE()
+     install(PROGRAMS libexec/${LibexecFile} DESTINATION libexec)
++    ENDIF()
+   endforeach()
+ 
+   foreach(ManPage ${ManPages})
+@@ -74,9 +83,15 @@
+                          ${CMAKE_BINARY_DIR}/share/scan-build/
+                        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/share/scan-build/${ShareFile})
+     list(APPEND Depends ${CMAKE_BINARY_DIR}/share/scan-build/${ShareFile})
++    IF (CMAKE_HOST_SOLARIS)
++      install(FILES share/scan-build/${ShareFile} DESTINATION
++        ${CMAKE_INSTALL_DATAROOTDIR}/scan-build)
++    ELSE()
+     install(FILES share/scan-build/${ShareFile} DESTINATION share/scan-build)
++    ENDIF()
+   endforeach()
+ 
+   add_custom_target(scan-build ALL DEPENDS ${Depends})
+   set_target_properties(scan-build PROPERTIES FOLDER "Misc")
+ endif()
++
+--- tools/clang/tools/clang-format/CMakeLists.txt	2015-09-30 12:28:47.000000000 -0700
++++ tools/clang/tools/clang-format/CMakeLists.txt	2016-05-21 09:33:31.300900932 -0700
+@@ -1,5 +1,9 @@
+ set(LLVM_LINK_COMPONENTS support)
+ 
++if(CMAKE_HOST_SOLARIS)
++  include(GNUInstallDirs)
++endif()
++
+ add_clang_executable(clang-format
+   ClangFormat.cpp
+   )
+@@ -19,6 +23,21 @@
+   add_subdirectory(fuzzer)
+ endif()
+ 
++if(CMAKE_HOST_SOLARIS)
++  install(TARGETS clang-format RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
++  install(PROGRAMS clang-format-bbedit.applescript
++          DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/clang)
++  install(PROGRAMS clang-format-diff.py
++          DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/clang)
++  install(PROGRAMS clang-format-sublime.py
++          DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/clang)
++  install(PROGRAMS clang-format.el
++          DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/clang)
++  install(PROGRAMS clang-format.py
++          DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/clang)
++  install(PROGRAMS git-clang-format
++          DESTINATION ${CMAKE_INSTALL_BINDIR})
++else()
+ install(TARGETS clang-format RUNTIME DESTINATION bin)
+ install(PROGRAMS clang-format-bbedit.applescript DESTINATION share/clang)
+ install(PROGRAMS clang-format-diff.py DESTINATION share/clang)
+@@ -26,3 +45,5 @@
+ install(PROGRAMS clang-format.el DESTINATION share/clang)
+ install(PROGRAMS clang-format.py DESTINATION share/clang)
+ install(PROGRAMS git-clang-format DESTINATION bin)
++endif()
++
+###
+--- tools/clang/CMakeLists.txt	2016-01-05 15:51:42.000000000 -0800
++++ tools/clang/CMakeLists.txt	2016-05-23 14:00:47.358240529 -0700
+@@ -1,5 +1,7 @@
+ cmake_minimum_required(VERSION 2.8.8)
+ 
++include(GNUInstallDirs)
++
+ # FIXME: It may be removed when we use 2.8.12.
+ if(CMAKE_VERSION VERSION_LESS 2.8.12)
+   # Invalidate a couple of keywords.
+@@ -84,6 +86,7 @@
+   # They are used as destination of target generators.
+   set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
+   set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
++
+   if(WIN32 OR CYGWIN)
+     # DLL platform -- put DLLs into bin.
+     set(LLVM_SHLIB_OUTPUT_INTDIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
+@@ -196,11 +199,21 @@
+ set(DEFAULT_SYSROOT "" CACHE PATH
+   "Default <path> to all compiler invocations for --sysroot=<path>." )
+ 
++if(CMAKE_HOST_SOLARIS)
++  set(CLANG_DEFAULT_OPENMP_RUNTIME "libgomp" CACHE STRING
++      "Default OpenMP runtime used by -fopenmp.")
++else()
+ set(CLANG_DEFAULT_OPENMP_RUNTIME "libomp" CACHE STRING
+   "Default OpenMP runtime used by -fopenmp.")
++endif()
+ 
++if(CMAKE_HOST_SOLARIS)
++  set(CLANG_VENDOR "Oracle Solaris" CACHE STRING
++      "Vendor-specific text for showing with version information.")
++else()
+ set(CLANG_VENDOR "" CACHE STRING
+   "Vendor-specific text for showing with version information.")
++endif()
+ 
+ if( CLANG_VENDOR )
+   add_definitions( -DCLANG_VENDOR="${CLANG_VENDOR} " )
+@@ -399,12 +412,21 @@
+     target_link_libraries(${name} ${cmake_2_8_12_INTERFACE} ${LLVM_COMMON_LIBS})
+ 
+     if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libclang")
++      if(CMAKE_HOST_SOLARIS)
+       install(TARGETS ${name}
+         COMPONENT ${name}
+         EXPORT ClangTargets
+-        LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+-        ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
++          LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
++          ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
++          RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
++      else()
++        install(TARGETS ${name}
++          COMPONENT ${name}
++          EXPORT ClangTargets
++          LIBRARY DESTINATION lib
++          ARCHIVE DESTINATION lib
+         RUNTIME DESTINATION bin)
++      endif()
+ 
+       if (${ARG_SHARED} AND NOT CMAKE_CONFIGURATION_TYPES)
+         add_custom_target(install-${name}
+@@ -443,6 +465,26 @@
+   ${CMAKE_CURRENT_SOURCE_DIR}/include
+   )
+ 
++if (CMAKE_HOST_SOLARIS)
++  if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
++    install(DIRECTORY include/clang include/clang-c
++      DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
++      FILES_MATCHING
++      PATTERN "*.def"
++      PATTERN "*.h"
++      PATTERN "config.h" EXCLUDE
++      PATTERN ".svn" EXCLUDE
++      )
++
++    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/clang
++      DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
++      FILES_MATCHING
++      PATTERN "CMakeFiles" EXCLUDE
++      PATTERN "*.inc"
++      PATTERN "*.h"
++      )
++  endif()
++else()
+ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+   install(DIRECTORY include/clang include/clang-c
+     DESTINATION include
+@@ -461,12 +503,17 @@
+     PATTERN "*.h"
+     )
+ endif()
++endif()
+ 
+ if(INTERNAL_INSTALL_PREFIX)
+   set(LIBCLANG_HEADERS_INSTALL_DESTINATION "${INTERNAL_INSTALL_PREFIX}/include")
+ else()
++  if (CMAKE_HOST_SOLARIS)
++    set(LIBCLANG_HEADERS_INSTALL_DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
++  else()
+   set(LIBCLANG_HEADERS_INSTALL_DESTINATION include)
+ endif()
++endif()
+ 
+ install(DIRECTORY include/clang-c
+   COMPONENT libclang-headers
+###
+--- tools/clang/lib/Headers/CMakeLists.txt	2015-12-31 06:14:07.000000000 -0800
++++ tools/clang/lib/Headers/CMakeLists.txt	2016-05-21 09:37:34.349722741 -0700
+@@ -1,3 +1,5 @@
++include(GNUInstallDirs)
++
+ set(files
+   adxintrin.h
+   altivec.h
+@@ -101,11 +103,18 @@
+ add_custom_target(clang-headers ALL DEPENDS ${out_files})
+ set_target_properties(clang-headers PROPERTIES FOLDER "Misc")
+ 
+-install(
+-  FILES ${files} ${CMAKE_CURRENT_BINARY_DIR}/arm_neon.h
++if(CMAKE_HOST_SOLARIS)
++  install(FILES ${files} ${CMAKE_CURRENT_BINARY_DIR}/arm_neon.h
++    COMPONENT clang-headers
++    PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
++    DESTINATION
++    ${CMAKE_INSTALL_LIBDIR}/clang/${CLANG_VERSION}/include)
++else()
++  install(FILES ${files} ${CMAKE_CURRENT_BINARY_DIR}/arm_neon.h
+   COMPONENT clang-headers
+   PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
+   DESTINATION lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include)
++endif()
+ 
+ if (NOT CMAKE_CONFIGURATION_TYPES) # don't add this for IDE's.
+   add_custom_target(install-clang-headers
+@@ -114,3 +123,4 @@
+             -DCMAKE_INSTALL_COMPONENT=clang-headers
+             -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
+ endif()
++
+--- bindings/ocaml/llvm/CMakeLists.txt	2014-12-29 19:24:07.000000000 -0800
++++ bindings/ocaml/llvm/CMakeLists.txt	2016-05-21 10:59:56.318803888 -0700
+@@ -1,3 +1,7 @@
++if (CMAKE_HOST_SOLARIS)
++  include(GNUInstallDirs)
++endif()
++
+ add_ocaml_library(llvm
+   OCAML llvm
+   C     llvm_ocaml
+@@ -7,5 +11,10 @@
+   "${CMAKE_CURRENT_SOURCE_DIR}/META.llvm.in"
+   "${LLVM_LIBRARY_DIR}/ocaml/META.llvm")
+ 
++if (CMAKE_HOST_SOLARIS)
+ install(FILES "${LLVM_LIBRARY_DIR}/ocaml/META.llvm"
+-        DESTINATION lib/ocaml)
++          DESTINATION ${CMAKE_INSTALL_LIBDIR}/ocaml)
++else()
++  install(FILES "${LLVM_LIBRARY_DIR}/ocaml/META.llvm" DESTINATION lib/ocaml)
++endif()
++
+--- bindings/ocaml/backends/CMakeLists.txt	2014-12-29 19:24:07.000000000 -0800
++++ bindings/ocaml/backends/CMakeLists.txt	2016-05-21 11:02:23.891171801 -0700
+@@ -1,3 +1,7 @@
++if (CMAKE_HOST_SOLARIS)
++  include(GNUInstallDirs)
++endif()
++
+ foreach(TARGET ${LLVM_TARGETS_TO_BUILD})
+   set(OCAML_LLVM_TARGET ${TARGET})
+ 
+@@ -22,6 +26,12 @@
+     "${CMAKE_CURRENT_SOURCE_DIR}/META.llvm_backend.in"
+     "${LLVM_LIBRARY_DIR}/ocaml/META.llvm_${TARGET}")
+ 
++  if (CMAKE_HOST_SOLARIS)
++    install(FILES "${LLVM_LIBRARY_DIR}/ocaml/META.llvm_${TARGET}"
++      DESTINATION ${CMAKE_INSTALL_LIBDIR}/ocaml)
++  else()
+   install(FILES "${LLVM_LIBRARY_DIR}/ocaml/META.llvm_${TARGET}"
+           DESTINATION lib/ocaml)
++  endif()
+ endforeach()
++
+###
+--- CMakeLists.txt	2016-01-13 11:03:44.000000000 -0800
++++ CMakeLists.txt	2016-07-08 05:07:23.987736754 -0700
+@@ -2,6 +2,8 @@
+ 
+ cmake_minimum_required(VERSION 2.8.12.2)
+ 
++include(GNUInstallDirs)
++
+ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+   message(STATUS "No build type selected, default to Debug")
+   set(CMAKE_BUILD_TYPE "Debug")
+@@ -79,6 +81,16 @@
+   endif()
+ endif()
+ 
++if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
++  if (NOT (${CMAKE_MAJOR_VERSION} GREATER 3))
++    if (NOT (${CMAKE_MINOR_VERSION} GREATER 6))
++      if (NOT ${CMAKE_HOST_SOLARIS} EQUAL 1)
++        message(ERROR "You must provide -DCMAKE_HOST_SOLARIS:BOOL=TRUE for CMake < 3.6.0")
++      endif()
++    endif()
++  endif()
++endif()
++
+ # Add path for custom modules
+ set(CMAKE_MODULE_PATH
+   ${CMAKE_MODULE_PATH}
+@@ -334,6 +346,12 @@
+ # Define the default arguments to use with 'lit', and an option for the user to
+ # override.
+ set(LIT_ARGS_DEFAULT "-sv")
++if (CMAKE_HOST_SOLARIS)
++  set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --threads=1")
++  set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --succinct")
++  set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
++endif()
++
+ if (MSVC_IDE OR XCODE)
+   set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
+ endif()
+@@ -554,20 +572,33 @@
+   ${LLVM_INCLUDE_DIR}/llvm/Support/DataTypes.h)
+ 
+ # They are not referenced. See set_output_directory().
++if(CMAKE_HOST_SOLARIS)
++  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
++      ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_BINIR})
++  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
++      ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
++  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
++      ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
++else()
+ set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/bin )
+ set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} )
+ set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} )
++endif()
+ 
+ set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
++
+ if (APPLE)
+   set(CMAKE_INSTALL_NAME_DIR "@rpath")
+   set(CMAKE_INSTALL_RPATH "@executable_path/../lib")
+ else(UNIX)
+   if(NOT DEFINED CMAKE_INSTALL_RPATH)
++    if (NOT CMAKE_HOST_SOLARIS)
+     set(CMAKE_INSTALL_RPATH "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}")
+     if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)")
+       set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,origin")
+-      set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,origin")
++        set(CMAKE_SHARED_LINKER_FLAGS
++          "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,origin")
++      endif()
+     endif()
+   endif(NOT DEFINED CMAKE_INSTALL_RPATH)
+ endif()
+@@ -639,6 +670,12 @@
+   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
+ endif()
+ 
++if(CMAKE_HOST_SOLARIS)
++  llvm_replace_compiler_option(CMAKE_C_FLAGS_RELEASE "-O3" "-O0")
++  llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O0")
++  llvm_replace_compiler_option(CMAKE_ASM_FLAGS_RELEASE "-O3" "-O0")
++endif()
++
+ # Put this before tblgen. Else we have a circular dependence.
+ add_subdirectory(lib/Support)
+ add_subdirectory(lib/TableGen)
+###
+--- cmake/modules/AddLLVM.cmake	2016-02-12 09:52:29.000000000 -0800
++++ cmake/modules/AddLLVM.cmake	2016-05-21 11:50:17.129351767 -0700
+@@ -2,6 +2,17 @@
+ include(LLVM-Config)
+ include(DetermineGCCCompatible)
+ 
++if (CMAKE_HOST_SOLARIS)
++  include(GNUInstallDirs)
++endif()
++
++if (CMAKE_HOST_SOLARIS)
++  SET (LLVM_REQUIRES_EH ON)
++  SET (LLVM_ENABLE_EH ON)
++  SET (LLVM_REQUIRES_RTTI ON)
++  SET (LLVM_ENABLE_RTTI ON)
++endif(CMAKE_HOST_SOLARIS)
++
+ function(llvm_update_compile_flags name)
+   get_property(sources TARGET ${name} PROPERTY SOURCES)
+   if("${sources}" MATCHES "\\.c(;|$)")
+@@ -69,7 +80,26 @@
+       COMMENT "Creating export file for ${target_name}")
+     set_property(TARGET ${target_name} APPEND_STRING PROPERTY
+                  LINK_FLAGS " -Wl,-exported_symbols_list,${CMAKE_CURRENT_BINARY_DIR}/${native_export_file}")
+-  elseif(LLVM_HAVE_LINK_VERSION_SCRIPT)
++  elseif(CMAKE_HOST_SOLARIS)
++    # Gold and BFD ld require a version script rather than a plain list.
++    set(native_export_file "${target_name}.exports")
++    add_custom_command(OUTPUT ${native_export_file}
++      COMMAND /usr/gnu/bin/echo "$mapfile_version 2" > ${native_export_file}
++      COMMAND /usr/gnu/bin/echo "" >> ${native_export_file}
++      COMMAND /usr/gnu/bin/echo "SYMBOL_SCOPE {" >> ${native_export_file}
++      COMMAND /usr/gnu/bin/grep -q "[[:alnum:]]" ${export_file} && /usr/gnu/bin/echo "  global:" >> ${native_export_file} || :
++      COMMAND /usr/gnu/bin/sed -e "s/$/;/" -e "s/^/    /" < ${export_file} >> ${native_export_file}
++      # COMMAND echo "  local: *;" >> ${native_export_file}
++      COMMAND /usr/gnu/bin/echo "};" >> ${native_export_file}
++      COMMAND /usr/gnu/bin/touch -am ${CMAKE_CURRENT_BINARY_DIR}/${native_export_file}
++      DEPENDS ${export_file}
++      VERBATIM
++      COMMENT "Creating export file for ${target_name}")
++      set_property(TARGET ${target_name} APPEND_STRING PROPERTY
++                   LINK_FLAGS "  -Wl,-M,${CMAKE_CURRENT_BINARY_DIR}/${native_export_file}")
++    set_property(TARGET ${target_name} APPEND_STRING PROPERTY
++      LINK_FLAGS "  -Wl,-M,${CMAKE_CURRENT_BINARY_DIR}/${native_export_file}")
++  elseif(LLVM_HAVE_LINK_VERSION_SCRIPT AND NOT CMAKE_HOST_SOLARIS)
+     # Gold and BFD ld require a version script rather than a plain list.
+     set(native_export_file "${target_name}.exports")
+     # FIXME: Don't write the "local:" line on OpenBSD.
+@@ -82,13 +112,8 @@
+       DEPENDS ${export_file}
+       VERBATIM
+       COMMENT "Creating export file for ${target_name}")
+-    if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+-      set_property(TARGET ${target_name} APPEND_STRING PROPERTY
+-                   LINK_FLAGS "  -Wl,-M,${CMAKE_CURRENT_BINARY_DIR}/${native_export_file}")
+-    else()
+       set_property(TARGET ${target_name} APPEND_STRING PROPERTY
+                    LINK_FLAGS "  -Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/${native_export_file}")
+-    endif()
+   else()
+     set(native_export_file "${target_name}.def")
+ 
+@@ -529,11 +554,13 @@
+     ""
+     ""
+     ${ARGN})
++
+   if( BUILD_SHARED_LIBS )
+     llvm_add_library(${name} SHARED ${ARGN})
+   else()
+     llvm_add_library(${name} ${ARGN})
+   endif()
++
+   # The gtest libraries should not be installed or exported as a target
+   if ("${name}" STREQUAL gtest OR "${name}" STREQUAL gtest_main)
+     set(_is_gtest TRUE)
+@@ -546,16 +573,37 @@
+     set_target_properties( ${name} PROPERTIES EXCLUDE_FROM_ALL ON)
+   elseif(NOT _is_gtest)
+     if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "LTO")
+-      set(install_dir lib${LLVM_LIBDIR_SUFFIX})
++      if (CMAKE_HOST_SOLARIS)
++        set(install_dir ${CMAKE_INSTALL_LIBDIR})
++      else()
++        set(install_dir lib)
++      endif()
++
+       if(ARG_SHARED OR BUILD_SHARED_LIBS)
+         if(WIN32 OR CYGWIN OR MINGW)
+           set(install_type RUNTIME)
+           set(install_dir bin)
+         else()
+           set(install_type LIBRARY)
++          if (CMAKE_HOST_SOLARIS)
++            set(install_dir ${CMAKE_INSTALL_LIBDIR})
+         endif()
++        endif()
++      elseif(LLVM_BUILD_LVLM_DYLIB)
++        if (CMAKE_HOST_SOLARIS)
++          set(install_type RUNTIME)
++          set(install_dir ${CMAKE_INSTALL_BINDIR})
++        else()
++          set(install_type RUNTIME)
++          set(install_dir bin)
++        endif()
+       else()
+         set(install_type ARCHIVE)
++        if (CMAKE_HOST_SOLARIS)
++          set(install_dir ${CMAKE_INSTALL_LIBDIR})
++        else()
++          set(install_dir lib)
++        endif()
+       endif()
+ 
+       install(TARGETS ${name}
+@@ -590,13 +638,26 @@
+           # DLL platform
+           set(dlldir "bin")
+         else()
++          if (CMAKE_HOST_SOLARIS)
++            set(dlldir ${CMAKE_INSTALL_LIBDIR})
++          else()
+           set(dlldir "lib${LLVM_LIBDIR_SUFFIX}")
+         endif()
++        endif()
++
++        if (CMAKE_HOST_SOLARIS)
++          install(TARGETS ${name}
++            EXPORT LLVMExports
++            LIBRARY DESTINATION ${dlldir}
++            ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
++        else()
+         install(TARGETS ${name}
+           EXPORT LLVMExports
+           LIBRARY DESTINATION ${dlldir}
+           ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
+       endif()
++      endif()
++
+       set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
+     endif()
+   endif()
+@@ -700,10 +761,17 @@
+   list(FIND LLVM_TOOLCHAIN_TOOLS ${name} LLVM_IS_${name}_TOOLCHAIN_TOOL)
+   if (LLVM_IS_${name}_TOOLCHAIN_TOOL GREATER -1 OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+     if( LLVM_BUILD_TOOLS )
++      if (CMAKE_HOST_SOLARIS)
+       install(TARGETS ${name}
+               EXPORT LLVMExports
+-              RUNTIME DESTINATION bin
++          RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
++              COMPONENT ${name})
++      else()
++        install(TARGETS ${name}
++          EXPORT LLVMExports
++          RUNTIME DESTINATION bin/${LLVM_BINDIR_SUFFIX}
+               COMPONENT ${name})
++      endif()
+ 
+       if (NOT CMAKE_CONFIGURATION_TYPES)
+         add_custom_target(install-${name}
+@@ -737,9 +805,16 @@
+   add_llvm_executable(${name} DISABLE_LLVM_LINK_LLVM_DYLIB ${ARGN})
+   set_target_properties(${name} PROPERTIES FOLDER "Utils")
+   if( LLVM_INSTALL_UTILS )
++    if (CMAKE_HOST_SOLARIS)
++    install (TARGETS ${name}
++        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
++      COMPONENT ${name})
++    else()
+     install (TARGETS ${name}
+       RUNTIME DESTINATION bin
+       COMPONENT ${name})
++    endif()
++
+     if (NOT CMAKE_CONFIGURATION_TYPES)
+       add_custom_target(install-${name}
+                         DEPENDS ${name}
+###
+--- cmake/modules/TableGen.cmake	2015-10-23 12:48:17.000000000 -0700
++++ cmake/modules/TableGen.cmake	2016-05-21 10:57:12.766140197 -0700
+@@ -2,6 +2,10 @@
+ # Extra parameters for `tblgen' may come after `ofn' parameter.
+ # Adds the name of the generated file to TABLEGEN_OUTPUT.
+ 
++if (CMAKE_HOST_SOLARIS)
++  include(GNUInstallDirs)
++endif()
++
+ function(tablegen project ofn)
+   # Validate calling context.
+   foreach(v
+@@ -138,10 +142,18 @@
+       set_target_properties(${target} PROPERTIES LINK_FLAGS -Wl,--stack,16777216)
+     endif(CMAKE_SIZEOF_VOID_P MATCHES "8")
+   endif( MINGW )
++
+   if (${project} STREQUAL LLVM AND NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
++    if (CMAKE_HOST_SOLARIS)
++      install(TARGETS ${target}
++        EXPORT LLVMExports
++        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
++    else()
+     install(TARGETS ${target}
+             EXPORT LLVMExports
+             RUNTIME DESTINATION bin)
+   endif()
++  endif()
+   set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${target})
+ endmacro()
++
+###