components/llvm/Makefile
changeset 6512 92717ce71105
parent 5682 94c0ca64c022
child 6637 22d5f6c97e6f
equal deleted inserted replaced
6511:d283aa33e131 6512:92717ce71105
    21 
    21 
    22 #
    22 #
    23 # Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
    23 # Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
    24 #
    24 #
    25 export PARFAIT_BUILD=no
    25 export PARFAIT_BUILD=no
    26 BUILD_BITS= 64
    26 BUILD_BITS=64
    27 COMPILER= gcc
    27 COMPILER=gcc
       
    28 
    28 include ../../make-rules/shared-macros.mk
    29 include ../../make-rules/shared-macros.mk
    29 
    30 
    30 COMPONENT_NAME=		llvm
    31 COMPONENT_NAME=		llvm
    31 COMPONENT_VERSION=	3.6.2
    32 COMPONENT_VERSION=	3.8.1
    32 COMPONENT_PROJECT_URL=	http://llvm.org/
    33 COMPONENT_PROJECT_URL=	http://llvm.org/
       
    34 COMPONENT_SRC=		$(COMPONENT_NAME)
       
    35 COMPONENT_BUGDB=	utility/llvm
       
    36 
    33 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
    37 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
    34 COMPONENT_SRC_NAME =	$(COMPONENT_SRC).src
    38 COMPONENT_SRC_NAME=	$(COMPONENT_SRC).src
    35 COMPONENT_ARCHIVE=	$(COMPONENT_SRC_NAME).tar.xz
    39 COMPONENT_ARCHIVE=	$(COMPONENT_SRC_NAME).tar.xz
    36 COMPONENT_ARCHIVE_HASH=	\
    40 COMPONENT_ARCHIVE_HASH=	\
    37     sha256:f60dc158bfda6822de167e87275848969f0558b3134892ff54fced87e4667b94
    41     sha256:6e82ce4adb54ff3afc18053d6981b6aed1406751b8742582ed50f04b5ab475f9
    38 COMPONENT_ARCHIVE_URL=	$(COMPONENT_PROJECT_URL)/releases/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
    42 COMPONENT_ARCHIVE_URL=	$(COMPONENT_PROJECT_URL)/releases/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
    39 
    43 
    40 TPNO=			24358
    44 TPNO=			28049
    41 
    45 
    42 COMPONENT_NAME_1 =	clang
    46 COMPONENT_NAME_1 =	clang
    43 COMPONENT_SRC_1 =	cfe-$(COMPONENT_VERSION).src
    47 COMPONENT_SRC_1 =	cfe-$(COMPONENT_VERSION).src
    44 COMPONENT_ARCHIVE_1 =	$(COMPONENT_SRC_1).tar.xz
    48 COMPONENT_ARCHIVE_1 =	$(COMPONENT_SRC_1).tar.xz
    45 COMPONENT_ARCHIVE_HASH_1 = \
    49 COMPONENT_ARCHIVE_HASH_1 = \
    46 	sha256:ae9180466a23acb426d12444d866b266ff2289b266064d362462e44f8d4699f3
    50 	sha256:4cd3836dfb4b88b597e075341cae86d61c63ce3963e45c7fe6a8bf59bb382cdf
    47 COMPONENT_ARCHIVE_URL_1 = $(COMPONENT_PROJECT_URL)/releases/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE_1)
    51 COMPONENT_ARCHIVE_URL_1 = $(COMPONENT_PROJECT_URL)/releases/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE_1)
    48 
    52 
    49 COMPONENT_POST_UNPACK_ACTION = \
    53 COMPONENT_POST_UNPACK_ACTION = \
    50        ( $(MV) $(COMPONENT_SRC_NAME) $(COMPONENT_SRC) )
    54        ( $(MV) $(COMPONENT_SRC_NAME) $(COMPONENT_SRC) )
    51 
    55 
    52 COMPONENT_POST_UNPACK_ACTION_1 = \
    56 COMPONENT_POST_UNPACK_ACTION_1 = \
    53 	 ( $(RM) -rf $(COMPONENT_SRC)/tools/$(COMPONENT_NAME_1) ; \
    57 	 ( $(RM) -rf $(COMPONENT_SRC)/tools/$(COMPONENT_NAME_1) ; \
    54 	 $(CP) -rp $(COMPONENT_SRC_1) \
    58 	 $(CP) -rp $(COMPONENT_SRC_1) \
    55 	    $(COMPONENT_SRC)/tools/$(COMPONENT_NAME_1) )
    59 	    $(COMPONENT_SRC)/tools/$(COMPONENT_NAME_1) )
    56 
    60 
    57 COMPONENT_PRE_CONFIGURE_ACTION = \
    61 # Depends on S12-only changes in gcc; might be able to deal with later,
    58 	 ( cd $(SOURCE_DIR) ; \
    62 # but avoid publishing while this is under investigation.
    59 	 $(CHMOD) 0755 ./autoconf/AutoRegen.sh ; \
    63 ifeq ($(BUILD_TYPE), evaluation)
    60 	 ./autoconf/AutoRegen.sh )
    64   BUILD_64=
       
    65   INSTALL_64=
       
    66   PUBLISH_STAMP=
       
    67 endif
       
    68 
       
    69 BUILD_STYLE = cmake
       
    70 CLONEY = echo
       
    71 GNUCP = /usr/gnu/bin/cp
       
    72 
       
    73 include $(WS_MAKE_RULES)/common.mk
       
    74 
       
    75 PATCH_LEVEL := 0
       
    76 DEBUG_BUILD := 0
       
    77 GCC_VERSION := 4.9
       
    78 HAVE_SPHINX := 0
       
    79 
       
    80 export PATH=/usr/gnu/bin:/usr/bin:/usr/perl5/$(PERL_VERSION)/bin
       
    81 
       
    82 # We use GCC version 4.9.3, and not another version for now.
       
    83 CC=$(USRDIR)/gcc/$(GCC_VERSION)/bin/gcc
       
    84 CXX=$(USRDIR)/gcc/$(GCC_VERSION)/bin/g++
       
    85 
       
    86 # We're building with CMake
       
    87 CMAKE=/usr/bin/cmake
       
    88 CMAKE_VERSION := $(shell $(CMAKE) --version 2>&1 | head -n1 \
       
    89   | $(GSED) 's/cmake version \{1,\}//g')
       
    90 CMAKE_MAJOR_VERSION := $(shell echo $(CMAKE_VERSION) | cut -f1 -d'.')
       
    91 CMAKE_MINOR_VERSION := $(shell echo $(CMAKE_VERSION) | cut -f2 -d'.')
       
    92 CMAKE_MICRO_VERSION := $(shell echo $(CMAKE_VERSION) | cut -f3 -d'.')
       
    93 
       
    94 # CMake prior to 3.6.0 does not define CMAKE_HOST_SOLARIS.
       
    95 # In that case, we pass it in CMAKE_OPTIONS.
       
    96 CMAKE_NEEDS_SOLARIS_HOST := 0
       
    97 ifeq ($(shell expr $(CMAKE_MAJOR_VERSION) \<= 3 \& \
       
    98 		    $(CMAKE_MINOR_VERSION) \<= 5),1)
       
    99   CMAKE_NEEDS_SOLARIS_HOST = 1
       
   100 endif
       
   101 
       
   102 # All of these shoujld probably be in shared-macros.mk
       
   103 CMAKE_INSTALL_BINDIR.32 = bin
       
   104 CMAKE_INSTALL_BINDIR.64 = bin/$(MACH64)
       
   105 CMAKE_INSTALL_BINDIR = $(CMAKE_INSTALL_BINDIR.$(BITS))
       
   106 
       
   107 CMAKE_INSTALL_LIBDIR.32 = lib
       
   108 CMAKE_INSTALL_LIBDIR.64 = lib/$(MACH64)
       
   109 CMAKE_INSTALL_LIBDIR = $(CMAKE_INSTALL_LIBDIR.$(BITS))
       
   110 
       
   111 CMAKE_INSTALL_LIBEXECDIR.32 = libexec
       
   112 CMAKE_INSTALL_LIBEXECDIR.64 = libexec/$(MACH64)
       
   113 CMAKE_INSTALL_LIBEXECDIR = $(CMAKE_INSTALL_LIBEXECDIR.$(BITS))
       
   114 
       
   115 CMAKE_INSTALL_INCLUDEDIR = include
       
   116 CMAKE_INSTALL_DATADIR = share
       
   117 CMAKE_INSTALL_DATAROOTDIR = share
       
   118 
       
   119 # We need the specific C++ runtime that clang/llvm was built and
       
   120 # linked with, and not some random and incompatible stuff from
       
   121 # /usr/lib.
       
   122 LLVM_RUNPATH_32 = /usr/gcc/$(GCC_VERSION)/lib
       
   123 LLVM_RUNPATH_64 = /usr/gcc/$(GCC_VERSION)/lib/$(MACH64)
       
   124 LLVM_RUNPATH = $(LLVM_RUNPATH_$(BITS))
       
   125 
       
   126 # -O0. GCC on SPARC dies with an out-memory error in cc1plus when
       
   127 # building with either -O1 or -O2 (32-bit). If it manages to get
       
   128 # through with -O1 or -O2 (64-bit), the resulting bits are unusable.
       
   129 OFLAG="-O0"
       
   130 GFLAG=""
       
   131 
       
   132 ifeq ($(DEBUG_BUILD), 1)
       
   133   OFLAG="-O0"
       
   134   GFLAG="-g3"
       
   135 endif
       
   136 
       
   137 # Because LLVM's install target doesn't install everything that
       
   138 # needs to be installed.
       
   139 EXTRA_INSTALL_BITS=llvm-lto arcmt-test c-arcmt-test c-index-test diagtool
       
   140 LLVM_INSTALL_BINDIR.32=$(PROTOUSRBINDIR)
       
   141 LLVM_INSTALL_BINDIR.64=$(PROTOUSRBINDIR64)
       
   142 LLVM_INSTALL_BINDIR=$(LLVM_INSTALL_BINDIR.$(BITS))
       
   143 LLVM_BINDIR=$(BUILD_DIR_$(BITS))/bin
       
   144 
       
   145 INSTALL_CXA_FINALIZE := 0
       
   146 ifeq ($(SOLARIS_11_ONLY),)
       
   147   INSTALL_CXA_FINALIZE = 1
       
   148 endif
       
   149 
       
   150 SCAN_VIEW_FILES=Reporter.py ScanView.py
       
   151 CLANG_FORMAT_FILES=clang-format-diff.py clang-format-sublime.py \
       
   152 		   clang-format.py
       
   153 LLVM_MAN_FILES=FileCheck.1 bugpoint.1 clang.1 lit.1 llc.1 lli.1 \
       
   154 	       llvm-ar.1 llvm-as.1 llvm-bcanalyzer.1 llvm-build.1 \
       
   155 	       llvm-config.1 llvm-cov.1 llvm-diff.1 llvm-dis.1 \
       
   156 	       llvm-dwarfdump.1 llvm-extract.1 llvm-lib.1 llvm-link.1 \
       
   157 	       llvm-nm.1 llvm-profdata.1 llvm-readobj.1 llvm-stress.1 \
       
   158 	       llvm-symbolizer.1 opt.1 tblgen.1
    61 
   159 
    62 COMPONENT_POST_BUILD_ACTION = \
   160 COMPONENT_POST_BUILD_ACTION = \
    63       if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
   161       if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
       
   162       /usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.patched ; \
       
   163       /usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.prep ; \
    64       $(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize build ; \
   164       $(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize build ; \
       
   165       /usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.built ; \
    65       fi
   166       fi
    66 
   167 
    67 COMPONENT_POST_INSTALL_ACTION = \
   168 COMPONENT_POST_INSTALL_ACTION = \
    68 	if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
   169 	if test -d $(COMPONENT_DIR)/cxa_finalize ; then \
    69 	$(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize install ; \
   170 	$(GMAKE) -C $(COMPONENT_DIR)/cxa_finalize install ; \
       
   171 	/usr/gnu/bin/touch $(COMPONENT_DIR)/cxa_finalize/.installed ; \
    70 	fi;
   172 	fi;
    71 
   173 
    72 # Depends on S12-only changes in gcc; might be able to deal with later,
       
    73 # but avoid publishing while this is under investigation.
       
    74 ifeq ($(BUILD_TYPE), evaluation)
       
    75 BUILD_64=
       
    76 INSTALL_64=
       
    77 PUBLISH_STAMP=
       
    78 endif
       
    79 
       
    80 TEST_TARGET=
       
    81 include $(WS_MAKE_RULES)/common.mk
       
    82 
       
    83 PATCH_LEVEL := 0
       
    84 DEBUG_BUILD := 0
       
    85 GCC_VERSION := 4.9
       
    86 
       
    87 # We need GCC version 4.9, and not another version.
       
    88 CC=$(USRDIR)/gcc/$(GCC_VERSION)/bin/gcc
       
    89 CXX=$(USRDIR)/gcc/$(GCC_VERSION)/bin/g++
       
    90 
       
    91 # We need the specific C++ runtime that clang/llvm was built and
       
    92 # linked with, and not some random and incompatible stuff from
       
    93 # /usr/lib.
       
    94 LLVM_RUNPATH_32 = $(USRDIR)/gcc/$(GCC_VERSION)/lib
       
    95 LLVM_RUNPATH_64 = $(USRDIR)/gcc/$(GCC_VERSION)/lib/$(MACH64)
       
    96 LLVM_RUNPATH = $(LLVM_RUNPATH_$(BITS))
       
    97 
       
    98 # -O0 for now. Ideally we want -O2.
       
    99 OFLAG="-O0"
       
   100 GFLAG=""
       
   101 
       
   102 ifeq ($(DEBUG_BUILD), 1)
       
   103   OFLAG="-O0"
       
   104   GFLAG="-g3"
       
   105 endif
       
   106 
       
   107 export PATH=$(GNUBIN):$(USRDIR)/xpg4/bin:$(USRBINDIR):$(USRDIR)/perl5/5.16/bin
       
   108 
       
   109 # Because LLVM's install target doesn't install everything that
       
   110 # needs to be installed.
       
   111 EXTRA_INSTALL_BITS=llvm-lto arcmt-test c-arcmt-test c-index-test diagtool
       
   112 LLVM_BINDIR=$(BUILD_DIR_64)/Release/bin
       
   113 
       
   114 ifeq ($(DEBUG_BUILD), 1)
       
   115   LLVM_BINDIR=$(BUILD_DIR_64)/Debug+Asserts+Checks/bin
       
   116 endif
       
   117 
       
   118 COMPONENT_POST_INSTALL_ACTION += \
   174 COMPONENT_POST_INSTALL_ACTION += \
   119 	list1='$(EXTRA_INSTALL_BITS)' ; for f in $$list1 ; do \
   175 	list1='$(EXTRA_INSTALL_BITS)' ; for f in $$list1 ; do \
   120 	    $(INSTALL) --mode=755 $(LLVM_BINDIR)/$$f $(PROTOUSRBINDIR)/$$f ; \
   176 	    $(INSTALL) --mode=755 $(LLVM_BINDIR)/$$f \
   121 	done;
   177 			$(LLVM_INSTALL_BINDIR)/$$f ; \
   122 
   178 	done ;
   123 # No ASLR for compilers.
   179 
   124 ASLR_MODE = $(ASLR_DISABLE)
   180 COMPONENT_POST_INSTALL_ACTION += \
       
   181 	$(MKDIR) \
       
   182 	  $(PROTOUSRLIBDIR)/python$(PYTHON_VERSION)/vendor-packages ; \
       
   183 	list2='$(SCAN_VIEW_FILES)' ; for f in $$list2 ; do \
       
   184 	$(INSTALL) --mode=644 $(PROTOUSRSHAREDIR)/scan-view/$$f \
       
   185 	  $(PROTOUSRLIBDIR)/python$(PYTHON_VERSION)/vendor-packages/$$f ; \
       
   186 	done ;
       
   187 
       
   188 COMPONENT_POST_INSTALL_ACTION += \
       
   189 	list3='$(CLANG_FORMAT_FILES)' ; for f in $$list3 ; do \
       
   190 	  $(INSTALL) --mode=644 $(PROTOUSRSHAREDIR)/clang/$$f \
       
   191 	    $(PROTOUSRLIBDIR)/python$(PYTHON_VERSION)/vendor-packages/$$f ; \
       
   192 	done ;
       
   193 
       
   194 COMPONENT_POST_INSTALL_ACTION += \
       
   195 	cd $(COMPONENT_DIR) ; \
       
   196 	$(GNUCP) -rpd $(PROTOUSRLIBDIR64)/clang $(PROTOUSRLIBDIR)/ ;
       
   197 
       
   198 COMPONENT_POST_INSTALL_ACTION += \
       
   199 	cd $(PROTOUSRLIBDIR) ; \
       
   200 	$(PYTHON) -m compileall . ;
       
   201 
       
   202 COMPONENT_POST_INSTALL_ACTION += \
       
   203 	cd $(COMPONENT_DIR) ; \
       
   204 	$(MKDIR) $(PROTOUSRSHAREMAN1DIR) ; \
       
   205 	list4='$(LLVM_MAN_FILES)' ; for f in $$list4 ; do \
       
   206 	  $(INSTALL) --mode=644 $(COMPONENT_DIR)/Solaris/man1/$$f \
       
   207 	    $(PROTOUSRSHAREMAN1DIR)/$$f ; \
       
   208 	done ;
       
   209 
       
   210 ifeq ($(INSTALL_CXA_FINALIZE),1)
       
   211 COMPONENT_POST_INSTALL_ACTION += \
       
   212 	$(INSTALL) --mode=644 \
       
   213 	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize-32.o \
       
   214 	  $(PROTOUSRLIBDIR)/clang/cxa_finalize.o ; \
       
   215 	$(INSTALL) --mode=644 \
       
   216 	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize_pic-32.o \
       
   217 	  $(PROTOUSRLIBDIR)/clang/cxa_finalize_pic.o ; \
       
   218 	$(INSTALL) --mode=644 \
       
   219 	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize-64.o \
       
   220 	  $(PROTOUSRLIBDIR)/clang/$(MACH64)/cxa_finalize.o ; \
       
   221 	$(INSTALL) --mode=644 \
       
   222 	  $(COMPONENT_DIR)/cxa_finalize/cxa_finalize_pic-64.o \
       
   223 	  $(PROTOUSRLIBDIR)/clang/$(MACH64)/cxa_finalize_pic.o ;
       
   224 endif
       
   225 
       
   226 # Results output is slightly different on Intel vs. SPARC.
       
   227 # Not enabled just yet because of problems with the way opt
       
   228 # and FileCheck emit and parse the test case results.
       
   229 COMPONENT_TEST_MASTER = \
       
   230 	$(COMPONENT_TEST_RESULTS_DIR)/results-$(MACH).master
       
   231 
       
   232 # Do not change the order of these regexp transforms.
       
   233 COMPONENT_TEST_TRANSFORMS += \
       
   234     '-e "/gmake -f/d"' \
       
   235     '-e "/gmake/d"' \
       
   236     '-e "/--color=/d"' \
       
   237     '-e "/Entering/d"' \
       
   238     '-e "/Leaving/d"' \
       
   239     '-e "/Built target/d"' \
       
   240     '-e "/Nothing to be done/d"'
   125 
   241 
   126 # GCC options used:
   242 # GCC options used:
   127 # -ftree-vectorize | -fno-tree-vectorize:
   243 # -ftree-vectorize | -fno-tree-vectorize:
   128 # Enable/disable loop vectorization in optimizations. For details:
   244 # Enable/disable loop vectorization in optimizations. For details:
   129 # https://gcc.gnu.org/projects/tree-ssa/vectorization.html
   245 # https://gcc.gnu.org/projects/tree-ssa/vectorization.html
   194 # and practice has shown that it is indeed needed. The disadvantage
   310 # and practice has shown that it is indeed needed. The disadvantage
   195 # of using this flag is that it triggers copy-on-write relocations.
   311 # of using this flag is that it triggers copy-on-write relocations.
   196 #
   312 #
   197 # -mno-sse3 -mno-ssse3:
   313 # -mno-sse3 -mno-ssse3:
   198 # Do not use SSE3/SSSE3 instructions on Intel. These might not be
   314 # Do not use SSE3/SSSE3 instructions on Intel. These might not be
   199 # available. Building for Opteron - which implies SSE2 - is adequate
   315 # available and they always come with side-effects.
   200 # for performance purposes.
   316 # Building for Opteron - which implies SSE2 - is adequate for
       
   317 # performance purposes.
   201 
   318 
   202 CFLAGS = -m$(BITS) $(GFLAG) $(OFLAG) -pthread -std=c99 -fno-strict-aliasing
   319 CFLAGS = -m$(BITS) $(GFLAG) $(OFLAG) -pthread -std=c99 -fno-strict-aliasing
   203 CFLAGS += -fno-tree-slp-vectorize -fno-tree-vectorize
   320 CFLAGS += -fno-tree-slp-vectorize -fno-tree-vectorize
   204 CFLAGS += -fno-reorder-blocks -fno-toplevel-reorder
   321 CFLAGS += -fno-reorder-blocks -fno-toplevel-reorder
   205 CFLAGS += -Wall -Wcast-align -Wno-long-long -Woverflow
   322 CFLAGS += -Wall -Wcast-align -Wno-long-long -Woverflow
   206 CFLAGS += -Wstack-protector -fdata-sections -fstack-protector-all
   323 CFLAGS += -Wstack-protector -fdata-sections -fstack-protector-all
   207 CFLAGS += -fkeep-static-consts -ffunction-sections
   324 CFLAGS += -fkeep-static-consts -ffunction-sections
   208 CFLAGS += -Wl,-z -Wl,relax=common -Wl,-z -Wl,relax=secadj
   325 CFLAGS += -Wl,-z -Wl,relax=common
   209 CFLAGS += -Wl,-z -Wl,relax=transtls -Wl,-R -Wl,$(LLVM_RUNPATH)
   326 CFLAGS += -Wl,-z -Wl,relax=secadj
       
   327 CFLAGS += -Wl,-z -Wl,relax=transtls
       
   328 CFLAGS += -Wl,-z -Wl,relax=symbound
       
   329 CFLAGS += -Wl,-R -Wl,$(LLVM_RUNPATH)
   210 CFLAGS.i386 += -mtune=opteron -mno-sse3 -mno-ssse3 -fno-common
   330 CFLAGS.i386 += -mtune=opteron -mno-sse3 -mno-ssse3 -fno-common
       
   331 ifeq ($(DEBUG_BUILD),1)
       
   332   CFLAGS.i386 += -fno-omit-frame-pointer
       
   333 endif
   211 CFLAGS.sparc += -mtune=ultrasparc -mcpu=ultrasparc -mvis -mhard-float
   334 CFLAGS.sparc += -mtune=ultrasparc -mcpu=ultrasparc -mvis -mhard-float
   212 CFLAGS.sparc += -mptr$(BITS) -fdata-sections -falign-functions=8
   335 CFLAGS.sparc += -mptr$(BITS) -fdata-sections -falign-functions=8
   213 CFLAGS.sparc += -mno-unaligned-doubles -mimpure-text
   336 CFLAGS.sparc += -mno-unaligned-doubles -mimpure-text
   214 CFLAGS += $(CFLAGS.$(MACH))
   337 CFLAGS += $(CFLAGS.$(MACH))
   215 
   338 
   218 CXXFLAGS += -fno-tree-vectorize -fno-tree-slp-vectorize
   341 CXXFLAGS += -fno-tree-vectorize -fno-tree-slp-vectorize
   219 CXXFLAGS += -fno-reorder-blocks -fno-toplevel-reorder
   342 CXXFLAGS += -fno-reorder-blocks -fno-toplevel-reorder
   220 CXXFLAGS += -Wall -Wcast-align -Wno-long-long -Woverflow
   343 CXXFLAGS += -Wall -Wcast-align -Wno-long-long -Woverflow
   221 CXXFLAGS += -Wstack-protector -fkeep-static-consts
   344 CXXFLAGS += -Wstack-protector -fkeep-static-consts
   222 CXXFLAGS += -std=c++11 -fdata-sections -ffunction-sections
   345 CXXFLAGS += -std=c++11 -fdata-sections -ffunction-sections
   223 CXXFLAGS += -Wl,-z -Wl,relax=common -Wl,-z -Wl,relax=secadj
   346 CXXFLAGS += -Wl,-z -Wl,relax=common
   224 CXXFLAGS += -Wl,-z -Wl,relax=transtls -Wl,-R -Wl,$(LLVM_RUNPATH)
   347 CXXFLAGS += -Wl,-z -Wl,relax=secadj
       
   348 CXXFLAGS += -Wl,-z -Wl,relax=transtls
       
   349 CXXFLAGS += -Wl,-z -Wl,relax=symbound
       
   350 CXXFLAGS += -Wl,-z -Wl,relax=comdat
       
   351 CXXFLAGS += -Wl,-R -Wl,$(LLVM_RUNPATH)
   225 CXXFLAGS.sparc += -mptr$(BITS)
   352 CXXFLAGS.sparc += -mptr$(BITS)
   226 CXXFLAGS += $(CFLAGS.$(MACH))
   353 CXXFLAGS += $(CFLAGS.$(MACH))
   227 
   354 
   228 CPPFLAGS = -D_GNU_SOURCE -DLLVM_SOLARIS -I$(USRGNUDIR)/include
   355 CPPFLAGS = -D_GNU_SOURCE -DLLVM_SOLARIS -I/usr/gnu/include
   229 
   356 
   230 ifeq ($(DEBUG_BUILD), 1)
   357 ifeq ($(DEBUG_BUILD),1)
   231   CPPFLAGS += -D_DEBUG
   358   CPPFLAGS += -D_DEBUG
   232 endif
   359 endif
   233 
   360 
   234 CPPFLAGS += -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
   361 CPPFLAGS += -D_REENTRANT -D_LARGEFILE64_SOURCE
   235 CPPFLAGS += -D_FILE_OFFSET_BITS=64 -D__EXTENSIONS__=1
   362 CPPFLAGS += -D_FILE_OFFSET_BITS=64 -D__EXTENSIONS__=1
   236 CPPFLAGS += -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS
   363 CPPFLAGS += -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS
   237 CPPFLAGS += -D__STDC_LIMIT_MACROS -DHAVE_POSIX_MEMALIGN
   364 CPPFLAGS += -D__STDC_LIMIT_MACROS -DHAVE_POSIX_MEMALIGN
   238 CPPFLAGS += -D_GLIBCXX_FULLY_DYNAMIC_STRING=1
   365 CPPFLAGS += -D_GLIBCXX_FULLY_DYNAMIC_STRING=1
   239 CPPFLAGS.i386 = -DLLVM_INTEL
   366 CPPFLAGS.i386 = -DLLVM_INTEL
   240 CPPFLAGS.sparc = -DLLVM_SPARC
   367 CPPFLAGS.sparc = -DLLVM_SPARC
   241 CPPFLAGS += $(CPPFLAGS.$(MACH))
   368 CPPFLAGS += $(CPPFLAGS.$(MACH))
   242 
   369 
   243 LLVM_LIBEXECDIR_32 = $(USRDIR)/libexec
   370 LLVM_LIBEXECDIR_32 = /usr/libexec
   244 LLVM_LIBEXECDIR_64 = $(USRDIR)/libexec/$(MACH64)
   371 LLVM_LIBEXECDIR_64 = /usr/libexec/$(MACH64)
   245 LLVM_LIBEXECDIR = $(LLVM_LIBEXECDIR_$(BITS))
   372 LLVM_LIBEXECDIR = $(LLVM_LIBEXECDIR_$(BITS))
   246 
   373 
   247 CONFIGURE_OPTIONS += --libexecdir=$(LLVM_LIBEXECDIR)
   374 LIBFFI_INCDIR_32 = /usr/lib/libffi-3.0.9/include
   248 CONFIGURE_OPTIONS += --sharedstatedir=/tmp
   375 LIBFFI_INCDIR_64 = /usr/lib/$(MACH64)/libffi-3.0.9/include
   249 CONFIGURE_OPTIONS += --localstatedir=$(VARDIR)
   376 LIBFFI_INCDIR = $(LIBFFI_INCDIR_$(BITS))
   250 CONFIGURE_OPTIONS += --enable-compiler-version-checks
   377 
   251 CONFIGURE_OPTIONS += --enable-clang-static-analyzer
   378 LIBFFI_LIBDIR_32 = /usr/lib
   252 
   379 LIBFFI_LIBDIR_64 = /usr/lib/$(MACH64)
   253 ifeq ($(DEBUG_BUILD), 1)
   380 LIBFFI_LIBDIR = $(LIBFFI_LIBDIR_$(BITS))
   254   CONFIGURE_OPTIONS += --enable-assertions
   381 
   255   CONFIGURE_OPTIONS += --disable-optimized
   382 # -Bdirect and -M /usr/lib/ld/map.noexbss break SPARC builds.
   256   CONFIGURE_OPTIONS += --enable-expensive-checks
   383 LD_B_DIRECT =
   257   CONFIGURE_OPTIONS += --enable-debug-runtime
   384 LD_OPTIONS = -M /usr/lib/ld/map.noexstk
   258   CONFIGURE_OPTIONS += --enable-debug-symbols
   385 LD_OPTIONS += -M /usr/lib/ld/map.pagealign
       
   386 LD_OPTIONS_SO = $(LD_Z_DEFS) $(LD_DEF_LIBS)
       
   387 
       
   388 CMAKE_OPTIONS = -DCMAKE_C_COMPILER:FILEPATH=$(CC)
       
   389 CMAKE_OPTIONS += -DCMAKE_CXX_COMPILER:FILEPATH=$(CXX)
       
   390 CMAKE_OPTIONS += -DCMAKE_C_CFLAGS:STRING="$(CPPFLAGS) $(CFLAGS)"
       
   391 CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS:STRING="$(CPPFLAGS) $(CXXFLAGS)"
       
   392 CMAKE_OPTIONS += -DCMAKE_EXE_LINKER_FLAGS:STRING="$(LDFLAGS)"
       
   393 CMAKE_OPTIONS += -DCMAKE_INSTALL_PREFIX:FILEPATH=$(CMAKE_PREFIX)
       
   394 CMAKE_OPTIONS += -DCMAKE_AR:FILEPATH=/usr/bin/ar
       
   395 
       
   396 CMAKE_OPTIONS += -DCMAKE_INSTALL_BINDIR:STRING="$(CMAKE_INSTALL_BINDIR)"
       
   397 CMAKE_OPTIONS += -DCMAKE_INSTALL_LIBDIR:STRING="$(CMAKE_INSTALL_LIBDIR)"
       
   398 CMAKE_OPTIONS += -DCMAKE_INSTALL_LIBEXECDIR:STRING="$(CMAKE_INSTALL_LIBEXECDIR)"
       
   399 CMAKE_OPTIONS += -DCMAKE_INSTALL_INCLUDEDIR:STRING="$(CMAKE_INSTALL_INCLUDEDIR)"
       
   400 CMAKE_OPTIONS += -DCMAKE_INSTALL_DATADIR:STRING="$(CMAKE_INSTALL_DATADIR)"
       
   401 CMAKE_OPTIONS += -DCMAKE_INSTALL_DATAROOTDIR:STRING="$(CMAKE_INSTALL_DATAROOTDIR)"
       
   402 
       
   403 ifeq ($(MACH),sparc)
       
   404   CMAKE_OPTIONS += -DLLVM_TARGETS_TO_BUILD:STRING="Sparc"
       
   405 endif
       
   406 ifeq ($(MACH),i386)
       
   407   CMAKE_OPTIONS += -DLLVM_TARGETS_TO_BUILD:STRING="X86"
       
   408 endif
       
   409 
       
   410 CMAKE_OPTIONS += -DCMAKE_MAKE_PROGRAM:STRING="/usr/bin/gmake"
       
   411 CMAKE_OPTIONS += -DCMAKE_ASM_COMPILER:STRING="/usr/gnu/bin/as"
       
   412 CMAKE_OPTIONS += -DCMAKE_INSTALL_RPATH:STRING="$(LLVM_RUNPATH)"
       
   413 CMAKE_OPTIONS += -DLLVM_BUILD_TOOLS:BOOL=ON
       
   414 CMAKE_OPTIONS += -DLLVM_INCLUDE_TOOLS:BOOL=ON
       
   415 CMAKE_OPTIONS += -DLLVM_BUILD_TESTS:BOOL=ON
       
   416 CMAKE_OPTIONS += -DLLVM_INCLUDE_TESTS:BOOL=ON
       
   417 CMAKE_OPTIONS += -DLLVM_ENABLE_THREADS:BOOL=ON
       
   418 CMAKE_OPTIONS += -DLLVM_BUILD_32_BITS:BOOL=OFF
       
   419 
       
   420 # CMake tries really hard to be too smart for its own good.
       
   421 ifeq ($(DEBUG_BUILD),1)
       
   422   CMAKE_OPTIONS += -DCMAKE_BUILD_TYPE:STRING=Debug
       
   423   CMAKE_OPTIONS += -DCMAKE_C_FLAGS_DEBUG:STRING="$(OFLAG) $(GFLAG)"
       
   424   CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_DEBUG:STRING="$(OFLAG) $(GFLAG)"
       
   425   CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_DEBUG:STRING="$(OFLAG) $(GFLAG)"
       
   426   CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG) $(GFLAG)"
       
   427   CMAKE_OPTIONS += -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG) $(GFLAG)"
       
   428   CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG) $(GFLAG)"
       
   429   CMAKE_OPTIONS += -DLLVM_BUILD_EXAMPLES:BOOL=ON
       
   430   CMAKE_OPTIONS += -DLLVM_INCLUDE_EXAMPLES:BOOL=ON
       
   431   CMAKE_OPTIONS += -DLLVM_ENABLE_ASSERTIONS:BOOL=ON
       
   432   CMAKE_OPTIONS += -DLLVM_ENABLE_EXPENSIVE_CHECKS:BOOL=ON
   259 else
   433 else
   260   CONFIGURE_OPTIONS += --disable-assertions
   434   CMAKE_OPTIONS += -DCMAKE_BUILD_TYPE:STRING=Release
   261   CONFIGURE_OPTIONS += --enable-optimized
   435   CMAKE_OPTIONS += -DCMAKE_C_FLAGS_DEBUG:STRING="$(OFLAG)"
   262   CONFIGURE_OPTIONS += --disable-expensive-checks
   436   CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_DEBUG:STRING="$(OFLAG)"
   263   CONFIGURE_OPTIONS += --disable-debug-runtime
   437   CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_DEBUG:STRING="$(OFLAG)"
   264   CONFIGURE_OPTIONS += --disable-debug-symbols
   438   CMAKE_OPTIONS += -DCMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG)"
   265 endif
   439   CMAKE_OPTIONS += -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG)"
   266 
   440   CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="$(OFLAG)"
   267 CONFIGURE_OPTIONS += --enable-keep-symbols
   441   CMAKE_OPTIONS += -DLLVM_BUILD_EXAMPLES:BOOL=OFF
   268 CONFIGURE_OPTIONS += --enable-jit
   442   CMAKE_OPTIONS += -DLLVM_INCLUDE_EXAMPLES:BOOL=OFF
   269 CONFIGURE_OPTIONS += --disable-docs
   443   CMAKE_OPTIONS += -DLLVM_ENABLE_ASSERTIONS:BOOL=OFF
   270 CONFIGURE_OPTIONS += --disable-doxygen
   444   CMAKE_OPTIONS += -DLLVM_ENABLE_EXPENSIVE_CHECKS:BOOL=OFF
   271 CONFIGURE_OPTIONS += --enable-threads
   445 endif
   272 CONFIGURE_OPTIONS += --enable-pthreads
   446 
   273 CONFIGURE_OPTIONS += --enable-shared
   447 CMAKE_OPTIONS += -DLLVM_ENABLE_EH:BOOL=ON
   274 CONFIGURE_OPTIONS += --enable-zlib
   448 CMAKE_OPTIONS += -DLLVM_ENABLE_PIC:BOOL=ON
   275 CONFIGURE_OPTIONS += --enable-pic
   449 CMAKE_OPTIONS += -DLLVM_ENABLE_RTTI:BOOL=ON
   276 CONFIGURE_OPTIONS += --enable-timestamps
   450 CMAKE_OPTIONS += -DLLVM_ENABLE_WARNINGS:BOOL=ON
   277 CONFIGURE_OPTIONS += --enable-backtraces
   451 CMAKE_OPTIONS += -DLLVM_ENABLE_PEDANTIC:BOOL=ON
   278 CONFIGURE_OPTIONS += --enable-bindings=auto
   452 CMAKE_OPTIONS += -DLLVM_ABI_BREAKING_CHECKS:STRING="FORCE_OFF"
   279 CONFIGURE_OPTIONS += --enable-libffi
   453 CMAKE_OPTIONS += -DLLVM_ENABLE_ZLIB:BOOL=ON
   280 CONFIGURE_OPTIONS += --enable-terminfo
   454 CMAKE_OPTIONS += -DLLVM_ENABLE_FFI:BOOL=ON
   281 CONFIGURE_OPTIONS += --disable-ltdl-install
   455 CMAKE_OPTIONS += -DFFI_INCLUDE_DIR:STRING=$(LIBFFI_INCDIR)
   282 CONFIGURE_OPTIONS += --with-python=$(PYTHON)
   456 CMAKE_OPTIONS += -DFFI_LIBRARY_DIR:STRING=$(LIBFFI_LIBDIR)
   283 
   457 
   284 ifeq ($(MACH),sparc)
   458 ifeq ($(HAVE_SPHINX),1)
   285   CONFIGURE_OPTIONS += --with-extra-ld-options='-lkstat'
   459   CMAKE_OPTIONS += -DSPHINX_EXECUTABLE:STRING="/usr/bin/sphinx-build"
   286 endif
   460   CMAKE_OPTIONS += -DLLVM_ENABLE_SPHINX:BOOL=ON
   287 CONFIGURE_OPTIONS += --with-gcc-toolchain=$(USRDIR)/gcc/$(GCC_VERSION)
   461   CMAKE_OPTIONS += -DLLVM_BUILD_DOCS:BOOL=ON
   288 CONFIGURE_OPTIONS += --with-optimize-option="$(OFLAG) $(GFLAG)"
   462   CMAKE_OPTIONS += -DSPHINX_OUTPUT_HTML:BOOL=ON
   289 
   463   CMAKE_OPTIONS += -DSPHINX_OUTPUT_MAN:BOOL=ON
   290 # Enable the cross-compiler in 3.8.X.
   464 endif
   291 CONFIGURE_OPTIONS.i386 += --enable-targets="x86"
   465 
   292 CONFIGURE_OPTIONS.sparc += --enable-targets="sparc"
   466 # Always build the libLLVM and libclang shared libraries
       
   467 CMAKE_OPTIONS += -DLLVM_BUILD_LLVM_DYLIB:BOOL=ON
       
   468 CMAKE_OPTIONS += -DLLVM_LINK_LLVM_DYLIB:BOOL=ON
       
   469 
       
   470 CMAKE_OPTIONS += -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
       
   471 
       
   472 CMAKE_OPTIONS += -DLLVM_COMPILER_IS_GCC_COMPATIBLE:BOOL=ON
       
   473 
       
   474 ifeq ($(CMAKE_NEEDS_SOLARIS_HOST),1)
       
   475   CMAKE_OPTIONS += -DCMAKE_HOST_SOLARIS:BOOL=TRUE
       
   476 endif
       
   477 
       
   478 COMPONENT_BUILD_ENV = CC="$(CC)"
       
   479 COMPONENT_BUILD_ENV += CXX="$(CXX)"
       
   480 COMPONENT_BUILD_ENV += CFLAGS="$(CFLAGS)"
       
   481 COMPONENT_BUILD_ENV += CXXFLAGS="$(CXXFLAGS)"
       
   482 COMPONENT_BUILD_ENV += LDFLAGS="$(LDFLAGS)"
       
   483 COMPONENT_BUILD_ENV += LD_OPTIONS="$(LD_OPTIONS)"
       
   484 COMPONENT_BUILD_ENV += PATH="$(PATH)"
       
   485 COMPONENT_BUILD_ENV += LANG="C"
       
   486 COMPONENT_BUILD_ENV += LC_ALL="C"
       
   487 COMPONENT_BUILD_ENV += LD_EXEC_OPTIONS="-zaslr=disable"
   293 
   488 
   294 # Put this here for now until the gpatch problems are resolved.
   489 # Put this here for now until the gpatch problems are resolved.
   295 COMPONENT_BUILD_ARGS += -j8
   490 COMPONENT_BUILD_ARGS += -j4
   296 
   491 
   297 # use bash(1) to run the install recipes otherwise clang header installation
   492 # use bash(1) to run the install recipes otherwise clang header installation
   298 # fails
   493 # fails
   299 COMPONENT_INSTALL_ARGS += SHELL=/bin/bash
   494 COMPONENT_INSTALL_ARGS += SHELL=/bin/bash
   300 
   495 
   301 # common targets
   496 COMPONENT_PRE_BUILD_ACTION += cd $(@D) ;
   302 # There are no master test results yet. TBDL in 3.8.X.
   497 COMPONENT_PRE_BUILD_ACTION += echo BITS: $(BITS) ;
       
   498 COMPONENT_PRE_BUILD_ACTION += echo Running cmake with $(CMAKE_OPTIONS) ;
       
   499 COMPONENT_PRE_BUILD_ACTION += /usr/bin/env - $(COMPONENT_BUILD_ENV) \
       
   500 			      $(CMAKE) $(CMAKE_OPTIONS) \
       
   501 			      $(COMPONENT_DIR)/$(COMPONENT_SRC) ;
       
   502 
       
   503 
       
   504 # There are no master test results just yet. But there will be
       
   505 # very soon.
   303 test:
   506 test:
   304 	@echo "Tests not yet implemented (wait for 3.8.X)."
   507 	@echo "Tests not yet implemented - coming soon in LLVM 3.8.1."
       
   508 
       
   509 system-test:    $(SYSTEM_TESTS_NOT_IMPLEMENTED)
   305 
   510 
   306 REQUIRED_PACKAGES += developer/gcc-4/gcc-common-49
   511 REQUIRED_PACKAGES += developer/gcc-4/gcc-common-49
   307 REQUIRED_PACKAGES += developer/gnu-binutils
   512 REQUIRED_PACKAGES += developer/gnu-binutils
   308 REQUIRED_PACKAGES += library/libedit
   513 REQUIRED_PACKAGES += library/libedit
   309 REQUIRED_PACKAGES += library/libffi
   514 REQUIRED_PACKAGES += library/libffi
   310 REQUIRED_PACKAGES += library/libxml2
   515 REQUIRED_PACKAGES += library/libxml2
   311 REQUIRED_PACKAGES += library/zlib
   516 REQUIRED_PACKAGES += library/zlib
       
   517 REQUIRED_PACKAGES += runtime/perl-522
       
   518 REQUIRED_PACKAGES += library/perl-5/xml-libxml
       
   519 REQUIRED_PACKAGES += library/perl-5/xml-namespacesupport
       
   520 REQUIRED_PACKAGES += library/perl-5/xml-parser
       
   521 REQUIRED_PACKAGES += library/perl-5/xml-sax
       
   522 REQUIRED_PACKAGES += library/perl-5/xml-sax-base
       
   523 REQUIRED_PACKAGES += library/perl-5/xml-simple
   312 REQUIRED_PACKAGES += runtime/python-27
   524 REQUIRED_PACKAGES += runtime/python-27
   313 REQUIRED_PACKAGES += system/core-os
   525 REQUIRED_PACKAGES += system/core-os
   314 REQUIRED_PACKAGES += system/header
   526 REQUIRED_PACKAGES += system/header
   315 REQUIRED_PACKAGES += system/library/gcc/gcc-runtime-49
   527 REQUIRED_PACKAGES += system/library/gcc/gcc-runtime-49
   316 REQUIRED_PACKAGES += system/library/gcc/gcc-c++-runtime-49
   528 REQUIRED_PACKAGES += system/library/gcc/gcc-c++-runtime-49
   317 REQUIRED_PACKAGES += system/library/gcc/gcc-c-runtime-49
   529 REQUIRED_PACKAGES += system/library/gcc/gcc-c-runtime-49
   318 REQUIRED_PACKAGES += system/library/gcc/gcc-gobjc-runtime-49
   530 REQUIRED_PACKAGES += system/library/gcc/gcc-gobjc-runtime-49
   319 REQUIRED_PACKAGES += system/library/math
   531 REQUIRED_PACKAGES += system/library/math
   320 REQUIRED_PACKAGES += system/linker
   532 REQUIRED_PACKAGES += system/linker
       
   533