1 # -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
2 #*************************************************************************
4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 # Copyright 2000, 2011 Oracle and/or its affiliates.
8 # OpenOffice.org - a multi-platform office productivity suite
10 # This file is part of OpenOffice.org.
12 # OpenOffice.org is free software: you can redistribute it and/or modify
13 # it under the terms of the GNU Lesser General Public License version 3
14 # only, as published by the Free Software Foundation.
16 # OpenOffice.org is distributed in the hope that it will be useful,
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 # GNU Lesser General Public License version 3 for more details
20 # (a copy is included in the LICENSE file that accompanied this code).
22 # You should have received a copy of the GNU Lesser General Public License
23 # version 3 along with OpenOffice.org. If not, see
24 # <http://www.openoffice.org/license.html>
25 # for a copy of the LGPLv3 License.
27 #*************************************************************************
29 #the following user-defined variables are supported:
36 # CFLAGS from environment override debug/optimization flags
37 ifeq ($(gb_DEBUGLEVEL
),2)
38 CFLAGS ?
= $(gb_COMPILEROPTFLAGS
) $(gb_DEBUG_CFLAGS
)
39 CXXFLAGS ?
= $(gb_COMPILEROPTFLAGS
) $(gb_DEBUG_CFLAGS
)
40 OBJCXXFLAGS ?
= $(gb_COMPILEROPTFLAGS
) $(gb_DEBUG_CFLAGS
)
42 CFLAGS ?
= $(gb_COMPILEROPTFLAGS
)
43 CXXFLAGS ?
= $(gb_COMPILEROPTFLAGS
)
44 OBJCXXFLAGS ?
= $(gb_COMPILEROPTFLAGS
)
47 # if enabled we link all of these libraries into one larger, merged library
48 # for which we can do a lot more optimisation, and which is faster to read
50 ifeq ($(MERGELIBS
),TRUE
)
51 # list of libraries which are always loaded, thus we can merge them into one
52 # they have to be from tail_build, so we could link against merged library
58 # Overview of dependencies and tasks of LinkTarget
60 # target task depends on
61 # LinkTarget linking AsmObject CObject CxxObject GenCObject GenCxxObject ObjCObject ObjCxxObject
63 # LinkTarget/dep joined dep file AsmObject/dep CObject/dep CxxObject/dep GenCObject/dep GenCxxObject/dep ObjCObject/dep ObjCxxObject/dep
64 # | LinkTarget/headers
65 # LinkTarget/headers all headers available LinkTarget/external_headers PCH
66 # including own generated own generated headers
67 # PCH precompiled headers (win) LinkTarget/external_headers
68 # LinkTarget/external_headers all external headers avail. header files of linked libs
70 # CObject plain c compile | LinkTarget/headers
71 # CxxObject c++ compile | LinkTarget/headers
72 # GenCObject plain c compile from | LinkTarget/headers
74 # GenCxxObject C++ compile from | LinkTarget/headers
76 # ObjCObject objective c compile | LinkTarget/headers
77 # ObjCxxObject objective c++ compile | LinkTarget/headers
79 # AsmObject asm compile | LinkTarget
81 # CObject/dep dependencies these targets generate empty dep files
82 # CxxObject/dep dependencies that are populated upon compile
83 # GenCObject/dep dependencies
84 # GenCxxObject/dep dependencies
85 # ObjCObject/dep dependencies
86 # ObjCxxObject/dep dependencies
87 # AsmObject/dep dependencies
89 # LinkTarget/headers means gb_LinkTarget_get_headers_target etc.
90 # dependencies prefixed with | are build-order only dependencies
94 # For every object there is a dep file (if gb_FULLDEPS is active).
95 # The dep file depends on the object: the Object__command also updates the
96 # dep file as a side effect.
97 # In the dep file rule just touch it so it's newer than the object.
99 # The gb_Object__command_dep generates an "always rebuild" dep file;
100 # It is _only_ used in case the user deletes the object dep file.
101 ifeq ($(gb_FULLDEPS
),$(true
))
102 define gb_Object__command_dep
103 mkdir
-p
$(dir $(1)) && \
104 echo
'$(2) : $$(gb_Helper_PHONY)' > $(1)
108 gb_Object__command_dep
= \
109 $(call gb_Output_error
,gb_Object__command_dep is only for gb_FULLDEPS
)
115 gb_CObject_REPOS
:= $(gb_REPOS
)
117 gb_CObject_get_source
= $(1)/$(2).c
118 # defined by platform
119 # gb_CObject__command
121 define gb_CObject__rules
122 $$(call gb_CObject_get_target
,%) : $$(call gb_CObject_get_source
,$(1),%)
123 $$(call gb_CObject__command
,$$@
,$$*,$$<,$$(call gb_CObject_get_dep_target
,$$*))
125 ifeq ($(gb_FULLDEPS
),$(true
))
126 $$(call gb_CObject_get_dep_target
,%) : $$(call gb_CObject_get_target
,%)
127 $$(if
$$(wildcard $$@
),touch
$$@
,\
128 $$(call gb_Object__command_dep
,$$@
,$$(call gb_CObject_get_target
,$$*)))
133 $(foreach repo
,$(gb_CObject_REPOS
),$(eval
$(call gb_CObject__rules
,$(repo
))))
140 gb_CxxObject_REPOS
:= $(gb_REPOS
)
142 gb_CxxObject_get_source
= $(1)/$(2).
cxx
143 # defined by platform
144 # gb_CxxObject__command
146 # Only enable PCH if the PCH_CXXFLAGS and the PCH_DEFS (from the linktarget)
147 # are the same as the T_CXXFLAGS and DEFS we want to use for this object. This
148 # should usually be the case. The DEFS/T_CXXFLAGS would have too be manually
149 # overridden for one object file for them to differ. PCH_CXXFLAGS/PCH_DEFS
150 # should never be overridden on an object -- they should be the same as for the
151 # whole linktarget. In general it should be cleaner to use a static library
152 # compiled with different flags and link that in rather than mixing different
153 # flags in one linktarget.
154 define gb_CxxObject__set_pchflags
155 ifeq ($(gb_ENABLE_PCH
),$(true
))
156 ifneq ($(strip $$(PCH_NAME
)),)
157 ifeq ($$(sort $$(PCH_CXXFLAGS
) $$(PCH_DEFS
) $$(gb_LinkTarget_EXCEPTIONFLAGS
)),$$(sort $$(T_CXXFLAGS
) $$(DEFS
)))
158 $$@
: PCHFLAGS
:= $$(call gb_PrecompiledHeader_get_enableflags
,$$(PCH_NAME
))
160 ifeq ($$(sort $$(PCH_CXXFLAGS
) $$(PCH_DEFS
) $$(gb_LinkTarget_NOEXCEPTIONFLAGS
)),$$(sort $$(T_CXXFLAGS
) $$(DEFS
)))
161 $$@
: PCHFLAGS
:= $$(call gb_NoexPrecompiledHeader_get_enableflags
,$$(PCH_NAME
))
163 $$(info No precompiled header available for
$$*.
)
164 $$(info precompiled header flags
( ex
) : $$(sort $$(PCH_CXXFLAGS
) $$(PCH_DEFS
) $$(gb_LinkTarget_EXCEPTIONFLAGS
)))
165 $$(info precompiled header flags
(noex
) : $$(sort $$(PCH_CXXFLAGS
) $$(PCH_DEFS
) $$(gb_LinkTarget_NOEXCEPTIONFLAGS
)))
166 $$(info . object flags
: $$(sort $$(T_CXXFLAGS
) $$(DEFS
)))
174 define gb_CxxObject__rules
175 $$(call gb_CxxObject_get_target
,%) : $$(call gb_CxxObject_get_source
,$(1),%)
176 $$(eval
$$(gb_CxxObject__set_pchflags
))
177 $$(call gb_CxxObject__command
,$$@
,$$*,$$<,$$(call gb_CxxObject_get_dep_target
,$$*))
179 ifeq ($(gb_FULLDEPS
),$(true
))
180 $$(call gb_CxxObject_get_dep_target
,%) : $$(call gb_CxxObject_get_target
,%)
181 $$(if
$$(wildcard $$@
),touch
$$@
,\
182 $$(eval
$$(gb_CxxObject__set_pchflags
))\
183 $$(call gb_Object__command_dep
,$$@
,$$(call gb_CxxObject_get_target
,$$*)))
188 $(foreach repo
,$(gb_CxxObject_REPOS
),$(eval
$(call gb_CxxObject__rules
,$(repo
))))
190 gb_CxxObject_CxxObject
=
195 gb_GenCObject_get_source
= $(WORKDIR
)/$(1).c
196 # defined by platform
197 # gb_CObject__command
199 $(call gb_GenCObject_get_target
,%) : $(call gb_GenCObject_get_source
,%)
200 $(call gb_CObject__command
,$@
,$*,$<,$(call gb_GenCObject_get_dep_target
,$*))
202 ifeq ($(gb_FULLDEPS
),$(true
))
203 $(call gb_GenCObject_get_dep_target
,%) : $(call gb_GenCObject_get_target
,%)
204 $(if
$(wildcard $@
),touch
$@
,\
205 $(call gb_Object__command_dep
,$@
,$(call gb_GenCObject_get_target
,$*)))
208 gb_GenCObject_GenCObject
=
213 gb_GenCxxObject_get_source
= $(WORKDIR
)/$(1).
cxx
214 # defined by platform
215 # gb_CxxObject__command
217 $(call gb_GenCxxObject_get_target
,%) : $(call gb_GenCxxObject_get_source
,%)
218 $(call gb_CxxObject__command
,$@
,$*,$<,$(call gb_GenCxxObject_get_dep_target
,$*))
220 ifeq ($(gb_FULLDEPS
),$(true
))
221 $(call gb_GenCxxObject_get_dep_target
,%) : $(call gb_GenCxxObject_get_target
,%)
222 $(if
$(wildcard $@
),touch
$@
,\
223 $(call gb_Object__command_dep
,$@
,$(call gb_GenCxxObject_get_target
,$*)))
226 gb_GenCxxObject_GenCxxObject
=
229 gb_YaccObject_get_source
= $(1)/$(2).y
231 .PHONY
: $(call gb_YaccObject_get_clean_target
,%)
232 $(call gb_YaccObject_get_clean_target
,%) :
233 $(call gb_Output_announce
,$(2),$(false
),YAC
,3)
234 $(call gb_Helper_abbreviate_dirs
,\
235 rm -f
$(call gb_YaccObject_get_header_target
,$*) $(call gb_YaccObject__get_generated_source
,$*))
237 gb_YaccObject__get_generated_source
= $(WORKDIR
)/$(1).
cxx
239 define gb_YaccObject_YaccObject
240 $(call gb_YaccObject_get_target
,$(1)) : $(call gb_YaccObject__get_generated_source
,$(1)) $(call gb_YaccObject_get_header_target
,$(1))
241 $(call gb_YaccObject_get_header_target
,$(1)) :|
$(call gb_YaccObject__get_generated_source
,$(1))
242 $(call gb_YaccObject__get_generated_source
,$(1)) : $(call gb_YaccObject_get_source
,$(gb_REPOS
),$(1))
243 $$(call gb_YaccObject__command
,$(call gb_YaccObject_get_source
,$(gb_REPOS
),$(1)),$(1),$(call gb_YaccObject__get_generated_source
,$(1)),$(call gb_YaccObject_get_header_target
,$(1)))
249 # defined by platform
250 # gb_YaccObject__command(grammar-file, stem-for-message, source-target, include-target)
254 gb_ObjCxxObject_REPOS
:= $(gb_REPOS
)
256 gb_ObjCxxObject_get_source
= $(1)/$(2).mm
257 # defined by platform
258 # gb_ObjCxxObject__command
260 define gb_ObjCxxObject__rules
261 $$(call gb_ObjCxxObject_get_target
,%) : $$(call gb_ObjCxxObject_get_source
,$(1),%)
262 $$(call gb_ObjCxxObject__command
,$$@
,$$*,$$<,$$(call gb_ObjCxxObject_get_dep_target
,$$*))
264 ifeq ($(gb_FULLDEPS
),$(true
))
265 $$(call gb_ObjCxxObject_get_dep_target
,%) : $$(call gb_ObjCxxObject_get_target
,%)
266 $$(if
$$(wildcard $$@
),touch
$$@
,\
267 $$(call gb_Object__command_dep
,$$@
,$$(call gb_ObjCxxObject_get_target
,$$*)))
272 $(foreach repo
,$(gb_ObjCxxObject_REPOS
),$(eval
$(call gb_ObjCxxObject__rules
,$(repo
))))
274 gb_ObjCxxObject_ObjCxxObject
=
278 gb_ObjCObject_REPOS
:= $(gb_REPOS
)
280 gb_ObjCObject_get_source
= $(1)/$(2).m
281 # defined by platform
282 # gb_ObjCObject__command
284 # this rule generates an "always rebuild" dep file, to have something to include.
285 # the dep file will be overridden on the fly, when the object is compiled
286 ifeq ($(gb_FULLDEPS
),$(true
))
287 define gb_ObjCObject__command_dep
288 mkdir
-p
$(dir $(1)) && \
289 echo
'$(call gb_ObjCObject_get_target,$(2)) : $$(gb_Helper_PHONY)' > $(1)
293 gb_ObjCObject__command_dep
=
296 define gb_ObjCObject__rules
297 $$(call gb_ObjCObject_get_target
,%) : $$(call gb_ObjCObject_get_source
,$(1),%)
298 $$(call gb_ObjCObject__command
,$$@
,$$*,$$<,$$(DEFS
),$$(OBJCFLAGS
),$$(INCLUDE_STL
) $$(INCLUDE
))
300 ifeq ($(gb_FULLDEPS
),$(true
))
301 $$(call gb_ObjCObject_get_dep_target
,%) : $$(call gb_ObjCObject_get_source
,$(1),%)
302 $$(call gb_ObjCObject__command_dep
,$$@
,$$*,$$<,$$(DEFS
),$$(OBJCFLAGS
),$$(INCLUDE_STL
) $$(INCLUDE
))
307 $(foreach repo
,$(gb_ObjCObject_REPOS
),$(eval
$(call gb_ObjCObject__rules
,$(repo
))))
309 gb_ObjCObject_ObjCObject
=
315 gb_AsmObject_REPOS
:= $(gb_REPOS
)
317 # defined by platform
318 # gb_AsmObject_get_source (.asm on Windows, .s elsewhere)
319 # gb_AsmObject__command
321 define gb_AsmObject__rules
322 $$(call gb_AsmObject_get_target
,%) : $$(call gb_AsmObject_get_source
,$(1),%)
323 $$(call gb_AsmObject__command
,$$@
,$$*,$$<,$$(call gb_AsmObject_get_dep_target
,$$*))
325 ifeq ($(gb_FULLDEPS
),$(true
))
326 $$(call gb_AsmObject_get_dep_target
,%) : $$(call gb_AsmObject_get_target
,%)
327 $$(if
$$(wildcard $$@
),touch
$$@
,\
328 $$(call gb_Object__command_dep
,$$@
,$$(call gb_AsmObject_get_target
,$$*)))
333 $(foreach repo
,$(gb_AsmObject_REPOS
),$(eval
$(call gb_AsmObject__rules
,$(repo
))))
335 gb_AsmObject_AsmObject
=
340 gb_LinkTarget_DEFAULTDEFS
:= $(gb_GLOBALDEFS
)
341 gb_LinkTarget_OBJECTOWNER
:=
342 gb_LinkTarget_OBJECTS
:=
344 # defined by platform
345 # gb_LinkTarget_CXXFLAGS
346 # gb_LinkTarget_LDFLAGS
347 # gb_LinkTarget_INCLUDE
348 # gb_LinkTarget_INCLUDE_STL
350 .PHONY
: $(call gb_LinkTarget_get_clean_target
,%)
351 $(call gb_LinkTarget_get_clean_target
,%) :
352 $(call gb_Output_announce
,$*,$(false
),LNK
,4)
353 RESPONSEFILE
=$(call var2file
,$(shell $(gb_MKTEMP
)),200,\
354 $(WORKDIR
)/GenCObject
/$(notdir $*) \
355 $(WORKDIR
)/GenCxxObject
/$(nodir
$*) \
356 $(foreach object
,$(COBJECTS
),$(call gb_CObject_get_target
,$(object
))) \
357 $(foreach object
,$(COBJECTS
),$(call gb_CObject_get_dep_target
,$(object
))) \
358 $(foreach object
,$(CXXOBJECTS
),$(call gb_CxxObject_get_target
,$(object
))) \
359 $(foreach object
,$(CXXOBJECTS
),$(call gb_CxxObject_get_dep_target
,$(object
))) \
360 $(foreach object
,$(OBJCOBJECTS
),$(call gb_ObjCObject_get_target
,$(object
))) \
361 $(foreach object
,$(OBJCOBJECTS
),$(call gb_ObjCObject_get_dep_target
,$(object
))) \
362 $(foreach object
,$(OBJCXXOBJECTS
),$(call gb_ObjCxxObject_get_target
,$(object
))) \
363 $(foreach object
,$(OBJCXXOBJECTS
),$(call gb_ObjCxxObject_get_dep_target
,$(object
))) \
364 $(foreach object
,$(ASMOBJECTS
),$(call gb_AsmObject_get_target
,$(object
))) \
365 $(foreach object
,$(ASMOBJECTS
),$(call gb_AsmObject_get_dep_target
,$(object
))) \
366 $(foreach object
,$(GENCOBJECTS
),$(call gb_GenCObject_get_dep_target
,$(object
))) \
367 $(foreach object
,$(GENCXXOBJECTS
),$(call gb_GenCxxObject_get_dep_target
,$(object
))) \
368 $(call gb_LinkTarget_get_target
,$*) \
369 $(call gb_LinkTarget_get_dep_target
,$*) \
370 $(call gb_LinkTarget_get_headers_target
,$*) \
371 $(call gb_LinkTarget_get_external_headers_target
,$*) \
372 $(call gb_LinkTarget_get_objects_list
,$*) \
375 cat
$${RESPONSEFILE} /dev
/null | xargs
-n
200 rm -fr
&& \
376 rm -f
$${RESPONSEFILE}
379 # cat the deps of all objects in one file, then we need only open that one file
380 define gb_LinkTarget__command_dep
381 $(call gb_Output_announce
,LNK
:$(2),$(true
),DEP
,1)
382 $(call gb_Helper_abbreviate_dirs
,\
383 mkdir
-p
$(dir $(1)) && \
384 RESPONSEFILE
=$(call var2file
,$(shell $(gb_MKTEMP
)),200,\
385 $(foreach object
,$(3),$(call gb_CObject_get_dep_target
,$(object
))) \
386 $(foreach object
,$(4),$(call gb_CxxObject_get_dep_target
,$(object
))) \
387 $(foreach object
,$(5),$(call gb_ObjCObject_get_dep_target
,$(object
)))\
388 $(foreach object
,$(6),$(call gb_ObjCxxObject_get_dep_target
,$(object
)))\
389 $(foreach object
,$(7),$(call gb_AsmObject_get_dep_target
,$(object
)))\
390 $(foreach object
,$(8),$(call gb_GenCObject_get_dep_target
,$(object
))) \
391 $(foreach object
,$(9),$(call gb_GenCxxObject_get_dep_target
,$(object
))) \
393 $(SOLARENV
)/bin
/concat-deps.pl
$${RESPONSEFILE} > $(1)) && \
394 rm -f
$${RESPONSEFILE}
398 define gb_LinkTarget__command_objectlist
399 TEMPFILE
=$(call var2file
,$(shell $(gb_MKTEMP
)),200,\
400 $(foreach object
,$(COBJECTS
),$(call gb_CObject_get_target
,$(object
))) \
401 $(foreach object
,$(CXXOBJECTS
),$(call gb_CxxObject_get_target
,$(object
))) \
402 $(foreach object
,$(OBJCOBJECTS
),$(call gb_ObjCObject_get_target
,$(object
))) \
403 $(foreach object
,$(OBJCXXOBJECTS
),$(call gb_ObjCxxObject_get_target
,$(object
))) \
404 $(foreach object
,$(ASMOBJECTS
),$(call gb_AsmObject_get_target
,$(object
))) \
405 $(foreach object
,$(GENCOBJECTS
),$(call gb_GenCObject_get_target
,$(object
))) \
406 $(foreach object
,$(GENCXXOBJECTS
),$(call gb_GenCxxObject_get_target
,$(object
)))) && \
407 $(if
$(EXTRAOBJECTLISTS
),cat
$(EXTRAOBJECTLISTS
) >> $${TEMPFILE} && ) \
408 mv
$${TEMPFILE} $(call gb_LinkTarget_get_objects_list
,$(2))
412 $(call gb_LinkTarget_get_target
,%) : $(call gb_LinkTarget_get_headers_target
,%) $(gb_Helper_MISCDUMMY
)
413 $(call gb_LinkTarget__command
,$@
,$*)
414 $(call gb_LinkTarget__command_objectlist
,$@
,$*)
416 ifeq ($(gb_FULLDEPS
),$(true
))
417 $(call gb_LinkTarget_get_target
,%) : $(call gb_LinkTarget_get_dep_target
,%)
418 $(call gb_LinkTarget_get_dep_target
,%) : |
$(call gb_LinkTarget_get_headers_target
,%)
419 $(call gb_LinkTarget__command_dep
,$@
,$*,$(COBJECTS
),$(CXXOBJECTS
),$(OBJCOBJECTS
),$(OBJCXXOBJECTS
),$(ASMOBJECTS
),$(GENCOBJECTS
),$(GENCXXOBJECTS
))
422 # Ok, this is some dark voodoo: When declaring a linktarget with
423 # gb_LinkTarget_LinkTarget we set SELF in the headertarget to name of the
424 # target. When the rule for the headertarget is executed and SELF does not
425 # match the target name, we are depending on a linktarget that was never
426 # declared. In a full build exclusively in gbuild that should never happen.
427 # However, partial gbuild build will not know about how to build lower level
428 # linktargets, just as gbuild can not know about linktargets generated in the
429 # old build.pl/dmake system. Once all is migrated, gbuild should error out
430 # when is is told to depend on a linktarget it does not know about and not
432 define gb_LinkTarget__get_external_headers_check
434 $$(eval
$$(call gb_Output_info
,LinkTarget
$$* not defined
: Assuming headers to be there
!,ALL
))
436 $$@
: COMMAND
:= $$(call gb_Helper_abbreviate_dirs
, mkdir
-p
$$(dir $$@
) && touch
$$@
&& mkdir
-p
$(call gb_LinkTarget_get_target
,)pdb
/$$(dir $$*))
440 $(call gb_LinkTarget_get_external_headers_target
,%) :
441 $(eval
$(gb_LinkTarget__get_external_headers_check
))
444 $(call gb_LinkTarget_get_headers_target
,%) : $(call gb_LinkTarget_get_external_headers_target
,%)
445 $(call gb_Helper_abbreviate_dirs
,\
446 mkdir
-p
$(dir $@
) && touch
$@
)
448 # Explanation of some of the targets:
449 # - gb_LinkTarget_get_external_headers_target is the targets that guarantees all
450 # headers from linked against libraries are in OUTDIR.
451 # - gb_LinkTarget_get_headers_target is the target that guarantees all headers
452 # from the linked against the libraries and the linktargets own headers
453 # (including generated headers) are in the OUTDIR.
454 # - gb_LinkTarget_get_target links the objects into a file in WORKDIR.
455 # gb_LinkTarget_get_target depends on gb_LinkTarget_get_headers_target which in
456 # turn depends gb_LinkTarget_get_external_headers_target.
457 # gb_LinkTarget_get_target depends additionally on the objects, which in turn
458 # depend build-order only on the gb_LinkTarget_get_headers_target. The build
459 # order-only dependency ensures all headers to be there for compiling and
460 # dependency generation without causing all objects to be rebuild when one
461 # header changes. Only the ones with an explicit dependency in their generated
462 # dependency file will be rebuild.
464 # gb_LinkTarget_get_target is the target that links the objects into a file in
466 # Explanation of some of the variables:
467 # - AUXTARGETS are the additionally generated files that need to be cleaned out
469 # - PCH_CXXFLAGS and PCH_DEFS are the flags that the precompiled headers will
470 # be compiled with. They should never be overridden in a single object
472 # - TARGETTYPE is the type of linktarget as some platforms need very different
473 # command to link different targettypes.
475 # Since most variables are set on the linktarget and not on the object, the
476 # object learns about these setting via GNU makes scoping of target variables.
477 # Therefore it is important that objects are only directly depended on by the
478 # linktarget. This for example means that you cannot build a single object
479 # alone, because then you would directly depend on the object.
481 # A note about flags: because the overriding the global variables with a target
482 # local variable of the same name is considered obscure, the target local
483 # variables have a T_ prefix.
484 define gb_LinkTarget_LinkTarget
485 $(call gb_LinkTarget_get_clean_target
,$(1)) : AUXTARGETS
:=
486 $(call gb_LinkTarget_get_external_headers_target
,$(1)) : SELF
:= $(1)
487 $(call gb_LinkTarget_get_target
,$(1)) : DLLTARGET
:=
488 $(call gb_LinkTarget_get_clean_target
,$(1)) \
489 $(call gb_LinkTarget_get_target
,$(1)) : COBJECTS
:=
490 $(call gb_LinkTarget_get_clean_target
,$(1)) \
491 $(call gb_LinkTarget_get_target
,$(1)) : CXXOBJECTS
:=
492 $(call gb_LinkTarget_get_clean_target
,$(1)) \
493 $(call gb_LinkTarget_get_target
,$(1)) : YACCOBJECT
:=
494 $(call gb_LinkTarget_get_clean_target
,$(1)) \
495 $(call gb_LinkTarget_get_target
,$(1)) : T_YACCFLAGS
:= $$(gb_LinkTarget_YYACFLAGS
) $(YACCFLAGS
)
496 $(call gb_LinkTarget_get_clean_target
,$(1)) \
497 $(call gb_LinkTarget_get_target
,$(1)) : OBJCOBJECTS
:=
498 $(call gb_LinkTarget_get_clean_target
,$(1)) \
499 $(call gb_LinkTarget_get_target
,$(1)) : OBJCXXOBJECTS
:=
500 $(call gb_LinkTarget_get_clean_target
,$(1)) \
501 $(call gb_LinkTarget_get_target
,$(1)) : ASMOBJECTS
:=
502 $(call gb_LinkTarget_get_clean_target
,$(1)) \
503 $(call gb_LinkTarget_get_target
,$(1)) : GENCOBJECTS
:=
504 $(call gb_LinkTarget_get_clean_target
,$(1)) \
505 $(call gb_LinkTarget_get_target
,$(1)) : GENCXXOBJECTS
:=
506 $(call gb_LinkTarget_get_headers_target
,$(1)) \
507 $(call gb_LinkTarget_get_target
,$(1)) : T_CFLAGS
:= $$(gb_LinkTarget_CFLAGS
) $(CFLAGS
)
508 $(call gb_LinkTarget_get_headers_target
,$(1)) \
509 $(call gb_LinkTarget_get_target
,$(1)) : T_CXXFLAGS
:= $$(gb_LinkTarget_CXXFLAGS
)
510 $(call gb_LinkTarget_get_headers_target
,$(1)) \
511 $(call gb_LinkTarget_get_target
,$(1)) : PCH_CXXFLAGS
:= $$(gb_LinkTarget_CXXFLAGS
) $(CXXFLAGS
)
512 $(call gb_LinkTarget_get_target
,$(1)) : T_OBJCXXFLAGS
:= $$(gb_LinkTarget_OBJCXXFLAGS
) $(OBJCXXFLAGS
)
513 $(call gb_LinkTarget_get_target
,$(1)) : T_OBJCFLAGS
:= $$(gb_LinkTarget_OBJCFLAGS
) $(OBJCFLAGS
)
514 $(call gb_LinkTarget_get_headers_target
,$(1)) \
515 $(call gb_LinkTarget_get_target
,$(1)) : DEFS
:= $$(gb_LinkTarget_DEFAULTDEFS
) $(CPPFLAGS
)
516 $(call gb_LinkTarget_get_headers_target
,$(1)) \
517 $(call gb_LinkTarget_get_target
,$(1)) : PCH_DEFS
:= $$(gb_LinkTarget_DEFAULTDEFS
) $(CPPFLAGS
)
518 $(call gb_LinkTarget_get_headers_target
,$(1)) \
519 $(call gb_LinkTarget_get_target
,$(1)) : INCLUDE
:= $$(gb_LinkTarget_INCLUDE
)
520 $(call gb_LinkTarget_get_headers_target
,$(1)) \
521 $(call gb_LinkTarget_get_target
,$(1)) : INCLUDE_STL
:= $$(gb_LinkTarget_INCLUDE_STL
)
522 $(call gb_LinkTarget_get_target
,$(1)) : T_LDFLAGS
:= $$(gb_LinkTarget_LDFLAGS
) $(LDFLAGS
)
523 $(call gb_LinkTarget_get_target
,$(1)) : LINKED_LIBS
:=
524 $(call gb_LinkTarget_get_target
,$(1)) : LINKED_STATIC_LIBS
:=
525 $(call gb_LinkTarget_get_target
,$(1)) : LIBS
:=
526 $(call gb_LinkTarget_get_target
,$(1)) : TARGETTYPE
:=
527 $(call gb_LinkTarget_get_headers_target
,$(1)) \
528 $(call gb_LinkTarget_get_target
,$(1)) : PCH_NAME
:=
529 $(call gb_LinkTarget_get_target
,$(1)) : PCHOBJS
:=
530 $(call gb_LinkTarget_get_headers_target
,$(1)) \
531 $(call gb_LinkTarget_get_target
,$(1)) : PDBFILE
:=
532 $(call gb_LinkTarget_get_target
,$(1)) : EXTRAOBJECTLISTS
:=
533 $(call gb_LinkTarget_get_target
,$(1)) : NATIVERES
:=
535 ifeq ($(gb_FULLDEPS
),$(true
))
536 -include $(call gb_LinkTarget_get_dep_target
,$(1))
537 $(call gb_LinkTarget_get_dep_target
,$(1)) : COBJECTS
:=
538 $(call gb_LinkTarget_get_dep_target
,$(1)) : CXXOBJECTS
:=
539 $(call gb_LinkTarget_get_dep_target
,$(1)) : OBJCOBJECTS
:=
540 $(call gb_LinkTarget_get_dep_target
,$(1)) : OBJCXXOBJECTS
:=
541 $(call gb_LinkTarget_get_dep_target
,$(1)) : ASMOBJECTS
:=
542 $(call gb_LinkTarget_get_dep_target
,$(1)) : GENCOBJECTS
:=
543 $(call gb_LinkTarget_get_dep_target
,$(1)) : GENCXXOBJECTS
:=
544 $(call gb_LinkTarget_get_dep_target
,$(1)) : YACCOBJECTS
:=
545 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_CFLAGS
:= $$(gb_LinkTarget_CFLAGS
) $(CFLAGS
)
546 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_CXXFLAGS
:= $$(gb_LinkTarget_CXXFLAGS
)
547 $(call gb_LinkTarget_get_dep_target
,$(1)) : PCH_CXXFLAGS
:= $$(gb_LinkTarget_CXXFLAGS
) $(CXXFLAGS
)
548 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_OBJCXXFLAGS
:= $$(gb_LinkTarget_OBJCXXFLAGS
) $(OBJCXXFLAGS
)
549 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_OBJCFLAGS
:= $$(gb_LinkTarget_OBJCFLAGS
) $(OBJCFLAGS
)
550 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_YACCFLAGS
:= $$(gb_LinkTarget_YYACFLAGS
) $(YACCFLAGS
)
551 $(call gb_LinkTarget_get_dep_target
,$(1)) : DEFS
:= $$(gb_LinkTarget_DEFAULTDEFS
) $(CPPFLAGS
)
552 $(call gb_LinkTarget_get_dep_target
,$(1)) : PCH_DEFS
:= $$(gb_LinkTarget_DEFAULTDEFS
) $(CPPFLAGS
)
553 $(call gb_LinkTarget_get_dep_target
,$(1)) : INCLUDE
:= $$(gb_LinkTarget_INCLUDE
)
554 $(call gb_LinkTarget_get_dep_target
,$(1)) : INCLUDE_STL
:= $$(gb_LinkTarget_INCLUDE_STL
)
555 $(call gb_LinkTarget_get_dep_target
,$(1)) : TARGETTYPE
:=
556 $(call gb_LinkTarget_get_dep_target
,$(1)) : PCH_NAME
:=
557 $(call gb_LinkTarget_get_dep_target
,$(1)) : EXTRAOBJECTLISTS
:=
562 define gb_LinkTarget_add_defs
563 $(call gb_LinkTarget_get_headers_target
,$(1)) \
564 $(call gb_LinkTarget_get_target
,$(1)) : DEFS
+= $(2)
565 $(call gb_LinkTarget_get_headers_target
,$(1)) \
566 $(call gb_LinkTarget_get_target
,$(1)) : PCH_DEFS
+= $(2)
567 ifeq ($(gb_FULLDEPS
),$(true
))
568 $(call gb_LinkTarget_get_dep_target
,$(1)) : DEFS
+= $(2)
569 $(call gb_LinkTarget_get_dep_target
,$(1)) : PCH_DEFS
+= $(2)
573 define gb_LinkTarget_set_defs
575 $$(call gb_Output_error
,\
576 gb_LinkTarget_set_defs
: use gb_LinkTarget_add_defs instead.
)
578 $(call gb_LinkTarget_get_headers_target
,$(1)) \
579 $(call gb_LinkTarget_get_target
,$(1)) : DEFS
:= $(2)
580 $(call gb_LinkTarget_get_headers_target
,$(1)) \
581 $(call gb_LinkTarget_get_target
,$(1)) : PCH_DEFS
:= $(2)
583 ifeq ($(gb_FULLDEPS
),$(true
))
584 $(call gb_LinkTarget_get_dep_target
,$(1)) : DEFS
:= $(2)
585 $(call gb_LinkTarget_get_dep_target
,$(1)) : PCH_DEFS
:= $(2)
591 define gb_LinkTarget_add_cflags
592 $(call gb_LinkTarget_get_target
,$(1)) : T_CFLAGS
+= $(2)
593 ifeq ($(gb_FULLDEPS
),$(true
))
594 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_CFLAGS
+= $(2)
599 define gb_LinkTarget_set_cflags
601 $$(call gb_Output_error
,\
602 gb_LinkTarget_set_cflags
: use gb_LinkTarget_add_cflags instead.
)
604 $(call gb_LinkTarget_get_target
,$(1)) : T_CFLAGS
:= $(2)
605 ifeq ($(gb_FULLDEPS
),$(true
))
606 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_CFLAGS
:= $(2)
612 define gb_LinkTarget_add_cxxflags
613 $(call gb_LinkTarget_get_headers_target
,$(1)) \
614 $(call gb_LinkTarget_get_target
,$(1)) : T_CXXFLAGS
+= $(2)
615 $(call gb_LinkTarget_get_headers_target
,$(1)) \
616 $(call gb_LinkTarget_get_target
,$(1)) : PCH_CXXFLAGS
+= $(2)
617 ifeq ($(gb_FULLDEPS
),$(true
))
618 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_CXXFLAGS
+= $(2)
619 $(call gb_LinkTarget_get_dep_target
,$(1)) : PCH_CXXFLAGS
+= $(2)
623 define gb_LinkTarget_set_cxxflags
625 $$(call gb_Output_error
,\
626 gb_LinkTarget_set_cxxflags
: use gb_LinkTarget_add_cxxflags instead.
)
628 $(call gb_LinkTarget_get_headers_target
,$(1)) \
629 $(call gb_LinkTarget_get_target
,$(1)) : T_CXXFLAGS
:= $(2)
630 $(call gb_LinkTarget_get_headers_target
,$(1)) \
631 $(call gb_LinkTarget_get_target
,$(1)) : PCH_CXXFLAGS
:= $(2)
632 ifeq ($(gb_FULLDEPS
),$(true
))
633 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_CXXFLAGS
:= $(2)
634 $(call gb_LinkTarget_get_dep_target
,$(1)) : PCH_CXXFLAGS
:= $(2)
640 define gb_LinkTarget_add_objcxxflags
641 $(call gb_LinkTarget_get_target
,$(1)) : T_OBJCXXFLAGS
+= $(2)
642 ifeq ($(gb_FULLDEPS
),$(true
))
643 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_OBJCXXFLAGS
+= $(2)
647 define gb_LinkTarget_set_objcxxflags
649 $$(call gb_Output_error
,\
650 gb_LinkTarget_set_objcxxflags
: use gb_LinkTarget_add_objcxxflags instead.
)
652 $(call gb_LinkTarget_get_target
,$(1)) : T_OBJCXXFLAGS
:= $(2)
653 ifeq ($(gb_FULLDEPS
),$(true
))
654 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_OBJCXXFLAGS
:= $(2)
660 define gb_LinkTarget_set_objcflags
661 $(call gb_LinkTarget_get_target
,$(1)) : T_OBJCFLAGS
:= $(2)
662 ifeq ($(gb_FULLDEPS
),$(true
))
663 $(call gb_LinkTarget_get_dep_target
,$(1)) : T_OBJCFLAGS
:= $(2)
668 define gb_LinkTarget_set_include
669 $(call gb_LinkTarget_get_headers_target
,$(1)) \
670 $(call gb_LinkTarget_get_target
,$(1)) : INCLUDE
:= $(2)
671 ifeq ($(gb_FULLDEPS
),$(true
))
672 $(call gb_LinkTarget_get_dep_target
,$(1)) : INCLUDE
:= $(2)
677 define gb_LinkTarget_set_include_stl
678 $(call gb_LinkTarget_get_headers_target
,$(1)) \
679 $(call gb_LinkTarget_get_target
,$(1)) : INCLUDE_STL
:= $(2)
680 ifeq ($(gb_FULLDEPS
),$(true
))
681 $(call gb_LinkTarget_get_dep_target
,$(1)) : INCLUDE_STL
:= $(2)
686 define gb_LinkTarget_add_ldflags
687 $(call gb_LinkTarget_get_target
,$(1)) : T_LDFLAGS
+= $(2)
690 # real use in RepositoryExternal.mk
691 define gb_LinkTarget_set_ldflags
692 $(call gb_LinkTarget_get_target
,$(1)) : T_LDFLAGS
:= $(2)
695 define gb_LinkTarget_add_libs
696 $(call gb_LinkTarget_get_target
,$(1)) : LIBS
+= $(2)
699 define gb_LinkTarget_add_api
700 $(call gb_LinkTarget_get_external_headers_target
,$(1)) :| \
701 $$(foreach api
,$(2),$$(call gb_Package_get_target
,$$(api
)_inc
))
702 $(call gb_LinkTarget_get_headers_target
,$(1)) \
703 $(call gb_LinkTarget_get_target
,$(1)) : INCLUDE
+= $$(foreach api
,$(2),-I
$(OUTDIR
)/inc
/$$(api
))
704 ifeq ($(gb_FULLDEPS
),$(true
))
705 $(call gb_LinkTarget_get_dep_target
,$(1)) : INCLUDE
+= $$(foreach api
,$(2),-I
$(OUTDIR
)/inc
/$$(api
))
710 define gb_LinkTarget_add_linked_libs
711 ifneq (,$$(filter-out $(gb_Library_KNOWNLIBS
),$(2)))
712 $$(eval
$$(call gb_Output_info
,currently known libraries are
: $(sort $(gb_Library_KNOWNLIBS
)),ALL
))
713 $$(eval
$$(call gb_Output_error
,Cannot link against library
/libraries
$$(filter-out $(gb_Library_KNOWNLIBS
),$(2)). Libraries must be registered in Repository.mk
))
716 ifeq ($(MERGELIBS
),TRUE
)
717 gb_LINKED_LIBS
:= $(if
$(filter $(gb_CORE_LIBS
),$(2)),merged
$(filter-out $(gb_CORE_LIBS
),$(2)),$(2))
719 gb_LINKED_LIBS
:= $(2)
722 $(call gb_LinkTarget_get_target
,$(1)) : LINKED_LIBS
+= $$(gb_LINKED_LIBS
)
724 $(call gb_LinkTarget_get_target
,$(1)) : $$(foreach lib
,$$(gb_LINKED_LIBS
),$$(call gb_Library_get_target
,$$(lib
)))
725 $(call gb_LinkTarget_get_external_headers_target
,$(1)) : \
726 $$(foreach lib
,$$(gb_LINKED_LIBS
),$$(call gb_Library_get_headers_target
,$$(lib
)))
730 define gb_LinkTarget_add_linked_static_libs
731 ifneq (,$$(filter-out $(gb_StaticLibrary_KNOWNLIBS
),$(2)))
732 $$(eval
$$(call gb_Output_info
, currently known static libraries are
: $(sort $(gb_StaticLibrary_KNOWNLIBS
)),ALL
))
733 $$(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
))
736 $(call gb_LinkTarget_get_target
,$(1)) : LINKED_STATIC_LIBS
+= $(2)
738 $(call gb_LinkTarget_get_target
,$(1)) : $$(foreach lib
,$(2),$$(call gb_StaticLibrary_get_target
,$$(lib
)))
739 $(call gb_LinkTarget_get_external_headers_target
,$(1)) : \
740 $$(foreach lib
,$(2),$$(call gb_StaticLibrary_get_headers_target
,$$(lib
)))
744 define gb_LinkTarget_add_linked_static_external_libs
746 $(call gb_LinkTarget_get_target
,$(1)) : LINKED_STATIC_LIBS
+= $(2)
748 $(call gb_LinkTarget_get_target
,$(1)) : $$(foreach lib
,$(2),$$(call gb_ExternalLibs_get_target
,$$(lib
)))
749 $(call gb_LinkTarget_get_external_headers_target
,$(1)) : $$(foreach lib
,$(2),$$(call gb_ExternalLibs_get_target
,$$(lib
)))
753 define gb_LinkTarget_add_cobject
754 $(if
$(wildcard $(call gb_CObject_get_source
,$(SRCDIR
),$(2))),,$(eval
$(call gb_Output_error
,No such source file
$(call gb_CObject_get_source
,$(SRCDIR
),$(2)))))
755 $(call gb_LinkTarget_get_target
,$(1)) : COBJECTS
+= $(2)
756 $(call gb_LinkTarget_get_clean_target
,$(1)) : COBJECTS
+= $(2)
758 $(call gb_LinkTarget_get_target
,$(1)) : $(call gb_CObject_get_target
,$(2))
759 $(call gb_CObject_get_target
,$(2)) : |
$(call gb_LinkTarget_get_headers_target
,$(1))
760 $(call gb_CObject_get_target
,$(2)) : T_CFLAGS
+= $(3)
762 ifeq ($(gb_FULLDEPS
),$(true
))
763 $(call gb_LinkTarget_get_dep_target
,$(1)) : COBJECTS
+= $(2)
764 $(call gb_LinkTarget_get_dep_target
,$(1)) : $(call gb_CObject_get_dep_target
,$(2))
767 ifeq ($(gb_CHECKOBJECTOWNER
),$(true
))
768 gb_LinkTarget_OBJECTOWNER
+= $(call gb_CObject_get_target
,$(2)):$(1)
769 gb_LinkTarget_OBJECTS
+= $(call gb_CObject_get_target
,$(2))
774 define gb_LinkTarget_add_cxxobject
775 $(if
$(wildcard $(call gb_CxxObject_get_source
,$(SRCDIR
),$(2))),,$(eval
$(call gb_Output_error
,No such source file
$(call gb_CxxObject_get_source
,$(SRCDIR
),$(2)))))
776 $(call gb_LinkTarget_get_target
,$(1)) : CXXOBJECTS
+= $(2)
777 $(call gb_LinkTarget_get_clean_target
,$(1)) : CXXOBJECTS
+= $(2)
779 $(call gb_LinkTarget_get_target
,$(1)) : $(call gb_CxxObject_get_target
,$(2))
780 $(call gb_CxxObject_get_target
,$(2)) : |
$(call gb_LinkTarget_get_headers_target
,$(1))
781 $(call gb_CxxObject_get_target
,$(2)) : T_CXXFLAGS
+= $(3)
783 ifeq ($(gb_FULLDEPS
),$(true
))
784 $(call gb_LinkTarget_get_dep_target
,$(1)) : CXXOBJECTS
+= $(2)
785 $(call gb_LinkTarget_get_dep_target
,$(1)) : $(call gb_CxxObject_get_dep_target
,$(2))
788 ifeq ($(gb_CHECKOBJECTOWNER
),$(true
))
789 gb_LinkTarget_OBJECTOWNER
+= $(call gb_CxxObject_get_target
,$(2)):$(1)
790 gb_LinkTarget_OBJECTS
+= $(call gb_CxxObject_get_target
,$(2))
795 define gb_LinkTarget_add_objcobject
796 $(if
$(wildcard $(call gb_ObjCObject_get_source
,$(SRCDIR
),$(2))),,$(eval
$(call gb_Output_error
,No such source file
$(call gb_ObjCObject_get_source
,$(SRCDIR
),$(2)))))
797 $(call gb_LinkTarget_get_target
,$(1)) : OBJCOBJECTS
+= $(2)
798 $(call gb_LinkTarget_get_clean_target
,$(1)) : OBJCOBJECTS
+= $(2)
800 $(call gb_LinkTarget_get_target
,$(1)) : $(call gb_ObjCObject_get_target
,$(2))
801 $(call gb_ObjCObject_get_target
,$(2)) : |
$(call gb_LinkTarget_get_headers_target
,$(1))
802 $(call gb_ObjCObject_get_target
,$(2)) : T_OBJCFLAGS
+= $(3)
804 ifeq ($(gb_FULLDEPS
),$(true
))
805 $(call gb_LinkTarget_get_dep_target
,$(1)) : OBJCOBJECTS
+= $(2)
806 $(call gb_LinkTarget_get_dep_target
,$(1)) : $(call gb_ObjCObject_get_dep_target
,$(2))
809 ifeq ($(gb_CHECKOBJECTOWNER
),$(true
))
810 gb_LinkTarget_OBJECTOWNER
+= $(call gb_ObjCObject_get_target
,$(2)):$(1)
811 gb_LinkTarget_OBJECTS
+= $(call gb_ObjCObject_get_target
,$(2))
816 define gb_LinkTarget_add_objcxxobject
817 $(if
$(wildcard $(call gb_ObjCxxObject_get_source
,$(SRCDIR
),$(2))),,$(eval
$(call gb_Output_error
,No such source file
$(call gb_ObjCxxObject_get_source
,$(SRCDIR
),$(2)))))
818 $(call gb_LinkTarget_get_target
,$(1)) : OBJCXXOBJECTS
+= $(2)
819 $(call gb_LinkTarget_get_clean_target
,$(1)) : OBJCXXOBJECTS
+= $(2)
821 $(call gb_LinkTarget_get_target
,$(1)) : $(call gb_ObjCxxObject_get_target
,$(2))
822 $(call gb_ObjCxxObject_get_target
,$(2)) : |
$(call gb_LinkTarget_get_headers_target
,$(1))
823 $(call gb_ObjCxxObject_get_target
,$(2)) : T_OBJCXXFLAGS
+= $(3)
825 ifeq ($(gb_FULLDEPS
),$(true
))
826 $(call gb_LinkTarget_get_dep_target
,$(1)) : OBJCXXOBJECTS
+= $(2)
827 $(call gb_LinkTarget_get_dep_target
,$(1)) : $(call gb_ObjCxxObject_get_dep_target
,$(2))
830 ifeq ($(gb_CHECKOBJECTOWNER
),$(true
))
831 gb_LinkTarget_OBJECTOWNER
+= $(call gb_ObjCxxObject_get_target
,$(2)):$(1)
832 gb_LinkTarget_OBJECTS
+= $(call gb_ObjCxxObject_get_target
,$(2))
837 define gb_LinkTarget_add_asmobject
838 $(if
$(wildcard $(call gb_AsmObject_get_source
,$(SRCDIR
),$(2))),,$(eval
$(call gb_Output_error
,No such source file
$(call gb_AsmObject_get_source
,$(SRCDIR
),$(2)))))
839 $(call gb_LinkTarget_get_target
,$(1)) : ASMOBJECTS
+= $(2)
840 $(call gb_LinkTarget_get_clean_target
,$(1)) : ASMOBJECTS
+= $(2)
842 $(call gb_LinkTarget_get_target
,$(1)) : $(call gb_AsmObject_get_target
,$(2))
843 $(call gb_AsmObject_get_target
,$(2)) : |
$(call gb_LinkTarget_get_headers_target
,$(1))
845 ifeq ($(gb_FULLDEPS
),$(true
))
846 $(call gb_LinkTarget_get_dep_target
,$(1)) : ASMOBJECTS
+= $(2)
847 $(call gb_LinkTarget_get_dep_target
,$(1)) : $(call gb_AsmObject_get_dep_target
,$(2))
850 ifeq ($(gb_CHECKOBJECTOWNER
),$(true
))
851 gb_LinkTarget_OBJECTOWNER
+= $(call gb_AsmObject_get_target
,$(2)):$(1)
852 gb_LinkTarget_OBJECTS
+= $(call gb_AsmObject_get_target
,$(2))
857 define gb_LinkTarget_add_generated_c_object
858 $(call gb_LinkTarget_get_target
,$(1)) : GENCOBJECTS
+= $(2)
859 $(call gb_LinkTarget_get_clean_target
,$(1)) : GENCOBJECTS
+= $(2)
861 $(call gb_LinkTarget_get_target
,$(1)) : $(call gb_GenCObject_get_target
,$(2))
862 $(call gb_GenCObject_get_source
,$(2)) : |
$(call gb_LinkTarget_get_headers_target
,$(1))
863 $(call gb_GenCObject_get_target
,$(2)) : T_CFLAGS
+= $(3)
865 ifeq ($(gb_FULLDEPS
),$(true
))
866 $(call gb_LinkTarget_get_dep_target
,$(1)) : GENCOBJECTS
+= $(2)
867 $(call gb_LinkTarget_get_dep_target
,$(1)) : $(call gb_GenCObject_get_dep_target
,$(2))
870 ifeq ($(gb_CHECKOBJECTOWNER
),$(true
))
871 gb_LinkTarget_OBJECTOWNER
+= $(call gb_GenCObject_get_target
,$(2)):$(1)
872 gb_LinkTarget_OBJECTS
+= $(call gb_GenCObject_get_target
,$(2))
877 define gb_LinkTarget_add_generated_cxx_object
878 $(call gb_LinkTarget_get_target
,$(1)) : GENCXXOBJECTS
+= $(2)
879 $(call gb_LinkTarget_get_clean_target
,$(1)) : GENCXXOBJECTS
+= $(2)
881 $(call gb_LinkTarget_get_target
,$(1)) : $(call gb_GenCxxObject_get_target
,$(2))
882 $(call gb_GenCxxObject_get_source
,$(2)) : |
$(call gb_LinkTarget_get_headers_target
,$(1))
883 $(call gb_GenCxxObject_get_target
,$(2)) : T_CXXFLAGS
+= $(3)
885 ifeq ($(gb_FULLDEPS
),$(true
))
886 $(call gb_LinkTarget_get_dep_target
,$(1)) : GENCXXOBJECTS
+= $(2)
887 $(call gb_LinkTarget_get_dep_target
,$(1)) : $(call gb_GenCxxObject_get_dep_target
,$(2))
890 ifeq ($(gb_CHECKOBJECTOWNER
),$(true
))
891 gb_LinkTarget_OBJECTOWNER
+= $(call gb_GenCxxObject_get_target
,$(2)):$(1)
892 gb_LinkTarget_OBJECTS
+= $(call gb_GenCxxObject_get_target
,$(2))
897 define gb_LinkTarget_yacc_add_cpp_dep
898 $(call gb_CxxObject_get_target
,$(2)) : $(call gb_YaccObject_get_target
,$(1))
901 # Add a bison grammar to the build.
902 # gb_LinkTarget_add_grammar(<component>,<grammar file>)
903 define gb_LinkTarget_add_grammar
904 $(call gb_YaccObject_YaccObject
,$(2))
905 $(call gb_LinkTarget_get_target
,$(1)) : $(call gb_YaccObject_get_target
,$(2))
906 $(call gb_LinkTarget_get_clean_target
,$(1)) : $(call gb_YaccObject_get_clean_target
,$(2))
907 $(call gb_LinkTarget_get_target
,$(1)) : GENCXXOBJECTS
+= $(2)
908 $(call gb_LinkTarget_get_clean_target
,$(1)) : GENCXXOBJECTS
+= $(2)
910 ifeq ($(gb_FULLDEPS
),$(true
))
911 $(call gb_LinkTarget_get_dep_target
,$(1)) : GENCXXOBJECTS
+= $(2)
912 $(call gb_LinkTarget_get_dep_target
,$(1)) : $(call gb_YaccObject_get_dep_target
,$(2))
915 $(call gb_LinkTarget__add_internal_headers
,$(1),$(gb_YaccObject_get_header_target
,$(2)))
919 # Add bison grammars to the build.
920 # gb_LinkTarget_add_grammars(<component>,<grammar file> [<grammar file>*])
921 define gb_LinkTarget_add_grammars
922 $(foreach grammar
,$(2),$(call gb_LinkTarget_add_grammar
,$(1),$(grammar
)))
925 define gb_LinkTarget_add_noexception_object
926 $(call gb_LinkTarget_add_cxxobject
,$(1),$(2),$(gb_LinkTarget_NOEXCEPTIONFLAGS
) $(CXXFLAGS
))
929 define gb_LinkTarget_add_exception_object
930 $(call gb_LinkTarget_add_cxxobject
,$(1),$(2),$(gb_LinkTarget_EXCEPTIONFLAGS
) $(CXXFLAGS
))
933 define gb_LinkTarget_add_cobjects
934 $(foreach obj
,$(2),$(call gb_LinkTarget_add_cobject
,$(1),$(obj
),$(3)))
937 define gb_LinkTarget_add_linktarget_objects
938 $(call gb_LinkTarget_get_target
,$(1)) : $(foreach linktarget
,$(2),$(call gb_LinkTarget_get_target
,$(linktarget
)))
939 $(call gb_LinkTarget_get_target
,$(1)) : EXTRAOBJECTLISTS
+= $(foreach linktarget
,$(2),$(call gb_LinkTarget_get_objects_list
,$(linktarget
)))
943 define gb_LinkTarget_add_library_objects
944 ifneq (,$$(filter-out $(gb_Library_KNOWNLIBS
),$(2)))
945 $$(eval
$$(call gb_Output_info
,currently known libraries are
: $(sort $(gb_Library_KNOWNLIBS
)),ALL
))
946 $$(eval
$$(call gb_Output_error
,Cannot import objects library
/libraries
$$(filter-out $(gb_Library_KNOWNLIBS
),$(2)). Libraries must be registered in Repository.mk
))
948 $(call gb_LinkTarget_add_linktarget_objects
,$(1),$(foreach lib
,$(2),$(call gb_Library_get_linktargetname
,$(lib
))))
952 define gb_LinkTarget_add_executable_objects
953 $(call gb_LinkTarget_add_linktarget_objects
,$(1),$(foreach exe
,$(2),$(call gb_Executable_get_linktargetname
,$(lib
))))
957 define gb_LinkTarget_add_cxxobjects
958 $(foreach obj
,$(2),$(call gb_LinkTarget_add_cxxobject
,$(1),$(obj
),$(3)))
961 define gb_LinkTarget_add_objcobjects
962 $(foreach obj
,$(2),$(call gb_LinkTarget_add_objcobject
,$(1),$(obj
),$(3)))
965 define gb_LinkTarget_add_objcxxobjects
966 $(foreach obj
,$(2),$(call gb_LinkTarget_add_objcxxobject
,$(1),$(obj
),$(3)))
969 define gb_LinkTarget_add_asmobjects
970 $(foreach obj
,$(2),$(call gb_LinkTarget_add_asmobject
,$(1),$(obj
),$(3)))
973 define gb_LinkTarget_add_noexception_objects
974 $(foreach obj
,$(2),$(call gb_LinkTarget_add_noexception_object
,$(1),$(obj
)))
977 define gb_LinkTarget_add_exception_objects
978 $(foreach obj
,$(2),$(call gb_LinkTarget_add_exception_object
,$(1),$(obj
)))
981 define gb_LinkTarget_add_generated_cobjects
982 $(foreach obj
,$(2),$(call gb_LinkTarget_add_generated_c_object
,$(1),$(obj
),$(3)))
985 define gb_LinkTarget_add_generated_cxxobjects
986 $(foreach obj
,$(2),$(call gb_LinkTarget_add_generated_cxx_object
,$(1),$(obj
),$(3)))
989 define gb_LinkTarget_add_generated_exception_object
990 $(call gb_LinkTarget_add_generated_cxx_object
,$(1),$(2),$(gb_LinkTarget_EXCEPTIONFLAGS
) $(gb_COMPILEROPTFLAGS
) $(CXXFLAGS
))
993 define gb_LinkTarget_add_generated_exception_objects
994 $(foreach obj
,$(2),$(call gb_LinkTarget_add_generated_exception_object
,$(1),$(obj
)))
997 define gb_LinkTarget_set_targettype
998 $(call gb_LinkTarget_get_target
,$(1)) \
999 $(call gb_LinkTarget_get_dep_target
,$(1)) : TARGETTYPE
:= $(2)
1002 define gb_LinkTarget_set_dlltarget
1003 $(call gb_LinkTarget_get_clean_target
,$(1)) \
1004 $(call gb_LinkTarget_get_target
,$(1)) : DLLTARGET
:= $(2)
1007 define gb_LinkTarget_set_auxtargets
1008 $(call gb_LinkTarget_get_clean_target
,$(1)) : AUXTARGETS
:= $(2)
1011 define gb_LinkTarget__add_internal_headers
1012 $(call gb_LinkTarget_get_headers_target
,$(1)) : $(2)
1013 $(2) :|
$(call gb_LinkTarget_get_external_headers_target
,$(1))
1017 define gb_LinkTarget_add_package_headers
1018 $(foreach package
,$(2),$(call gb_LinkTarget__add_internal_headers
,$(1),$(call gb_Package_get_target
,$(package
))))
1019 $(call gb_LinkTarget_get_clean_target
,$(1)) : $(foreach package
,$(2),$(call gb_Package_get_clean_target
,$(package
)))
1023 define gb_LinkTarget_add_sdi_headers
1024 $(call gb_LinkTarget__add_internal_headers
,$(1),$(foreach sdi
,$(2),$(call gb_SdiTarget_get_target
,$(sdi
))))
1025 $(call gb_LinkTarget_get_clean_target
,$(1)) : $(foreach sdi
,$(2),$(call gb_SdiTarget_get_clean_target
,$(sdi
)))
1028 define gb_LinkTarget__add_precompiled_header_impl
1029 $(call gb_LinkTarget__add_internal_headers
,$(1),$(call gb_PrecompiledHeader_get_target
,$(3)))
1030 $(call gb_LinkTarget_get_clean_target
,$(1)) : $(call gb_PrecompiledHeader_get_clean_target
,$(3))
1031 $(call gb_PrecompiledHeader_get_target
,$(3)) : $(2).
cxx
1033 $(call gb_LinkTarget__add_internal_headers
,$(1),$(call gb_NoexPrecompiledHeader_get_target
,$(3)))
1034 $(call gb_LinkTarget_get_clean_target
,$(1)) : $(call gb_NoexPrecompiledHeader_get_clean_target
,$(3))
1035 $(call gb_NoexPrecompiledHeader_get_target
,$(3)) : $(2).
cxx
1037 $(call gb_LinkTarget_get_target
,$(1)) : PCH_NAME
:= $(3)
1038 $(call gb_LinkTarget_get_target
,$(1)) : PCHOBJS
= $(call gb_PrecompiledHeader_get_target
,$(3)).obj
$(call gb_NoexPrecompiledHeader_get_target
,$(3)).obj
1040 $(call gb_LinkTarget_get_headers_target
,$(1)) \
1041 $(call gb_LinkTarget_get_target
,$(1)) : DEFS
:= $$(DEFS
) -DPRECOMPILED_HEADERS
1042 $(call gb_LinkTarget_get_headers_target
,$(1)) \
1043 $(call gb_LinkTarget_get_target
,$(1)) : PCH_DEFS
= $$(DEFS
)
1044 ifeq ($(gb_FULLDEPS
),$(true
))
1046 $(call gb_PrecompiledHeader_get_dep_target
,$(3)) \
1047 $(call gb_NoexPrecompiledHeader_get_dep_target
,$(3))
1048 $(call gb_LinkTarget_get_dep_target
,$(1)) : DEFS
:= $$(DEFS
) -DPRECOMPILED_HEADERS
1049 $(call gb_LinkTarget_get_dep_target
,$(1)) : PCH_DEFS
= $$(DEFS
)
1054 define gb_LinkTarget_add_precompiled_header
1055 ifeq ($(gb_ENABLE_PCH
),$(true
))
1056 $(call gb_LinkTarget__add_precompiled_header_impl
,$(1),$(2),$(notdir $(2)))
1061 define gb_LinkTarget_add_external_headers
1062 $(call gb_LinkTarget_get_headers_target
,$(1) : |
$(call gb_Package_get_target
,$(2)))
1065 # this forwards to functions that must be defined in RepositoryExternal.mk.
1066 # $(eval $(call gb_LinkTarget_use_external,library,external))
1067 define gb_LinkTarget_use_external
1068 $(if
$(filter undefined
,$(origin gb_LinkTarget__use_
$(2))),\
1069 $(error gb_LinkTarget_use_external
: unknown external
: $(2)),\
1070 $(call gb_LinkTarget__use_
$(2),$(1)))
1073 # $(call gb_LinkTarget_use_externals,library,externals)
1074 gb_LinkTarget_use_externals
= \
1075 $(foreach external
,$(2),$(call gb_LinkTarget_use_external
,$(1),$(external
)))
1078 # vim: set noet sw=4: