update credits
[LibreOffice.git] / solenv / gbuild / platform / unxgcc.mk
blob4fa4afa673216bbda444b3c3e15e2b1e4b0d58f5
1 # -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
3 # This file is part of the LibreOffice project.
5 # This Source Code Form is subject to the terms of the Mozilla Public
6 # License, v. 2.0. If a copy of the MPL was not distributed with this
7 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 # This file incorporates work covered by the following license notice:
11 # Licensed to the Apache Software Foundation (ASF) under one or more
12 # contributor license agreements. See the NOTICE file distributed
13 # with this work for additional information regarding copyright
14 # ownership. The ASF licenses this file to you under the Apache
15 # License, Version 2.0 (the "License"); you may not use this file
16 # except in compliance with the License. You may obtain a copy of
17 # the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 gb_DEVINSTALLROOT := $(DEVINSTALLDIR)/opt
22 gb_PROGRAMDIRNAME := program
24 include $(GBUILDDIR)/platform/com_GCC_defs.mk
26 gb_CCVER := $(shell $(gb_CC) -dumpversion | $(gb_AWK) -F. -- '{ print $$1*10000+$$2*100+$$3 }')
27 gb_GccLess460 := $(shell expr $(gb_CCVER) \< 40600)
29 gb_MKTEMP := mktemp -t gbuild.XXXXXX
31 ifneq ($(origin AR),default)
32 gb_AR := $(AR)
33 endif
35 gb_OSDEFS := \
36 -D$(OS) \
37 -D_PTHREADS \
38 -DUNIX \
39 -DUNX \
40 $(PTHREAD_CFLAGS) \
42 gb_CFLAGS := \
43 $(gb_CFLAGS_COMMON) \
44 -fPIC \
45 -Wdeclaration-after-statement \
46 -Wshadow \
48 gb_CXXFLAGS := \
49 $(gb_CXXFLAGS_COMMON) \
50 -fPIC \
51 -Wshadow \
52 -Woverloaded-virtual \
54 ifneq ($(COM_GCC_IS_CLANG),TRUE)
55 # Only GCC 4.6 has a fix for <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7302>
56 # "-Wnon-virtual-dtor should't complain of protected dtor" and supports #pragma
57 # GCC diagnostic push/pop required e.g. in cppuhelper/propertysetmixin.hxx to
58 # silence warnings about a protected, non-virtual dtor in a class with virtual
59 # members and friends:
60 ifeq ($(gb_GccLess460),1)
61 gb_CXXFLAGS += -Wno-non-virtual-dtor
62 else
63 gb_CXXFLAGS += -Wnon-virtual-dtor
64 endif
65 else
66 gb_CXXFLAGS += -Wnon-virtual-dtor
67 endif
69 # enable debug STL
70 ifeq ($(gb_ENABLE_DBGUTIL),$(true))
71 gb_COMPILERDEFS += \
72 -D_GLIBCXX_DEBUG \
74 endif
76 #At least SLED 10.2 gcc 4.3 overly agressively optimizes uno::Sequence into
77 #junk, so only strict-alias on >= 4.6.0
78 gb_StrictAliasingUnsafe := $(gb_GccLess460)
80 ifeq ($(gb_StrictAliasingUnsafe),1)
81 gb_CFLAGS += -fno-strict-aliasing
82 gb_CXXFLAGS += -fno-strict-aliasing
83 endif
85 ifeq ($(HAVE_CXX0X),TRUE)
86 #Currently, as well as for its own merits, c++11/c++0x mode allows use to use
87 #a template for SAL_N_ELEMENTS to detect at compiler time its misuse
88 gb_CXXFLAGS += $(CXXFLAGS_CXX11)
90 #We have so many std::auto_ptr uses that we need to be able to disable
91 #warnings for those so that -Werror continues to be useful, seeing as moving
92 #to unique_ptr isn't an option when we must support different compilers
94 #When we are using 4.6.0 we can use gcc pragmas to selectively silence auto_ptr
95 #warnings in isolation, but for <= 4.5.X we need to globally disable
96 #deprecation
97 ifeq ($(gb_GccLess460),1)
98 gb_CXXFLAGS += -Wno-deprecated-declarations
99 endif
100 endif
102 ifeq ($(ENABLE_LTO),TRUE)
103 ifneq ($(COM_GCC_IS_CLANG),TRUE)
104 gb_LTOFLAGS += -fuse-linker-plugin $(gb_COMPILERDEFAULTOPTFLAGS)
105 endif
106 endif
108 ifneq ($(strip $(SYSBASE)),)
109 gb_CXXFLAGS += --sysroot=$(SYSBASE)
110 gb_CFLAGS += --sysroot=$(SYSBASE)
111 gb_LinkTarget_LDFLAGS += \
112 -Wl,--sysroot=$(SYSBASE)
113 endif
115 gb_LinkTarget_LDFLAGS += \
116 -Wl,-rpath-link,$(SYSBASE)/lib:$(SYSBASE)/usr/lib \
117 -Wl,-z,combreloc \
118 $(SOLARLIB) \
120 ifeq ($(HAVE_LD_HASH_STYLE),TRUE)
121 gb_LinkTarget_LDFLAGS += \
122 -Wl,--hash-style=$(WITH_LINKER_HASH_STYLE) \
124 endif
126 ifneq ($(HAVE_LD_BSYMBOLIC_FUNCTIONS),)
127 gb_LinkTarget_LDFLAGS += \
128 -Wl,--dynamic-list-cpp-new \
129 -Wl,--dynamic-list-cpp-typeinfo \
130 -Wl,-Bsymbolic-functions \
132 endif
134 ifneq ($(gb_DEBUGLEVEL),0)
135 gb_LINKEROPTFLAGS :=
136 else
137 gb_LINKEROPTFLAGS := -Wl,-O1
138 endif
140 ifneq ($(gb_DEBUGLEVEL),0)
141 gb_COMPILEROPTFLAGS :=
142 else
143 gb_COMPILEROPTFLAGS := $(gb_COMPILERDEFAULTOPTFLAGS)
144 endif
146 gb_COMPILERNOOPTFLAGS := -O0
148 ifeq ($(gb_SYMBOL),$(true))
149 gb_LINKERSTRIPDEBUGFLAGS :=
150 else
151 gb_LINKERSTRIPDEBUGFLAGS := -Wl,-S
152 endif
154 # LinkTarget class
156 define gb_LinkTarget__get_rpath_for_layer
157 $(patsubst $(1):%,%,$(filter $(1):%,$(gb_LinkTarget__RPATHS)))
158 endef
160 gb_LinkTarget__RPATHS := \
161 URELIB:\dORIGIN \
162 UREBIN:\dORIGIN/../lib:\dORIGIN \
163 OOO:\dORIGIN:\dORIGIN/../ure-link/lib \
164 SDKBIN:\dORIGIN/../../ure-link/lib \
165 OXT: \
166 NONE:\dORIGIN/../lib:\dORIGIN \
168 gb_LinkTarget_CFLAGS := $(gb_CFLAGS)
169 gb_LinkTarget_CXXFLAGS := $(gb_CXXFLAGS)
171 ifeq ($(gb_SYMBOL),$(true))
172 gb_LinkTarget_CXXFLAGS += $(GGDB2)
173 gb_LinkTarget_CFLAGS += $(GGDB2)
174 endif
176 # note that `cat $(extraobjectlist)` is needed to build with older gcc versions, e.g. 4.1.2 on SLED10
177 # we want to use @$(extraobjectlist) in the long run
178 # link with C compiler if there are no C++ files (pyuno_wrapper depends on this)
179 define gb_LinkTarget__command_dynamiclink
180 $(call gb_Helper_abbreviate_dirs,\
181 mkdir -p $(dir $(1)) && \
182 $(if $(CXXOBJECTS)$(GENCXXOBJECTS)$(EXTRAOBJECTLISTS),$(gb_CXX),$(gb_CC)) \
183 $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \
184 $(if $(filter-out $(foreach lib,frm scfilt wpftdraw,$(call gb_Library_get_linktargetname,$(lib))),$*),$(gb_LTOFLAGS)) \
185 $(if $(SOVERSION),-Wl$(COMMA)--soname=$(notdir $(1)).$(SOVERSION)) \
186 $(if $(SOVERSIONSCRIPT),-Wl$(COMMA)--version-script=$(SOVERSIONSCRIPT))\
187 $(subst \d,$$,$(RPATH)) \
188 $(T_LDFLAGS) \
189 $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
190 $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
191 $(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \
192 $(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \
193 $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \
194 $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),`cat $(extraobjectlist)`) \
195 -Wl$(COMMA)--start-group $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) -Wl$(COMMA)--end-group \
196 -Wl$(COMMA)--no-as-needed \
197 $(LIBS) \
198 $(patsubst lib%.a,-l%,$(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib))))) \
199 -o $(if $(SOVERSION),$(1).$(SOVERSION),$(1)))
200 $(if $(SOVERSION),ln -sf $(notdir $(1)).$(SOVERSION) $(1))
201 $(if $(filter Library,$(TARGETTYPE)),\
202 readelf -d $(1) | grep SONAME > $(1).exports.tmp ; \
203 $(NM) --dynamic --extern-only --defined-only --format=posix $(1) \
204 | cut -d' ' -f1-2 \
205 >> $(1).exports.tmp && \
206 if cmp -s $(1).exports.tmp $(1).exports; \
207 then rm $(1).exports.tmp; \
208 else mv $(1).exports.tmp $(1).exports; touch -r $(1) $(1).exports; \
210 endef
212 define gb_LinkTarget__command_staticlink
213 $(call gb_Helper_abbreviate_dirs,\
214 mkdir -p $(dir $(1)) && \
215 rm -f $(1) && \
216 $(gb_AR) -rsu $(1) \
217 $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
218 $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
219 $(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \
220 $(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \
221 $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \
222 $(foreach extraobjectlist,$(EXTRAOBJECTLISTS),@$(extraobjectlist)) \
223 $(if $(findstring s,$(MAKEFLAGS)),2> /dev/null))
224 endef
226 define gb_LinkTarget__command
227 $(call gb_Output_announce,$(2),$(true),LNK,4)
228 $(if $(filter Library CppunitTest Executable,$(TARGETTYPE)),$(call gb_LinkTarget__command_dynamiclink,$(1)))
229 $(if $(filter StaticLibrary,$(TARGETTYPE)),$(call gb_LinkTarget__command_staticlink,$(1)))
230 endef
233 # Library class
235 gb_Library_DEFS :=
236 gb_Library_TARGETTYPEFLAGS := -shared -Wl,-z,noexecstack
237 gb_Library_SYSPRE := lib
238 gb_Library_UNOVERPRE := $(gb_Library_SYSPRE)uno_
239 gb_Library_PLAINEXT := .so
240 gb_Library_DLLEXT := .so
241 gb_Library_RTEXT := gcc3$(gb_Library_PLAINEXT)
243 gb_Library_OOOEXT := $(gb_Library_DLLPOSTFIX)$(gb_Library_PLAINEXT)
244 gb_Library_UNOEXT := .uno$(gb_Library_PLAINEXT)
246 gb_Library_FILENAMES := \
247 $(foreach lib,$(gb_Library_OOOLIBS),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_OOOEXT)) \
248 $(foreach lib,$(gb_Library_PLAINLIBS_NONE),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \
249 $(foreach lib,$(gb_Library_PLAINLIBS_URE),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \
250 $(foreach lib,$(gb_Library_PLAINLIBS_OOO),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_PLAINEXT)) \
251 $(foreach lib,$(gb_Library_PRIVATELIBS_URE),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_OOOEXT)) \
252 $(foreach lib,$(gb_Library_RTVERLIBS),$(lib):$(gb_Library_SYSPRE)$(lib)$(gb_Library_RTEXT)) \
253 $(foreach lib,$(gb_Library_UNOLIBS_URE),$(lib):$(lib)$(gb_Library_UNOEXT)) \
254 $(foreach lib,$(gb_Library_UNOVERLIBS),$(lib):$(gb_Library_UNOVERPRE)$(lib)$(gb_Library_PLAINEXT)) \
255 $(foreach lib,$(gb_Library_EXTENSIONLIBS),$(lib):$(lib)$(gb_Library_UNOEXT)) \
258 gb_Library_LAYER := \
259 $(foreach lib,$(gb_Library_OOOLIBS),$(lib):OOO) \
260 $(foreach lib,$(gb_Library_PLAINLIBS_URE),$(lib):URELIB) \
261 $(foreach lib,$(gb_Library_PLAINLIBS_OOO),$(lib):OOO) \
262 $(foreach lib,$(gb_Library_PRIVATELIBS_URE),$(lib):URELIB) \
263 $(foreach lib,$(gb_Library_RTVERLIBS),$(lib):URELIB) \
264 $(foreach lib,$(gb_Library_UNOLIBS_URE),$(lib):URELIB) \
265 $(foreach lib,$(gb_Library_UNOVERLIBS),$(lib):URELIB) \
266 $(foreach lib,$(gb_Library_EXTENSIONLIBS),$(lib):OXT) \
268 define gb_Library__get_rpath
269 $(if $(1),$(strip -Wl,-z,origin '-Wl,-rpath,$(1)' -Wl,-rpath-link,$(gb_Library_OUTDIRLOCATION)))
270 endef
272 define gb_Library_get_rpath
273 $(call gb_Library__get_rpath,$(call gb_LinkTarget__get_rpath_for_layer,$(call gb_Library_get_layer,$(1))))
274 endef
276 define gb_Library_Library_platform
277 $(call gb_LinkTarget_get_target,$(2)) : RPATH := $(call gb_Library_get_rpath,$(1))
279 endef
281 gb_Library__set_soversion_script_platform = $(gb_Library__set_soversion_script)
284 # StaticLibrary class
286 gb_StaticLibrary_SYSPRE := lib
287 gb_StaticLibrary_PLAINEXT := .a
289 gb_StaticLibrary_FILENAMES := \
290 $(foreach lib,$(gb_StaticLibrary_PLAINLIBS),$(lib):$(gb_StaticLibrary_SYSPRE)$(lib)$(gb_StaticLibrary_PLAINEXT)) \
292 gb_StaticLibrary_StaticLibrary_platform =
295 # Executable class
297 gb_Executable_EXT :=
299 gb_Executable_LAYER := \
300 $(foreach exe,$(gb_Executable_UREBIN),$(exe):UREBIN) \
301 $(foreach exe,$(gb_Executable_SDK),$(exe):SDKBIN) \
302 $(foreach exe,$(gb_Executable_OOO),$(exe):OOO) \
303 $(foreach exe,$(gb_Executable_NONE),$(exe):NONE) \
306 define gb_Executable__get_rpath
307 $(strip -Wl,-z,origin $(if $(1),'-Wl$(COMMA)-rpath$(COMMA)$(1)') -Wl,-rpath-link,$(gb_Library_OUTDIRLOCATION))
308 endef
310 define gb_Executable_get_rpath
311 $(call gb_Executable__get_rpath,$(call gb_LinkTarget__get_rpath_for_layer,$(call gb_Executable_get_layer,$(1))))
312 endef
314 define gb_Executable_Executable_platform
315 $(call gb_LinkTarget_get_target,$(2)) : RPATH := $(call gb_Executable_get_rpath,$(1))
317 endef
320 # CppunitTest class
322 gb_CppunitTest_CPPTESTPRECOMMAND := \
323 $(call gb_Helper_extend_ld_path,$(OUTDIR_FOR_BUILD)/lib/sqlite)
324 gb_CppunitTest_SYSPRE := libtest_
325 gb_CppunitTest_EXT := .so
326 gb_CppunitTest_LIBDIR := $(gb_Helper_OUTDIRLIBDIR)
327 gb_CppunitTest_get_filename = $(gb_CppunitTest_SYSPRE)$(1)$(gb_CppunitTest_EXT)
328 gb_CppunitTest_get_libfilename = $(gb_CppunitTest_get_filename)
330 define gb_CppunitTest_CppunitTest_platform
331 $(call gb_LinkTarget_get_target,$(2)) : RPATH :=
333 endef
335 define gb_CppunitTest_postprocess
336 $(SRCDIR)/solenv/bin/gdb-core-bt.sh $(1) $(2) $(3)
337 endef
339 # JunitTest class
341 ifneq ($(OOO_TEST_SOFFICE),)
342 gb_JunitTest_SOFFICEARG:=$(OOO_TEST_SOFFICE)
343 else
344 ifneq ($(gb_JunitTest_DEBUGRUN),)
345 gb_JunitTest_SOFFICEARG:=connect:pipe,name=$(USER)
346 else
347 gb_JunitTest_SOFFICEARG:=path:$(gb_DEVINSTALLROOT)/program/soffice
348 endif
349 endif
351 define gb_JunitTest_JunitTest_platform
352 $(call gb_JunitTest_get_target,$(1)) : DEFS := \
353 -Dorg.openoffice.test.arg.env=$(gb_Helper_LIBRARY_PATH_VAR)"$$$${$(gb_Helper_LIBRARY_PATH_VAR)+=$$$$$(gb_Helper_LIBRARY_PATH_VAR)}" \
354 -Dorg.openoffice.test.arg.user=$(call gb_Helper_make_url,$(call gb_JunitTest_get_userdir,$(1))) \
355 -Dorg.openoffice.test.arg.workdir=$(call gb_JunitTest_get_userdir,$(1)) \
356 -Dorg.openoffice.test.arg.postprocesscommand=$(SRCDIR)/solenv/bin/gdb-core-bt.sh \
357 -Dorg.openoffice.test.arg.soffice="$(gb_JunitTest_SOFFICEARG)" \
359 endef
361 # PythonTest class
363 gb_PythonTest_PRECOMMAND := $(gb_Helper_LIBRARY_PATH_VAR)=$${$(gb_Helper_LIBRARY_PATH_VAR):+$$$(gb_Helper_LIBRARY_PATH_VAR):}$(gb_DEVINSTALLROOT)/ure-link/lib:$(gb_DEVINSTALLROOT)/program:$(OUTDIR)/lib
365 # Module class
367 define gb_Module_DEBUGRUNCOMMAND
368 OFFICESCRIPT=`mktemp` && \
369 printf 'if [ -e $(gb_DEVINSTALLROOT)/program/ooenv ]; then . $(gb_DEVINSTALLROOT)/program/ooenv; fi\n' > $${OFFICESCRIPT} && \
370 printf "gdb $(gb_DEVINSTALLROOT)/program/soffice.bin" >> $${OFFICESCRIPT} && \
371 printf " -ex \"set args --norestore --nologo '--accept=pipe,name=$(USER);urp;' -env:UserInstallation=$(call gb_Helper_make_url,$(DEVINSTALLDIR)/)\"" >> $${OFFICESCRIPT} && \
372 $(SHELL) $${OFFICESCRIPT} && \
373 rm $${OFFICESCRIPT}
374 endef
376 # InstallModuleTarget class
378 define gb_InstallModuleTarget_InstallModuleTarget_platform
379 $(call gb_InstallModuleTarget_add_defs,$(1),\
380 $(gb_CPUDEFS) \
381 $(gb_OSDEFS) \
382 -DCOMID=gcc3 \
383 -DSHORTSTDC3=$(gb_SHORTSTDC3) \
384 -DSHORTSTDCPP3=$(gb_SHORTSTDCPP3) \
385 -D_gcc3 \
386 $(if $(filter TRUE,$(SOLAR_JAVA)),-DSOLAR_JAVA) \
389 endef
391 # InstallScript class
393 gb_InstallScript_EXT := .ins
395 # CliAssemblyTarget class
397 gb_CliAssemblyTarget_POLICYEXT :=
398 gb_CliAssemblyTarget_get_dll :=
400 # ExtensionTarget class
402 gb_ExtensionTarget_LICENSEFILE_DEFAULT := $(OUTDIR)/bin/osl/LICENSE
404 # UnpackedTarget class
406 gb_UnpackedTarget_TARFILE_LOCATION := $(TARFILE_LOCATION)
408 # UnoApiHeadersTarget class
410 ifeq ($(DISABLE_DYNLOADING),TRUE)
411 gb_UnoApiHeadersTarget_select_variant = $(if $(filter udkapi,$(1)),comprehensive,$(2))
412 else
413 gb_UnoApiHeadersTarget_select_variant = $(2)
414 endif
416 # Package class
417 gb_Package_PROGRAMDIRNAME := program
418 gb_Package_SDKDIRNAME := sdk
420 # UIMenubarTarget class
422 define gb_UIMenubarTarget__command
423 $(call gb_Output_announce,$(2),$(true),UIM,1)
424 cp $(3) $(1)
426 endef
428 gb_UIMenubarTarget_UIMenubarTarget_platform :=
430 # Python
431 gb_Python_PRECOMMAND := $(gb_Helper_set_ld_path) PYTHONHOME="$(INSTDIR)/program/python-core-$(PYTHON_VERSION)" PYTHONPATH="$(INSTDIR)/program/python-core-$(PYTHON_VERSION)/lib:$(INSTDIR)/program/python-core-$(PYTHON_VERSION)/lib/lib-dynload"
432 gb_Python_INSTALLED_EXECUTABLE := /bin/sh $(gb_DEVINSTALLROOT)/program/python
433 # this is passed to gdb as executable when running tests
434 gb_Python_INSTALLED_EXECUTABLE_GDB := $(gb_DEVINSTALLROOT)/program/python.bin
436 include $(GBUILDDIR)/platform/com_GCC_class.mk
438 # vim: set noet sw=4: