components/llvm/Makefile
changeset 6512 92717ce71105
parent 5682 94c0ca64c022
child 6637 22d5f6c97e6f
--- a/components/llvm/Makefile	Thu Jul 28 16:15:45 2016 -0700
+++ b/components/llvm/Makefile	Thu Jul 28 16:25:34 2016 -0700
@@ -23,27 +23,31 @@
 # Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
 #
 export PARFAIT_BUILD=no
-BUILD_BITS= 64
-COMPILER= gcc
+BUILD_BITS=64
+COMPILER=gcc
+
 include ../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		llvm
-COMPONENT_VERSION=	3.6.2
+COMPONENT_VERSION=	3.8.1
 COMPONENT_PROJECT_URL=	http://llvm.org/
+COMPONENT_SRC=		$(COMPONENT_NAME)
+COMPONENT_BUGDB=	utility/llvm
+
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
-COMPONENT_SRC_NAME =	$(COMPONENT_SRC).src
+COMPONENT_SRC_NAME=	$(COMPONENT_SRC).src
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC_NAME).tar.xz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:f60dc158bfda6822de167e87275848969f0558b3134892ff54fced87e4667b94
+    sha256:6e82ce4adb54ff3afc18053d6981b6aed1406751b8742582ed50f04b5ab475f9
 COMPONENT_ARCHIVE_URL=	$(COMPONENT_PROJECT_URL)/releases/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
 
-TPNO=			24358
+TPNO=			28049
 
 COMPONENT_NAME_1 =	clang
 COMPONENT_SRC_1 =	cfe-$(COMPONENT_VERSION).src
 COMPONENT_ARCHIVE_1 =	$(COMPONENT_SRC_1).tar.xz
 COMPONENT_ARCHIVE_HASH_1 = \
-	sha256:ae9180466a23acb426d12444d866b266ff2289b266064d362462e44f8d4699f3
+	sha256:4cd3836dfb4b88b597e075341cae86d61c63ce3963e45c7fe6a8bf59bb382cdf
 COMPONENT_ARCHIVE_URL_1 = $(COMPONENT_PROJECT_URL)/releases/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE_1)
 
 COMPONENT_POST_UNPACK_ACTION = \
@@ -54,48 +58,74 @@
 	 $(CP) -rp $(COMPONENT_SRC_1) \
 	    $(COMPONENT_SRC)/tools/$(COMPONENT_NAME_1) )
 
-COMPONENT_PRE_CONFIGURE_ACTION = \
-	 ( cd $(SOURCE_DIR) ; \
-	 $(CHMOD) 0755 ./autoconf/AutoRegen.sh ; \
-	 ./autoconf/AutoRegen.sh )
-
-COMPONENT_POST_BUILD_ACTION = \
-      if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
-      $(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize build ; \
-      fi
-
-COMPONENT_POST_INSTALL_ACTION = \
-	if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
-	$(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize install ; \
-	fi;
-
 # Depends on S12-only changes in gcc; might be able to deal with later,
 # but avoid publishing while this is under investigation.
 ifeq ($(BUILD_TYPE), evaluation)
-BUILD_64=
-INSTALL_64=
-PUBLISH_STAMP=
+  BUILD_64=
+  INSTALL_64=
+  PUBLISH_STAMP=
 endif
 
-TEST_TARGET=
+BUILD_STYLE = cmake
+CLONEY = echo
+GNUCP = /usr/gnu/bin/cp
+
 include $(WS_MAKE_RULES)/common.mk
 
 PATCH_LEVEL := 0
 DEBUG_BUILD := 0
 GCC_VERSION := 4.9
+HAVE_SPHINX := 0
 
-# We need GCC version 4.9, and not another version.
+export PATH=/usr/gnu/bin:/usr/bin:/usr/perl5/$(PERL_VERSION)/bin
+
+# We use GCC version 4.9.3, and not another version for now.
 CC=$(USRDIR)/gcc/$(GCC_VERSION)/bin/gcc
 CXX=$(USRDIR)/gcc/$(GCC_VERSION)/bin/g++
 
+# We're building with CMake
+CMAKE=/usr/bin/cmake
+CMAKE_VERSION := $(shell $(CMAKE) --version 2>&1 | head -n1 \
+  | $(GSED) 's/cmake version \{1,\}//g')
+CMAKE_MAJOR_VERSION := $(shell echo $(CMAKE_VERSION) | cut -f1 -d'.')
+CMAKE_MINOR_VERSION := $(shell echo $(CMAKE_VERSION) | cut -f2 -d'.')
+CMAKE_MICRO_VERSION := $(shell echo $(CMAKE_VERSION) | cut -f3 -d'.')
+
+# CMake prior to 3.6.0 does not define CMAKE_HOST_SOLARIS.
+# In that case, we pass it in CMAKE_OPTIONS.
+CMAKE_NEEDS_SOLARIS_HOST := 0
+ifeq ($(shell expr $(CMAKE_MAJOR_VERSION) \<= 3 \& \
+		    $(CMAKE_MINOR_VERSION) \<= 5),1)
+  CMAKE_NEEDS_SOLARIS_HOST = 1
+endif
+
+# All of these shoujld probably be in shared-macros.mk
+CMAKE_INSTALL_BINDIR.32 = bin
+CMAKE_INSTALL_BINDIR.64 = bin/$(MACH64)
+CMAKE_INSTALL_BINDIR = $(CMAKE_INSTALL_BINDIR.$(BITS))
+
+CMAKE_INSTALL_LIBDIR.32 = lib
+CMAKE_INSTALL_LIBDIR.64 = lib/$(MACH64)
+CMAKE_INSTALL_LIBDIR = $(CMAKE_INSTALL_LIBDIR.$(BITS))
+
+CMAKE_INSTALL_LIBEXECDIR.32 = libexec
+CMAKE_INSTALL_LIBEXECDIR.64 = libexec/$(MACH64)
+CMAKE_INSTALL_LIBEXECDIR = $(CMAKE_INSTALL_LIBEXECDIR.$(BITS))
+
+CMAKE_INSTALL_INCLUDEDIR = include
+CMAKE_INSTALL_DATADIR = share
+CMAKE_INSTALL_DATAROOTDIR = share
+
 # We need the specific C++ runtime that clang/llvm was built and
 # linked with, and not some random and incompatible stuff from
 # /usr/lib.
-LLVM_RUNPATH_32 = $(USRDIR)/gcc/$(GCC_VERSION)/lib
-LLVM_RUNPATH_64 = $(USRDIR)/gcc/$(GCC_VERSION)/lib/$(MACH64)
+LLVM_RUNPATH_32 = /usr/gcc/$(GCC_VERSION)/lib
+LLVM_RUNPATH_64 = /usr/gcc/$(GCC_VERSION)/lib/$(MACH64)
 LLVM_RUNPATH = $(LLVM_RUNPATH_$(BITS))
 
-# -O0 for now. Ideally we want -O2.
+# -O0. GCC on SPARC dies with an out-memory error in cc1plus when
+# building with either -O1 or -O2 (32-bit). If it manages to get
+# through with -O1 or -O2 (64-bit), the resulting bits are unusable.
 OFLAG="-O0"
 GFLAG=""
 
@@ -104,24 +134,110 @@
   GFLAG="-g3"
 endif
 
-export PATH=$(GNUBIN):$(USRDIR)/xpg4/bin:$(USRBINDIR):$(USRDIR)/perl5/5.16/bin
-
 # Because LLVM's install target doesn't install everything that
 # needs to be installed.
 EXTRA_INSTALL_BITS=llvm-lto arcmt-test c-arcmt-test c-index-test diagtool
-LLVM_BINDIR=$(BUILD_DIR_64)/Release/bin
+LLVM_INSTALL_BINDIR.32=$(PROTOUSRBINDIR)
+LLVM_INSTALL_BINDIR.64=$(PROTOUSRBINDIR64)
+LLVM_INSTALL_BINDIR=$(LLVM_INSTALL_BINDIR.$(BITS))
+LLVM_BINDIR=$(BUILD_DIR_$(BITS))/bin
+
+INSTALL_CXA_FINALIZE := 0
+ifeq ($(SOLARIS_11_ONLY),)
+  INSTALL_CXA_FINALIZE = 1
+endif
 
-ifeq ($(DEBUG_BUILD), 1)
-  LLVM_BINDIR=$(BUILD_DIR_64)/Debug+Asserts+Checks/bin
-endif
+SCAN_VIEW_FILES=Reporter.py ScanView.py
+CLANG_FORMAT_FILES=clang-format-diff.py clang-format-sublime.py \
+		   clang-format.py
+LLVM_MAN_FILES=FileCheck.1 bugpoint.1 clang.1 lit.1 llc.1 lli.1 \
+	       llvm-ar.1 llvm-as.1 llvm-bcanalyzer.1 llvm-build.1 \
+	       llvm-config.1 llvm-cov.1 llvm-diff.1 llvm-dis.1 \
+	       llvm-dwarfdump.1 llvm-extract.1 llvm-lib.1 llvm-link.1 \
+	       llvm-nm.1 llvm-profdata.1 llvm-readobj.1 llvm-stress.1 \
+	       llvm-symbolizer.1 opt.1 tblgen.1
+
+COMPONENT_POST_BUILD_ACTION = \
+      if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
+      /usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.patched ; \
+      /usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.prep ; \
+      $(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize build ; \
+      /usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.built ; \
+      fi
+
+COMPONENT_POST_INSTALL_ACTION = \
+	if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
+	$(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize install ; \
+	/usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.installed ; \
+	fi;
 
 COMPONENT_POST_INSTALL_ACTION += \
 	list1='$(EXTRA_INSTALL_BITS)' ; for f in $$list1 ; do \
-	    $(INSTALL) --mode=755 $(LLVM_BINDIR)/$$f $(PROTOUSRBINDIR)/$$f ; \
-	done;
+	    $(INSTALL) --mode=755 $(LLVM_BINDIR)/$$f \
+			$(LLVM_INSTALL_BINDIR)/$$f ; \
+	done ;
+
+COMPONENT_POST_INSTALL_ACTION += \
+	$(MKDIR) \
+	  $(PROTOUSRLIBDIR)/python$(PYTHON_VERSION)/vendor-packages ; \
+	list2='$(SCAN_VIEW_FILES)' ; for f in $$list2 ; do \
+	$(INSTALL) --mode=644 $(PROTOUSRSHAREDIR)/scan-view/$$f \
+	  $(PROTOUSRLIBDIR)/python$(PYTHON_VERSION)/vendor-packages/$$f ; \
+	done ;
+
+COMPONENT_POST_INSTALL_ACTION += \
+	list3='$(CLANG_FORMAT_FILES)' ; for f in $$list3 ; do \
+	  $(INSTALL) --mode=644 $(PROTOUSRSHAREDIR)/clang/$$f \
+	    $(PROTOUSRLIBDIR)/python$(PYTHON_VERSION)/vendor-packages/$$f ; \
+	done ;
+
+COMPONENT_POST_INSTALL_ACTION += \
+	cd $(COMPONENT_DIR) ; \
+	$(GNUCP) -rpd $(PROTOUSRLIBDIR64)/clang $(PROTOUSRLIBDIR)/ ;
+
+COMPONENT_POST_INSTALL_ACTION += \
+	cd $(PROTOUSRLIBDIR) ; \
+	$(PYTHON) -m compileall . ;
 
-# No ASLR for compilers.
-ASLR_MODE = $(ASLR_DISABLE)
+COMPONENT_POST_INSTALL_ACTION += \
+	cd $(COMPONENT_DIR) ; \
+	$(MKDIR) $(PROTOUSRSHAREMAN1DIR) ; \
+	list4='$(LLVM_MAN_FILES)' ; for f in $$list4 ; do \
+	  $(INSTALL) --mode=644 $(COMPONENT_DIR)/Solaris/man1/$$f \
+	    $(PROTOUSRSHAREMAN1DIR)/$$f ; \
+	done ;
+
+ifeq ($(INSTALL_CXA_FINALIZE),1)
+COMPONENT_POST_INSTALL_ACTION += \
+	$(INSTALL) --mode=644 \
+	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize-32.o \
+	  $(PROTOUSRLIBDIR)/clang/cxa_finalize.o ; \
+	$(INSTALL) --mode=644 \
+	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize_pic-32.o \
+	  $(PROTOUSRLIBDIR)/clang/cxa_finalize_pic.o ; \
+	$(INSTALL) --mode=644 \
+	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize-64.o \
+	  $(PROTOUSRLIBDIR)/clang/$(MACH64)/cxa_finalize.o ; \
+	$(INSTALL) --mode=644 \
+	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize_pic-64.o \
+	  $(PROTOUSRLIBDIR)/clang/$(MACH64)/cxa_finalize_pic.o ;
+endif
+
+# Results output is slightly different on Intel vs. SPARC.
+# Not enabled just yet because of problems with the way opt
+# and FileCheck emit and parse the test case results.
+COMPONENT_TEST_MASTER = \
+	$(COMPONENT_TEST_RESULTS_DIR)/results-$(MACH).master
+
+# Do not change the order of these regexp transforms.
+COMPONENT_TEST_TRANSFORMS += \
+    '-e "/gmake -f/d"' \
+    '-e "/gmake/d"' \
+    '-e "/--color=/d"' \
+    '-e "/Entering/d"' \
+    '-e "/Leaving/d"' \
+    '-e "/Built target/d"' \
+    '-e "/Nothing to be done/d"'
 
 # GCC options used:
 # -ftree-vectorize | -fno-tree-vectorize:
@@ -196,8 +312,9 @@
 #
 # -mno-sse3 -mno-ssse3:
 # Do not use SSE3/SSSE3 instructions on Intel. These might not be
-# available. Building for Opteron - which implies SSE2 - is adequate
-# for performance purposes.
+# available and they always come with side-effects.
+# Building for Opteron - which implies SSE2 - is adequate for
+# performance purposes.
 
 CFLAGS = -m$(BITS) $(GFLAG) $(OFLAG) -pthread -std=c99 -fno-strict-aliasing
 CFLAGS += -fno-tree-slp-vectorize -fno-tree-vectorize
@@ -205,9 +322,15 @@
 CFLAGS += -Wall -Wcast-align -Wno-long-long -Woverflow
 CFLAGS += -Wstack-protector -fdata-sections -fstack-protector-all
 CFLAGS += -fkeep-static-consts -ffunction-sections
-CFLAGS += -Wl,-z -Wl,relax=common -Wl,-z -Wl,relax=secadj
-CFLAGS += -Wl,-z -Wl,relax=transtls -Wl,-R -Wl,$(LLVM_RUNPATH)
+CFLAGS += -Wl,-z -Wl,relax=common
+CFLAGS += -Wl,-z -Wl,relax=secadj
+CFLAGS += -Wl,-z -Wl,relax=transtls
+CFLAGS += -Wl,-z -Wl,relax=symbound
+CFLAGS += -Wl,-R -Wl,$(LLVM_RUNPATH)
 CFLAGS.i386 += -mtune=opteron -mno-sse3 -mno-ssse3 -fno-common
+ifeq ($(DEBUG_BUILD),1)
+  CFLAGS.i386 += -fno-omit-frame-pointer
+endif
 CFLAGS.sparc += -mtune=ultrasparc -mcpu=ultrasparc -mvis -mhard-float
 CFLAGS.sparc += -mptr$(BITS) -fdata-sections -falign-functions=8
 CFLAGS.sparc += -mno-unaligned-doubles -mimpure-text
@@ -220,18 +343,22 @@
 CXXFLAGS += -Wall -Wcast-align -Wno-long-long -Woverflow
 CXXFLAGS += -Wstack-protector -fkeep-static-consts
 CXXFLAGS += -std=c++11 -fdata-sections -ffunction-sections
-CXXFLAGS += -Wl,-z -Wl,relax=common -Wl,-z -Wl,relax=secadj
-CXXFLAGS += -Wl,-z -Wl,relax=transtls -Wl,-R -Wl,$(LLVM_RUNPATH)
+CXXFLAGS += -Wl,-z -Wl,relax=common
+CXXFLAGS += -Wl,-z -Wl,relax=secadj
+CXXFLAGS += -Wl,-z -Wl,relax=transtls
+CXXFLAGS += -Wl,-z -Wl,relax=symbound
+CXXFLAGS += -Wl,-z -Wl,relax=comdat
+CXXFLAGS += -Wl,-R -Wl,$(LLVM_RUNPATH)
 CXXFLAGS.sparc += -mptr$(BITS)
 CXXFLAGS += $(CFLAGS.$(MACH))
 
-CPPFLAGS = -D_GNU_SOURCE -DLLVM_SOLARIS -I$(USRGNUDIR)/include
+CPPFLAGS = -D_GNU_SOURCE -DLLVM_SOLARIS -I/usr/gnu/include
 
-ifeq ($(DEBUG_BUILD), 1)
+ifeq ($(DEBUG_BUILD),1)
   CPPFLAGS += -D_DEBUG
 endif
 
-CPPFLAGS += -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
+CPPFLAGS += -D_REENTRANT -D_LARGEFILE64_SOURCE
 CPPFLAGS += -D_FILE_OFFSET_BITS=64 -D__EXTENSIONS__=1
 CPPFLAGS += -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS
 CPPFLAGS += -D__STDC_LIMIT_MACROS -DHAVE_POSIX_MEMALIGN
@@ -240,68 +367,146 @@
 CPPFLAGS.sparc = -DLLVM_SPARC
 CPPFLAGS += $(CPPFLAGS.$(MACH))
 
-LLVM_LIBEXECDIR_32 = $(USRDIR)/libexec
-LLVM_LIBEXECDIR_64 = $(USRDIR)/libexec/$(MACH64)
+LLVM_LIBEXECDIR_32 = /usr/libexec
+LLVM_LIBEXECDIR_64 = /usr/libexec/$(MACH64)
 LLVM_LIBEXECDIR = $(LLVM_LIBEXECDIR_$(BITS))
 
-CONFIGURE_OPTIONS += --libexecdir=$(LLVM_LIBEXECDIR)
-CONFIGURE_OPTIONS += --sharedstatedir=/tmp
-CONFIGURE_OPTIONS += --localstatedir=$(VARDIR)
-CONFIGURE_OPTIONS += --enable-compiler-version-checks
-CONFIGURE_OPTIONS += --enable-clang-static-analyzer
+LIBFFI_INCDIR_32 = /usr/lib/libffi-3.0.9/include
+LIBFFI_INCDIR_64 = /usr/lib/$(MACH64)/libffi-3.0.9/include
+LIBFFI_INCDIR = $(LIBFFI_INCDIR_$(BITS))
+
+LIBFFI_LIBDIR_32 = /usr/lib
+LIBFFI_LIBDIR_64 = /usr/lib/$(MACH64)
+LIBFFI_LIBDIR = $(LIBFFI_LIBDIR_$(BITS))
+
+# -Bdirect and -M /usr/lib/ld/map.noexbss break SPARC builds.
+LD_B_DIRECT =
+LD_OPTIONS = -M /usr/lib/ld/map.noexstk
+LD_OPTIONS += -M /usr/lib/ld/map.pagealign
+LD_OPTIONS_SO = $(LD_Z_DEFS) $(LD_DEF_LIBS)
 
-ifeq ($(DEBUG_BUILD), 1)
-  CONFIGURE_OPTIONS += --enable-assertions
-  CONFIGURE_OPTIONS += --disable-optimized
-  CONFIGURE_OPTIONS += --enable-expensive-checks
-  CONFIGURE_OPTIONS += --enable-debug-runtime
-  CONFIGURE_OPTIONS += --enable-debug-symbols
-else
-  CONFIGURE_OPTIONS += --disable-assertions
-  CONFIGURE_OPTIONS += --enable-optimized
-  CONFIGURE_OPTIONS += --disable-expensive-checks
-  CONFIGURE_OPTIONS += --disable-debug-runtime
-  CONFIGURE_OPTIONS += --disable-debug-symbols
+CMAKE_OPTIONS = -DCMAKE_C_COMPILER:FILEPATH=$(CC)
+CMAKE_OPTIONS += -DCMAKE_CXX_COMPILER:FILEPATH=$(CXX)
+CMAKE_OPTIONS += -DCMAKE_C_CFLAGS:STRING="$(CPPFLAGS) $(CFLAGS)"
+CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS:STRING="$(CPPFLAGS) $(CXXFLAGS)"
+CMAKE_OPTIONS += -DCMAKE_EXE_LINKER_FLAGS:STRING="$(LDFLAGS)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_PREFIX:FILEPATH=$(CMAKE_PREFIX)
+CMAKE_OPTIONS += -DCMAKE_AR:FILEPATH=/usr/bin/ar
+
+CMAKE_OPTIONS += -DCMAKE_INSTALL_BINDIR:STRING="$(CMAKE_INSTALL_BINDIR)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_LIBDIR:STRING="$(CMAKE_INSTALL_LIBDIR)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_LIBEXECDIR:STRING="$(CMAKE_INSTALL_LIBEXECDIR)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_INCLUDEDIR:STRING="$(CMAKE_INSTALL_INCLUDEDIR)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_DATADIR:STRING="$(CMAKE_INSTALL_DATADIR)"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_DATAROOTDIR:STRING="$(CMAKE_INSTALL_DATAROOTDIR)"
+
+ifeq ($(MACH),sparc)
+  CMAKE_OPTIONS += -DLLVM_TARGETS_TO_BUILD:STRING="Sparc"
+endif
+ifeq ($(MACH),i386)
+  CMAKE_OPTIONS += -DLLVM_TARGETS_TO_BUILD:STRING="X86"
 endif
 
-CONFIGURE_OPTIONS += --enable-keep-symbols
-CONFIGURE_OPTIONS += --enable-jit
-CONFIGURE_OPTIONS += --disable-docs
-CONFIGURE_OPTIONS += --disable-doxygen
-CONFIGURE_OPTIONS += --enable-threads
-CONFIGURE_OPTIONS += --enable-pthreads
-CONFIGURE_OPTIONS += --enable-shared
-CONFIGURE_OPTIONS += --enable-zlib
-CONFIGURE_OPTIONS += --enable-pic
-CONFIGURE_OPTIONS += --enable-timestamps
-CONFIGURE_OPTIONS += --enable-backtraces
-CONFIGURE_OPTIONS += --enable-bindings=auto
-CONFIGURE_OPTIONS += --enable-libffi
-CONFIGURE_OPTIONS += --enable-terminfo
-CONFIGURE_OPTIONS += --disable-ltdl-install
-CONFIGURE_OPTIONS += --with-python=$(PYTHON)
+CMAKE_OPTIONS += -DCMAKE_MAKE_PROGRAM:STRING="/usr/bin/gmake"
+CMAKE_OPTIONS += -DCMAKE_ASM_COMPILER:STRING="/usr/gnu/bin/as"
+CMAKE_OPTIONS += -DCMAKE_INSTALL_RPATH:STRING="$(LLVM_RUNPATH)"
+CMAKE_OPTIONS += -DLLVM_BUILD_TOOLS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_INCLUDE_TOOLS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_BUILD_TESTS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_INCLUDE_TESTS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_THREADS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_BUILD_32_BITS:BOOL=OFF
+
+# CMake tries really hard to be too smart for its own good.
+ifeq ($(DEBUG_BUILD),1)
+  CMAKE_OPTIONS += -DCMAKE_BUILD_TYPE:STRING=Debug
+  CMAKE_OPTIONS += -DCMAKE_C_FLAGS_DEBUG:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_DEBUG:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_DEBUG:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG) $(GFLAG)"
+  CMAKE_OPTIONS += -DLLVM_BUILD_EXAMPLES:BOOL=ON
+  CMAKE_OPTIONS += -DLLVM_INCLUDE_EXAMPLES:BOOL=ON
+  CMAKE_OPTIONS += -DLLVM_ENABLE_ASSERTIONS:BOOL=ON
+  CMAKE_OPTIONS += -DLLVM_ENABLE_EXPENSIVE_CHECKS:BOOL=ON
+else
+  CMAKE_OPTIONS += -DCMAKE_BUILD_TYPE:STRING=Release
+  CMAKE_OPTIONS += -DCMAKE_C_FLAGS_DEBUG:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_DEBUG:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_DEBUG:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG)"
+  CMAKE_OPTIONS += -DLLVM_BUILD_EXAMPLES:BOOL=OFF
+  CMAKE_OPTIONS += -DLLVM_INCLUDE_EXAMPLES:BOOL=OFF
+  CMAKE_OPTIONS += -DLLVM_ENABLE_ASSERTIONS:BOOL=OFF
+  CMAKE_OPTIONS += -DLLVM_ENABLE_EXPENSIVE_CHECKS:BOOL=OFF
+endif
 
-ifeq ($(MACH),sparc)
-  CONFIGURE_OPTIONS += --with-extra-ld-options='-lkstat'
+CMAKE_OPTIONS += -DLLVM_ENABLE_EH:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_PIC:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_RTTI:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_WARNINGS:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_PEDANTIC:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ABI_BREAKING_CHECKS:STRING="FORCE_OFF"
+CMAKE_OPTIONS += -DLLVM_ENABLE_ZLIB:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_ENABLE_FFI:BOOL=ON
+CMAKE_OPTIONS += -DFFI_INCLUDE_DIR:STRING=$(LIBFFI_INCDIR)
+CMAKE_OPTIONS += -DFFI_LIBRARY_DIR:STRING=$(LIBFFI_LIBDIR)
+
+ifeq ($(HAVE_SPHINX),1)
+  CMAKE_OPTIONS += -DSPHINX_EXECUTABLE:STRING="/usr/bin/sphinx-build"
+  CMAKE_OPTIONS += -DLLVM_ENABLE_SPHINX:BOOL=ON
+  CMAKE_OPTIONS += -DLLVM_BUILD_DOCS:BOOL=ON
+  CMAKE_OPTIONS += -DSPHINX_OUTPUT_HTML:BOOL=ON
+  CMAKE_OPTIONS += -DSPHINX_OUTPUT_MAN:BOOL=ON
 endif
-CONFIGURE_OPTIONS += --with-gcc-toolchain=$(USRDIR)/gcc/$(GCC_VERSION)
-CONFIGURE_OPTIONS += --with-optimize-option="$(OFLAG) $(GFLAG)"
+
+# Always build the libLLVM and libclang shared libraries
+CMAKE_OPTIONS += -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON
+CMAKE_OPTIONS += -DLLVM_LINK_LLVM_DYLIB:BOOL=ON
+
+CMAKE_OPTIONS += -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
+
+CMAKE_OPTIONS += -DLLVM_COMPILER_IS_GCC_COMPATIBLE:BOOL=ON
 
-# Enable the cross-compiler in 3.8.X.
-CONFIGURE_OPTIONS.i386 += --enable-targets="x86"
-CONFIGURE_OPTIONS.sparc += --enable-targets="sparc"
+ifeq ($(CMAKE_NEEDS_SOLARIS_HOST),1)
+  CMAKE_OPTIONS += -DCMAKE_HOST_SOLARIS:BOOL=TRUE
+endif
+
+COMPONENT_BUILD_ENV = CC="$(CC)"
+COMPONENT_BUILD_ENV += CXX="$(CXX)"
+COMPONENT_BUILD_ENV += CFLAGS="$(CFLAGS)"
+COMPONENT_BUILD_ENV += CXXFLAGS="$(CXXFLAGS)"
+COMPONENT_BUILD_ENV += LDFLAGS="$(LDFLAGS)"
+COMPONENT_BUILD_ENV += LD_OPTIONS="$(LD_OPTIONS)"
+COMPONENT_BUILD_ENV += PATH="$(PATH)"
+COMPONENT_BUILD_ENV += LANG="C"
+COMPONENT_BUILD_ENV += LC_ALL="C"
+COMPONENT_BUILD_ENV += LD_EXEC_OPTIONS="-zaslr=disable"
 
 # Put this here for now until the gpatch problems are resolved.
-COMPONENT_BUILD_ARGS += -j8
+COMPONENT_BUILD_ARGS += -j4
 
 # use bash(1) to run the install recipes otherwise clang header installation
 # fails
 COMPONENT_INSTALL_ARGS += SHELL=/bin/bash
 
-# common targets
-# There are no master test results yet. TBDL in 3.8.X.
+COMPONENT_PRE_BUILD_ACTION += cd $(@D) ;
+COMPONENT_PRE_BUILD_ACTION += echo BITS: $(BITS) ;
+COMPONENT_PRE_BUILD_ACTION += echo Running cmake with $(CMAKE_OPTIONS) ;
+COMPONENT_PRE_BUILD_ACTION += /usr/bin/env - $(COMPONENT_BUILD_ENV) \
+			      $(CMAKE) $(CMAKE_OPTIONS) \
+			      $(COMPONENT_DIR)/$(COMPONENT_SRC) ;
+
+
+# There are no master test results just yet. But there will be
+# very soon.
 test:
-	@echo "Tests not yet implemented (wait for 3.8.X)."
+	@echo "Tests not yet implemented - coming soon in LLVM 3.8.1."
+
+system-test:    $(SYSTEM_TESTS_NOT_IMPLEMENTED)
 
 REQUIRED_PACKAGES += developer/gcc-4/gcc-common-49
 REQUIRED_PACKAGES += developer/gnu-binutils
@@ -309,6 +514,13 @@
 REQUIRED_PACKAGES += library/libffi
 REQUIRED_PACKAGES += library/libxml2
 REQUIRED_PACKAGES += library/zlib
+REQUIRED_PACKAGES += runtime/perl-522
+REQUIRED_PACKAGES += library/perl-5/xml-libxml
+REQUIRED_PACKAGES += library/perl-5/xml-namespacesupport
+REQUIRED_PACKAGES += library/perl-5/xml-parser
+REQUIRED_PACKAGES += library/perl-5/xml-sax
+REQUIRED_PACKAGES += library/perl-5/xml-sax-base
+REQUIRED_PACKAGES += library/perl-5/xml-simple
 REQUIRED_PACKAGES += runtime/python-27
 REQUIRED_PACKAGES += system/core-os
 REQUIRED_PACKAGES += system/header
@@ -318,3 +530,4 @@
 REQUIRED_PACKAGES += system/library/gcc/gcc-gobjc-runtime-49
 REQUIRED_PACKAGES += system/library/math
 REQUIRED_PACKAGES += system/linker
+