xref: /trunk/main/solenv/gbuild/LinkTarget.mk (revision 7a50e16f)
17871dc3eSAndrew Rist#**************************************************************
27871dc3eSAndrew Rist#
37871dc3eSAndrew Rist#  Licensed to the Apache Software Foundation (ASF) under one
47871dc3eSAndrew Rist#  or more contributor license agreements.  See the NOTICE file
57871dc3eSAndrew Rist#  distributed with this work for additional information
67871dc3eSAndrew Rist#  regarding copyright ownership.  The ASF licenses this file
77871dc3eSAndrew Rist#  to you under the Apache License, Version 2.0 (the
87871dc3eSAndrew Rist#  "License"); you may not use this file except in compliance
97871dc3eSAndrew Rist#  with the License.  You may obtain a copy of the License at
107871dc3eSAndrew Rist#
117871dc3eSAndrew Rist#    http://www.apache.org/licenses/LICENSE-2.0
127871dc3eSAndrew Rist#
137871dc3eSAndrew Rist#  Unless required by applicable law or agreed to in writing,
147871dc3eSAndrew Rist#  software distributed under the License is distributed on an
157871dc3eSAndrew Rist#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
167871dc3eSAndrew Rist#  KIND, either express or implied.  See the License for the
177871dc3eSAndrew Rist#  specific language governing permissions and limitations
187871dc3eSAndrew Rist#  under the License.
197871dc3eSAndrew Rist#
207871dc3eSAndrew Rist#**************************************************************
217871dc3eSAndrew Rist
227871dc3eSAndrew Rist
23cdf0e10cSrcweir
24b63233d8Sdamjan#the following user-defined variables are supported:
25b63233d8Sdamjan# CPPFLAGS
26b63233d8Sdamjan# CFLAGS
27b63233d8Sdamjan# CXXFLAGS
283f75c46fSJim Jagielski# OBJCFLAGS
29b63233d8Sdamjan# OBJCXXFLAGS
3069f987b1SDamjan Jovanovic# JAVAFLAGS
31b63233d8Sdamjan# LDFLAGS
32b63233d8Sdamjan
33b63233d8Sdamjan# CFLAGS from environment override debug/optimization flags
349e1b801eSDamjan Jovanovic
359e1b801eSDamjan Jovanovicifeq ($(gb_DEBUGGING),TRUE)
36b63233d8SdamjanCFLAGS ?= $(gb_COMPILEROPTFLAGS) $(gb_DEBUG_CFLAGS)
37b63233d8SdamjanCXXFLAGS ?= $(gb_COMPILEROPTFLAGS) $(gb_DEBUG_CFLAGS)
383f75c46fSJim JagielskiOBJCFLAGS ?= $(gb_COMPILEROPTFLAGS) $(gb_DEBUG_CFLAGS)
39b63233d8SdamjanOBJCXXFLAGS ?= $(gb_COMPILEROPTFLAGS) $(gb_DEBUG_CFLAGS)
4069f987b1SDamjan JovanovicJAVAFLAGS ?= -g
41b63233d8Sdamjanelse
42b63233d8SdamjanCFLAGS ?= $(gb_COMPILEROPTFLAGS)
43b63233d8SdamjanCXXFLAGS ?= $(gb_COMPILEROPTFLAGS)
443f75c46fSJim JagielskiOBJCFLAGS ?= $(gb_COMPILEROPTFLAGS)
45b63233d8SdamjanOBJCXXFLAGS ?= $(gb_COMPILEROPTFLAGS)
46b63233d8Sdamjanendif
47cdf0e10cSrcweir
48cdf0e10cSrcweir
49b63233d8Sdamjan# For every object there is a dep file (if gb_FULLDEPS is active).
50b63233d8Sdamjan# The dep file depends on the object: the Object__command also updates the
51b63233d8Sdamjan# dep file as a side effect.
52b63233d8Sdamjan# In the dep file rule just touch it so it's newer than the object.
53cdf0e10cSrcweir
54b63233d8Sdamjan# The gb_Object__command_dep generates an "always rebuild" dep file;
55b63233d8Sdamjan# It is _only_ used in case the user deletes the object dep file.
56cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
57b63233d8Sdamjandefine gb_Object__command_dep
58cdf0e10cSrcweirmkdir -p $(dir $(1)) && \
59b63233d8Sdamjan	echo '$(2) : $$(gb_Helper_PHONY)' > $(1)
60cdf0e10cSrcweir
61cdf0e10cSrcweirendef
62cdf0e10cSrcweirelse
63b63233d8Sdamjangb_Object__command_dep = \
64b63233d8Sdamjan $(call gb_Output_error,gb_Object__command_dep is only for gb_FULLDEPS)
65cdf0e10cSrcweirendif
66cdf0e10cSrcweir
67b63233d8Sdamjan
681bb309c6SDamjan Jovanovic# AsmObject class
691bb309c6SDamjan Jovanovic
701bb309c6SDamjan Jovanovicgb_AsmObject_REPOS := $(gb_REPOS)
711bb309c6SDamjan Jovanovic
721bb309c6SDamjan Jovanovicgb_AsmObject_get_source = $(1)/$(2)$(gb_AsmObject_EXT)
731bb309c6SDamjan Jovanovic
741bb309c6SDamjan Jovanovicdefine gb_AsmObject__rules
751bb309c6SDamjan Jovanovic$$(call gb_AsmObject_get_target,%) : $$(call gb_AsmObject_get_source,$(1),%)
766bf52fdaSDamjan Jovanovic	$$(call gb_AsmObject__command,$$@,$$*,$$<)
771bb309c6SDamjan Jovanovic
781bb309c6SDamjan Jovanovicendef
791bb309c6SDamjan Jovanovic
801bb309c6SDamjan Jovanovic$(foreach repo,$(gb_AsmObject_REPOS),$(eval $(call gb_AsmObject__rules,$(repo))))
811bb309c6SDamjan Jovanovic
821bb309c6SDamjan Jovanovicgb_AsmObject_AsmObject =
831bb309c6SDamjan Jovanovic
841bb309c6SDamjan Jovanovic
85b63233d8Sdamjan# CObject class
86b63233d8Sdamjan
87b63233d8Sdamjangb_CObject_REPOS := $(gb_REPOS)
88b63233d8Sdamjan
89b63233d8Sdamjangb_CObject_get_source = $(1)/$(2).c
90b63233d8Sdamjan# defined by platform
91b63233d8Sdamjan#  gb_CObject__command
92b63233d8Sdamjan
93cdf0e10cSrcweirdefine gb_CObject__rules
94cdf0e10cSrcweir$$(call gb_CObject_get_target,%) : $$(call gb_CObject_get_source,$(1),%)
95b63233d8Sdamjan	$$(call gb_CObject__command,$$@,$$*,$$<,$$(call gb_CObject_get_dep_target,$$*))
96cdf0e10cSrcweir
97cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
98b63233d8Sdamjan$$(call gb_CObject_get_dep_target,%) : $$(call gb_CObject_get_target,%)
99b63233d8Sdamjan	$$(if $$(wildcard $$@),touch $$@,\
100b63233d8Sdamjan	  $$(call gb_Object__command_dep,$$@,$$(call gb_CObject_get_target,$$*)))
101cdf0e10cSrcweirendif
102cdf0e10cSrcweir
103cdf0e10cSrcweirendef
104cdf0e10cSrcweir
105cdf0e10cSrcweir$(foreach repo,$(gb_CObject_REPOS),$(eval $(call gb_CObject__rules,$(repo))))
106cdf0e10cSrcweir
107cdf0e10cSrcweir$(call gb_CObject_get_dep_target,%) :
108cdf0e10cSrcweir	$(eval $(call gb_Output_error,Unable to find plain C file $(call gb_CObject_get_source,,$*) in the repositories: $(gb_CObject_REPOS)))
109cdf0e10cSrcweir
110cdf0e10cSrcweirgb_CObject_CObject =
111cdf0e10cSrcweir
112cdf0e10cSrcweir
1137f6ffbefSDamjan Jovanovic# GenCObject class
1147f6ffbefSDamjan Jovanovic
1157f6ffbefSDamjan Jovanovicgb_GenCObject_get_source = $(WORKDIR)/$(1).c
1167f6ffbefSDamjan Jovanovic# defined by platform
1177f6ffbefSDamjan Jovanovic#  gb_CObject__command
1187f6ffbefSDamjan Jovanovic
1197f6ffbefSDamjan Jovanovic$(call gb_GenCObject_get_target,%) : $(call gb_GenCObject_get_source,%)
1207f6ffbefSDamjan Jovanovic	$(call gb_CObject__command,$@,$*,$<,$(call gb_GenCObject_get_dep_target,$*))
1217f6ffbefSDamjan Jovanovic
1227f6ffbefSDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
1237f6ffbefSDamjan Jovanovic$(call gb_GenCObject_get_dep_target,%) : $(call gb_GenCObject_get_target,%)
1247f6ffbefSDamjan Jovanovic	$(if $(wildcard $@),touch $@,\
1257f6ffbefSDamjan Jovanovic	  $(call gb_Object__command_dep,$@,$(call gb_GenCObject_get_target,$*)))
1267f6ffbefSDamjan Jovanovicendif
1277f6ffbefSDamjan Jovanovic
1287f6ffbefSDamjan Jovanovicgb_GenCObject_GenCObject =
1297f6ffbefSDamjan Jovanovic
1307f6ffbefSDamjan Jovanovic
1317f6ffbefSDamjan Jovanovic
1327f6ffbefSDamjan Jovanovic
133cdf0e10cSrcweir# CxxObject class
134cdf0e10cSrcweir
135cdf0e10cSrcweirgb_CxxObject_REPOS := $(gb_REPOS)
136cdf0e10cSrcweir
137cdf0e10cSrcweirgb_CxxObject_get_source = $(1)/$(2).cxx
138cdf0e10cSrcweir# defined by platform
139cdf0e10cSrcweir#  gb_CxxObject__command
140cdf0e10cSrcweir
141cdf0e10cSrcweir# Only enable PCH if the PCH_CXXFLAGS and the PCH_DEFS (from the linktarget)
142b63233d8Sdamjan# are the same as the T_CXXFLAGS and DEFS we want to use for this object. This
143b63233d8Sdamjan# should usually be the case.  The DEFS/T_CXXFLAGS would have too be manually
144cdf0e10cSrcweir# overridden for one object file for them to differ.  PCH_CXXFLAGS/PCH_DEFS
145cdf0e10cSrcweir# should never be overridden on an object -- they should be the same as for the
146cdf0e10cSrcweir# whole linktarget. In general it should be cleaner to use a static library
147cdf0e10cSrcweir# compiled with different flags and link that in rather than mixing different
148cdf0e10cSrcweir# flags in one linktarget.
149cdf0e10cSrcweirdefine gb_CxxObject__set_pchflags
150cdf0e10cSrcweirifeq ($(gb_ENABLE_PCH),$(true))
151cdf0e10cSrcweirifneq ($(strip $$(PCH_NAME)),)
1528e6bd3e9SDon Lewisifeq ($$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_EXCEPTIONFLAGS)),$$(sort $$(T_CXXFLAGS) $$(CXXFLAGS) $$(DEFS)))
153cdf0e10cSrcweir$$@ : PCHFLAGS := $$(call gb_PrecompiledHeader_get_enableflags,$$(PCH_NAME))
154cdf0e10cSrcweirelse
1558e6bd3e9SDon Lewisifeq ($$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_NOEXCEPTIONFLAGS)),$$(sort $$(T_CXXFLAGS) $$(CXXFLAGS) $$(DEFS)))
156cdf0e10cSrcweir$$@ : PCHFLAGS := $$(call gb_NoexPrecompiledHeader_get_enableflags,$$(PCH_NAME))
157cdf0e10cSrcweirelse
158cdf0e10cSrcweir$$(info No precompiled header available for $$*.)
159cdf0e10cSrcweir$$(info precompiled header flags (  ex) : $$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_EXCEPTIONFLAGS)))
160cdf0e10cSrcweir$$(info precompiled header flags (noex) : $$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_NOEXCEPTIONFLAGS)))
161b63233d8Sdamjan$$(info .           object flags        : $$(sort $$(T_CXXFLAGS) $$(DEFS)))
162cdf0e10cSrcweir$$@ : PCHFLAGS :=
163cdf0e10cSrcweirendif
164cdf0e10cSrcweirendif
165cdf0e10cSrcweirendif
166cdf0e10cSrcweirendif
167cdf0e10cSrcweirendef
168cdf0e10cSrcweir
169cdf0e10cSrcweirdefine gb_CxxObject__rules
170cdf0e10cSrcweir$$(call gb_CxxObject_get_target,%) : $$(call gb_CxxObject_get_source,$(1),%)
171cdf0e10cSrcweir	$$(eval $$(gb_CxxObject__set_pchflags))
172b63233d8Sdamjan	$$(call gb_CxxObject__command,$$@,$$*,$$<,$$(call gb_CxxObject_get_dep_target,$$*))
173cdf0e10cSrcweir
174cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
175b63233d8Sdamjan$$(call gb_CxxObject_get_dep_target,%) : $$(call gb_CxxObject_get_target,%)
176b63233d8Sdamjan	$$(if $$(wildcard $$@),touch $$@,\
177b63233d8Sdamjan	  $$(eval $$(gb_CxxObject__set_pchflags))\
178b63233d8Sdamjan	  $$(call gb_Object__command_dep,$$@,$$(call gb_CxxObject_get_target,$$*)))
179cdf0e10cSrcweirendif
180cdf0e10cSrcweir
181cdf0e10cSrcweirendef
182cdf0e10cSrcweir
183cdf0e10cSrcweir$(foreach repo,$(gb_CxxObject_REPOS),$(eval $(call gb_CxxObject__rules,$(repo))))
184cdf0e10cSrcweir
185cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
186cdf0e10cSrcweir$(call gb_CxxObject_get_dep_target,%) :
187cdf0e10cSrcweir	$(eval $(call gb_Output_error,Unable to find C++ file $(call gb_CxxObject_get_source,,$*) in repositories: $(gb_CxxObject_REPOS)))
188cdf0e10cSrcweir
189cdf0e10cSrcweirendif
190cdf0e10cSrcweir
191cdf0e10cSrcweirgb_CxxObject_CxxObject =
192cdf0e10cSrcweir
193cdf0e10cSrcweir
194cdf0e10cSrcweir# GenCxxObject class
195cdf0e10cSrcweir
196cdf0e10cSrcweirgb_GenCxxObject_get_source = $(WORKDIR)/$(1).cxx
197cdf0e10cSrcweir# defined by platform
198cdf0e10cSrcweir#  gb_CxxObject__command
199cdf0e10cSrcweir
200cdf0e10cSrcweir$(call gb_GenCxxObject_get_target,%) : $(call gb_GenCxxObject_get_source,%)
201b63233d8Sdamjan	$(call gb_CxxObject__command,$@,$*,$<,$(call gb_GenCxxObject_get_dep_target,$*))
202cdf0e10cSrcweir
203cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
204b63233d8Sdamjan$(call gb_GenCxxObject_get_dep_target,%) : $(call gb_GenCxxObject_get_target,%)
205b63233d8Sdamjan	$(if $(wildcard $@),touch $@,\
206b63233d8Sdamjan	  $(call gb_Object__command_dep,$@,$(call gb_GenCxxObject_get_target,$*)))
207cdf0e10cSrcweirendif
208cdf0e10cSrcweir
209cdf0e10cSrcweirgb_GenCxxObject_GenCxxObject =
210cdf0e10cSrcweir
211cdf0e10cSrcweir
2123f75c46fSJim Jagielski
2133f75c46fSJim Jagielski# ObjCObject class
2143f75c46fSJim Jagielski#
2153f75c46fSJim Jagielskigb_ObjCObject_REPOS := $(gb_REPOS)
2163f75c46fSJim Jagielski
2173f75c46fSJim Jagielskigb_ObjCObject_get_source = $(1)/$(2).m
2183f75c46fSJim Jagielski# defined by platform
2193f75c46fSJim Jagielski#  gb_ObjCObject__command
2203f75c46fSJim Jagielski
2213f75c46fSJim Jagielskidefine gb_ObjCObject__rules
2223f75c46fSJim Jagielski$$(call gb_ObjCObject_get_target,%) : $$(call gb_ObjCObject_get_source,$(1),%)
2233f75c46fSJim Jagielski	$$(call gb_ObjCObject__command,$$@,$$*,$$<,$$(call gb_ObjCObject_get_dep_target,$$*))
2243f75c46fSJim Jagielski
2253f75c46fSJim Jagielskiifeq ($(gb_FULLDEPS),$(true))
2263f75c46fSJim Jagielski$$(call gb_ObjCObject_get_dep_target,%) : $$(call gb_ObjCObject_get_target,%)
2273f75c46fSJim Jagielski	$$(if $$(wildcard $$@),touch $$@,\
2283f75c46fSJim Jagielski	  $$(call gb_Object__command_dep,$$@,$$(call gb_ObjCObject_get_target,$$*)))
2293f75c46fSJim Jagielskiendif
2303f75c46fSJim Jagielski
2313f75c46fSJim Jagielskiendef
2323f75c46fSJim Jagielski
2333f75c46fSJim Jagielski$(foreach repo,$(gb_ObjCObject_REPOS),$(eval $(call gb_ObjCObject__rules,$(repo))))
2343f75c46fSJim Jagielski
2353f75c46fSJim Jagielskiifeq ($(gb_FULLDEPS),$(true))
2363f75c46fSJim Jagielski$(call gb_ObjCObject_get_dep_target,%) :
2373f75c46fSJim Jagielski	$(eval $(call gb_Output_error,Unable to find Objective C file $(call gb_ObjCObject_get_source,,$*) in repositories: $(gb_ObjCObject_REPOS)))
2383f75c46fSJim Jagielskiendif
2393f75c46fSJim Jagielski
2403f75c46fSJim Jagielskigb_ObjCObject_ObjCObject =
2413f75c46fSJim Jagielski
2423f75c46fSJim Jagielski
2433f75c46fSJim Jagielski
244cdf0e10cSrcweir# ObjCxxObject class
245cdf0e10cSrcweir#
246cdf0e10cSrcweirgb_ObjCxxObject_REPOS := $(gb_REPOS)
247cdf0e10cSrcweir
248cdf0e10cSrcweirgb_ObjCxxObject_get_source = $(1)/$(2).mm
249cdf0e10cSrcweir# defined by platform
250cdf0e10cSrcweir#  gb_ObjCxxObject__command
251cdf0e10cSrcweir
252cdf0e10cSrcweirdefine gb_ObjCxxObject__rules
253cdf0e10cSrcweir$$(call gb_ObjCxxObject_get_target,%) : $$(call gb_ObjCxxObject_get_source,$(1),%)
254b63233d8Sdamjan	$$(call gb_ObjCxxObject__command,$$@,$$*,$$<,$$(call gb_ObjCxxObject_get_dep_target,$$*))
255cdf0e10cSrcweir
256cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
257b63233d8Sdamjan$$(call gb_ObjCxxObject_get_dep_target,%) : $$(call gb_ObjCxxObject_get_target,%)
258b63233d8Sdamjan	$$(if $$(wildcard $$@),touch $$@,\
259b63233d8Sdamjan	  $$(call gb_Object__command_dep,$$@,$$(call gb_ObjCxxObject_get_target,$$*)))
260cdf0e10cSrcweirendif
261cdf0e10cSrcweir
262cdf0e10cSrcweirendef
263cdf0e10cSrcweir
264cdf0e10cSrcweir$(foreach repo,$(gb_ObjCxxObject_REPOS),$(eval $(call gb_ObjCxxObject__rules,$(repo))))
265cdf0e10cSrcweir
266cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
267cdf0e10cSrcweir$(call gb_ObjCxxObject_get_dep_target,%) :
268cdf0e10cSrcweir	$(eval $(call gb_Output_error,Unable to find Objective C++ file $(call gb_ObjCxxObject_get_source,,$*) in repositories: $(gb_ObjCxxObject_REPOS)))
269cdf0e10cSrcweirendif
270cdf0e10cSrcweir
271cdf0e10cSrcweirgb_ObjCxxObject_ObjCxxObject =
272cdf0e10cSrcweir
273cdf0e10cSrcweir
274cdf0e10cSrcweir
275cdf0e10cSrcweir# LinkTarget class
276cdf0e10cSrcweir
277cdf0e10cSrcweirgb_LinkTarget_DEFAULTDEFS := $(gb_GLOBALDEFS)
278cdf0e10cSrcweir# defined by platform
279cdf0e10cSrcweir#  gb_LinkTarget_CXXFLAGS
280cdf0e10cSrcweir#  gb_LinkTarget_LDFLAGS
281cdf0e10cSrcweir#  gb_LinkTarget_INCLUDE
282cdf0e10cSrcweir#  gb_LinkTarget_INCLUDE_STL
283cdf0e10cSrcweir
284cdf0e10cSrcweir.PHONY : $(call gb_LinkTarget_get_clean_target,%)
285cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,%) :
286cdf0e10cSrcweir	$(call gb_Output_announce,$*,$(false),LNK,4)
287cdf0e10cSrcweir	RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),200,\
2881bb309c6SDamjan Jovanovic		$(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \
289cdf0e10cSrcweir		$(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
290cdf0e10cSrcweir		$(foreach object,$(COBJECTS),$(call gb_CObject_get_dep_target,$(object))) \
291cdf0e10cSrcweir		$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
292cdf0e10cSrcweir		$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_dep_target,$(object))) \
2933f75c46fSJim Jagielski		$(foreach object,$(OBJCOBJECTS),$(call gb_ObjCObject_get_target,$(object))) \
2943f75c46fSJim Jagielski		$(foreach object,$(OBJCOBJECTS),$(call gb_ObjCObject_get_dep_target,$(object))) \
295cdf0e10cSrcweir		$(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \
296cdf0e10cSrcweir		$(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_dep_target,$(object))) \
2977f6ffbefSDamjan Jovanovic		$(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \
2987f6ffbefSDamjan Jovanovic		$(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_dep_target,$(object))) \
299cdf0e10cSrcweir		$(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \
300cdf0e10cSrcweir		$(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_dep_target,$(object))) \
301cdf0e10cSrcweir		$(call gb_LinkTarget_get_target,$*) \
302cdf0e10cSrcweir		$(call gb_LinkTarget_get_dep_target,$*) \
303cdf0e10cSrcweir		$(call gb_LinkTarget_get_headers_target,$*) \
304cdf0e10cSrcweir		$(call gb_LinkTarget_get_external_headers_target,$*) \
305cdf0e10cSrcweir		$(DLLTARGET) \
306cdf0e10cSrcweir		$(AUXTARGETS)) && \
307cdf0e10cSrcweir	cat $${RESPONSEFILE} /dev/null | xargs -n 200 rm -f && \
308cdf0e10cSrcweir	rm -f $${RESPONSEFILE}
309cdf0e10cSrcweir
310cdf0e10cSrcweir
311cdf0e10cSrcweir# cat the deps of all objects in one file, then we need only open that one file
312cdf0e10cSrcweirdefine gb_LinkTarget__command_dep
313cdf0e10cSrcweir$(call gb_Output_announce,LNK:$(2),$(true),DEP,1)
314cdf0e10cSrcweir$(call gb_Helper_abbreviate_dirs,\
315cdf0e10cSrcweir	mkdir -p $(dir $(1)) && \
316cdf0e10cSrcweir	RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),200,\
317cdf0e10cSrcweir		$(foreach object,$(3),$(call gb_CObject_get_dep_target,$(object))) \
318cdf0e10cSrcweir		$(foreach object,$(4),$(call gb_CxxObject_get_dep_target,$(object))) \
3193f75c46fSJim Jagielski		$(foreach object,$(5),$(call gb_ObjCObject_get_dep_target,$(object)))\
3203f75c46fSJim Jagielski		$(foreach object,$(6),$(call gb_ObjCxxObject_get_dep_target,$(object)))\
3213f75c46fSJim Jagielski		$(foreach object,$(7),$(call gb_GenCObject_get_dep_target,$(object)))\
3223f75c46fSJim Jagielski		$(foreach object,$(8),$(call gb_GenCxxObject_get_dep_target,$(object)))\
323cdf0e10cSrcweir		) && \
324cdf0e10cSrcweir	cat $${RESPONSEFILE} /dev/null | xargs -n 200 cat > $(1)) && \
325cdf0e10cSrcweir	rm -f $${RESPONSEFILE}
326cdf0e10cSrcweir
327cdf0e10cSrcweirendef
328cdf0e10cSrcweir
329cdf0e10cSrcweir$(call gb_LinkTarget_get_target,%) : $(call gb_LinkTarget_get_headers_target,%) $(gb_Helper_MISCDUMMY)
330cdf0e10cSrcweir	$(call gb_LinkTarget__command,$@,$*)
331cdf0e10cSrcweir
332cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
333cdf0e10cSrcweir$(call gb_LinkTarget_get_target,%) : $(call gb_LinkTarget_get_dep_target,%)
334cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,%) : | $(call gb_LinkTarget_get_headers_target,%)
3353f75c46fSJim Jagielski	$(call gb_LinkTarget__command_dep,$@,$*,$(COBJECTS),$(CXXOBJECTS),$(OBJCOBJECTS),$(OBJCXXOBJECTS),$(GENCOBJECTS),$(GENCXXOBJECTS))
336cdf0e10cSrcweirendif
337cdf0e10cSrcweir
338cdf0e10cSrcweir# Ok, this is some dark voodoo: When declaring a linktarget with
339cdf0e10cSrcweir# gb_LinkTarget_LinkTarget we set SELF in the headertarget to name of the
340cdf0e10cSrcweir# target. When the rule for the headertarget is executed and SELF does not
341cdf0e10cSrcweir# match the target name, we are depending on a linktarget that was never
342cdf0e10cSrcweir# declared. In a full build exclusively in gbuild that should never happen.
343cdf0e10cSrcweir# However, partial gbuild build will not know about how to build lower level
344cdf0e10cSrcweir# linktargets, just as gbuild can not know about linktargets generated in the
345cdf0e10cSrcweir# old build.pl/dmake system. Once all is migrated, gbuild should error out
346cdf0e10cSrcweir# when is is told to depend on a linktarget it does not know about and not
347cdf0e10cSrcweir# only warn.
348cdf0e10cSrcweirdefine gb_LinkTarget__get_external_headers_check
349cdf0e10cSrcweirifneq ($$(SELF),$$*)
350cdf0e10cSrcweir$$(eval $$(call gb_Output_info,LinkTarget $$* not defined: Assuming headers to be there!,ALL))
351cdf0e10cSrcweirendif
352*7a50e16fSDon Lewis$$(if $$(findstring /,$$*), , $$(error gb_LinkTarget__get_external_headers_check trying to create $$@ as a plain file))
353cdf0e10cSrcweir$$@ : COMMAND := $$(call gb_Helper_abbreviate_dirs, mkdir -p $$(dir $$@) && touch $$@ && mkdir -p $(call gb_LinkTarget_get_target,)pdb/$$(dir $$*))
354cdf0e10cSrcweir
355cdf0e10cSrcweirendef
356cdf0e10cSrcweir
357cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,%) :
358cdf0e10cSrcweir	$(eval $(gb_LinkTarget__get_external_headers_check))
359cdf0e10cSrcweir	$(COMMAND)
360cdf0e10cSrcweir
361cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,%) : $(call gb_LinkTarget_get_external_headers_target,%)
362cdf0e10cSrcweir	$(call gb_Helper_abbreviate_dirs,\
363cdf0e10cSrcweir		mkdir -p $(dir $@) && touch $@)
364cdf0e10cSrcweir
365cdf0e10cSrcweir# Explanation of some of the targets:
366cdf0e10cSrcweir# - gb_LinkTarget_get_external_headers_target is the targets that guarantees all
367cdf0e10cSrcweir#   headers from linked against libraries are in OUTDIR.
368cdf0e10cSrcweir# - gb_LinkTarget_get_headers_target is the target that guarantees all headers
369cdf0e10cSrcweir#   from the linked against the libraries and the linktargets own headers
370cdf0e10cSrcweir#   (including generated headers) are in the OUTDIR.
371cdf0e10cSrcweir# - gb_LinkTarget_get_target links the objects into a file in WORKDIR.
372cdf0e10cSrcweir# gb_LinkTarget_get_target depends on gb_LinkTarget_get_headers_target which in
373cdf0e10cSrcweir# turn depends gb_LinkTarget_get_external_headers_target.
374cdf0e10cSrcweir# gb_LinkTarget_get_target depends additionally on the objects, which in turn
375cdf0e10cSrcweir# depend build-order only on the gb_LinkTarget_get_headers_target. The build
376cdf0e10cSrcweir# order-only dependency ensures all headers to be there for compiling and
377cdf0e10cSrcweir# dependency generation without causing all objects to be rebuild when one
378cdf0e10cSrcweir# header changes. Only the ones with an explicit dependency in their generated
379cdf0e10cSrcweir# dependency file will be rebuild.
380cdf0e10cSrcweir#
381cdf0e10cSrcweir# gb_LinkTarget_get_target is the target that links the objects into a file in
382cdf0e10cSrcweir# WORKDIR
383cdf0e10cSrcweir# Explanation of some of the variables:
384cdf0e10cSrcweir# - AUXTARGETS are the additionally generated files that need to be cleaned out
385cdf0e10cSrcweir#   on clean.
386cdf0e10cSrcweir# - PCH_CXXFLAGS and PCH_DEFS are the flags that the precompiled headers will
387cdf0e10cSrcweir#   be compiled with.  They should never be overridden in a single object
388cdf0e10cSrcweir#   files.
389cdf0e10cSrcweir# - TARGETTYPE is the type of linktarget as some platforms need very different
390cdf0e10cSrcweir#   command to link different targettypes.
3913b02a9c8SDamjan Jovanovic# - VERSIONMAP is the linker script, usually used to version a dynamic
3923b02a9c8SDamjan Jovanovic#   library's symbols (on *nix/Mac).
393cdf0e10cSrcweir#
394cdf0e10cSrcweir# Since most variables are set on the linktarget and not on the object, the
395cdf0e10cSrcweir# object learns about these setting via GNU makes scoping of target variables.
396cdf0e10cSrcweir# Therefore it is important that objects are only directly depended on by the
397cdf0e10cSrcweir# linktarget. This for example means that you cannot build a single object
398cdf0e10cSrcweir# alone, because then you would directly depend on the object.
399b63233d8Sdamjan#
400b63233d8Sdamjan# A note about flags: because the overriding the global variables with a target
401b63233d8Sdamjan# local variable of the same name is considered obscure, the target local
402b63233d8Sdamjan# variables have a T_ prefix.
403cdf0e10cSrcweirdefine gb_LinkTarget_LinkTarget
404cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : AUXTARGETS :=
405cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,$(1)) : SELF := $(1)
406cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : DLLTARGET :=
407cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \
4081bb309c6SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : ASMOBJECTS :=
4091bb309c6SDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) \
410cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : COBJECTS :=
411cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \
412cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : CXXOBJECTS :=
413cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \
4143f75c46fSJim Jagielski$(call gb_LinkTarget_get_target,$(1)) : OBJCOBJECTS :=
4153f75c46fSJim Jagielski$(call gb_LinkTarget_get_clean_target,$(1)) \
416cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : OBJCXXOBJECTS :=
417cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \
4187f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : GENCOBJECTS :=
4197f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) \
420cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : GENCXXOBJECTS :=
421cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
4228e6bd3e9SDon Lewis$(call gb_LinkTarget_get_target,$(1)) : T_CFLAGS := $$(gb_LinkTarget_CFLAGS)
423cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
424b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS)
425cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
4268e6bd3e9SDon Lewis$(call gb_LinkTarget_get_target,$(1)) : PCH_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) $$(CXXFLAGS)
4273f75c46fSJim Jagielski$(call gb_LinkTarget_get_target,$(1)) : T_OBJCFLAGS := $$(gb_LinkTarget_OBJCFLAGS)
4288e6bd3e9SDon Lewis$(call gb_LinkTarget_get_target,$(1)) : T_OBJCXXFLAGS := $$(gb_LinkTarget_OBJCXXFLAGS)
429cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
430b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : DEFS := $$(gb_LinkTarget_DEFAULTDEFS) $(CPPFLAGS)
431cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
432b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS := $$(gb_LinkTarget_DEFAULTDEFS) $(CPPFLAGS)
433cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
434cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE := $$(gb_LinkTarget_INCLUDE)
435cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
436cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE_STL := $$(gb_LinkTarget_INCLUDE_STL)
437b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_LDFLAGS := $$(gb_LinkTarget_LDFLAGS) $(LDFLAGS)
438cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_LIBS :=
439cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_STATIC_LIBS :=
44044c25570SAndre Fischer$(call gb_LinkTarget_get_target,$(1)) : EXTERNAL_LIBS :=
441b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : LIBS :=
442cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : TARGETTYPE :=
4433b02a9c8SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : VERSIONMAP :=
444cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
445cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_NAME :=
446cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCHOBJS :=
4478e6bd3e9SDon Lewis#$(call gb_LinkTarget_get_headers_target,$(1)) \
4488e6bd3e9SDon Lewis#$(call gb_LinkTarget_get_target,$(1)) : PDBFILE :=
449cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : NATIVERES :=
450cdf0e10cSrcweir
451cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
452b63233d8Sdamjan-include $(call gb_LinkTarget_get_dep_target,$(1))
453cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : COBJECTS :=
454cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : CXXOBJECTS :=
4553f75c46fSJim Jagielski$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCOBJECTS :=
456cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCXXOBJECTS :=
4577f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : GENCOBJECTS :=
458cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : GENCXXOBJECTS :=
4598e6bd3e9SDon Lewis$(call gb_LinkTarget_get_dep_target,$(1)) : T_CFLAGS := $$(gb_LinkTarget_CFLAGS)
460b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS)
4618e6bd3e9SDon Lewis$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) $$(CXXFLAGS)
4623f75c46fSJim Jagielski$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCFLAGS := $$(gb_LinkTarget_OBJCFLAGS)
4638e6bd3e9SDon Lewis$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCXXFLAGS := $$(gb_LinkTarget_OBJCXXFLAGS)
464b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : DEFS := $$(gb_LinkTarget_DEFAULTDEFS) $(CPPFLAGS)
465b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS := $$(gb_LinkTarget_DEFAULTDEFS) $(CPPFLAGS)
466cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE := $$(gb_LinkTarget_INCLUDE)
467cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE_STL := $$(gb_LinkTarget_INCLUDE_STL)
468cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : TARGETTYPE :=
4693b02a9c8SDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : VERSIONMAP :=
470cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_NAME :=
471cdf0e10cSrcweirendif
472cdf0e10cSrcweir
473cdf0e10cSrcweirendef
474cdf0e10cSrcweir
475b63233d8Sdamjandefine gb_LinkTarget_add_defs
476b63233d8Sdamjan$(call gb_LinkTarget_get_headers_target,$(1)) \
477b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : DEFS += $(2)
478b63233d8Sdamjan$(call gb_LinkTarget_get_headers_target,$(1)) \
479b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS += $(2)
480b63233d8Sdamjanifeq ($(gb_FULLDEPS),$(true))
481b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : DEFS += $(2)
482b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS += $(2)
483b63233d8Sdamjanendif
484b63233d8Sdamjanendef
485b63233d8Sdamjan
486cdf0e10cSrcweirdefine gb_LinkTarget_set_defs
487b63233d8Sdamjanifeq (,)
488b63233d8Sdamjan$$(call gb_Output_error,\
489b63233d8Sdamjan gb_LinkTarget_set_defs: use gb_LinkTarget_add_defs instead.)
490b63233d8Sdamjanelse
491cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
492cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : DEFS := $(2)
493cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
494cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS := $(2)
495cdf0e10cSrcweir
496cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
497cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : DEFS := $(2)
498cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS := $(2)
499cdf0e10cSrcweirendif
500b63233d8Sdamjanendif
501b63233d8Sdamjan
502b63233d8Sdamjanendef
503b63233d8Sdamjan
504b63233d8Sdamjandefine gb_LinkTarget_add_cflags
505b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_CFLAGS += $(2)
506b63233d8Sdamjanifeq ($(gb_FULLDEPS),$(true))
507b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_CFLAGS += $(2)
508b63233d8Sdamjanendif
509cdf0e10cSrcweir
510cdf0e10cSrcweirendef
511cdf0e10cSrcweir
512cdf0e10cSrcweirdefine gb_LinkTarget_set_cflags
513b63233d8Sdamjanifeq (,)
514b63233d8Sdamjan$$(call gb_Output_error,\
515b63233d8Sdamjan gb_LinkTarget_set_cflags: use gb_LinkTarget_add_cflags instead.)
516b63233d8Sdamjanelse
517b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_CFLAGS := $(2)
518cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
519b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_CFLAGS := $(2)
520b63233d8Sdamjanendif
521cdf0e10cSrcweirendif
522cdf0e10cSrcweir
523cdf0e10cSrcweirendef
524cdf0e10cSrcweir
525b63233d8Sdamjandefine gb_LinkTarget_add_cxxflags
526b63233d8Sdamjan$(call gb_LinkTarget_get_headers_target,$(1)) \
527b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_CXXFLAGS += $(2)
528b63233d8Sdamjan$(call gb_LinkTarget_get_headers_target,$(1)) \
529b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : PCH_CXXFLAGS += $(2)
530b63233d8Sdamjanifeq ($(gb_FULLDEPS),$(true))
531b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_CXXFLAGS += $(2)
532b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_CXXFLAGS += $(2)
533b63233d8Sdamjanendif
534b63233d8Sdamjanendef
535b63233d8Sdamjan
536cdf0e10cSrcweirdefine gb_LinkTarget_set_cxxflags
537b63233d8Sdamjanifeq (,)
538b63233d8Sdamjan$$(call gb_Output_error,\
539b63233d8Sdamjan gb_LinkTarget_set_cxxflags: use gb_LinkTarget_add_cxxflags instead.)
540b63233d8Sdamjanelse
541cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
542b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_CXXFLAGS := $(2)
543cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
544cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_CXXFLAGS := $(2)
545cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
546b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_CXXFLAGS := $(2)
547cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_CXXFLAGS := $(2)
548cdf0e10cSrcweirendif
549b63233d8Sdamjanendif
550b63233d8Sdamjan
551b63233d8Sdamjanendef
552cdf0e10cSrcweir
5533f75c46fSJim Jagielskidefine gb_LinkTarget_add_objcflags
5543f75c46fSJim Jagielski$(call gb_LinkTarget_get_target,$(1)) : T_OBJCFLAGS += $(2)
5553f75c46fSJim Jagielskiifeq ($(gb_FULLDEPS),$(true))
5563f75c46fSJim Jagielski$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCFLAGS += $(2)
5573f75c46fSJim Jagielskiendif
5583f75c46fSJim Jagielskiendef
5593f75c46fSJim Jagielski
5603f75c46fSJim Jagielskidefine gb_LinkTarget_set_objcflags
5613f75c46fSJim Jagielskiifeq (,)
5623f75c46fSJim Jagielski$$(call gb_Output_error,\
5633f75c46fSJim Jagielski gb_LinkTarget_set_objcflags: use gb_LinkTarget_add_objcflags instead.)
5643f75c46fSJim Jagielskielse
5653f75c46fSJim Jagielski$(call gb_LinkTarget_get_target,$(1)) : T_OBJCFLAGS := $(2)
5663f75c46fSJim Jagielskiifeq ($(gb_FULLDEPS),$(true))
5673f75c46fSJim Jagielski$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCFLAGS := $(2)
5683f75c46fSJim Jagielskiendif
5693f75c46fSJim Jagielskiendif
5703f75c46fSJim Jagielskiendef
5713f75c46fSJim Jagielski
572b63233d8Sdamjandefine gb_LinkTarget_add_objcxxflags
573b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_OBJCXXFLAGS += $(2)
574b63233d8Sdamjanifeq ($(gb_FULLDEPS),$(true))
575b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCXXFLAGS += $(2)
576b63233d8Sdamjanendif
577cdf0e10cSrcweirendef
578cdf0e10cSrcweir
579cdf0e10cSrcweirdefine gb_LinkTarget_set_objcxxflags
580b63233d8Sdamjanifeq (,)
581b63233d8Sdamjan$$(call gb_Output_error,\
582b63233d8Sdamjan gb_LinkTarget_set_objcxxflags: use gb_LinkTarget_add_objcxxflags instead.)
583b63233d8Sdamjanelse
584b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_OBJCXXFLAGS := $(2)
585cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
586b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCXXFLAGS := $(2)
587b63233d8Sdamjanendif
588cdf0e10cSrcweirendif
5898e6bd3e9SDon Lewisendef
5908e6bd3e9SDon Lewis
5918e6bd3e9SDon Lewisdefine gb_LinkTarget_set_c_optimization
592e10cbeddSDon Lewis$(foreach object,$(1),$(eval $(call gb_CObject_get_target,$(object)) : CFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(CFLAGS)) $(2)))
5938e6bd3e9SDon Lewisendef
5948e6bd3e9SDon Lewis
5958e6bd3e9SDon Lewisdefine gb_LinkTarget_set_cxx_optimization
596e10cbeddSDon Lewis$(foreach object,$(1),$(eval $(call gb_CxxObject_get_target,$(object)) : CXXFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(CXXFLAGS)) $(2)))
5978e6bd3e9SDon Lewisendef
5988e6bd3e9SDon Lewis
5997f6ffbefSDamjan Jovanovicdefine gb_LinkTarget_set_genc_optimization
6007f6ffbefSDamjan Jovanovic$(foreach object,$(1),$(eval $(call gb_GenCObject_get_target,$(object)) : CFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(CFLAGS)) $(2)))
6017f6ffbefSDamjan Jovanovicendef
6027f6ffbefSDamjan Jovanovic
6038e6bd3e9SDon Lewisdefine gb_LinkTarget_set_gencxx_optimization
604e10cbeddSDon Lewis$(foreach object,$(1),$(eval $(call gb_GenCxxObject_get_target,$(object)) : CXXFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(CXXFLAGS)) $(2)))
6058e6bd3e9SDon Lewisendef
606cdf0e10cSrcweir
6073f75c46fSJim Jagielskidefine gb_LinkTarget_set_objc_optimization
6083f75c46fSJim Jagielski$(foreach object,$(1),$(eval $(call gb_ObjCObject_get_target,$(object)) : OBJCFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(OBJCFLAGS)) $(2)))
6093f75c46fSJim Jagielskiendef
6103f75c46fSJim Jagielski
6118e6bd3e9SDon Lewisdefine gb_LinkTarget_set_objcxx_optimization
612e10cbeddSDon Lewis$(foreach object,$(1),$(eval $(call gb_ObjCxxObject_get_target,$(object)) : OBJCXXFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(OBJCXXFLAGS)) $(2)))
613cdf0e10cSrcweirendef
614cdf0e10cSrcweir
615cdf0e10cSrcweirdefine gb_LinkTarget_set_include
616cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
617cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE := $(2)
618cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
619cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE := $(2)
620cdf0e10cSrcweirendif
621cdf0e10cSrcweir
622cdf0e10cSrcweirendef
623cdf0e10cSrcweir
624cdf0e10cSrcweirdefine gb_LinkTarget_set_include_stl
625cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
626cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE_STL := $(2)
627cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
628cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE_STL := $(2)
629cdf0e10cSrcweirendif
630cdf0e10cSrcweir
631cdf0e10cSrcweirendef
632cdf0e10cSrcweir
633b63233d8Sdamjandefine gb_LinkTarget_add_ldflags
634b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_LDFLAGS += $(2)
635b63233d8Sdamjanendef
636b63233d8Sdamjan
637b63233d8Sdamjan# real use in RepositoryExternal.mk
638cdf0e10cSrcweirdefine gb_LinkTarget_set_ldflags
639b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_LDFLAGS := $(2)
640b63233d8Sdamjanendef
641b63233d8Sdamjan
642b63233d8Sdamjandefine gb_LinkTarget_add_api
643b63233d8Sdamjan$(call gb_LinkTarget_get_external_headers_target,$(1)) :| \
644b63233d8Sdamjan	$$(foreach api,$(2),$$(call gb_Package_get_target,$$(api)_inc))
645b63233d8Sdamjan$(call gb_LinkTarget_get_headers_target,$(1)) \
646b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : INCLUDE += $$(foreach api,$(2),-I$(OUTDIR)/inc/$$(api))
647b63233d8Sdamjanifeq ($(gb_FULLDEPS),$(true))
648b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE += $$(foreach api,$(2),-I$(OUTDIR)/inc/$$(api))
649b63233d8Sdamjanendif
650b63233d8Sdamjan
651b63233d8Sdamjanendef
652b63233d8Sdamjan
6538f71f2daSDamjan Jovanovicdefine gb_LinkTarget_add_private_api
6548f71f2daSDamjan Jovanovic$(call gb_LinkTarget_get_external_headers_target,$(1)) :| \
6558f71f2daSDamjan Jovanovic	$(call gb_UnoPrivateApiTarget_get_target,$(1)/idl.cppumaker.flag)
6568f71f2daSDamjan Jovanovic$(call gb_LinkTarget_get_headers_target,$(1)) \
6578f71f2daSDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : INCLUDE += -I$(call gb_UnoPrivateApiTarget_get_target,$(1)/inc)
6588f71f2daSDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
6598f71f2daSDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE += -I$(call gb_UnoPrivateApiTarget_get_target,$(1)/inc)
6608f71f2daSDamjan Jovanovicendif
6618f71f2daSDamjan Jovanovic
662390c74e1SDamjan Jovanovic$(call gb_UnoPrivateApiTarget_get_target,$(1)/idl.cppumaker.flag): $(2) $(3)
6638f71f2daSDamjan Jovanovic	$(call gb_Output_announce,$@,$(true),PVTIDL,2)
664ea3120fcSDamjan Jovanovic	-$$(call gb_Helper_abbreviate_dirs_native,\
6658f71f2daSDamjan Jovanovic		mkdir -p $$(call gb_UnoPrivateApiTarget_get_target,$(1)/urd) && \
6668f71f2daSDamjan Jovanovic		mkdir -p $$(call gb_UnoPrivateApiTarget_get_target,$(1)/rdb) && \
6678f71f2daSDamjan Jovanovic		mkdir -p $$(call gb_UnoPrivateApiTarget_get_target,$(1)/inc) && \
6688f71f2daSDamjan Jovanovic		$$(gb_UnoApiTarget_IDLCCOMMAND) -I$$(OUTDIR)/idl -O $$(call gb_UnoPrivateApiTarget_get_target,$(1)/urd) \
669390c74e1SDamjan Jovanovic			-verbose -cid -we $(3) && \
6708f71f2daSDamjan Jovanovic		$$(gb_UnoApiTarget_REGMERGECOMMAND) $$(call gb_UnoPrivateApiTarget_get_target,$(1)/rdb/registry.rdb) /UCR \
671390c74e1SDamjan Jovanovic			$(patsubst %.idl,%.urd,$$(call gb_UnoPrivateApiTarget_get_target,$(1)/urd)/$(notdir $(3))) && \
6728f71f2daSDamjan Jovanovic		$(gb_UnoApiTarget_CPPUMAKERCOMMAND) \
6738f71f2daSDamjan Jovanovic			-O $$(call gb_UnoPrivateApiTarget_get_target,$(1)/inc) \
674390c74e1SDamjan Jovanovic			$(foreach unotype,$(4),-T$(unotype)) \
6758f71f2daSDamjan Jovanovic			-BUCR \
6768f71f2daSDamjan Jovanovic			-C \
6778f71f2daSDamjan Jovanovic			$$(call gb_UnoPrivateApiTarget_get_target,$(1)/rdb/registry.rdb) \
678390c74e1SDamjan Jovanovic			$(2) && \
6798f71f2daSDamjan Jovanovic		touch $(call gb_UnoPrivateApiTarget_get_target,$(1)/idl.cppumaker.flag))
6808f71f2daSDamjan Jovanovic
6818f71f2daSDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) :
6828f71f2daSDamjan Jovanovic	rm -rf $(call gb_UnoPrivateApiTarget_get_target,$(1))
6838f71f2daSDamjan Jovanovic
6848f71f2daSDamjan Jovanovicendef
6858f71f2daSDamjan Jovanovic
6868f71f2daSDamjan Jovanovic# FIXME: multiple??
6878f71f2daSDamjan Jovanovicdefine gb_LinkTarget_set_private_api
688390c74e1SDamjan Jovanovic$(foreach api,$(3),$(call gb_LinkTarget_add_private_api,$(1),$(2),$(api),$(4)))
6898f71f2daSDamjan Jovanovic
6900f0bb070SDamjan Jovanovicendef
6910f0bb070SDamjan Jovanovic
6920f0bb070SDamjan Jovanovicdefine gb_LinkTarget_set_private_extract_of_public_api
6930f0bb070SDamjan Jovanovic$(call gb_LinkTarget_get_external_headers_target,$(1)) :| \
694390c74e1SDamjan Jovanovic	$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/idl.cppumaker.flag)
6950f0bb070SDamjan Jovanovic$(call gb_LinkTarget_get_headers_target,$(1)) \
696390c74e1SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : INCLUDE += -I$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/inc)
6970f0bb070SDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
698390c74e1SDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE += -I$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/inc)
6990f0bb070SDamjan Jovanovicendif
7000f0bb070SDamjan Jovanovic
701390c74e1SDamjan Jovanovic$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/idl.cppumaker.flag): $(2)
7020f0bb070SDamjan Jovanovic	$(call gb_Output_announce,$@,$(true),PVTUNOTYPES,2)
70369307761SDamjan Jovanovic	-$$(call gb_Helper_abbreviate_dirs_native,\
704390c74e1SDamjan Jovanovic		mkdir -p $$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/inc) && \
7050f0bb070SDamjan Jovanovic		$(gb_UnoApiTarget_CPPUMAKERCOMMAND) \
706390c74e1SDamjan Jovanovic			-O $$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/inc) \
7070f0bb070SDamjan Jovanovic			$(foreach unotype,$(3),-T$(unotype)) \
7080f0bb070SDamjan Jovanovic			-BUCR \
7090f0bb070SDamjan Jovanovic			-C \
710390c74e1SDamjan Jovanovic			$(2) && \
711390c74e1SDamjan Jovanovic		touch $(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/idl.cppumaker.flag))
7120f0bb070SDamjan Jovanovic
7130f0bb070SDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) :
714390c74e1SDamjan Jovanovic	rm -rf $(call gb_UnoPrivateApiExtractTarget_get_target,$(1))
7150f0bb070SDamjan Jovanovic
7160f0bb070SDamjan Jovanovic
7177de6b1b1SDamjan Jovanovicendef
7187de6b1b1SDamjan Jovanovic
7197de6b1b1SDamjan Jovanovicgb_BisonTarget_get_source = $(SRCDIR)/$(1).y
7207de6b1b1SDamjan Jovanovic
7217de6b1b1SDamjan Jovanovic# Bison-generated .cxx files are always #include'd into in-module files,
7227de6b1b1SDamjan Jovanovic# and aren't compiled, so they effectively act as generated headers, not generated .cxx.
7237de6b1b1SDamjan Jovanovic
7247de6b1b1SDamjan Jovanovicdefine gb_LinkTarget_add_bison_file
7257de6b1b1SDamjan Jovanovic
7267de6b1b1SDamjan Jovanovic$(call gb_LinkTarget_get_external_headers_target,$(1)) :| \
7277de6b1b1SDamjan Jovanovic	$(call gb_BisonTarget_get_target,$(1),$(2))
7287de6b1b1SDamjan Jovanovic
7297de6b1b1SDamjan Jovanovic$(call gb_LinkTarget_get_headers_target,$(1)) \
7307de6b1b1SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : INCLUDE += -I$(dir $(call gb_BisonTarget_get_target,$(1),$(2)))
7317de6b1b1SDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
7327de6b1b1SDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE += -I$(dir $(call gb_BisonTarget_get_target,$(1),$(2)))
7337de6b1b1SDamjan Jovanovicendif
7347de6b1b1SDamjan Jovanovic
7357de6b1b1SDamjan Jovanovic$(call gb_BisonTarget_get_target,$(1),$(2)) : $(call gb_BisonTarget_get_source,$(2))
7367de6b1b1SDamjan Jovanovic	mkdir -p $(dir $(call gb_BisonTarget_get_target,$(1),$(2))) && \
73748bea759SDamjan Jovanovic	tr -d "\015" < $(call gb_BisonTarget_get_source,$(2)) > $(dir $(call gb_BisonTarget_get_target,$(1),$(2)))/stripped_$(notdir $(call gb_BisonTarget_get_source,$(2))) && \
73848bea759SDamjan Jovanovic	bison -d -o $(call gb_BisonTarget_get_target,$(1),$(2)) $(dir $(call gb_BisonTarget_get_target,$(1),$(2)))/stripped_$(notdir $(call gb_BisonTarget_get_source,$(2)))
7397de6b1b1SDamjan Jovanovic
7407de6b1b1SDamjan Jovanovicendef
7417de6b1b1SDamjan Jovanovic
7427de6b1b1SDamjan Jovanovicdefine gb_LinkTarget_add_bison_files
7437de6b1b1SDamjan Jovanovic$(foreach bisonfile,$(2),$(call gb_LinkTarget_add_bison_file,$(1),$(bisonfile)))
7447de6b1b1SDamjan Jovanovic
7458f71f2daSDamjan Jovanovicendef
7468f71f2daSDamjan Jovanovic
74788fe4d89SDamjan Jovanovic
74888fe4d89SDamjan Jovanovic
74988fe4d89SDamjan Jovanovicgb_FlexTarget_get_source = $(SRCDIR)/$(1).ll
75088fe4d89SDamjan Jovanovic
75188fe4d89SDamjan Jovanovic# Flex-generated .cxx files are always #include'd into in-module files,
75288fe4d89SDamjan Jovanovic# and aren't compiled, so they effectively act as generated headers, not generated .cxx.
75388fe4d89SDamjan Jovanovic
75488fe4d89SDamjan Jovanovicdefine gb_LinkTarget_add_flex_file
75588fe4d89SDamjan Jovanovic
75688fe4d89SDamjan Jovanovic$(call gb_LinkTarget_get_external_headers_target,$(1)) :| \
75788fe4d89SDamjan Jovanovic        $(call gb_FlexTarget_get_target,$(1),$(2))
75888fe4d89SDamjan Jovanovic
75988fe4d89SDamjan Jovanovic$(call gb_LinkTarget_get_headers_target,$(1)) \
76088fe4d89SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : INCLUDE += -I$(dir $(call gb_FlexTarget_get_target,$(1),$(2)))
76188fe4d89SDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
76288fe4d89SDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE += -I$(dir $(call gb_FlexTarget_get_target,$(1),$(2)))
76388fe4d89SDamjan Jovanovicendif
76488fe4d89SDamjan Jovanovic
76588fe4d89SDamjan Jovanovic$(call gb_FlexTarget_get_target,$(1),$(2)) : $(call gb_FlexTarget_get_source,$(2))
76688fe4d89SDamjan Jovanovic	mkdir -p $(dir $(call gb_FlexTarget_get_target,$(1),$(2))) && \
76788fe4d89SDamjan Jovanovic	tr -d "\015" < $(call gb_FlexTarget_get_source,$(2)) > $(dir $(call gb_FlexTarget_get_target,$(1),$(2)))/stripped_$(notdir $(call gb_FlexTarget_get_source,$(2))) && \
76888fe4d89SDamjan Jovanovic	flex -o$(call gb_FlexTarget_get_target,$(1),$(2)) $(dir $(call gb_FlexTarget_get_target,$(1),$(2)))/stripped_$(notdir $(call gb_FlexTarget_get_source,$(2)))
76988fe4d89SDamjan Jovanovic
77088fe4d89SDamjan Jovanovicendef
77188fe4d89SDamjan Jovanovic
77288fe4d89SDamjan Jovanovicdefine gb_LinkTarget_add_flex_files
77388fe4d89SDamjan Jovanovic$(foreach flexfile,$(2),$(call gb_LinkTarget_add_flex_file,$(1),$(flexfile)))
77488fe4d89SDamjan Jovanovic
77588fe4d89SDamjan Jovanovicendef
77688fe4d89SDamjan Jovanovic
77788fe4d89SDamjan Jovanovic
77888fe4d89SDamjan Jovanovic
77988fe4d89SDamjan Jovanovic
780b63233d8Sdamjandefine gb_LinkTarget_add_libs
781b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : LIBS += $(2)
782cdf0e10cSrcweirendef
783cdf0e10cSrcweir
784cdf0e10cSrcweirdefine gb_LinkTarget_add_linked_libs
785cdf0e10cSrcweirifneq (,$$(filter-out $(gb_Library_KNOWNLIBS),$(2)))
786cdf0e10cSrcweir$$(eval $$(call gb_Output_info,currently known libraries are: $(sort $(gb_Library_KNOWNLIBS)),ALL))
787cdf0e10cSrcweir$$(eval $$(call gb_Output_error,Cannot link against library/libraries $$(filter-out $(gb_Library_KNOWNLIBS),$(2)). Libraries must be registered in Repository.mk))
788cdf0e10cSrcweirendif
789cdf0e10cSrcweir
790cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_LIBS += $(2)
791cdf0e10cSrcweir
792cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $$(foreach lib,$(2),$$(call gb_Library_get_target,$$(lib)))
793cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,$(1)) : \
794cdf0e10cSrcweir$$(foreach lib,$(2),$$(call gb_Library_get_headers_target,$$(lib)))
795cdf0e10cSrcweir
796cdf0e10cSrcweirendef
797cdf0e10cSrcweir
798cdf0e10cSrcweirdefine gb_LinkTarget_add_linked_static_libs
799cdf0e10cSrcweirifneq (,$$(filter-out $(gb_StaticLibrary_KNOWNLIBS),$(2)))
800cdf0e10cSrcweir$$(eval $$(call gb_Output_info, currently known static libraries are: $(sort $(gb_StaticLibrary_KNOWNLIBS)),ALL))
801cdf0e10cSrcweir$$(eval $$(call gb_Output_error,Cannot link against static library/libraries $$(filter-out $(gb_StaticLibrary_KNOWNLIBS),$(2)). Static libraries must be registered in Repository.mk))
802cdf0e10cSrcweirendif
803cdf0e10cSrcweir
804cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_STATIC_LIBS += $(2)
805cdf0e10cSrcweir
806cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $$(foreach lib,$(2),$$(call gb_StaticLibrary_get_target,$$(lib)))
807cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,$(1)) : \
808cdf0e10cSrcweir$$(foreach lib,$(2),$$(call gb_StaticLibrary_get_headers_target,$$(lib)))
809cdf0e10cSrcweir
810cdf0e10cSrcweirendef
811cdf0e10cSrcweir
81244c25570SAndre Fischer#
81344c25570SAndre Fischer# Add external libs for linking.  External libaries are not built by any module.
81444c25570SAndre Fischer#
81544c25570SAndre Fischer# The list of libraries is used as is, ie it is not filtered with gb_Library_KNOWNLIBS.
81644c25570SAndre Fischer#
81744c25570SAndre Fischer# An error is signaled, when any of the library names does not look like
818c4c42a0eSDamjan Jovanovic# a base name, ie is prefixed by -l or is folled by .lib or .so.
81944c25570SAndre Fischer#
82044c25570SAndre Fischer# @param target
82144c25570SAndre Fischer# @param libraries
82244c25570SAndre Fischer#     A list of (base names of) libraries that will be added to the target
82344c25570SAndre Fischer#     local EXTERNAL_LIBS variable and eventually linked in when the
82444c25570SAndre Fischer#     target is made.
82544c25570SAndre Fischer#
82644c25570SAndre Fischerdefine gb_LinkTarget_add_external_libs
82744c25570SAndre Fischer
82844c25570SAndre Fischer# Make sure that all libraries are given as base names.
829c4c42a0eSDamjan Jovanovicifneq (,$$(filter -l% %.so %.lib, $(2)))
83086e1cf34SPedro Giffuni$$(eval $$(call gb_Output_announce,ERROR: Please give only library basenames to gb_LinkTarget_add_external_libs))
83144c25570SAndre Fischer$$(eval $$(call gb_Output_announce,ERROR:    (no prefixes -l% or lib%, no suffixes %.so or %.lib)))
83244c25570SAndre Fischer$$(eval $$(call gb_Output_announce,ERROR:    libraries given: $(2)))
83344c25570SAndre Fischer$$(eval $$(call gb_Output_announce,ERROR:    offending: $$(filter -l% lib% %.so %.lib, $(2))))
83444c25570SAndre Fischer$$(eval $$(call gb_Output_error,  ))
83544c25570SAndre Fischerendif
83644c25570SAndre Fischer
83744c25570SAndre Fischer$(call gb_LinkTarget_get_target,$(1)) : EXTERNAL_LIBS += $(2)
83844c25570SAndre Fischer
83944c25570SAndre Fischer$(call gb_LinkTarget_get_target,$(1)) : $$(foreach lib,$(2),$$(call gb_Library_get_target,$$(lib)))
84044c25570SAndre Fischer$(call gb_LinkTarget_get_external_headers_target,$(1)) : \
84144c25570SAndre Fischer$$(foreach lib,$(2),$$(call gb_Library_get_headers_target,$$(lib)))
84244c25570SAndre Fischer
84344c25570SAndre Fischerendef
84444c25570SAndre Fischer
84544c25570SAndre Fischer
8461bb309c6SDamjan Jovanovicdefine gb_LinkTarget_add_asmobject
8471bb309c6SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : ASMOBJECTS += $(2)
8481bb309c6SDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) : ASMOBJECTS += $(2)
8491bb309c6SDamjan Jovanovic
8501bb309c6SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : $(call gb_AsmObject_get_target,$(2))
8511bb309c6SDamjan Jovanovic
8521bb309c6SDamjan Jovanovicendef
8531bb309c6SDamjan Jovanovic
854cdf0e10cSrcweirdefine gb_LinkTarget_add_cobject
855cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : COBJECTS += $(2)
856cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : COBJECTS += $(2)
857cdf0e10cSrcweir
858cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_CObject_get_target,$(2))
859cdf0e10cSrcweir$(call gb_CObject_get_target,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
860b63233d8Sdamjan$(call gb_CObject_get_target,$(2)) : T_CFLAGS += $(3)
861cdf0e10cSrcweir
862cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
863cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : COBJECTS += $(2)
864cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_CObject_get_dep_target,$(2))
865cdf0e10cSrcweirendif
866cdf0e10cSrcweir
867cdf0e10cSrcweirendef
868cdf0e10cSrcweir
869cdf0e10cSrcweirdefine gb_LinkTarget_add_cxxobject
870cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : CXXOBJECTS += $(2)
871cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : CXXOBJECTS += $(2)
872cdf0e10cSrcweir
873cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_CxxObject_get_target,$(2))
874cdf0e10cSrcweir$(call gb_CxxObject_get_target,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
875b63233d8Sdamjan$(call gb_CxxObject_get_target,$(2)) : T_CXXFLAGS += $(3)
876cdf0e10cSrcweir
877cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
878cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : CXXOBJECTS += $(2)
879cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_CxxObject_get_dep_target,$(2))
880cdf0e10cSrcweirendif
881cdf0e10cSrcweir
882cdf0e10cSrcweirendef
883cdf0e10cSrcweir
8843f75c46fSJim Jagielskidefine gb_LinkTarget_add_objcobject
8853f75c46fSJim Jagielski$(call gb_LinkTarget_get_target,$(1)) : OBJCOBJECTS += $(2)
8863f75c46fSJim Jagielski$(call gb_LinkTarget_get_clean_target,$(1)) : OBJCOBJECTS += $(2)
8873f75c46fSJim Jagielski
8883f75c46fSJim Jagielski$(call gb_LinkTarget_get_target,$(1)) : $(call gb_ObjCObject_get_target,$(2))
8893f75c46fSJim Jagielski$(call gb_ObjCObject_get_target,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
8903f75c46fSJim Jagielski$(call gb_ObjCObject_get_target,$(2)) : T_OBJCFLAGS += $(3)
8913f75c46fSJim Jagielski
8923f75c46fSJim Jagielskiifeq ($(gb_FULLDEPS),$(true))
8933f75c46fSJim Jagielski$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCOBJECTS += $(2)
8943f75c46fSJim Jagielski$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_ObjCObject_get_dep_target,$(2))
8953f75c46fSJim Jagielskiendif
8963f75c46fSJim Jagielski
8973f75c46fSJim Jagielskiendef
8983f75c46fSJim Jagielski
899cdf0e10cSrcweirdefine gb_LinkTarget_add_objcxxobject
900cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : OBJCXXOBJECTS += $(2)
901cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : OBJCXXOBJECTS += $(2)
902cdf0e10cSrcweir
903cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_ObjCxxObject_get_target,$(2))
904cdf0e10cSrcweir$(call gb_ObjCxxObject_get_target,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
905b63233d8Sdamjan$(call gb_ObjCxxObject_get_target,$(2)) : T_OBJCXXFLAGS += $(3)
906cdf0e10cSrcweir
907cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
908cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCXXOBJECTS += $(2)
909cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_ObjCxxObject_get_dep_target,$(2))
910cdf0e10cSrcweirendif
911cdf0e10cSrcweir
912cdf0e10cSrcweirendef
913cdf0e10cSrcweir
9147f6ffbefSDamjan Jovanovicdefine gb_LinkTarget_add_generated_cobject
9157f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : GENCOBJECTS += $(2)
9167f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) : GENCOBJECTS += $(2)
9177f6ffbefSDamjan Jovanovic
9187f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : $(call gb_GenCObject_get_target,$(2))
9197f6ffbefSDamjan Jovanovic$(call gb_GenCObject_get_source,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
9207f6ffbefSDamjan Jovanovic$(call gb_GenCObject_get_target,$(2)) : T_CFLAGS += $(3)
9217f6ffbefSDamjan Jovanovic
9227f6ffbefSDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
9237f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : GENCOBJECTS += $(2)
9247f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_GenCObject_get_dep_target,$(2))
9257f6ffbefSDamjan Jovanovicendif
9267f6ffbefSDamjan Jovanovic
9277f6ffbefSDamjan Jovanovicendef
9287f6ffbefSDamjan Jovanovic
929cdf0e10cSrcweirdefine gb_LinkTarget_add_generated_cxx_object
930cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : GENCXXOBJECTS += $(2)
931cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : GENCXXOBJECTS += $(2)
932cdf0e10cSrcweir
933cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_GenCxxObject_get_target,$(2))
934cdf0e10cSrcweir$(call gb_GenCxxObject_get_source,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
9358e6bd3e9SDon Lewis$(call gb_GenCxxObject_get_target,$(2)) : T_CXXFLAGS += $(3)
936cdf0e10cSrcweir
937cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
938cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : GENCXXOBJECTS += $(2)
939cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_GenCxxObject_get_dep_target,$(2))
940cdf0e10cSrcweirendif
941cdf0e10cSrcweir
942cdf0e10cSrcweirendef
943cdf0e10cSrcweir
944cdf0e10cSrcweirdefine gb_LinkTarget_add_noexception_object
9458e6bd3e9SDon Lewis$(call gb_LinkTarget_add_cxxobject,$(1),$(2),$(gb_LinkTarget_NOEXCEPTIONFLAGS))
946cdf0e10cSrcweirendef
947cdf0e10cSrcweir
948cdf0e10cSrcweirdefine gb_LinkTarget_add_exception_object
9498e6bd3e9SDon Lewis$(call gb_LinkTarget_add_cxxobject,$(1),$(2),$(gb_LinkTarget_EXCEPTIONFLAGS))
950cdf0e10cSrcweirendef
951cdf0e10cSrcweir
9527f5180e6SDamjan Jovanovicdefine gb_LinkTarget_add_asmobjects
9531bb309c6SDamjan Jovanovic$(foreach obj,$(2),$(call gb_LinkTarget_add_asmobject,$(1),$(obj),$(3)))
9541bb309c6SDamjan Jovanovicendef
9551bb309c6SDamjan Jovanovic
956cdf0e10cSrcweirdefine gb_LinkTarget_add_cobjects
957cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_cobject,$(1),$(obj),$(3)))
958cdf0e10cSrcweirendef
959cdf0e10cSrcweir
960cdf0e10cSrcweirdefine gb_LinkTarget_add_cxxobjects
961cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_cxxobject,$(1),$(obj),$(3)))
962cdf0e10cSrcweirendef
963cdf0e10cSrcweir
9643f75c46fSJim Jagielskidefine gb_LinkTarget_add_objcobjects
9653f75c46fSJim Jagielski$(foreach obj,$(2),$(call gb_LinkTarget_add_objcobject,$(1),$(obj),$(3)))
9663f75c46fSJim Jagielskiendef
9673f75c46fSJim Jagielski
968cdf0e10cSrcweirdefine gb_LinkTarget_add_objcxxobjects
969cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_objcxxobject,$(1),$(obj),$(3)))
970cdf0e10cSrcweirendef
971cdf0e10cSrcweir
972cdf0e10cSrcweirdefine gb_LinkTarget_add_noexception_objects
973cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_noexception_object,$(1),$(obj)))
974cdf0e10cSrcweirendef
975cdf0e10cSrcweir
976cdf0e10cSrcweirdefine gb_LinkTarget_add_exception_objects
977cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_exception_object,$(1),$(obj)))
978cdf0e10cSrcweirendef
979cdf0e10cSrcweir
9807f6ffbefSDamjan Jovanovicdefine gb_LinkTarget_add_generated_cobjects
9817f6ffbefSDamjan Jovanovic$(foreach obj,$(2),$(call gb_Linktarget_add_generated_cobject,$(1),$(obj),$(3)))
9827f6ffbefSDamjan Jovanovicendef
9837f6ffbefSDamjan Jovanovic
984cdf0e10cSrcweirdefine gb_LinkTarget_add_generated_exception_object
985cdf0e10cSrcweir$(call gb_LinkTarget_add_generated_cxx_object,$(1),$(2),$(gb_LinkTarget_EXCEPTIONFLAGS))
986cdf0e10cSrcweirendef
987cdf0e10cSrcweir
988cdf0e10cSrcweirdefine gb_LinkTarget_add_generated_exception_objects
989cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_generated_exception_object,$(1),$(obj)))
990cdf0e10cSrcweirendef
991cdf0e10cSrcweir
992cdf0e10cSrcweirdefine gb_LinkTarget_set_targettype
993cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) \
994cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : TARGETTYPE := $(2)
995cdf0e10cSrcweirendef
996cdf0e10cSrcweir
9973b02a9c8SDamjan Jovanovicdefine gb_LinkTarget_set_versionmap
9983b02a9c8SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) \
9993b02a9c8SDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : VERSIONMAP := $(2)
10003b02a9c8SDamjan Jovanovicendef
10013b02a9c8SDamjan Jovanovic
1002cdf0e10cSrcweirdefine gb_LinkTarget_set_dlltarget
1003cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \
1004cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : DLLTARGET := $(2)
1005cdf0e10cSrcweirendef
1006cdf0e10cSrcweir
1007cdf0e10cSrcweirdefine gb_LinkTarget_set_auxtargets
1008cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : AUXTARGETS := $(2)
1009cdf0e10cSrcweirendef
1010cdf0e10cSrcweir
1011cdf0e10cSrcweirdefine gb_LinkTarget__add_internal_headers
1012cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) : $(2)
1013*7a50e16fSDon Lewis$(if $(word 2, $(strip $(subst /, $() $(),$(1)))), , $(error gb_LinkTarget__add_internal_headers passing top level directory $(1) to gb_LinkTarget_get_external_headers_target ))
1014cdf0e10cSrcweir$(2) :|	$(call gb_LinkTarget_get_external_headers_target,$(1))
1015cdf0e10cSrcweir
1016cdf0e10cSrcweirendef
1017cdf0e10cSrcweir
1018cdf0e10cSrcweirdefine gb_LinkTarget_add_package_headers
1019cdf0e10cSrcweir$(foreach package,$(2),$(call gb_LinkTarget__add_internal_headers,$(1),$(call gb_Package_get_target,$(package))))
1020cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(foreach package,$(2),$(call gb_Package_get_clean_target,$(package)))
1021cdf0e10cSrcweir
1022cdf0e10cSrcweirendef
1023cdf0e10cSrcweir
1024cdf0e10cSrcweirdefine gb_LinkTarget_add_sdi_headers
1025cdf0e10cSrcweir$(call gb_LinkTarget__add_internal_headers,$(1),$(foreach sdi,$(2),$(call gb_SdiTarget_get_target,$(sdi))))
1026cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(foreach sdi,$(2),$(call gb_SdiTarget_get_clean_target,$(sdi)))
1027cdf0e10cSrcweirendef
1028cdf0e10cSrcweir
1029cdf0e10cSrcweirdefine gb_LinkTarget__add_precompiled_header_impl
1030cdf0e10cSrcweir$(call gb_LinkTarget__add_internal_headers,$(1),$(call gb_PrecompiledHeader_get_target,$(3)))
1031cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(call gb_PrecompiledHeader_get_clean_target,$(3))
1032cdf0e10cSrcweir$(call gb_PrecompiledHeader_get_target,$(3)) : $(2).cxx
1033cdf0e10cSrcweir
1034cdf0e10cSrcweir$(call gb_LinkTarget__add_internal_headers,$(1),$(call gb_NoexPrecompiledHeader_get_target,$(3)))
1035cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(call gb_NoexPrecompiledHeader_get_clean_target,$(3))
1036cdf0e10cSrcweir$(call gb_NoexPrecompiledHeader_get_target,$(3)) : $(2).cxx
1037cdf0e10cSrcweir
1038cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_NAME := $(3)
1039cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCHOBJS = $(call gb_PrecompiledHeader_get_target,$(3)).obj $(call gb_NoexPrecompiledHeader_get_target,$(3)).obj
1040cdf0e10cSrcweir
1041cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
1042cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS = $$(DEFS)
1043cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
1044cdf0e10cSrcweir-include \
1045cdf0e10cSrcweir	$(call gb_PrecompiledHeader_get_dep_target,$(3)) \
1046cdf0e10cSrcweir	$(call gb_NoexPrecompiledHeader_get_dep_target,$(3))
10477517f704Struckman$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_NAME := $(3)
1048cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS = $$(DEFS)
1049cdf0e10cSrcweirendif
1050cdf0e10cSrcweir
1051cdf0e10cSrcweirendef
1052cdf0e10cSrcweir
1053cdf0e10cSrcweirdefine gb_LinkTarget_add_precompiled_header
1054cdf0e10cSrcweirifeq ($(gb_ENABLE_PCH),$(true))
1055cdf0e10cSrcweir$(call gb_LinkTarget__add_precompiled_header_impl,$(1),$(2),$(notdir $(2)))
1056cdf0e10cSrcweirendif
1057cdf0e10cSrcweir
1058cdf0e10cSrcweirendef
1059cdf0e10cSrcweir
1060b63233d8Sdamjan# this forwards to functions that must be defined in RepositoryExternal.mk.
1061b63233d8Sdamjan# $(call gb_LinkTarget_use_external,library,external)
1062b63233d8Sdamjandefine gb_LinkTarget_use_external
1063b63233d8Sdamjan$(eval $(if $(value gb_LinkTarget__use_$(2)),\
1064b63233d8Sdamjan  $(call gb_LinkTarget__use_$(2),$(1)),\
1065b63233d8Sdamjan  $(error gb_LinkTarget_use_external: unknown external: $(2))))
1066b63233d8Sdamjanendef
1067b63233d8Sdamjan
1068b63233d8Sdamjan# $(call gb_LinkTarget_use_externals,library,externals)
1069b63233d8Sdamjangb_LinkTarget_use_externals = \
1070b63233d8Sdamjan $(foreach external,$(2),$(call gb_LinkTarget_use_external,$(1),$(external)))
1071b63233d8Sdamjan
1072b63233d8Sdamjan
1073cdf0e10cSrcweir# vim: set noet sw=4 ts=4:
1074