diff options
author | Jonathan Adams <t12nslookup@gmail.com> | 2012-03-16 21:50:37 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2012-03-16 22:18:43 +0100 |
commit | 3c4cd1deaf71d0d800957b3580d426c721bf7844 (patch) | |
tree | 6cf7053788b386fab78e81de3eaa4ac73fa13043 /solenv | |
parent | 9d79147fc7dd9984873aed92b8a718e64e726ca2 (diff) |
gbuild: switch solaris.mk to GCC
Diffstat (limited to 'solenv')
-rw-r--r-- | solenv/gbuild/platform/solaris.mk | 335 |
1 files changed, 180 insertions, 155 deletions
diff --git a/solenv/gbuild/platform/solaris.mk b/solenv/gbuild/platform/solaris.mk index 13c34357971d..3e10ca79d012 100644 --- a/solenv/gbuild/platform/solaris.mk +++ b/solenv/gbuild/platform/solaris.mk @@ -26,23 +26,17 @@ # #************************************************************************* -# FIXME: this is currently hardcoded to SunStudio. -# We really don't want to support building with that because of all its -# bugs that need painful work-arounds; if somebody revives the Solaris -# port then please make it use GCC instead (there used to be a Solaris/GCC -# port at some point in the past, see solenv/inc/unxsog{i,s}.mk). - GUI := UNX -COM := C52 + +gb_Executable_EXT:= + +include $(GBUILDDIR)/platform/com_GCC_defs.mk gb_MKTEMP := mktemp -t gbuild.XXXXXX -gb_CC := cc -gb_CXX := CC -gb_GCCP := cc -gb_AR := ar -gb_AWK := /usr/xpg4/bin/awk -gb_CLASSPATHSEP := : +ifneq ($(origin AR),default) +gb_AR := $(AR) +endif # use CC/CXX if they are nondefaults ifneq ($(origin CC),default) @@ -53,9 +47,12 @@ ifneq ($(origin CXX),default) gb_CXX := $(CXX) endif +ifeq ($(CPUNAME),SPARC) +gb_CPUDEFS := -D__sparcv8plus +endif + gb_OSDEFS := \ -D$(OS) \ - -D$(GUI) \ -DSYSV \ -DSUN \ -DSUN4 \ @@ -63,142 +60,158 @@ gb_OSDEFS := \ -D_POSIX_PTHREAD_SEMANTICS \ -D_PTHREADS \ -DUNIX \ + -DUNX \ + $(PTHREAD_CFLAGS) \ -gb_COMPILERDEFS := \ - -D$(COM) \ - -DCPPU_ENV=sunpro5 \ - -ifeq ($(CPUNAME),SPARC) -gb_CPUDEFS := -D__sparcv8plus +ifeq ($(GXX_INCLUDE_PATH),) +GXX_INCLUDE_PATH=$(COMPATH)/include/c++/$(shell gcc -dumpversion) endif gb_CFLAGS := \ - -temp=/tmp \ - -KPIC \ - -mt \ - -xldscope=hidden \ - -xCC \ - -xc99=none \ + $(gb_CFLAGS_COMMON) \ + -fPIC \ + -Wdeclaration-after-statement \ + -Wshadow \ gb_CXXFLAGS := \ - -temp=/tmp \ - -KPIC \ - -mt \ - -xldscope=hidden \ - -features=no%altspell \ - -library=no%Cstd \ - +w2 \ - -erroff=doubunder,identexpected,inllargeuse,inllargeint,notemsource,reftotemp,truncwarn,wnoretvalue,anonnotype \ + $(gb_CXXFLAGS_COMMON) \ + -fPIC \ + -Wshadow \ + -Wsign-promo \ + -Woverloaded-virtual \ + -Wno-non-virtual-dtor \ + +ifeq ($(HAVE_GCC_VISIBILITY_FEATURE),TRUE) +gb_COMPILERDEFS += \ + -DHAVE_GCC_VISIBILITY_FEATURE \ + +gb_CFLAGS += \ + -fvisibility=hidden + +gb_CXXFLAGS += \ + -fvisibility=hidden \ + +ifneq ($(HAVE_GCC_VISIBILITY_BROKEN),TRUE) +gb_CXXFLAGS += \ + -fvisibility-inlines-hidden \ -ifeq ($(gb_SYMBOL),$(true)) -gb_CFLAGS += -g -xs -gb_CXXFLAGS += -g0 -xs endif -ifneq ($(EXTERNAL_WARNINGS_NOT_ERRORS),TRUE) -gb_CFLAGS_WERROR := -errwarn=%all -gb_CXXFLAGS_WERROR := -xwe endif -gb_LinkTarget_EXCEPTIONFLAGS := \ - -DEXCEPTIONS_ON \ +# enable debug STL +ifeq ($(gb_PRODUCT),$(false)) +gb_COMPILERDEFS += \ + -D_GLIBCXX_DEBUG \ -gb_LinkTarget_NOEXCEPTIONFLAGS := \ - -DEXCEPTIONS_OFF \ - -noex \ +endif -gb_LinkTarget_LDFLAGS := \ - $(subst -L../lib , ,$(SOLARLIB)) \ - -temp=/tmp \ - -w \ - -mt \ - -Bdirect \ - -z defs \ - -z combreloc \ - -norunpath \ - -PIC \ - -library=no%Cstd \ - - -gb_DEBUG_CFLAGS := -g -ifneq ($(gb_DEBUGLEVEL),0) -gb_COMPILEROPTFLAGS := -else -ifeq ($(CPUNAME),INTEL) -gb_COMPILEROPTFLAGS := -xarch=generic -xO3 -else # ifeq ($(CPUNAME),SPARC) -# -m32 -xarch=sparc restrict target to 32 bit sparc -# -xO3 optimization level 3 -# -xspace don't do optimizations which do increase binary size -# -xprefetch=yes do prefetching (helps on UltraSparc III) -gb_COMPILEROPTFLAGS := -m32 -xarch=sparc -xO3 -xspace -xprefetch=yes +gb_CCVER := $(shell $(gb_CC) -dumpversion | $(gb_AWK) -F. -- '{ print $$1*10000+$$2*100+$$3 }') +gb_GccLess460 := $(shell expr $(gb_CCVER) \< 40600) + +#At least SLED 10.2 gcc 4.3 overly agressively optimizes uno::Sequence into +#junk, so only strict-alias on >= 4.6.0 +gb_StrictAliasingUnsafe := $(gb_GccLess460) + +ifeq ($(gb_StrictAliasingUnsafe),1) +gb_CFLAGS += -fno-strict-aliasing +gb_CXXFLAGS += -fno-strict-aliasing +endif + +ifeq ($(HAVE_CXX0X),TRUE) +#Currently, as well as for its own merits, c++11/c++0x mode allows use to use +#a template for SAL_N_ELEMENTS to detect at compiler time its misuse +gb_CXXFLAGS += -std=c++0x + +#We have so many std::auto_ptr uses that we need to be able to disable +#warnings for those so that -Werror continues to be useful, seeing as moving +#to unique_ptr isn't an option when we must support different compilers + +#When we are using 4.6.0 we can use gcc pragmas to selectively silence auto_ptr +#warnings in isolation, but for <= 4.5.X we need to globally disable +#deprecation +ifeq ($(gb_GccLess460),1) +gb_CXXFLAGS += -Wno-deprecated-declarations endif endif -gb_COMPILERNOOPTFLAGS := +ifeq ($(ENABLE_LTO),TRUE) +gb_LinkTarget_LDFLAGS += -fuse-linker-plugin $(gb_COMPILERDEFAULTOPTFLAGS) +endif -# Helper class +ifneq ($(strip $(SYSBASE)),) +gb_CXXFLAGS += --sysroot=$(SYSBASE) +gb_CFLAGS += --sysroot=$(SYSBASE) +gb_LinkTarget_LDFLAGS += \ + -Wl,--sysroot=$(SYSBASE) +endif -gb_Helper_set_ld_path := LD_LIBRARY_PATH=$(OUTDIR_FOR_BUILD)/lib +#JAD# -Wl,-rpath-link,$(SYSBASE)/lib:$(SYSBASE)/usr/lib \ +gb_LinkTarget_LDFLAGS += \ + -L$(SYSBASE)/lib \ + -L$(SYSBASE)/usr/lib \ + -Wl,-z,combreloc \ + $(subst -L../lib , ,$(SOLARLIB)) \ -# $(1): list of directory pathnames to append at the end of the ld path -define gb_Helper_extend_ld_path -$(gb_Helper_set_ld_path)$(foreach dir,$(1),:$(dir)) -endef +ifeq ($(HAVE_LD_HASH_STYLE),TRUE) +gb_LinkTarget_LDFLAGS += \ + -Wl,--hash-style=$(WITH_LINKER_HASH_STYLE) \ -# convert parameters filesystem root to native notation -# does some real work only on windows, make sure not to -# break the dummy implementations on unx* -define gb_Helper_convert_native -$(1) -endef +endif # Convert path to native notation define gb_Helper_native_path $(1) endef -gb_Helper_OUTDIRLIBDIR := $(OUTDIR)/lib +ifneq ($(HAVE_LD_BSYMBOLIC_FUNCTIONS),) +gb_LinkTarget_LDFLAGS += \ + -Wl,--dynamic-list-cpp-new \ + -Wl,--dynamic-list-cpp-typeinfo \ + -Wl,-Bsymbolic-functions \ -# CObject class +endif -define gb_CObject__command -$(call gb_Output_announce,$(2).c,$(true),C ,3) -$(call gb_Helper_abbreviate_dirs,\ - rm -f $(4) && \ - mkdir -p $(dir $(1)) $(dir $(4)) && \ - $(gb_CC) \ - -c $(3) \ - -o $(1) \ - -xMMD \ - -xMF $(4) \ - $(DEFS) \ - $(T_CFLAGS) \ - $(if $(WARNINGS_NOT_ERRORS),,$(gb_CFLAGS_WERROR)) \ - -I$(dir $(3)) \ - $(INCLUDE)) -endef +ifneq ($(gb_SYMBOL),$(true)) +ifeq ($(gb_STRIP),$(true)) +gb_LinkTarget_LDFLAGS += -Wl,--strip-all +endif +endif + +ifneq ($(gb_DEBUGLEVEL),0) +gb_COMPILEROPTFLAGS := -O0 +gb_LINKEROPTFLAGS := +else +gb_COMPILEROPTFLAGS := $(gb_COMPILERDEFAULTOPTFLAGS) +gb_LINKEROPTFLAGS := -Wl,-O1 +endif +gb_DEBUG_CFLAGS := -ggdb3 -finline-limit=0 -fno-inline -fno-default-inline -# CxxObject class +gb_COMPILERNOOPTFLAGS := -O0 -define gb_CxxObject__command -$(call gb_Output_announce,$(2).cxx,$(true),CXX,3) +# AsmObject class + +gb_AsmObject_get_source = $(1)/$(2).s + +# $(call gb_AsmObject__command,object,relative-source,source,dep-file) +define gb_AsmObject__command +$(call gb_Output_announce,$(2),$(true),ASM,3) $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) $(dir $(4)) && \ - $(gb_CXX) \ + $(gb_CC) \ $(DEFS) \ - $(T_CXXFLAGS) \ - $(if $(WARNINGS_NOT_ERRORS),,$(gb_CXXFLAGS_WERROR)) \ + $(T_CFLAGS) \ + $(if $(WARNINGS_NOT_ERRORS),,$(gb_CFLAGS_WERROR)) \ -c $(3) \ -o $(1) \ - -xMMD \ - -xMF $(4) \ + -MMD -MT $(1) \ + -MP -MF $(4) \ -I$(dir $(3)) \ - $(INCLUDE_STL) $(INCLUDE)) + $(INCLUDE)) && \ + echo "$(1) : $(3)" > $(4) endef - # LinkTarget class define gb_LinkTarget__get_rpath_for_layer @@ -212,31 +225,34 @@ gb_LinkTarget__RPATHS := \ SDKBIN:\dORIGIN/../../ure-link/lib \ NONE:\dORIGIN/../lib:\dORIGIN \ -gb_LinkTarget_CFLAGS := $(gb_CFLAGS) -gb_LinkTarget_CXXFLAGS := $(gb_CXXFLAGS) - +gb_LinkTarget_CFLAGS := $(gb_CFLAGS) $(gb_CFLAGS_WERROR) +gb_LinkTarget_CXXFLAGS := $(gb_CXXFLAGS) $(gb_CXXFLAGS_WERROR) -gb_LinkTarget_INCLUDE := $(filter-out %/stl, $(subst -I. , ,$(SOLARINC))) -gb_LinkTarget_INCLUDE_STL := $(filter %/stl, $(subst -I. , ,$(SOLARINC))) +ifeq ($(gb_SYMBOL),$(true)) +gb_LinkTarget_CXXFLAGS += -ggdb2 +gb_LinkTarget_CFLAGS += -ggdb2 +endif +# note that `cat $(extraobjectlist)` is needed to build with older gcc versions, e.g. 4.1.2 on SLED10 +# we want to use @$(extraobjectlist) in the long run define gb_LinkTarget__command_dynamiclink $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) && \ $(gb_CXX) \ $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \ - $(if $(SOVERSIONSCRIPT),-M $(SOVERSIONSCRIPT)) \ + $(if $(filter Library,$(TARGETTYPE)),$(gb_Library_LTOFLAGS)) \ $(subst \d,$$,$(RPATH)) \ $(T_LDFLAGS) \ - $(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib)))) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + $(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \ $(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \ $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ - $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),@$(extraobjectlist)) \ - $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) \ - $(LIBS) \ - -o $(if $(SOVERSION),$(1).$(SOVERSION),$(1))) - $(if $(SOVERSION),ln -sf $(notdir $(1)).$(SOVERSION) $(1)) + $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),`cat $(extraobjectlist)`) \ + -Wl$(COMMA)--start-group $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) -Wl$(COMMA)--end-group \ + $(LIBS) -lnsl -lsocket \ + $(patsubst lib%.a,-l%,$(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib))))) \ + -o $(1)) endef define gb_LinkTarget__command_staticlink @@ -245,8 +261,10 @@ $(call gb_Helper_abbreviate_dirs,\ $(gb_AR) -rsu $(1) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + $(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \ $(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \ $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ + $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),@$(extraobjectlist)) \ $(if $(findstring s,$(MAKEFLAGS)),2> /dev/null)) endef @@ -256,40 +274,34 @@ $(if $(filter Library CppunitTest Executable,$(TARGETTYPE)),$(call gb_LinkTarget $(if $(filter StaticLibrary,$(TARGETTYPE)),$(call gb_LinkTarget__command_staticlink,$(1))) endef + # Library class gb_Library_DEFS := -gb_Library_TARGETTYPEFLAGS := -Bdynamic -z text -G +gb_Library_TARGETTYPEFLAGS := -shared gb_Library_SYSPRE := lib gb_Library_UNOVERPRE := $(gb_Library_SYSPRE)uno_ gb_Library_PLAINEXT := .so gb_Library_DLLEXT := .so -gb_Library_RTEXT := C52$(gb_Library_PLAINEXT) +gb_Library_RTEXT := gcc3$(gb_Library_PLAINEXT) gb_Library_OOOEXT := $(gb_Library_DLLPOSTFIX)$(gb_Library_PLAINEXT) gb_Library_UNOEXT := .uno$(gb_Library_PLAINEXT) -gb_STDLIBS := \ - Crun \ - m \ - c \ - gb_Library_PLAINLIBS_NONE += \ - $(gb_STDLIBS) \ dl \ fontconfig \ freetype \ GL \ GLU \ - jpeg \ + ICE \ m \ - nsl \ pthread \ - socket \ - X11 \ - Xext \ SM \ ICE \ + X11 \ + Xext \ + Xrender \ gb_Library_FILENAMES := \ $(foreach lib,$(gb_Library_OOOLIBS),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_OOOEXT)) \ @@ -314,7 +326,9 @@ gb_Library_LAYER := \ $(foreach lib,$(gb_Library_UNOVERLIBS),$(lib):URELIB) \ define gb_Library_get_rpath -'-R$(call gb_LinkTarget__get_rpath_for_layer,$(call gb_Library_get_layer,$(1)))' +'-Wl,-rpath,$(call gb_LinkTarget__get_rpath_for_layer,$(call gb_Library_get_layer,$(1)))' \ +'-L$(gb_Library_OUTDIRLOCATION)' +#JAD#'-Wl,-rpath-link,$(gb_Library_OUTDIRLOCATION)' endef define gb_Library_Library_platform @@ -349,7 +363,9 @@ gb_Executable_LAYER := \ define gb_Executable_get_rpath -'-R$(call gb_LinkTarget__get_rpath_for_layer,$(call gb_Executable_get_layer,$(1)))' +'-Wl,-rpath,$(call gb_LinkTarget__get_rpath_for_layer,$(call gb_Executable_get_layer,$(1)))' \ +-L$(gb_Library_OUTDIRLOCATION) +#JAD#-Wl,-rpath-link,$(gb_Library_OUTDIRLOCATION) endef define gb_Executable_Executable_platform @@ -375,33 +391,42 @@ endef # JunitTest class +ifneq ($(OOO_TEST_SOFFICE),) +gb_JunitTest_SOFFICEARG:=$(OOO_TEST_SOFFICE) +else +ifneq ($(gb_JunitTest_DEBUGRUN),) +gb_JunitTest_SOFFICEARG:=connect:pipe,name=$(USER) +else +gb_JunitTest_SOFFICEARG:=path:$(OUTDIR)/installation/opt/program/soffice +endif +endif + define gb_JunitTest_JunitTest_platform $(call gb_JunitTest_get_target,$(1)) : DEFS := \ - -Dorg.openoffice.test.arg.soffice="$$$${OOO_TEST_SOFFICE:-path:$(OUTDIR)/installation/opt/program/soffice}" \ - -Dorg.openoffice.test.arg.env=LD_LIBRARY_PATH \ + -Dorg.openoffice.test.arg.env=$(gb_Helper_LIBRARY_PATH_VAR) \ -Dorg.openoffice.test.arg.user=file://$(call gb_JunitTest_get_userdir,$(1)) \ -Dorg.openoffice.test.arg.workdir=$(call gb_JunitTest_get_userdir,$(1)) \ + -Dorg.openoffice.test.arg.postprocesscommand=$(GBUILDDIR)/platform/unxgcc_gdbforjunit.sh \ + -Dorg.openoffice.test.arg.soffice="$(gb_JunitTest_SOFFICEARG)" \ endef -# Sun cc/CC support -xM1/-xMF flags, but unfortunately refuse input files that -# do not have the right suffix, so use makedepend here... -define gb_SrsPartTarget__command_dep -$(call gb_Helper_abbreviate_dirs,\ - $(OUTDIR)/bin/makedepend$(gb_Executable_EXT) \ - $(INCLUDE) \ - $(DEFS) \ - $(2) \ - -f - \ - | $(gb_AWK) -f $(GBUILDDIR)/processdeps.awk \ - -v OBJECTFILE=$(call gb_SrsPartTarget_get_target,$(1)) \ - -v OUTDIR=$(OUTDIR)/ \ - -v WORKDIR=$(WORKDIR)/ \ - -v SRCDIR=$(SRCDIR)/ \ - > $(call gb_SrsPartTarget_get_dep_target,$(1))) +# Module class + +define gb_Module_DEBUGRUNCOMMAND +OFFICESCRIPT=`mktemp` && \ +printf ". $(OUTDIR)/installation/opt/program/ooenv\\n" > $${OFFICESCRIPT} && \ +printf "gdb --tui $(OUTDIR)/installation/opt/program/soffice.bin" >> $${OFFICESCRIPT} && \ +printf " -ex \"set args --norestore --nologo '--accept=pipe,name=$(USER);urp;' -env:UserInstallation=file://$(OUTDIR)/installation/\"" >> $${OFFICESCRIPT} && \ +printf " -ex \"r\"\\n" >> $${OFFICESCRIPT} && \ +$(SHELL) $${OFFICESCRIPT} && \ +rm $${OFFICESCRIPT} endef + # Python gb_PYTHON_PRECOMMAND := $(gb_Helper_set_ld_path) PYTHONHOME=$(OUTDIR)/lib/python PYTHONPATH=$(OUTDIR)/lib/python:$(OUTDIR)/lib/python/lib-dynload +include $(GBUILDDIR)/platform/com_GCC_class.mk + # vim: set noet sw=4: |