xref: /trunk/main/solenv/gbuild/LinkTarget.mk (revision 7f6ffbef)
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
28b63233d8Sdamjan# OBJCXXFLAGS
2969f987b1SDamjan Jovanovic# JAVAFLAGS
30b63233d8Sdamjan# LDFLAGS
31b63233d8Sdamjan
32b63233d8Sdamjan# CFLAGS from environment override debug/optimization flags
339e1b801eSDamjan Jovanovic
349e1b801eSDamjan Jovanovicifeq ($(gb_DEBUGGING),TRUE)
35b63233d8SdamjanCFLAGS ?= $(gb_COMPILEROPTFLAGS) $(gb_DEBUG_CFLAGS)
36b63233d8SdamjanCXXFLAGS ?= $(gb_COMPILEROPTFLAGS) $(gb_DEBUG_CFLAGS)
37b63233d8SdamjanOBJCXXFLAGS ?= $(gb_COMPILEROPTFLAGS) $(gb_DEBUG_CFLAGS)
3869f987b1SDamjan JovanovicJAVAFLAGS ?= -g
39b63233d8Sdamjanelse
40b63233d8SdamjanCFLAGS ?= $(gb_COMPILEROPTFLAGS)
41b63233d8SdamjanCXXFLAGS ?= $(gb_COMPILEROPTFLAGS)
42b63233d8SdamjanOBJCXXFLAGS ?= $(gb_COMPILEROPTFLAGS)
43b63233d8Sdamjanendif
44cdf0e10cSrcweir
45cdf0e10cSrcweir
46b63233d8Sdamjan# For every object there is a dep file (if gb_FULLDEPS is active).
47b63233d8Sdamjan# The dep file depends on the object: the Object__command also updates the
48b63233d8Sdamjan# dep file as a side effect.
49b63233d8Sdamjan# In the dep file rule just touch it so it's newer than the object.
50cdf0e10cSrcweir
51b63233d8Sdamjan# The gb_Object__command_dep generates an "always rebuild" dep file;
52b63233d8Sdamjan# It is _only_ used in case the user deletes the object dep file.
53cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
54b63233d8Sdamjandefine gb_Object__command_dep
55cdf0e10cSrcweirmkdir -p $(dir $(1)) && \
56b63233d8Sdamjan	echo '$(2) : $$(gb_Helper_PHONY)' > $(1)
57cdf0e10cSrcweir
58cdf0e10cSrcweirendef
59cdf0e10cSrcweirelse
60b63233d8Sdamjangb_Object__command_dep = \
61b63233d8Sdamjan $(call gb_Output_error,gb_Object__command_dep is only for gb_FULLDEPS)
62cdf0e10cSrcweirendif
63cdf0e10cSrcweir
64b63233d8Sdamjan
651bb309c6SDamjan Jovanovic# AsmObject class
661bb309c6SDamjan Jovanovic
671bb309c6SDamjan Jovanovicgb_AsmObject_REPOS := $(gb_REPOS)
681bb309c6SDamjan Jovanovic
691bb309c6SDamjan Jovanovicgb_AsmObject_get_source = $(1)/$(2)$(gb_AsmObject_EXT)
701bb309c6SDamjan Jovanovic
711bb309c6SDamjan Jovanovicdefine gb_AsmObject__rules
721bb309c6SDamjan Jovanovic$$(call gb_AsmObject_get_target,%) : $$(call gb_AsmObject_get_source,$(1),%)
736bf52fdaSDamjan Jovanovic	$$(call gb_AsmObject__command,$$@,$$*,$$<)
741bb309c6SDamjan Jovanovic
751bb309c6SDamjan Jovanovicendef
761bb309c6SDamjan Jovanovic
771bb309c6SDamjan Jovanovic$(foreach repo,$(gb_AsmObject_REPOS),$(eval $(call gb_AsmObject__rules,$(repo))))
781bb309c6SDamjan Jovanovic
791bb309c6SDamjan Jovanovicgb_AsmObject_AsmObject =
801bb309c6SDamjan Jovanovic
811bb309c6SDamjan Jovanovic
82b63233d8Sdamjan# CObject class
83b63233d8Sdamjan
84b63233d8Sdamjangb_CObject_REPOS := $(gb_REPOS)
85b63233d8Sdamjan
86b63233d8Sdamjangb_CObject_get_source = $(1)/$(2).c
87b63233d8Sdamjan# defined by platform
88b63233d8Sdamjan#  gb_CObject__command
89b63233d8Sdamjan
90cdf0e10cSrcweirdefine gb_CObject__rules
91cdf0e10cSrcweir$$(call gb_CObject_get_target,%) : $$(call gb_CObject_get_source,$(1),%)
92b63233d8Sdamjan	$$(call gb_CObject__command,$$@,$$*,$$<,$$(call gb_CObject_get_dep_target,$$*))
93cdf0e10cSrcweir
94cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
95b63233d8Sdamjan$$(call gb_CObject_get_dep_target,%) : $$(call gb_CObject_get_target,%)
96b63233d8Sdamjan	$$(if $$(wildcard $$@),touch $$@,\
97b63233d8Sdamjan	  $$(call gb_Object__command_dep,$$@,$$(call gb_CObject_get_target,$$*)))
98cdf0e10cSrcweirendif
99cdf0e10cSrcweir
100cdf0e10cSrcweirendef
101cdf0e10cSrcweir
102cdf0e10cSrcweir$(foreach repo,$(gb_CObject_REPOS),$(eval $(call gb_CObject__rules,$(repo))))
103cdf0e10cSrcweir
104cdf0e10cSrcweir$(call gb_CObject_get_dep_target,%) :
105cdf0e10cSrcweir	$(eval $(call gb_Output_error,Unable to find plain C file $(call gb_CObject_get_source,,$*) in the repositories: $(gb_CObject_REPOS)))
106cdf0e10cSrcweir
107cdf0e10cSrcweirgb_CObject_CObject =
108cdf0e10cSrcweir
109cdf0e10cSrcweir
110*7f6ffbefSDamjan Jovanovic# GenCObject class
111*7f6ffbefSDamjan Jovanovic
112*7f6ffbefSDamjan Jovanovicgb_GenCObject_get_source = $(WORKDIR)/$(1).c
113*7f6ffbefSDamjan Jovanovic# defined by platform
114*7f6ffbefSDamjan Jovanovic#  gb_CObject__command
115*7f6ffbefSDamjan Jovanovic
116*7f6ffbefSDamjan Jovanovic$(call gb_GenCObject_get_target,%) : $(call gb_GenCObject_get_source,%)
117*7f6ffbefSDamjan Jovanovic	$(call gb_CObject__command,$@,$*,$<,$(call gb_GenCObject_get_dep_target,$*))
118*7f6ffbefSDamjan Jovanovic
119*7f6ffbefSDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
120*7f6ffbefSDamjan Jovanovic$(call gb_GenCObject_get_dep_target,%) : $(call gb_GenCObject_get_target,%)
121*7f6ffbefSDamjan Jovanovic	$(if $(wildcard $@),touch $@,\
122*7f6ffbefSDamjan Jovanovic	  $(call gb_Object__command_dep,$@,$(call gb_GenCObject_get_target,$*)))
123*7f6ffbefSDamjan Jovanovicendif
124*7f6ffbefSDamjan Jovanovic
125*7f6ffbefSDamjan Jovanovicgb_GenCObject_GenCObject =
126*7f6ffbefSDamjan Jovanovic
127*7f6ffbefSDamjan Jovanovic
128*7f6ffbefSDamjan Jovanovic
129*7f6ffbefSDamjan Jovanovic
130cdf0e10cSrcweir# CxxObject class
131cdf0e10cSrcweir
132cdf0e10cSrcweirgb_CxxObject_REPOS := $(gb_REPOS)
133cdf0e10cSrcweir
134cdf0e10cSrcweirgb_CxxObject_get_source = $(1)/$(2).cxx
135cdf0e10cSrcweir# defined by platform
136cdf0e10cSrcweir#  gb_CxxObject__command
137cdf0e10cSrcweir
138cdf0e10cSrcweir# Only enable PCH if the PCH_CXXFLAGS and the PCH_DEFS (from the linktarget)
139b63233d8Sdamjan# are the same as the T_CXXFLAGS and DEFS we want to use for this object. This
140b63233d8Sdamjan# should usually be the case.  The DEFS/T_CXXFLAGS would have too be manually
141cdf0e10cSrcweir# overridden for one object file for them to differ.  PCH_CXXFLAGS/PCH_DEFS
142cdf0e10cSrcweir# should never be overridden on an object -- they should be the same as for the
143cdf0e10cSrcweir# whole linktarget. In general it should be cleaner to use a static library
144cdf0e10cSrcweir# compiled with different flags and link that in rather than mixing different
145cdf0e10cSrcweir# flags in one linktarget.
146cdf0e10cSrcweirdefine gb_CxxObject__set_pchflags
147cdf0e10cSrcweirifeq ($(gb_ENABLE_PCH),$(true))
148cdf0e10cSrcweirifneq ($(strip $$(PCH_NAME)),)
1498e6bd3e9SDon Lewisifeq ($$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_EXCEPTIONFLAGS)),$$(sort $$(T_CXXFLAGS) $$(CXXFLAGS) $$(DEFS)))
150cdf0e10cSrcweir$$@ : PCHFLAGS := $$(call gb_PrecompiledHeader_get_enableflags,$$(PCH_NAME))
151cdf0e10cSrcweirelse
1528e6bd3e9SDon Lewisifeq ($$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_NOEXCEPTIONFLAGS)),$$(sort $$(T_CXXFLAGS) $$(CXXFLAGS) $$(DEFS)))
153cdf0e10cSrcweir$$@ : PCHFLAGS := $$(call gb_NoexPrecompiledHeader_get_enableflags,$$(PCH_NAME))
154cdf0e10cSrcweirelse
155cdf0e10cSrcweir$$(info No precompiled header available for $$*.)
156cdf0e10cSrcweir$$(info precompiled header flags (  ex) : $$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_EXCEPTIONFLAGS)))
157cdf0e10cSrcweir$$(info precompiled header flags (noex) : $$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_NOEXCEPTIONFLAGS)))
158b63233d8Sdamjan$$(info .           object flags        : $$(sort $$(T_CXXFLAGS) $$(DEFS)))
159cdf0e10cSrcweir$$@ : PCHFLAGS :=
160cdf0e10cSrcweirendif
161cdf0e10cSrcweirendif
162cdf0e10cSrcweirendif
163cdf0e10cSrcweirendif
164cdf0e10cSrcweirendef
165cdf0e10cSrcweir
166cdf0e10cSrcweirdefine gb_CxxObject__rules
167cdf0e10cSrcweir$$(call gb_CxxObject_get_target,%) : $$(call gb_CxxObject_get_source,$(1),%)
168cdf0e10cSrcweir	$$(eval $$(gb_CxxObject__set_pchflags))
169b63233d8Sdamjan	$$(call gb_CxxObject__command,$$@,$$*,$$<,$$(call gb_CxxObject_get_dep_target,$$*))
170cdf0e10cSrcweir
171cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
172b63233d8Sdamjan$$(call gb_CxxObject_get_dep_target,%) : $$(call gb_CxxObject_get_target,%)
173b63233d8Sdamjan	$$(if $$(wildcard $$@),touch $$@,\
174b63233d8Sdamjan	  $$(eval $$(gb_CxxObject__set_pchflags))\
175b63233d8Sdamjan	  $$(call gb_Object__command_dep,$$@,$$(call gb_CxxObject_get_target,$$*)))
176cdf0e10cSrcweirendif
177cdf0e10cSrcweir
178cdf0e10cSrcweirendef
179cdf0e10cSrcweir
180cdf0e10cSrcweir$(foreach repo,$(gb_CxxObject_REPOS),$(eval $(call gb_CxxObject__rules,$(repo))))
181cdf0e10cSrcweir
182cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
183cdf0e10cSrcweir$(call gb_CxxObject_get_dep_target,%) :
184cdf0e10cSrcweir	$(eval $(call gb_Output_error,Unable to find C++ file $(call gb_CxxObject_get_source,,$*) in repositories: $(gb_CxxObject_REPOS)))
185cdf0e10cSrcweir
186cdf0e10cSrcweirendif
187cdf0e10cSrcweir
188cdf0e10cSrcweirgb_CxxObject_CxxObject =
189cdf0e10cSrcweir
190cdf0e10cSrcweir
191cdf0e10cSrcweir# GenCxxObject class
192cdf0e10cSrcweir
193cdf0e10cSrcweirgb_GenCxxObject_get_source = $(WORKDIR)/$(1).cxx
194cdf0e10cSrcweir# defined by platform
195cdf0e10cSrcweir#  gb_CxxObject__command
196cdf0e10cSrcweir
197cdf0e10cSrcweir$(call gb_GenCxxObject_get_target,%) : $(call gb_GenCxxObject_get_source,%)
198b63233d8Sdamjan	$(call gb_CxxObject__command,$@,$*,$<,$(call gb_GenCxxObject_get_dep_target,$*))
199cdf0e10cSrcweir
200cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
201b63233d8Sdamjan$(call gb_GenCxxObject_get_dep_target,%) : $(call gb_GenCxxObject_get_target,%)
202b63233d8Sdamjan	$(if $(wildcard $@),touch $@,\
203b63233d8Sdamjan	  $(call gb_Object__command_dep,$@,$(call gb_GenCxxObject_get_target,$*)))
204cdf0e10cSrcweirendif
205cdf0e10cSrcweir
206cdf0e10cSrcweirgb_GenCxxObject_GenCxxObject =
207cdf0e10cSrcweir
208cdf0e10cSrcweir
209cdf0e10cSrcweir# ObjCxxObject class
210cdf0e10cSrcweir#
211cdf0e10cSrcweirgb_ObjCxxObject_REPOS := $(gb_REPOS)
212cdf0e10cSrcweir
213cdf0e10cSrcweirgb_ObjCxxObject_get_source = $(1)/$(2).mm
214cdf0e10cSrcweir# defined by platform
215cdf0e10cSrcweir#  gb_ObjCxxObject__command
216cdf0e10cSrcweir
217cdf0e10cSrcweirdefine gb_ObjCxxObject__rules
218cdf0e10cSrcweir$$(call gb_ObjCxxObject_get_target,%) : $$(call gb_ObjCxxObject_get_source,$(1),%)
219b63233d8Sdamjan	$$(call gb_ObjCxxObject__command,$$@,$$*,$$<,$$(call gb_ObjCxxObject_get_dep_target,$$*))
220cdf0e10cSrcweir
221cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
222b63233d8Sdamjan$$(call gb_ObjCxxObject_get_dep_target,%) : $$(call gb_ObjCxxObject_get_target,%)
223b63233d8Sdamjan	$$(if $$(wildcard $$@),touch $$@,\
224b63233d8Sdamjan	  $$(call gb_Object__command_dep,$$@,$$(call gb_ObjCxxObject_get_target,$$*)))
225cdf0e10cSrcweirendif
226cdf0e10cSrcweir
227cdf0e10cSrcweirendef
228cdf0e10cSrcweir
229cdf0e10cSrcweir$(foreach repo,$(gb_ObjCxxObject_REPOS),$(eval $(call gb_ObjCxxObject__rules,$(repo))))
230cdf0e10cSrcweir
231cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
232cdf0e10cSrcweir$(call gb_ObjCxxObject_get_dep_target,%) :
233cdf0e10cSrcweir	$(eval $(call gb_Output_error,Unable to find Objective C++ file $(call gb_ObjCxxObject_get_source,,$*) in repositories: $(gb_ObjCxxObject_REPOS)))
234cdf0e10cSrcweirendif
235cdf0e10cSrcweir
236cdf0e10cSrcweirgb_ObjCxxObject_ObjCxxObject =
237cdf0e10cSrcweir
238cdf0e10cSrcweir
239cdf0e10cSrcweir
240cdf0e10cSrcweir# LinkTarget class
241cdf0e10cSrcweir
242cdf0e10cSrcweirgb_LinkTarget_DEFAULTDEFS := $(gb_GLOBALDEFS)
243cdf0e10cSrcweir# defined by platform
244cdf0e10cSrcweir#  gb_LinkTarget_CXXFLAGS
245cdf0e10cSrcweir#  gb_LinkTarget_LDFLAGS
246cdf0e10cSrcweir#  gb_LinkTarget_INCLUDE
247cdf0e10cSrcweir#  gb_LinkTarget_INCLUDE_STL
248cdf0e10cSrcweir
249cdf0e10cSrcweir.PHONY : $(call gb_LinkTarget_get_clean_target,%)
250cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,%) :
251cdf0e10cSrcweir	$(call gb_Output_announce,$*,$(false),LNK,4)
252cdf0e10cSrcweir	RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),200,\
2531bb309c6SDamjan Jovanovic		$(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \
254cdf0e10cSrcweir		$(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
255cdf0e10cSrcweir		$(foreach object,$(COBJECTS),$(call gb_CObject_get_dep_target,$(object))) \
256cdf0e10cSrcweir		$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
257cdf0e10cSrcweir		$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_dep_target,$(object))) \
258cdf0e10cSrcweir		$(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \
259cdf0e10cSrcweir		$(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_dep_target,$(object))) \
260*7f6ffbefSDamjan Jovanovic		$(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \
261*7f6ffbefSDamjan Jovanovic		$(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_dep_target,$(object))) \
262cdf0e10cSrcweir		$(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \
263cdf0e10cSrcweir		$(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_dep_target,$(object))) \
264cdf0e10cSrcweir		$(call gb_LinkTarget_get_target,$*) \
265cdf0e10cSrcweir		$(call gb_LinkTarget_get_dep_target,$*) \
266cdf0e10cSrcweir		$(call gb_LinkTarget_get_headers_target,$*) \
267cdf0e10cSrcweir		$(call gb_LinkTarget_get_external_headers_target,$*) \
268cdf0e10cSrcweir		$(DLLTARGET) \
269cdf0e10cSrcweir		$(AUXTARGETS)) && \
270cdf0e10cSrcweir	cat $${RESPONSEFILE} /dev/null | xargs -n 200 rm -f && \
271cdf0e10cSrcweir	rm -f $${RESPONSEFILE}
272cdf0e10cSrcweir
273cdf0e10cSrcweir
274cdf0e10cSrcweir# cat the deps of all objects in one file, then we need only open that one file
275cdf0e10cSrcweirdefine gb_LinkTarget__command_dep
276cdf0e10cSrcweir$(call gb_Output_announce,LNK:$(2),$(true),DEP,1)
277cdf0e10cSrcweir$(call gb_Helper_abbreviate_dirs,\
278cdf0e10cSrcweir	mkdir -p $(dir $(1)) && \
279cdf0e10cSrcweir	RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),200,\
280cdf0e10cSrcweir		$(foreach object,$(3),$(call gb_CObject_get_dep_target,$(object))) \
281cdf0e10cSrcweir		$(foreach object,$(4),$(call gb_CxxObject_get_dep_target,$(object))) \
282cdf0e10cSrcweir		$(foreach object,$(5),$(call gb_ObjCxxObject_get_dep_target,$(object)))\
283*7f6ffbefSDamjan Jovanovic		$(foreach object,$(6),$(call gb_GenCObject_get_dep_target,$(object)))\
284*7f6ffbefSDamjan Jovanovic		$(foreach object,$(7),$(call gb_GenCxxObject_get_dep_target,$(object)))\
285cdf0e10cSrcweir		) && \
286cdf0e10cSrcweir	cat $${RESPONSEFILE} /dev/null | xargs -n 200 cat > $(1)) && \
287cdf0e10cSrcweir	rm -f $${RESPONSEFILE}
288cdf0e10cSrcweir
289cdf0e10cSrcweirendef
290cdf0e10cSrcweir
291cdf0e10cSrcweir$(call gb_LinkTarget_get_target,%) : $(call gb_LinkTarget_get_headers_target,%) $(gb_Helper_MISCDUMMY)
292cdf0e10cSrcweir	$(call gb_LinkTarget__command,$@,$*)
293cdf0e10cSrcweir
294cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
295cdf0e10cSrcweir$(call gb_LinkTarget_get_target,%) : $(call gb_LinkTarget_get_dep_target,%)
296cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,%) : | $(call gb_LinkTarget_get_headers_target,%)
297*7f6ffbefSDamjan Jovanovic	$(call gb_LinkTarget__command_dep,$@,$*,$(COBJECTS),$(CXXOBJECTS),$(OBJCXXOBJECTS),$(GENCOBJECTS),$(GENCXXOBJECTS))
298cdf0e10cSrcweirendif
299cdf0e10cSrcweir
300cdf0e10cSrcweir# Ok, this is some dark voodoo: When declaring a linktarget with
301cdf0e10cSrcweir# gb_LinkTarget_LinkTarget we set SELF in the headertarget to name of the
302cdf0e10cSrcweir# target. When the rule for the headertarget is executed and SELF does not
303cdf0e10cSrcweir# match the target name, we are depending on a linktarget that was never
304cdf0e10cSrcweir# declared. In a full build exclusively in gbuild that should never happen.
305cdf0e10cSrcweir# However, partial gbuild build will not know about how to build lower level
306cdf0e10cSrcweir# linktargets, just as gbuild can not know about linktargets generated in the
307cdf0e10cSrcweir# old build.pl/dmake system. Once all is migrated, gbuild should error out
308cdf0e10cSrcweir# when is is told to depend on a linktarget it does not know about and not
309cdf0e10cSrcweir# only warn.
310cdf0e10cSrcweirdefine gb_LinkTarget__get_external_headers_check
311cdf0e10cSrcweirifneq ($$(SELF),$$*)
312cdf0e10cSrcweir$$(eval $$(call gb_Output_info,LinkTarget $$* not defined: Assuming headers to be there!,ALL))
313cdf0e10cSrcweirendif
314cdf0e10cSrcweir$$@ : COMMAND := $$(call gb_Helper_abbreviate_dirs, mkdir -p $$(dir $$@) && touch $$@ && mkdir -p $(call gb_LinkTarget_get_target,)pdb/$$(dir $$*))
315cdf0e10cSrcweir
316cdf0e10cSrcweirendef
317cdf0e10cSrcweir
318cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,%) :
319cdf0e10cSrcweir	$(eval $(gb_LinkTarget__get_external_headers_check))
320cdf0e10cSrcweir	$(COMMAND)
321cdf0e10cSrcweir
322cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,%) : $(call gb_LinkTarget_get_external_headers_target,%)
323cdf0e10cSrcweir	$(call gb_Helper_abbreviate_dirs,\
324cdf0e10cSrcweir		mkdir -p $(dir $@) && touch $@)
325cdf0e10cSrcweir
326cdf0e10cSrcweir# Explanation of some of the targets:
327cdf0e10cSrcweir# - gb_LinkTarget_get_external_headers_target is the targets that guarantees all
328cdf0e10cSrcweir#   headers from linked against libraries are in OUTDIR.
329cdf0e10cSrcweir# - gb_LinkTarget_get_headers_target is the target that guarantees all headers
330cdf0e10cSrcweir#   from the linked against the libraries and the linktargets own headers
331cdf0e10cSrcweir#   (including generated headers) are in the OUTDIR.
332cdf0e10cSrcweir# - gb_LinkTarget_get_target links the objects into a file in WORKDIR.
333cdf0e10cSrcweir# gb_LinkTarget_get_target depends on gb_LinkTarget_get_headers_target which in
334cdf0e10cSrcweir# turn depends gb_LinkTarget_get_external_headers_target.
335cdf0e10cSrcweir# gb_LinkTarget_get_target depends additionally on the objects, which in turn
336cdf0e10cSrcweir# depend build-order only on the gb_LinkTarget_get_headers_target. The build
337cdf0e10cSrcweir# order-only dependency ensures all headers to be there for compiling and
338cdf0e10cSrcweir# dependency generation without causing all objects to be rebuild when one
339cdf0e10cSrcweir# header changes. Only the ones with an explicit dependency in their generated
340cdf0e10cSrcweir# dependency file will be rebuild.
341cdf0e10cSrcweir#
342cdf0e10cSrcweir# gb_LinkTarget_get_target is the target that links the objects into a file in
343cdf0e10cSrcweir# WORKDIR
344cdf0e10cSrcweir# Explanation of some of the variables:
345cdf0e10cSrcweir# - AUXTARGETS are the additionally generated files that need to be cleaned out
346cdf0e10cSrcweir#   on clean.
347cdf0e10cSrcweir# - PCH_CXXFLAGS and PCH_DEFS are the flags that the precompiled headers will
348cdf0e10cSrcweir#   be compiled with.  They should never be overridden in a single object
349cdf0e10cSrcweir#   files.
350cdf0e10cSrcweir# - TARGETTYPE is the type of linktarget as some platforms need very different
351cdf0e10cSrcweir#   command to link different targettypes.
3523b02a9c8SDamjan Jovanovic# - VERSIONMAP is the linker script, usually used to version a dynamic
3533b02a9c8SDamjan Jovanovic#   library's symbols (on *nix/Mac).
354cdf0e10cSrcweir#
355cdf0e10cSrcweir# Since most variables are set on the linktarget and not on the object, the
356cdf0e10cSrcweir# object learns about these setting via GNU makes scoping of target variables.
357cdf0e10cSrcweir# Therefore it is important that objects are only directly depended on by the
358cdf0e10cSrcweir# linktarget. This for example means that you cannot build a single object
359cdf0e10cSrcweir# alone, because then you would directly depend on the object.
360b63233d8Sdamjan#
361b63233d8Sdamjan# A note about flags: because the overriding the global variables with a target
362b63233d8Sdamjan# local variable of the same name is considered obscure, the target local
363b63233d8Sdamjan# variables have a T_ prefix.
364cdf0e10cSrcweirdefine gb_LinkTarget_LinkTarget
365cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : AUXTARGETS :=
366cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,$(1)) : SELF := $(1)
367cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : DLLTARGET :=
368cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \
3691bb309c6SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : ASMOBJECTS :=
3701bb309c6SDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) \
371cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : COBJECTS :=
372cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \
373cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : CXXOBJECTS :=
374cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \
375cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : OBJCXXOBJECTS :=
376cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \
377*7f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : GENCOBJECTS :=
378*7f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) \
379cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : GENCXXOBJECTS :=
380cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
3818e6bd3e9SDon Lewis$(call gb_LinkTarget_get_target,$(1)) : T_CFLAGS := $$(gb_LinkTarget_CFLAGS)
382cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
383b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS)
384cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
3858e6bd3e9SDon Lewis$(call gb_LinkTarget_get_target,$(1)) : PCH_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) $$(CXXFLAGS)
3868e6bd3e9SDon Lewis$(call gb_LinkTarget_get_target,$(1)) : T_OBJCXXFLAGS := $$(gb_LinkTarget_OBJCXXFLAGS)
387cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
388b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : DEFS := $$(gb_LinkTarget_DEFAULTDEFS) $(CPPFLAGS)
389cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
390b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS := $$(gb_LinkTarget_DEFAULTDEFS) $(CPPFLAGS)
391cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
392cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE := $$(gb_LinkTarget_INCLUDE)
393cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
394cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE_STL := $$(gb_LinkTarget_INCLUDE_STL)
395b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_LDFLAGS := $$(gb_LinkTarget_LDFLAGS) $(LDFLAGS)
396cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_LIBS :=
397cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_STATIC_LIBS :=
39844c25570SAndre Fischer$(call gb_LinkTarget_get_target,$(1)) : EXTERNAL_LIBS :=
399b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : LIBS :=
400cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : TARGETTYPE :=
4013b02a9c8SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : VERSIONMAP :=
402cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
403cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_NAME :=
404cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCHOBJS :=
4058e6bd3e9SDon Lewis#$(call gb_LinkTarget_get_headers_target,$(1)) \
4068e6bd3e9SDon Lewis#$(call gb_LinkTarget_get_target,$(1)) : PDBFILE :=
407cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : NATIVERES :=
408cdf0e10cSrcweir
409cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
410b63233d8Sdamjan-include $(call gb_LinkTarget_get_dep_target,$(1))
411cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : COBJECTS :=
412cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : CXXOBJECTS :=
413cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCXXOBJECTS :=
414*7f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : GENCOBJECTS :=
415cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : GENCXXOBJECTS :=
4168e6bd3e9SDon Lewis$(call gb_LinkTarget_get_dep_target,$(1)) : T_CFLAGS := $$(gb_LinkTarget_CFLAGS)
417b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS)
4188e6bd3e9SDon Lewis$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) $$(CXXFLAGS)
4198e6bd3e9SDon Lewis$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCXXFLAGS := $$(gb_LinkTarget_OBJCXXFLAGS)
420b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : DEFS := $$(gb_LinkTarget_DEFAULTDEFS) $(CPPFLAGS)
421b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS := $$(gb_LinkTarget_DEFAULTDEFS) $(CPPFLAGS)
422cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE := $$(gb_LinkTarget_INCLUDE)
423cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE_STL := $$(gb_LinkTarget_INCLUDE_STL)
424cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : TARGETTYPE :=
4253b02a9c8SDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : VERSIONMAP :=
426cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_NAME :=
427cdf0e10cSrcweirendif
428cdf0e10cSrcweir
429cdf0e10cSrcweirendef
430cdf0e10cSrcweir
431b63233d8Sdamjandefine gb_LinkTarget_add_defs
432b63233d8Sdamjan$(call gb_LinkTarget_get_headers_target,$(1)) \
433b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : DEFS += $(2)
434b63233d8Sdamjan$(call gb_LinkTarget_get_headers_target,$(1)) \
435b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS += $(2)
436b63233d8Sdamjanifeq ($(gb_FULLDEPS),$(true))
437b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : DEFS += $(2)
438b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS += $(2)
439b63233d8Sdamjanendif
440b63233d8Sdamjanendef
441b63233d8Sdamjan
442cdf0e10cSrcweirdefine gb_LinkTarget_set_defs
443b63233d8Sdamjanifeq (,)
444b63233d8Sdamjan$$(call gb_Output_error,\
445b63233d8Sdamjan gb_LinkTarget_set_defs: use gb_LinkTarget_add_defs instead.)
446b63233d8Sdamjanelse
447cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
448cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : DEFS := $(2)
449cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
450cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS := $(2)
451cdf0e10cSrcweir
452cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
453cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : DEFS := $(2)
454cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS := $(2)
455cdf0e10cSrcweirendif
456b63233d8Sdamjanendif
457b63233d8Sdamjan
458b63233d8Sdamjanendef
459b63233d8Sdamjan
460b63233d8Sdamjandefine gb_LinkTarget_add_cflags
461b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_CFLAGS += $(2)
462b63233d8Sdamjanifeq ($(gb_FULLDEPS),$(true))
463b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_CFLAGS += $(2)
464b63233d8Sdamjanendif
465cdf0e10cSrcweir
466cdf0e10cSrcweirendef
467cdf0e10cSrcweir
468cdf0e10cSrcweirdefine gb_LinkTarget_set_cflags
469b63233d8Sdamjanifeq (,)
470b63233d8Sdamjan$$(call gb_Output_error,\
471b63233d8Sdamjan gb_LinkTarget_set_cflags: use gb_LinkTarget_add_cflags instead.)
472b63233d8Sdamjanelse
473b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_CFLAGS := $(2)
474cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
475b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_CFLAGS := $(2)
476b63233d8Sdamjanendif
477cdf0e10cSrcweirendif
478cdf0e10cSrcweir
479cdf0e10cSrcweirendef
480cdf0e10cSrcweir
481b63233d8Sdamjandefine gb_LinkTarget_add_cxxflags
482b63233d8Sdamjan$(call gb_LinkTarget_get_headers_target,$(1)) \
483b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_CXXFLAGS += $(2)
484b63233d8Sdamjan$(call gb_LinkTarget_get_headers_target,$(1)) \
485b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : PCH_CXXFLAGS += $(2)
486b63233d8Sdamjanifeq ($(gb_FULLDEPS),$(true))
487b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_CXXFLAGS += $(2)
488b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_CXXFLAGS += $(2)
489b63233d8Sdamjanendif
490b63233d8Sdamjanendef
491b63233d8Sdamjan
492cdf0e10cSrcweirdefine gb_LinkTarget_set_cxxflags
493b63233d8Sdamjanifeq (,)
494b63233d8Sdamjan$$(call gb_Output_error,\
495b63233d8Sdamjan gb_LinkTarget_set_cxxflags: use gb_LinkTarget_add_cxxflags instead.)
496b63233d8Sdamjanelse
497cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
498b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_CXXFLAGS := $(2)
499cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
500cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_CXXFLAGS := $(2)
501cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
502b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_CXXFLAGS := $(2)
503cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_CXXFLAGS := $(2)
504cdf0e10cSrcweirendif
505b63233d8Sdamjanendif
506b63233d8Sdamjan
507b63233d8Sdamjanendef
508cdf0e10cSrcweir
509b63233d8Sdamjandefine gb_LinkTarget_add_objcxxflags
510b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_OBJCXXFLAGS += $(2)
511b63233d8Sdamjanifeq ($(gb_FULLDEPS),$(true))
512b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCXXFLAGS += $(2)
513b63233d8Sdamjanendif
514cdf0e10cSrcweirendef
515cdf0e10cSrcweir
516cdf0e10cSrcweirdefine gb_LinkTarget_set_objcxxflags
517b63233d8Sdamjanifeq (,)
518b63233d8Sdamjan$$(call gb_Output_error,\
519b63233d8Sdamjan gb_LinkTarget_set_objcxxflags: use gb_LinkTarget_add_objcxxflags instead.)
520b63233d8Sdamjanelse
521b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_OBJCXXFLAGS := $(2)
522cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
523b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCXXFLAGS := $(2)
524b63233d8Sdamjanendif
525cdf0e10cSrcweirendif
5268e6bd3e9SDon Lewisendef
5278e6bd3e9SDon Lewis
5288e6bd3e9SDon Lewisdefine gb_LinkTarget_set_c_optimization
529e10cbeddSDon Lewis$(foreach object,$(1),$(eval $(call gb_CObject_get_target,$(object)) : CFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(CFLAGS)) $(2)))
5308e6bd3e9SDon Lewisendef
5318e6bd3e9SDon Lewis
5328e6bd3e9SDon Lewisdefine gb_LinkTarget_set_cxx_optimization
533e10cbeddSDon Lewis$(foreach object,$(1),$(eval $(call gb_CxxObject_get_target,$(object)) : CXXFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(CXXFLAGS)) $(2)))
5348e6bd3e9SDon Lewisendef
5358e6bd3e9SDon Lewis
536*7f6ffbefSDamjan Jovanovicdefine gb_LinkTarget_set_genc_optimization
537*7f6ffbefSDamjan Jovanovic$(foreach object,$(1),$(eval $(call gb_GenCObject_get_target,$(object)) : CFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(CFLAGS)) $(2)))
538*7f6ffbefSDamjan Jovanovicendef
539*7f6ffbefSDamjan Jovanovic
5408e6bd3e9SDon Lewisdefine gb_LinkTarget_set_gencxx_optimization
541e10cbeddSDon Lewis$(foreach object,$(1),$(eval $(call gb_GenCxxObject_get_target,$(object)) : CXXFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(CXXFLAGS)) $(2)))
5428e6bd3e9SDon Lewisendef
543cdf0e10cSrcweir
5448e6bd3e9SDon Lewisdefine gb_LinkTarget_set_objcxx_optimization
545e10cbeddSDon Lewis$(foreach object,$(1),$(eval $(call gb_ObjCxxObject_get_target,$(object)) : OBJCXXFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(OBJCXXFLAGS)) $(2)))
546cdf0e10cSrcweirendef
547cdf0e10cSrcweir
548cdf0e10cSrcweirdefine gb_LinkTarget_set_include
549cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
550cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE := $(2)
551cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
552cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE := $(2)
553cdf0e10cSrcweirendif
554cdf0e10cSrcweir
555cdf0e10cSrcweirendef
556cdf0e10cSrcweir
557cdf0e10cSrcweirdefine gb_LinkTarget_set_include_stl
558cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
559cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE_STL := $(2)
560cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
561cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE_STL := $(2)
562cdf0e10cSrcweirendif
563cdf0e10cSrcweir
564cdf0e10cSrcweirendef
565cdf0e10cSrcweir
566b63233d8Sdamjandefine gb_LinkTarget_add_ldflags
567b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_LDFLAGS += $(2)
568b63233d8Sdamjanendef
569b63233d8Sdamjan
570b63233d8Sdamjan# real use in RepositoryExternal.mk
571cdf0e10cSrcweirdefine gb_LinkTarget_set_ldflags
572b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : T_LDFLAGS := $(2)
573b63233d8Sdamjanendef
574b63233d8Sdamjan
575b63233d8Sdamjandefine gb_LinkTarget_add_api
576b63233d8Sdamjan$(call gb_LinkTarget_get_external_headers_target,$(1)) :| \
577b63233d8Sdamjan	$$(foreach api,$(2),$$(call gb_Package_get_target,$$(api)_inc))
578b63233d8Sdamjan$(call gb_LinkTarget_get_headers_target,$(1)) \
579b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : INCLUDE += $$(foreach api,$(2),-I$(OUTDIR)/inc/$$(api))
580b63233d8Sdamjanifeq ($(gb_FULLDEPS),$(true))
581b63233d8Sdamjan$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE += $$(foreach api,$(2),-I$(OUTDIR)/inc/$$(api))
582b63233d8Sdamjanendif
583b63233d8Sdamjan
584b63233d8Sdamjanendef
585b63233d8Sdamjan
5868f71f2daSDamjan Jovanovicdefine gb_LinkTarget_add_private_api
5878f71f2daSDamjan Jovanovic$(call gb_LinkTarget_get_external_headers_target,$(1)) :| \
5888f71f2daSDamjan Jovanovic	$(call gb_UnoPrivateApiTarget_get_target,$(1)/idl.cppumaker.flag)
5898f71f2daSDamjan Jovanovic$(call gb_LinkTarget_get_headers_target,$(1)) \
5908f71f2daSDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : INCLUDE += -I$(call gb_UnoPrivateApiTarget_get_target,$(1)/inc)
5918f71f2daSDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
5928f71f2daSDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE += -I$(call gb_UnoPrivateApiTarget_get_target,$(1)/inc)
5938f71f2daSDamjan Jovanovicendif
5948f71f2daSDamjan Jovanovic
595390c74e1SDamjan Jovanovic$(call gb_UnoPrivateApiTarget_get_target,$(1)/idl.cppumaker.flag): $(2) $(3)
5968f71f2daSDamjan Jovanovic	$(call gb_Output_announce,$@,$(true),PVTIDL,2)
597ea3120fcSDamjan Jovanovic	-$$(call gb_Helper_abbreviate_dirs_native,\
5988f71f2daSDamjan Jovanovic		mkdir -p $$(call gb_UnoPrivateApiTarget_get_target,$(1)/urd) && \
5998f71f2daSDamjan Jovanovic		mkdir -p $$(call gb_UnoPrivateApiTarget_get_target,$(1)/rdb) && \
6008f71f2daSDamjan Jovanovic		mkdir -p $$(call gb_UnoPrivateApiTarget_get_target,$(1)/inc) && \
6018f71f2daSDamjan Jovanovic		$$(gb_UnoApiTarget_IDLCCOMMAND) -I$$(OUTDIR)/idl -O $$(call gb_UnoPrivateApiTarget_get_target,$(1)/urd) \
602390c74e1SDamjan Jovanovic			-verbose -cid -we $(3) && \
6038f71f2daSDamjan Jovanovic		$$(gb_UnoApiTarget_REGMERGECOMMAND) $$(call gb_UnoPrivateApiTarget_get_target,$(1)/rdb/registry.rdb) /UCR \
604390c74e1SDamjan Jovanovic			$(patsubst %.idl,%.urd,$$(call gb_UnoPrivateApiTarget_get_target,$(1)/urd)/$(notdir $(3))) && \
6058f71f2daSDamjan Jovanovic		$(gb_UnoApiTarget_CPPUMAKERCOMMAND) \
6068f71f2daSDamjan Jovanovic			-O $$(call gb_UnoPrivateApiTarget_get_target,$(1)/inc) \
607390c74e1SDamjan Jovanovic			$(foreach unotype,$(4),-T$(unotype)) \
6088f71f2daSDamjan Jovanovic			-BUCR \
6098f71f2daSDamjan Jovanovic			-C \
6108f71f2daSDamjan Jovanovic			$$(call gb_UnoPrivateApiTarget_get_target,$(1)/rdb/registry.rdb) \
611390c74e1SDamjan Jovanovic			$(2) && \
6128f71f2daSDamjan Jovanovic		touch $(call gb_UnoPrivateApiTarget_get_target,$(1)/idl.cppumaker.flag))
6138f71f2daSDamjan Jovanovic
6148f71f2daSDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) :
6158f71f2daSDamjan Jovanovic	rm -rf $(call gb_UnoPrivateApiTarget_get_target,$(1))
6168f71f2daSDamjan Jovanovic
6178f71f2daSDamjan Jovanovicendef
6188f71f2daSDamjan Jovanovic
6198f71f2daSDamjan Jovanovic# FIXME: multiple??
6208f71f2daSDamjan Jovanovicdefine gb_LinkTarget_set_private_api
621390c74e1SDamjan Jovanovic$(foreach api,$(3),$(call gb_LinkTarget_add_private_api,$(1),$(2),$(api),$(4)))
6228f71f2daSDamjan Jovanovic
6230f0bb070SDamjan Jovanovicendef
6240f0bb070SDamjan Jovanovic
6250f0bb070SDamjan Jovanovicdefine gb_LinkTarget_set_private_extract_of_public_api
6260f0bb070SDamjan Jovanovic$(call gb_LinkTarget_get_external_headers_target,$(1)) :| \
627390c74e1SDamjan Jovanovic	$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/idl.cppumaker.flag)
6280f0bb070SDamjan Jovanovic$(call gb_LinkTarget_get_headers_target,$(1)) \
629390c74e1SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : INCLUDE += -I$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/inc)
6300f0bb070SDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
631390c74e1SDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE += -I$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/inc)
6320f0bb070SDamjan Jovanovicendif
6330f0bb070SDamjan Jovanovic
634390c74e1SDamjan Jovanovic$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/idl.cppumaker.flag): $(2)
6350f0bb070SDamjan Jovanovic	$(call gb_Output_announce,$@,$(true),PVTUNOTYPES,2)
63669307761SDamjan Jovanovic	-$$(call gb_Helper_abbreviate_dirs_native,\
637390c74e1SDamjan Jovanovic		mkdir -p $$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/inc) && \
6380f0bb070SDamjan Jovanovic		$(gb_UnoApiTarget_CPPUMAKERCOMMAND) \
639390c74e1SDamjan Jovanovic			-O $$(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/inc) \
6400f0bb070SDamjan Jovanovic			$(foreach unotype,$(3),-T$(unotype)) \
6410f0bb070SDamjan Jovanovic			-BUCR \
6420f0bb070SDamjan Jovanovic			-C \
643390c74e1SDamjan Jovanovic			$(2) && \
644390c74e1SDamjan Jovanovic		touch $(call gb_UnoPrivateApiExtractTarget_get_target,$(1)/idl.cppumaker.flag))
6450f0bb070SDamjan Jovanovic
6460f0bb070SDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) :
647390c74e1SDamjan Jovanovic	rm -rf $(call gb_UnoPrivateApiExtractTarget_get_target,$(1))
6480f0bb070SDamjan Jovanovic
6490f0bb070SDamjan Jovanovic
6507de6b1b1SDamjan Jovanovicendef
6517de6b1b1SDamjan Jovanovic
6527de6b1b1SDamjan Jovanovicgb_BisonTarget_get_source = $(SRCDIR)/$(1).y
6537de6b1b1SDamjan Jovanovic
6547de6b1b1SDamjan Jovanovic# Bison-generated .cxx files are always #include'd into in-module files,
6557de6b1b1SDamjan Jovanovic# and aren't compiled, so they effectively act as generated headers, not generated .cxx.
6567de6b1b1SDamjan Jovanovic
6577de6b1b1SDamjan Jovanovicdefine gb_LinkTarget_add_bison_file
6587de6b1b1SDamjan Jovanovic
6597de6b1b1SDamjan Jovanovic$(call gb_LinkTarget_get_external_headers_target,$(1)) :| \
6607de6b1b1SDamjan Jovanovic	$(call gb_BisonTarget_get_target,$(1),$(2))
6617de6b1b1SDamjan Jovanovic
6627de6b1b1SDamjan Jovanovic$(call gb_LinkTarget_get_headers_target,$(1)) \
6637de6b1b1SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : INCLUDE += -I$(dir $(call gb_BisonTarget_get_target,$(1),$(2)))
6647de6b1b1SDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
6657de6b1b1SDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE += -I$(dir $(call gb_BisonTarget_get_target,$(1),$(2)))
6667de6b1b1SDamjan Jovanovicendif
6677de6b1b1SDamjan Jovanovic
6687de6b1b1SDamjan Jovanovic$(call gb_BisonTarget_get_target,$(1),$(2)) : $(call gb_BisonTarget_get_source,$(2))
6697de6b1b1SDamjan Jovanovic	mkdir -p $(dir $(call gb_BisonTarget_get_target,$(1),$(2))) && \
67048bea759SDamjan 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))) && \
67148bea759SDamjan 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)))
6727de6b1b1SDamjan Jovanovic
6737de6b1b1SDamjan Jovanovicendef
6747de6b1b1SDamjan Jovanovic
6757de6b1b1SDamjan Jovanovicdefine gb_LinkTarget_add_bison_files
6767de6b1b1SDamjan Jovanovic$(foreach bisonfile,$(2),$(call gb_LinkTarget_add_bison_file,$(1),$(bisonfile)))
6777de6b1b1SDamjan Jovanovic
6788f71f2daSDamjan Jovanovicendef
6798f71f2daSDamjan Jovanovic
68088fe4d89SDamjan Jovanovic
68188fe4d89SDamjan Jovanovic
68288fe4d89SDamjan Jovanovicgb_FlexTarget_get_source = $(SRCDIR)/$(1).ll
68388fe4d89SDamjan Jovanovic
68488fe4d89SDamjan Jovanovic# Flex-generated .cxx files are always #include'd into in-module files,
68588fe4d89SDamjan Jovanovic# and aren't compiled, so they effectively act as generated headers, not generated .cxx.
68688fe4d89SDamjan Jovanovic
68788fe4d89SDamjan Jovanovicdefine gb_LinkTarget_add_flex_file
68888fe4d89SDamjan Jovanovic
68988fe4d89SDamjan Jovanovic$(call gb_LinkTarget_get_external_headers_target,$(1)) :| \
69088fe4d89SDamjan Jovanovic        $(call gb_FlexTarget_get_target,$(1),$(2))
69188fe4d89SDamjan Jovanovic
69288fe4d89SDamjan Jovanovic$(call gb_LinkTarget_get_headers_target,$(1)) \
69388fe4d89SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : INCLUDE += -I$(dir $(call gb_FlexTarget_get_target,$(1),$(2)))
69488fe4d89SDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
69588fe4d89SDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE += -I$(dir $(call gb_FlexTarget_get_target,$(1),$(2)))
69688fe4d89SDamjan Jovanovicendif
69788fe4d89SDamjan Jovanovic
69888fe4d89SDamjan Jovanovic$(call gb_FlexTarget_get_target,$(1),$(2)) : $(call gb_FlexTarget_get_source,$(2))
69988fe4d89SDamjan Jovanovic	mkdir -p $(dir $(call gb_FlexTarget_get_target,$(1),$(2))) && \
70088fe4d89SDamjan 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))) && \
70188fe4d89SDamjan 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)))
70288fe4d89SDamjan Jovanovic
70388fe4d89SDamjan Jovanovicendef
70488fe4d89SDamjan Jovanovic
70588fe4d89SDamjan Jovanovicdefine gb_LinkTarget_add_flex_files
70688fe4d89SDamjan Jovanovic$(foreach flexfile,$(2),$(call gb_LinkTarget_add_flex_file,$(1),$(flexfile)))
70788fe4d89SDamjan Jovanovic
70888fe4d89SDamjan Jovanovicendef
70988fe4d89SDamjan Jovanovic
71088fe4d89SDamjan Jovanovic
71188fe4d89SDamjan Jovanovic
71288fe4d89SDamjan Jovanovic
713b63233d8Sdamjandefine gb_LinkTarget_add_libs
714b63233d8Sdamjan$(call gb_LinkTarget_get_target,$(1)) : LIBS += $(2)
715cdf0e10cSrcweirendef
716cdf0e10cSrcweir
717cdf0e10cSrcweirdefine gb_LinkTarget_add_linked_libs
718cdf0e10cSrcweirifneq (,$$(filter-out $(gb_Library_KNOWNLIBS),$(2)))
719cdf0e10cSrcweir$$(eval $$(call gb_Output_info,currently known libraries are: $(sort $(gb_Library_KNOWNLIBS)),ALL))
720cdf0e10cSrcweir$$(eval $$(call gb_Output_error,Cannot link against library/libraries $$(filter-out $(gb_Library_KNOWNLIBS),$(2)). Libraries must be registered in Repository.mk))
721cdf0e10cSrcweirendif
722cdf0e10cSrcweir
723cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_LIBS += $(2)
724cdf0e10cSrcweir
725cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $$(foreach lib,$(2),$$(call gb_Library_get_target,$$(lib)))
726cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,$(1)) : \
727cdf0e10cSrcweir$$(foreach lib,$(2),$$(call gb_Library_get_headers_target,$$(lib)))
728cdf0e10cSrcweir
729cdf0e10cSrcweirendef
730cdf0e10cSrcweir
731cdf0e10cSrcweirdefine gb_LinkTarget_add_linked_static_libs
732cdf0e10cSrcweirifneq (,$$(filter-out $(gb_StaticLibrary_KNOWNLIBS),$(2)))
733cdf0e10cSrcweir$$(eval $$(call gb_Output_info, currently known static libraries are: $(sort $(gb_StaticLibrary_KNOWNLIBS)),ALL))
734cdf0e10cSrcweir$$(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))
735cdf0e10cSrcweirendif
736cdf0e10cSrcweir
737cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_STATIC_LIBS += $(2)
738cdf0e10cSrcweir
739cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $$(foreach lib,$(2),$$(call gb_StaticLibrary_get_target,$$(lib)))
740cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,$(1)) : \
741cdf0e10cSrcweir$$(foreach lib,$(2),$$(call gb_StaticLibrary_get_headers_target,$$(lib)))
742cdf0e10cSrcweir
743cdf0e10cSrcweirendef
744cdf0e10cSrcweir
74544c25570SAndre Fischer#
74644c25570SAndre Fischer# Add external libs for linking.  External libaries are not built by any module.
74744c25570SAndre Fischer#
74844c25570SAndre Fischer# The list of libraries is used as is, ie it is not filtered with gb_Library_KNOWNLIBS.
74944c25570SAndre Fischer#
75044c25570SAndre Fischer# An error is signaled, when any of the library names does not look like
751c4c42a0eSDamjan Jovanovic# a base name, ie is prefixed by -l or is folled by .lib or .so.
75244c25570SAndre Fischer#
75344c25570SAndre Fischer# @param target
75444c25570SAndre Fischer# @param libraries
75544c25570SAndre Fischer#     A list of (base names of) libraries that will be added to the target
75644c25570SAndre Fischer#     local EXTERNAL_LIBS variable and eventually linked in when the
75744c25570SAndre Fischer#     target is made.
75844c25570SAndre Fischer#
75944c25570SAndre Fischerdefine gb_LinkTarget_add_external_libs
76044c25570SAndre Fischer
76144c25570SAndre Fischer# Make sure that all libraries are given as base names.
762c4c42a0eSDamjan Jovanovicifneq (,$$(filter -l% %.so %.lib, $(2)))
76386e1cf34SPedro Giffuni$$(eval $$(call gb_Output_announce,ERROR: Please give only library basenames to gb_LinkTarget_add_external_libs))
76444c25570SAndre Fischer$$(eval $$(call gb_Output_announce,ERROR:    (no prefixes -l% or lib%, no suffixes %.so or %.lib)))
76544c25570SAndre Fischer$$(eval $$(call gb_Output_announce,ERROR:    libraries given: $(2)))
76644c25570SAndre Fischer$$(eval $$(call gb_Output_announce,ERROR:    offending: $$(filter -l% lib% %.so %.lib, $(2))))
76744c25570SAndre Fischer$$(eval $$(call gb_Output_error,  ))
76844c25570SAndre Fischerendif
76944c25570SAndre Fischer
77044c25570SAndre Fischer$(call gb_LinkTarget_get_target,$(1)) : EXTERNAL_LIBS += $(2)
77144c25570SAndre Fischer
77244c25570SAndre Fischer$(call gb_LinkTarget_get_target,$(1)) : $$(foreach lib,$(2),$$(call gb_Library_get_target,$$(lib)))
77344c25570SAndre Fischer$(call gb_LinkTarget_get_external_headers_target,$(1)) : \
77444c25570SAndre Fischer$$(foreach lib,$(2),$$(call gb_Library_get_headers_target,$$(lib)))
77544c25570SAndre Fischer
77644c25570SAndre Fischerendef
77744c25570SAndre Fischer
77844c25570SAndre Fischer
7791bb309c6SDamjan Jovanovicdefine gb_LinkTarget_add_asmobject
7801bb309c6SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : ASMOBJECTS += $(2)
7811bb309c6SDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) : ASMOBJECTS += $(2)
7821bb309c6SDamjan Jovanovic
7831bb309c6SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : $(call gb_AsmObject_get_target,$(2))
7841bb309c6SDamjan Jovanovic
7851bb309c6SDamjan Jovanovicendef
7861bb309c6SDamjan Jovanovic
787cdf0e10cSrcweirdefine gb_LinkTarget_add_cobject
788cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : COBJECTS += $(2)
789cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : COBJECTS += $(2)
790cdf0e10cSrcweir
791cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_CObject_get_target,$(2))
792cdf0e10cSrcweir$(call gb_CObject_get_target,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
793b63233d8Sdamjan$(call gb_CObject_get_target,$(2)) : T_CFLAGS += $(3)
794cdf0e10cSrcweir
795cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
796cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : COBJECTS += $(2)
797cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_CObject_get_dep_target,$(2))
798cdf0e10cSrcweirendif
799cdf0e10cSrcweir
800cdf0e10cSrcweirendef
801cdf0e10cSrcweir
802cdf0e10cSrcweirdefine gb_LinkTarget_add_cxxobject
803cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : CXXOBJECTS += $(2)
804cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : CXXOBJECTS += $(2)
805cdf0e10cSrcweir
806cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_CxxObject_get_target,$(2))
807cdf0e10cSrcweir$(call gb_CxxObject_get_target,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
808b63233d8Sdamjan$(call gb_CxxObject_get_target,$(2)) : T_CXXFLAGS += $(3)
809cdf0e10cSrcweir
810cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
811cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : CXXOBJECTS += $(2)
812cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_CxxObject_get_dep_target,$(2))
813cdf0e10cSrcweirendif
814cdf0e10cSrcweir
815cdf0e10cSrcweirendef
816cdf0e10cSrcweir
817cdf0e10cSrcweirdefine gb_LinkTarget_add_objcxxobject
818cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : OBJCXXOBJECTS += $(2)
819cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : OBJCXXOBJECTS += $(2)
820cdf0e10cSrcweir
821cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_ObjCxxObject_get_target,$(2))
822cdf0e10cSrcweir$(call gb_ObjCxxObject_get_target,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
823b63233d8Sdamjan$(call gb_ObjCxxObject_get_target,$(2)) : T_OBJCXXFLAGS += $(3)
824cdf0e10cSrcweir
825cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
826cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCXXOBJECTS += $(2)
827cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_ObjCxxObject_get_dep_target,$(2))
828cdf0e10cSrcweirendif
829cdf0e10cSrcweir
830cdf0e10cSrcweirendef
831cdf0e10cSrcweir
832*7f6ffbefSDamjan Jovanovicdefine gb_LinkTarget_add_generated_cobject
833*7f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : GENCOBJECTS += $(2)
834*7f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_clean_target,$(1)) : GENCOBJECTS += $(2)
835*7f6ffbefSDamjan Jovanovic
836*7f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) : $(call gb_GenCObject_get_target,$(2))
837*7f6ffbefSDamjan Jovanovic$(call gb_GenCObject_get_source,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
838*7f6ffbefSDamjan Jovanovic$(call gb_GenCObject_get_target,$(2)) : T_CFLAGS += $(3)
839*7f6ffbefSDamjan Jovanovic
840*7f6ffbefSDamjan Jovanovicifeq ($(gb_FULLDEPS),$(true))
841*7f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : GENCOBJECTS += $(2)
842*7f6ffbefSDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_GenCObject_get_dep_target,$(2))
843*7f6ffbefSDamjan Jovanovicendif
844*7f6ffbefSDamjan Jovanovic
845*7f6ffbefSDamjan Jovanovicendef
846*7f6ffbefSDamjan Jovanovic
847cdf0e10cSrcweirdefine gb_LinkTarget_add_generated_cxx_object
848cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : GENCXXOBJECTS += $(2)
849cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : GENCXXOBJECTS += $(2)
850cdf0e10cSrcweir
851cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_GenCxxObject_get_target,$(2))
852cdf0e10cSrcweir$(call gb_GenCxxObject_get_source,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
8538e6bd3e9SDon Lewis$(call gb_GenCxxObject_get_target,$(2)) : T_CXXFLAGS += $(3)
854cdf0e10cSrcweir
855cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
856cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : GENCXXOBJECTS += $(2)
857cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_GenCxxObject_get_dep_target,$(2))
858cdf0e10cSrcweirendif
859cdf0e10cSrcweir
860cdf0e10cSrcweirendef
861cdf0e10cSrcweir
862cdf0e10cSrcweirdefine gb_LinkTarget_add_noexception_object
8638e6bd3e9SDon Lewis$(call gb_LinkTarget_add_cxxobject,$(1),$(2),$(gb_LinkTarget_NOEXCEPTIONFLAGS))
864cdf0e10cSrcweirendef
865cdf0e10cSrcweir
866cdf0e10cSrcweirdefine gb_LinkTarget_add_exception_object
8678e6bd3e9SDon Lewis$(call gb_LinkTarget_add_cxxobject,$(1),$(2),$(gb_LinkTarget_EXCEPTIONFLAGS))
868cdf0e10cSrcweirendef
869cdf0e10cSrcweir
8707f5180e6SDamjan Jovanovicdefine gb_LinkTarget_add_asmobjects
8711bb309c6SDamjan Jovanovic$(foreach obj,$(2),$(call gb_LinkTarget_add_asmobject,$(1),$(obj),$(3)))
8721bb309c6SDamjan Jovanovicendef
8731bb309c6SDamjan Jovanovic
874cdf0e10cSrcweirdefine gb_LinkTarget_add_cobjects
875cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_cobject,$(1),$(obj),$(3)))
876cdf0e10cSrcweirendef
877cdf0e10cSrcweir
878cdf0e10cSrcweirdefine gb_LinkTarget_add_cxxobjects
879cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_cxxobject,$(1),$(obj),$(3)))
880cdf0e10cSrcweirendef
881cdf0e10cSrcweir
882cdf0e10cSrcweirdefine gb_LinkTarget_add_objcxxobjects
883cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_objcxxobject,$(1),$(obj),$(3)))
884cdf0e10cSrcweirendef
885cdf0e10cSrcweir
886cdf0e10cSrcweirdefine gb_LinkTarget_add_noexception_objects
887cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_noexception_object,$(1),$(obj)))
888cdf0e10cSrcweirendef
889cdf0e10cSrcweir
890cdf0e10cSrcweirdefine gb_LinkTarget_add_exception_objects
891cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_exception_object,$(1),$(obj)))
892cdf0e10cSrcweirendef
893cdf0e10cSrcweir
894*7f6ffbefSDamjan Jovanovicdefine gb_LinkTarget_add_generated_cobjects
895*7f6ffbefSDamjan Jovanovic$(foreach obj,$(2),$(call gb_Linktarget_add_generated_cobject,$(1),$(obj),$(3)))
896*7f6ffbefSDamjan Jovanovicendef
897*7f6ffbefSDamjan Jovanovic
898cdf0e10cSrcweirdefine gb_LinkTarget_add_generated_exception_object
899cdf0e10cSrcweir$(call gb_LinkTarget_add_generated_cxx_object,$(1),$(2),$(gb_LinkTarget_EXCEPTIONFLAGS))
900cdf0e10cSrcweirendef
901cdf0e10cSrcweir
902cdf0e10cSrcweirdefine gb_LinkTarget_add_generated_exception_objects
903cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_generated_exception_object,$(1),$(obj)))
904cdf0e10cSrcweirendef
905cdf0e10cSrcweir
906cdf0e10cSrcweirdefine gb_LinkTarget_set_targettype
907cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) \
908cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : TARGETTYPE := $(2)
909cdf0e10cSrcweirendef
910cdf0e10cSrcweir
9113b02a9c8SDamjan Jovanovicdefine gb_LinkTarget_set_versionmap
9123b02a9c8SDamjan Jovanovic$(call gb_LinkTarget_get_target,$(1)) \
9133b02a9c8SDamjan Jovanovic$(call gb_LinkTarget_get_dep_target,$(1)) : VERSIONMAP := $(2)
9143b02a9c8SDamjan Jovanovicendef
9153b02a9c8SDamjan Jovanovic
916cdf0e10cSrcweirdefine gb_LinkTarget_set_dlltarget
917cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \
918cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : DLLTARGET := $(2)
919cdf0e10cSrcweirendef
920cdf0e10cSrcweir
921cdf0e10cSrcweirdefine gb_LinkTarget_set_auxtargets
922cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : AUXTARGETS := $(2)
923cdf0e10cSrcweirendef
924cdf0e10cSrcweir
925cdf0e10cSrcweirdefine gb_LinkTarget__add_internal_headers
926cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) : $(2)
927cdf0e10cSrcweir$(2) :|	$(call gb_LinkTarget_get_external_headers_target,$(1))
928cdf0e10cSrcweir
929cdf0e10cSrcweirendef
930cdf0e10cSrcweir
931cdf0e10cSrcweirdefine gb_LinkTarget_add_package_headers
932cdf0e10cSrcweir$(foreach package,$(2),$(call gb_LinkTarget__add_internal_headers,$(1),$(call gb_Package_get_target,$(package))))
933cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(foreach package,$(2),$(call gb_Package_get_clean_target,$(package)))
934cdf0e10cSrcweir
935cdf0e10cSrcweirendef
936cdf0e10cSrcweir
937cdf0e10cSrcweirdefine gb_LinkTarget_add_sdi_headers
938cdf0e10cSrcweir$(call gb_LinkTarget__add_internal_headers,$(1),$(foreach sdi,$(2),$(call gb_SdiTarget_get_target,$(sdi))))
939cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(foreach sdi,$(2),$(call gb_SdiTarget_get_clean_target,$(sdi)))
940cdf0e10cSrcweirendef
941cdf0e10cSrcweir
942cdf0e10cSrcweirdefine gb_LinkTarget__add_precompiled_header_impl
943cdf0e10cSrcweir$(call gb_LinkTarget__add_internal_headers,$(1),$(call gb_PrecompiledHeader_get_target,$(3)))
944cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(call gb_PrecompiledHeader_get_clean_target,$(3))
945cdf0e10cSrcweir$(call gb_PrecompiledHeader_get_target,$(3)) : $(2).cxx
946cdf0e10cSrcweir
947cdf0e10cSrcweir$(call gb_LinkTarget__add_internal_headers,$(1),$(call gb_NoexPrecompiledHeader_get_target,$(3)))
948cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(call gb_NoexPrecompiledHeader_get_clean_target,$(3))
949cdf0e10cSrcweir$(call gb_NoexPrecompiledHeader_get_target,$(3)) : $(2).cxx
950cdf0e10cSrcweir
951cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_NAME := $(3)
952cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCHOBJS = $(call gb_PrecompiledHeader_get_target,$(3)).obj $(call gb_NoexPrecompiledHeader_get_target,$(3)).obj
953cdf0e10cSrcweir
954cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \
955cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS = $$(DEFS)
956cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true))
957cdf0e10cSrcweir-include \
958cdf0e10cSrcweir	$(call gb_PrecompiledHeader_get_dep_target,$(3)) \
959cdf0e10cSrcweir	$(call gb_NoexPrecompiledHeader_get_dep_target,$(3))
9607517f704Struckman$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_NAME := $(3)
961cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS = $$(DEFS)
962cdf0e10cSrcweirendif
963cdf0e10cSrcweir
964cdf0e10cSrcweirendef
965cdf0e10cSrcweir
966cdf0e10cSrcweirdefine gb_LinkTarget_add_precompiled_header
967cdf0e10cSrcweirifeq ($(gb_ENABLE_PCH),$(true))
968cdf0e10cSrcweir$(call gb_LinkTarget__add_precompiled_header_impl,$(1),$(2),$(notdir $(2)))
969cdf0e10cSrcweirendif
970cdf0e10cSrcweir
971cdf0e10cSrcweirendef
972cdf0e10cSrcweir
973b63233d8Sdamjan# this forwards to functions that must be defined in RepositoryExternal.mk.
974b63233d8Sdamjan# $(call gb_LinkTarget_use_external,library,external)
975b63233d8Sdamjandefine gb_LinkTarget_use_external
976b63233d8Sdamjan$(eval $(if $(value gb_LinkTarget__use_$(2)),\
977b63233d8Sdamjan  $(call gb_LinkTarget__use_$(2),$(1)),\
978b63233d8Sdamjan  $(error gb_LinkTarget_use_external: unknown external: $(2))))
979b63233d8Sdamjanendef
980b63233d8Sdamjan
981b63233d8Sdamjan# $(call gb_LinkTarget_use_externals,library,externals)
982b63233d8Sdamjangb_LinkTarget_use_externals = \
983b63233d8Sdamjan $(foreach external,$(2),$(call gb_LinkTarget_use_external,$(1),$(external)))
984b63233d8Sdamjan
985b63233d8Sdamjan
986cdf0e10cSrcweir# vim: set noet sw=4 ts=4:
987