components/r/Makefile
changeset 5853 cf951496fb3a
parent 5718 0ec11277a3e4
child 6013 1458d0cd0532
--- a/components/r/Makefile	Wed Apr 27 00:40:44 2016 -0700
+++ b/components/r/Makefile	Wed Apr 27 10:12:03 2016 -0700
@@ -44,14 +44,6 @@
 COMPONENT_PRE_CONFIGURE_ACTION = \
 	($(CLONEY) $(SOURCE_DIR) $(@D))
 
-# Get rid of compiler path set in RUNPATH
-LDFLAGS += $(studio_NORUNPATH)
-
-LDFLAGS += $(CC_BITS)
-
-LDFLAGS += $(studio_PIC)
-LDFLAGS += $(LD_DEF_LIBS)
-
 STUDIO_LIBS_PATH =	$(USRLIBDIR)/studio/64
 # R_LIBS_PATH is used when creating /usr/lib/64/R/etc/Makeconf
 # Using a resolved pathname here (rather than say $(USRLIBDIR64)/R/lib) so
@@ -60,57 +52,57 @@
 R_LIBS_PATH =		/usr/lib/64/R/lib
 JAVA_LIBS_PATH =	$(JAVA8_HOME)/jre/lib/$(MACH64)/server
 
+LDFLAGS += $(CC_BITS)
 LDFLAGS += -L$(STUDIO_LIBS_PATH) -R$(STUDIO_LIBS_PATH) \
 		-lsunperf -lfsu -lmtsk -lpicl -lkstat
+LDFLAGS += -L$(R_LIBS_PATH) -R$(R_LIBS_PATH)
 
-# Augment the PATH and set CC/CXX/F95 such that the build environment doesn't
+# Augment the PATH and set CC/CXX/FC/F77 such that the build environment doesn't
 # leak into usr/lib/64/etc/Makeconf and force consumers to have a setup like
 # our build environment to build R modules.
-export PATH=$(SPRO_VROOT)/bin:$(USRBINDIR):$(GNUBIN)
-CC =		cc
-CXX =		CC
-F95 =		f95
+export PATH=$(GCC_ROOT)/bin:$(USRBINDIR):$(GNUBIN)
+CC =		gcc
+CXX =		g++
+FC =            gfortran
+F77 =           gfortran
 ifeq   ($(strip $(PARFAIT_BUILD)),yes)
 export PATH=$(PARFAIT_TOOLS):$(SPRO_VROOT)/bin:$(USRBINDIR):$(GNUBIN)
 endif
 
-
-CONFIGURE_ENV += F77="$(F95) $(CC_BITS)"
-CONFIGURE_ENV += FC="$(F95) $(CC_BITS)"
+# We can't use $(CC_PIC) here (which provides "-fPIC -DPIC" for the GNU
+# compilers), because we fail at configure time with:
+# configure: error: Building R requires the 'va_copy' system call
+# .../make-rules/configure.mk:170: recipe for target
+# '.../components/r/build/amd64/.configured' failed
+R_PIC =		-fPIC
 
-# For now, R is built with a very specific set of optimization flags to match
-# Oracle-provided builds.  These should be re-evaluated when upgrading to
-# Studio 12.5 or later or when next upgrading R.
-studio_OPT= -xO3
-studio_XBITS=
-studio_XREGS=
-studio_IROPTS=
-studio_C99MODE= $(studio_C99_ENABLE)
-studio_ALIGN=
-studio_MT=
+# These CONFIGURE_ENV lines are here so that /usr/lib/64/R/etc/Makeconf (the
+# configuration file used when building/installing the R CRAN packages),
+# is in exactly the correct format to work properly with the GNU compilers for
+# all the R CRAN packages containing C, C++, Fortran or Java code.
+CONFIGURE_ENV += CC="$(CC) -std=gnu99 $(CC_BITS)"
+CONFIGURE_ENV += CXX="$(CXX) $(CC_BITS)"
+CONFIGURE_ENV += FC="$(FC) $(CC_BITS)"
+CONFIGURE_ENV += F77="$(F77) $(CC_BITS)"
 
-CFLAGS.studio += -xlibmieee
-CXXFLAGS += -std=c++11
-# We (the Userland) team don't need -D__MATHERR_RENAME_EXCEPTION for the
-# creation of the R packages we provide in Solaris. It would be needed by
-# our customers that try to install R packages that use C++. And they would
-# be using the version of the Studio compilers on their machine(s) to do this.
-# Studio 12.5 will hopefully automatically provide this definition when C++
-# code is compiled with "-std=c++11". When that version of the Studio
-# compilers is released, we should encourage customers to install it, but
-# for those still using Studio 12.4, this definition will continue to be needed.
-CXXFLAGS += -D__MATHERR_RENAME_EXCEPTION
-LDFLAGS += -L$(R_LIBS_PATH) -R$(R_LIBS_PATH)
+CONFIGURE_ENV += C_VISIBILITY="-fvisibility=hidden"
+CONFIGURE_ENV += CFLAGS="-g -O2 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2"
+CONFIGURE_ENV += CPICFLAGS="$(R_PIC)"
 
-CONFIGURE_ENV += CPICFLAGS="$(studio_PIC)"
-CONFIGURE_ENV += FPICFLAGS="$(studio_PIC)"
-CONFIGURE_ENV += FFLAGS="$(studio_OPT) $(CC_BITS)"
-CONFIGURE_ENV += FCFLAGS="$(studio_OPT) $(CC_BITS)"
+CONFIGURE_ENV += CXXFLAGS="$(CC_BITS) -g -O2 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2"
+CONFIGURE_ENV += CXXPICFLAGS="$(R_PIC)"
+CONFIGURE_ENV += CXX1X="g++"
+CONFIGURE_ENV += CXX1XFLAGS="$(CC_BITS) -g -O2 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2"
+CONFIGURE_ENV += CXX1XPICFLAGS="$(R_PIC)"
+CONFIGURE_ENV += CXX1XSTD="-std=c++11"
+
+CONFIGURE_ENV += FCFLAGS="-g -O2 $(CC_BITS)"
+CONFIGURE_ENV += F77_VISIBILITY="-fvisibility=hidden"
+CONFIGURE_ENV += FFLAGS="-g -O2 $(CC_BITS)"
 CONFIGURE_ENV += FCLIBS="-lsunperf -lfsu -lsunmath"
-CONFIGURE_ENV += FLIBS="-lsunperf -lfsu -lsunmath"
-# Needed so that R packages using C++ code can link against the standard
-# C++ libraries.
-CONFIGURE_ENV += SHLIB_CXXLDFLAGS="-lCrunG3"
+CONFIGURE_ENV += FLIBS="-lsunperf -lfsu -lsunmath -lgfortran -lm"
+CONFIGURE_ENV += FCPICFLAGS="$(R_PIC)"
+CONFIGURE_ENV += FPICFLAGS="$(R_PIC)"
 
 # Set the various Java variables otherwise it auto-detects the 32-bit ones.
 CONFIGURE_ENV += JAVA_CPPFLAGS="-I$(JAVA8_HOME)/jre/../include -I$(JAVA8_HOME)/jre/../include/solaris"
@@ -130,16 +122,6 @@
 CONFIGURE_OPTIONS += --with-tcltk
 CONFIGURE_OPTIONS += --enable-prebuilt-html
 
-# Supply Makeconf files for both the Studio and the GNU C, C++ and Fortran
-# compilers.
-COMPONENT_POST_INSTALL_ACTION += \
-	$(MV) $(PROTOUSRLIBDIR64)/R/etc/Makeconf \
-	      $(PROTOUSRLIBDIR64)/R/etc/Makeconf.Studio ; \
-	$(CP) $(PROTOUSRLIBDIR64)/R/etc/Makeconf.Studio \
-	      $(PROTOUSRLIBDIR64)/R/etc/Makeconf.GNU ; \
-	(cd $(PROTOUSRLIBDIR64)/R/etc ; $(GPATCH) --strip=0 \
-	      < $(COMPONENT_DIR)/files/Makeconf-GNU.patch) ;
-
 COMPONENT_PRE_TEST_ACTION = \
 	$(RM) $(BUILD_DIR_64)/tests/Examples/*.prev
 
@@ -183,7 +165,7 @@
 REQUIRED_PACKAGES += library/readline
 REQUIRED_PACKAGES += library/zlib
 REQUIRED_PACKAGES += shell/bash
-REQUIRED_PACKAGES += system/library/fortran-runtime
+REQUIRED_PACKAGES += system/library/gcc/gcc-c-runtime
 REQUIRED_PACKAGES += system/library/iconv
 REQUIRED_PACKAGES += system/library/math
 REQUIRED_PACKAGES += system/library/sunperf