1*7871dc3eSAndrew Rist#************************************************************** 2*7871dc3eSAndrew Rist# 3*7871dc3eSAndrew Rist# Licensed to the Apache Software Foundation (ASF) under one 4*7871dc3eSAndrew Rist# or more contributor license agreements. See the NOTICE file 5*7871dc3eSAndrew Rist# distributed with this work for additional information 6*7871dc3eSAndrew Rist# regarding copyright ownership. The ASF licenses this file 7*7871dc3eSAndrew Rist# to you under the Apache License, Version 2.0 (the 8*7871dc3eSAndrew Rist# "License"); you may not use this file except in compliance 9*7871dc3eSAndrew Rist# with the License. You may obtain a copy of the License at 10*7871dc3eSAndrew Rist# 11*7871dc3eSAndrew Rist# http://www.apache.org/licenses/LICENSE-2.0 12*7871dc3eSAndrew Rist# 13*7871dc3eSAndrew Rist# Unless required by applicable law or agreed to in writing, 14*7871dc3eSAndrew Rist# software distributed under the License is distributed on an 15*7871dc3eSAndrew Rist# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*7871dc3eSAndrew Rist# KIND, either express or implied. See the License for the 17*7871dc3eSAndrew Rist# specific language governing permissions and limitations 18*7871dc3eSAndrew Rist# under the License. 19*7871dc3eSAndrew Rist# 20*7871dc3eSAndrew Rist#************************************************************** 21*7871dc3eSAndrew Rist 22*7871dc3eSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir 25cdf0e10cSrcweir# CObject class 26cdf0e10cSrcweir 27cdf0e10cSrcweirgb_CObject_REPOS := $(gb_REPOS) 28cdf0e10cSrcweir 29cdf0e10cSrcweirgb_CObject_get_source = $(1)/$(2).c 30cdf0e10cSrcweir# defined by platform 31cdf0e10cSrcweir# gb_CObject__command 32cdf0e10cSrcweir 33cdf0e10cSrcweir# this rule generates an "always rebuild" dep file, to have something to include. 34cdf0e10cSrcweir# the dep file will be overridden on the fly, when the object is compiled 35cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 36cdf0e10cSrcweirdefine gb_CObject__command_dep 37cdf0e10cSrcweirmkdir -p $(dir $(1)) && \ 38cdf0e10cSrcweir echo '$(call gb_CObject_get_target,$(2)) : $$(gb_Helper_PHONY)' > $(1) 39cdf0e10cSrcweir 40cdf0e10cSrcweirendef 41cdf0e10cSrcweirelse 42cdf0e10cSrcweirgb_CObject__command_dep = 43cdf0e10cSrcweirendif 44cdf0e10cSrcweir 45cdf0e10cSrcweirdefine gb_CObject__rules 46cdf0e10cSrcweir$$(call gb_CObject_get_target,%) : $$(call gb_CObject_get_source,$(1),%) 47cdf0e10cSrcweir $$(call gb_CObject__command,$$@,$$*,$$<,$$(DEFS),$$(CFLAGS),$$(INCLUDE)) 48cdf0e10cSrcweir 49cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 50cdf0e10cSrcweir$$(call gb_CObject_get_dep_target,%) : $$(call gb_CObject_get_source,$(1),%) 51cdf0e10cSrcweir $$(call gb_CObject__command_dep,$$@,$$*,$$<,$$(DEFS),$$(CFLAGS),$$(INCLUDE)) 52cdf0e10cSrcweirendif 53cdf0e10cSrcweir 54cdf0e10cSrcweirendef 55cdf0e10cSrcweir 56cdf0e10cSrcweir$(foreach repo,$(gb_CObject_REPOS),$(eval $(call gb_CObject__rules,$(repo)))) 57cdf0e10cSrcweir 58cdf0e10cSrcweir$(call gb_CObject_get_dep_target,%) : 59cdf0e10cSrcweir $(eval $(call gb_Output_error,Unable to find plain C file $(call gb_CObject_get_source,,$*) in the repositories: $(gb_CObject_REPOS))) 60cdf0e10cSrcweir 61cdf0e10cSrcweirgb_CObject_CObject = 62cdf0e10cSrcweir 63cdf0e10cSrcweir 64cdf0e10cSrcweir# CxxObject class 65cdf0e10cSrcweir 66cdf0e10cSrcweirgb_CxxObject_REPOS := $(gb_REPOS) 67cdf0e10cSrcweir 68cdf0e10cSrcweirgb_CxxObject_get_source = $(1)/$(2).cxx 69cdf0e10cSrcweir# defined by platform 70cdf0e10cSrcweir# gb_CxxObject__command 71cdf0e10cSrcweir 72cdf0e10cSrcweir# This rule generates an "always rebuild" dep file, to have something to 73cdf0e10cSrcweir# include. The dep file will be overridden on the fly, when the object is 74cdf0e10cSrcweir# compiled. 75cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 76cdf0e10cSrcweirdefine gb_CxxObject__command_dep 77cdf0e10cSrcweirmkdir -p $(dir $(1)) && \ 78cdf0e10cSrcweir echo '$(call gb_CxxObject_get_target,$(2)) : $$(gb_Helper_PHONY)' > $(1) 79cdf0e10cSrcweir 80cdf0e10cSrcweirendef 81cdf0e10cSrcweirelse 82cdf0e10cSrcweirgb_CxxObject__command_dep = 83cdf0e10cSrcweirendif 84cdf0e10cSrcweir 85cdf0e10cSrcweir# Only enable PCH if the PCH_CXXFLAGS and the PCH_DEFS (from the linktarget) 86cdf0e10cSrcweir# are the same as the CXXFLAGS and DEFS we want to use for this object. This 87cdf0e10cSrcweir# should usually be the case. The DEFS/CXXFLAGS would have too be manually 88cdf0e10cSrcweir# overridden for one object file for them to differ. PCH_CXXFLAGS/PCH_DEFS 89cdf0e10cSrcweir# should never be overridden on an object -- they should be the same as for the 90cdf0e10cSrcweir# whole linktarget. In general it should be cleaner to use a static library 91cdf0e10cSrcweir# compiled with different flags and link that in rather than mixing different 92cdf0e10cSrcweir# flags in one linktarget. 93cdf0e10cSrcweirdefine gb_CxxObject__set_pchflags 94cdf0e10cSrcweirifeq ($(gb_ENABLE_PCH),$(true)) 95cdf0e10cSrcweirifneq ($(strip $$(PCH_NAME)),) 96cdf0e10cSrcweirifeq ($$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_EXCEPTIONFLAGS)),$$(sort $$(CXXFLAGS) $$(DEFS))) 97cdf0e10cSrcweir$$@ : PCHFLAGS := $$(call gb_PrecompiledHeader_get_enableflags,$$(PCH_NAME)) 98cdf0e10cSrcweirelse 99cdf0e10cSrcweirifeq ($$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_NOEXCEPTIONFLAGS)),$$(sort $$(CXXFLAGS) $$(DEFS))) 100cdf0e10cSrcweir$$@ : PCHFLAGS := $$(call gb_NoexPrecompiledHeader_get_enableflags,$$(PCH_NAME)) 101cdf0e10cSrcweirelse 102cdf0e10cSrcweir$$(info No precompiled header available for $$*.) 103cdf0e10cSrcweir$$(info precompiled header flags ( ex) : $$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_EXCEPTIONFLAGS))) 104cdf0e10cSrcweir$$(info precompiled header flags (noex) : $$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_NOEXCEPTIONFLAGS))) 105cdf0e10cSrcweir$$(info . object flags : $$(sort $$(CXXFLAGS) $$(DEFS))) 106cdf0e10cSrcweir$$@ : PCHFLAGS := 107cdf0e10cSrcweirendif 108cdf0e10cSrcweirendif 109cdf0e10cSrcweirendif 110cdf0e10cSrcweirendif 111cdf0e10cSrcweirendef 112cdf0e10cSrcweir 113cdf0e10cSrcweirdefine gb_CxxObject__rules 114cdf0e10cSrcweir$$(call gb_CxxObject_get_target,%) : $$(call gb_CxxObject_get_source,$(1),%) 115cdf0e10cSrcweir $$(eval $$(gb_CxxObject__set_pchflags)) 116cdf0e10cSrcweir $$(call gb_CxxObject__command,$$@,$$*,$$<) 117cdf0e10cSrcweir 118cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 119cdf0e10cSrcweir$$(call gb_CxxObject_get_dep_target,%) : $$(call gb_CxxObject_get_source,$(1),%) 120cdf0e10cSrcweir $$(eval $$(gb_CxxObject__set_pchflags)) 121cdf0e10cSrcweir $$(call gb_CxxObject__command_dep,$$@,$$*,$$<) 122cdf0e10cSrcweirendif 123cdf0e10cSrcweir 124cdf0e10cSrcweirendef 125cdf0e10cSrcweir 126cdf0e10cSrcweir$(foreach repo,$(gb_CxxObject_REPOS),$(eval $(call gb_CxxObject__rules,$(repo)))) 127cdf0e10cSrcweir 128cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 129cdf0e10cSrcweir$(call gb_CxxObject_get_dep_target,%) : 130cdf0e10cSrcweir $(eval $(call gb_Output_error,Unable to find C++ file $(call gb_CxxObject_get_source,,$*) in repositories: $(gb_CxxObject_REPOS))) 131cdf0e10cSrcweir 132cdf0e10cSrcweirendif 133cdf0e10cSrcweir 134cdf0e10cSrcweirgb_CxxObject_CxxObject = 135cdf0e10cSrcweir 136cdf0e10cSrcweir 137cdf0e10cSrcweir# GenCxxObject class 138cdf0e10cSrcweir 139cdf0e10cSrcweirgb_GenCxxObject_get_source = $(WORKDIR)/$(1).cxx 140cdf0e10cSrcweir# defined by platform 141cdf0e10cSrcweir# gb_CxxObject__command 142cdf0e10cSrcweir 143cdf0e10cSrcweir# This rule generates an "always rebuild" dep file, to have something to 144cdf0e10cSrcweir# include. The dep file will be overridden on the fly, when the object is 145cdf0e10cSrcweir# compiled. 146cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 147cdf0e10cSrcweirdefine gb_GenCxxObject__command_dep 148cdf0e10cSrcweirmkdir -p $(dir $(1)) && \ 149cdf0e10cSrcweir echo '$(call gb_GenCxxObject_get_target,$(2)) : $$(gb_Helper_PHONY)' > $(1) 150cdf0e10cSrcweirendef 151cdf0e10cSrcweirelse 152cdf0e10cSrcweirgb_GenCxxObject__command_dep = 153cdf0e10cSrcweirendif 154cdf0e10cSrcweir 155cdf0e10cSrcweir$(call gb_GenCxxObject_get_target,%) : $(call gb_GenCxxObject_get_source,%) 156cdf0e10cSrcweir $(call gb_CxxObject__command,$@,$*,$<) 157cdf0e10cSrcweir 158cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 159cdf0e10cSrcweir$(call gb_GenCxxObject_get_dep_target,%) : $(call gb_GenCxxObject_get_source,%) 160cdf0e10cSrcweir $(call gb_GenCxxObject__command_dep,$@,$*,$<) 161cdf0e10cSrcweir 162cdf0e10cSrcweir$(call gb_GenCxxObject_get_dep_target,%) : 163cdf0e10cSrcweir $(eval $(call gb_Output_error,Unable to find generated C++ file $(call gb_GenCxxObject_get_source,$*) in WORKDIR.)) 164cdf0e10cSrcweirendif 165cdf0e10cSrcweir 166cdf0e10cSrcweirgb_GenCxxObject_GenCxxObject = 167cdf0e10cSrcweir 168cdf0e10cSrcweir 169cdf0e10cSrcweir# ObjCxxObject class 170cdf0e10cSrcweir# 171cdf0e10cSrcweirgb_ObjCxxObject_REPOS := $(gb_REPOS) 172cdf0e10cSrcweir 173cdf0e10cSrcweirgb_ObjCxxObject_get_source = $(1)/$(2).mm 174cdf0e10cSrcweir# defined by platform 175cdf0e10cSrcweir# gb_ObjCxxObject__command 176cdf0e10cSrcweir 177cdf0e10cSrcweir# this rule generates an "always rebuild" dep file, to have something to include. 178cdf0e10cSrcweir# the dep file will be overridden on the fly, when the object is compiled 179cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 180cdf0e10cSrcweirdefine gb_ObjCxxObject__command_dep 181cdf0e10cSrcweirmkdir -p $(dir $(1)) && \ 182cdf0e10cSrcweir echo '$(call gb_ObjCxxObject_get_target,$(2)) : $$(gb_Helper_PHONY)' > $(1) 183cdf0e10cSrcweir 184cdf0e10cSrcweirendef 185cdf0e10cSrcweirelse 186cdf0e10cSrcweirgb_ObjCxxObject__command_dep = 187cdf0e10cSrcweirendif 188cdf0e10cSrcweir 189cdf0e10cSrcweirdefine gb_ObjCxxObject__rules 190cdf0e10cSrcweir$$(call gb_ObjCxxObject_get_target,%) : $$(call gb_ObjCxxObject_get_source,$(1),%) 191cdf0e10cSrcweir $$(call gb_ObjCxxObject__command,$$@,$$*,$$<,$$(DEFS),$$(OBJCXXFLAGS),$$(INCLUDE_STL) $$(INCLUDE)) 192cdf0e10cSrcweir 193cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 194cdf0e10cSrcweir$$(call gb_ObjCxxObject_get_dep_target,%) : $$(call gb_ObjCxxObject_get_source,$(1),%) 195cdf0e10cSrcweir $$(call gb_ObjCxxObject__command_dep,$$@,$$*,$$<,$$(DEFS),$$(OBJCXXFLAGS),$$(INCLUDE_STL) $$(INCLUDE)) 196cdf0e10cSrcweirendif 197cdf0e10cSrcweir 198cdf0e10cSrcweirendef 199cdf0e10cSrcweir 200cdf0e10cSrcweir$(foreach repo,$(gb_ObjCxxObject_REPOS),$(eval $(call gb_ObjCxxObject__rules,$(repo)))) 201cdf0e10cSrcweir 202cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 203cdf0e10cSrcweir$(call gb_ObjCxxObject_get_dep_target,%) : 204cdf0e10cSrcweir $(eval $(call gb_Output_error,Unable to find Objective C++ file $(call gb_ObjCxxObject_get_source,,$*) in repositories: $(gb_ObjCxxObject_REPOS))) 205cdf0e10cSrcweirendif 206cdf0e10cSrcweir 207cdf0e10cSrcweirgb_ObjCxxObject_ObjCxxObject = 208cdf0e10cSrcweir 209cdf0e10cSrcweir 210cdf0e10cSrcweir 211cdf0e10cSrcweir# LinkTarget class 212cdf0e10cSrcweir 213cdf0e10cSrcweirgb_LinkTarget_DEFAULTDEFS := $(gb_GLOBALDEFS) 214cdf0e10cSrcweir# defined by platform 215cdf0e10cSrcweir# gb_LinkTarget_CXXFLAGS 216cdf0e10cSrcweir# gb_LinkTarget_LDFLAGS 217cdf0e10cSrcweir# gb_LinkTarget_INCLUDE 218cdf0e10cSrcweir# gb_LinkTarget_INCLUDE_STL 219cdf0e10cSrcweir 220cdf0e10cSrcweir.PHONY : $(call gb_LinkTarget_get_clean_target,%) 221cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,%) : 222cdf0e10cSrcweir $(call gb_Output_announce,$*,$(false),LNK,4) 223cdf0e10cSrcweir RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),200,\ 224cdf0e10cSrcweir $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ 225cdf0e10cSrcweir $(foreach object,$(COBJECTS),$(call gb_CObject_get_dep_target,$(object))) \ 226cdf0e10cSrcweir $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ 227cdf0e10cSrcweir $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_dep_target,$(object))) \ 228cdf0e10cSrcweir $(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \ 229cdf0e10cSrcweir $(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_dep_target,$(object))) \ 230cdf0e10cSrcweir $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ 231cdf0e10cSrcweir $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_dep_target,$(object))) \ 232cdf0e10cSrcweir $(call gb_LinkTarget_get_target,$*) \ 233cdf0e10cSrcweir $(call gb_LinkTarget_get_dep_target,$*) \ 234cdf0e10cSrcweir $(call gb_LinkTarget_get_headers_target,$*) \ 235cdf0e10cSrcweir $(call gb_LinkTarget_get_external_headers_target,$*) \ 236cdf0e10cSrcweir $(DLLTARGET) \ 237cdf0e10cSrcweir $(AUXTARGETS)) && \ 238cdf0e10cSrcweir cat $${RESPONSEFILE} /dev/null | xargs -n 200 rm -f && \ 239cdf0e10cSrcweir rm -f $${RESPONSEFILE} 240cdf0e10cSrcweir 241cdf0e10cSrcweir 242cdf0e10cSrcweir# cat the deps of all objects in one file, then we need only open that one file 243cdf0e10cSrcweirdefine gb_LinkTarget__command_dep 244cdf0e10cSrcweir$(call gb_Output_announce,LNK:$(2),$(true),DEP,1) 245cdf0e10cSrcweir$(call gb_Helper_abbreviate_dirs,\ 246cdf0e10cSrcweir mkdir -p $(dir $(1)) && \ 247cdf0e10cSrcweir RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),200,\ 248cdf0e10cSrcweir $(foreach object,$(3),$(call gb_CObject_get_dep_target,$(object))) \ 249cdf0e10cSrcweir $(foreach object,$(4),$(call gb_CxxObject_get_dep_target,$(object))) \ 250cdf0e10cSrcweir $(foreach object,$(5),$(call gb_ObjCxxObject_get_dep_target,$(object)))\ 251cdf0e10cSrcweir $(foreach object,$(6),$(call gb_GenCxxObject_get_dep_target,$(object)))\ 252cdf0e10cSrcweir ) && \ 253cdf0e10cSrcweir cat $${RESPONSEFILE} /dev/null | xargs -n 200 cat > $(1)) && \ 254cdf0e10cSrcweir rm -f $${RESPONSEFILE} 255cdf0e10cSrcweir 256cdf0e10cSrcweirendef 257cdf0e10cSrcweir 258cdf0e10cSrcweir$(call gb_LinkTarget_get_target,%) : $(call gb_LinkTarget_get_headers_target,%) $(gb_Helper_MISCDUMMY) 259cdf0e10cSrcweir $(call gb_LinkTarget__command,$@,$*) 260cdf0e10cSrcweir 261cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 262cdf0e10cSrcweir$(call gb_LinkTarget_get_target,%) : $(call gb_LinkTarget_get_dep_target,%) 263cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,%) : | $(call gb_LinkTarget_get_headers_target,%) 264cdf0e10cSrcweir $(call gb_LinkTarget__command_dep,$@,$*,$(COBJECTS),$(CXXOBJECTS),$(OBJCXXOBJECTS),$(GENCXXOBJECTS)) 265cdf0e10cSrcweirendif 266cdf0e10cSrcweir 267cdf0e10cSrcweir# Ok, this is some dark voodoo: When declaring a linktarget with 268cdf0e10cSrcweir# gb_LinkTarget_LinkTarget we set SELF in the headertarget to name of the 269cdf0e10cSrcweir# target. When the rule for the headertarget is executed and SELF does not 270cdf0e10cSrcweir# match the target name, we are depending on a linktarget that was never 271cdf0e10cSrcweir# declared. In a full build exclusively in gbuild that should never happen. 272cdf0e10cSrcweir# However, partial gbuild build will not know about how to build lower level 273cdf0e10cSrcweir# linktargets, just as gbuild can not know about linktargets generated in the 274cdf0e10cSrcweir# old build.pl/dmake system. Once all is migrated, gbuild should error out 275cdf0e10cSrcweir# when is is told to depend on a linktarget it does not know about and not 276cdf0e10cSrcweir# only warn. 277cdf0e10cSrcweirdefine gb_LinkTarget__get_external_headers_check 278cdf0e10cSrcweirifneq ($$(SELF),$$*) 279cdf0e10cSrcweir$$(eval $$(call gb_Output_info,LinkTarget $$* not defined: Assuming headers to be there!,ALL)) 280cdf0e10cSrcweirendif 281cdf0e10cSrcweir$$@ : COMMAND := $$(call gb_Helper_abbreviate_dirs, mkdir -p $$(dir $$@) && touch $$@ && mkdir -p $(call gb_LinkTarget_get_target,)pdb/$$(dir $$*)) 282cdf0e10cSrcweir 283cdf0e10cSrcweirendef 284cdf0e10cSrcweir 285cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,%) : 286cdf0e10cSrcweir $(eval $(gb_LinkTarget__get_external_headers_check)) 287cdf0e10cSrcweir $(COMMAND) 288cdf0e10cSrcweir 289cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,%) : $(call gb_LinkTarget_get_external_headers_target,%) 290cdf0e10cSrcweir $(call gb_Helper_abbreviate_dirs,\ 291cdf0e10cSrcweir mkdir -p $(dir $@) && touch $@) 292cdf0e10cSrcweir 293cdf0e10cSrcweir# Explanation of some of the targets: 294cdf0e10cSrcweir# - gb_LinkTarget_get_external_headers_target is the targets that guarantees all 295cdf0e10cSrcweir# headers from linked against libraries are in OUTDIR. 296cdf0e10cSrcweir# - gb_LinkTarget_get_headers_target is the target that guarantees all headers 297cdf0e10cSrcweir# from the linked against the libraries and the linktargets own headers 298cdf0e10cSrcweir# (including generated headers) are in the OUTDIR. 299cdf0e10cSrcweir# - gb_LinkTarget_get_target links the objects into a file in WORKDIR. 300cdf0e10cSrcweir# gb_LinkTarget_get_target depends on gb_LinkTarget_get_headers_target which in 301cdf0e10cSrcweir# turn depends gb_LinkTarget_get_external_headers_target. 302cdf0e10cSrcweir# gb_LinkTarget_get_target depends additionally on the objects, which in turn 303cdf0e10cSrcweir# depend build-order only on the gb_LinkTarget_get_headers_target. The build 304cdf0e10cSrcweir# order-only dependency ensures all headers to be there for compiling and 305cdf0e10cSrcweir# dependency generation without causing all objects to be rebuild when one 306cdf0e10cSrcweir# header changes. Only the ones with an explicit dependency in their generated 307cdf0e10cSrcweir# dependency file will be rebuild. 308cdf0e10cSrcweir# 309cdf0e10cSrcweir# gb_LinkTarget_get_target is the target that links the objects into a file in 310cdf0e10cSrcweir# WORKDIR 311cdf0e10cSrcweir# Explanation of some of the variables: 312cdf0e10cSrcweir# - AUXTARGETS are the additionally generated files that need to be cleaned out 313cdf0e10cSrcweir# on clean. 314cdf0e10cSrcweir# - PCH_CXXFLAGS and PCH_DEFS are the flags that the precompiled headers will 315cdf0e10cSrcweir# be compiled with. They should never be overridden in a single object 316cdf0e10cSrcweir# files. 317cdf0e10cSrcweir# - TARGETTYPE is the type of linktarget as some platforms need very different 318cdf0e10cSrcweir# command to link different targettypes. 319cdf0e10cSrcweir# 320cdf0e10cSrcweir# Since most variables are set on the linktarget and not on the object, the 321cdf0e10cSrcweir# object learns about these setting via GNU makes scoping of target variables. 322cdf0e10cSrcweir# Therefore it is important that objects are only directly depended on by the 323cdf0e10cSrcweir# linktarget. This for example means that you cannot build a single object 324cdf0e10cSrcweir# alone, because then you would directly depend on the object. 325cdf0e10cSrcweirdefine gb_LinkTarget_LinkTarget 326cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : AUXTARGETS := 327cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,$(1)) : SELF := $(1) 328cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : DLLTARGET := 329cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \ 330cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : COBJECTS := 331cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \ 332cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : CXXOBJECTS := 333cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \ 334cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : OBJCXXOBJECTS := 335cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \ 336cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : GENCXXOBJECTS := 337cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 338cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : CFLAGS := $$(gb_LinkTarget_CFLAGS) 339cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 340cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) 341cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 342cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) $(gb_COMPILEROPTFLAGS) 343cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : OBJCXXFLAGS := $$(gb_LinkTarget_OBJCXXFLAGS) 344cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 345cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : DEFS := $$(gb_LinkTarget_DEFAULTDEFS) 346cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 347cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS := $$(gb_LinkTarget_DEFAULTDEFS) 348cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 349cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE := $$(gb_LinkTarget_INCLUDE) 350cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 351cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE_STL := $$(gb_LinkTarget_INCLUDE_STL) 352cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LDFLAGS := $$(gb_LinkTarget_LDFLAGS) 353cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_LIBS := 354cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_STATIC_LIBS := 355cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : TARGETTYPE := 356cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 357cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_NAME := 358cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCHOBJS := 359cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 360cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PDBFILE := 361cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : NATIVERES := 362cdf0e10cSrcweir 363cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 364cdf0e10cSrcweirifneq ($(wildcard $(call gb_LinkTarget_get_dep_target,$(1))),) 365cdf0e10cSrcweirinclude $(call gb_LinkTarget_get_dep_target,$(1)) 366cdf0e10cSrcweirelse 367cdf0e10cSrcweir$(firstword $(MAKEFILE_LIST)) : $(call gb_LinkTarget_get_dep_target,$(1)) 368cdf0e10cSrcweirendif 369cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : COBJECTS := 370cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : CXXOBJECTS := 371cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCXXOBJECTS := 372cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : GENCXXOBJECTS := 373cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : CFLAGS := $$(gb_LinkTarget_CFLAGS) 374cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) 375cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) $(gb_COMPILEROPTFLAGS) 376cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCXXFLAGS := $$(gb_LinkTarget_OBJCXXFLAGS) 377cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : DEFS := $$(gb_LinkTarget_DEFAULTDEFS) 378cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS := $$(gb_LinkTarget_DEFAULTDEFS) 379cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE := $$(gb_LinkTarget_INCLUDE) 380cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE_STL := $$(gb_LinkTarget_INCLUDE_STL) 381cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : TARGETTYPE := 382cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_NAME := 383cdf0e10cSrcweirendif 384cdf0e10cSrcweir 385cdf0e10cSrcweirendef 386cdf0e10cSrcweir 387cdf0e10cSrcweirdefine gb_LinkTarget_set_defs 388cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 389cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : DEFS := $(2) 390cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 391cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS := $(2) 392cdf0e10cSrcweir 393cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 394cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : DEFS := $(2) 395cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS := $(2) 396cdf0e10cSrcweirendif 397cdf0e10cSrcweir 398cdf0e10cSrcweirendef 399cdf0e10cSrcweir 400cdf0e10cSrcweirdefine gb_LinkTarget_set_cflags 401cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : CFLAGS := $(2) 402cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 403cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : CFLAGS := $(2) 404cdf0e10cSrcweirendif 405cdf0e10cSrcweir 406cdf0e10cSrcweirendef 407cdf0e10cSrcweir 408cdf0e10cSrcweirdefine gb_LinkTarget_set_cxxflags 409cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 410cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : CXXFLAGS := $(2) 411cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 412cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_CXXFLAGS := $(2) 413cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 414cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : CXXFLAGS := $(2) 415cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_CXXFLAGS := $(2) 416cdf0e10cSrcweirendif 417cdf0e10cSrcweir 418cdf0e10cSrcweirendef 419cdf0e10cSrcweir 420cdf0e10cSrcweirdefine gb_LinkTarget_set_objcxxflags 421cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : OBJCXXFLAGS := $(2) 422cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 423cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCXXFLAGS := $(2) 424cdf0e10cSrcweirendif 425cdf0e10cSrcweir 426cdf0e10cSrcweirendef 427cdf0e10cSrcweir 428cdf0e10cSrcweirdefine gb_LinkTarget_set_include 429cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 430cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE := $(2) 431cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 432cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE := $(2) 433cdf0e10cSrcweirendif 434cdf0e10cSrcweir 435cdf0e10cSrcweirendef 436cdf0e10cSrcweir 437cdf0e10cSrcweirdefine gb_LinkTarget_set_include_stl 438cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 439cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : INCLUDE_STL := $(2) 440cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 441cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE_STL := $(2) 442cdf0e10cSrcweirendif 443cdf0e10cSrcweir 444cdf0e10cSrcweirendef 445cdf0e10cSrcweir 446cdf0e10cSrcweirdefine gb_LinkTarget_set_ldflags 447cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LDFLAGS := $(2) 448cdf0e10cSrcweirendef 449cdf0e10cSrcweir 450cdf0e10cSrcweirdefine gb_LinkTarget_add_linked_libs 451cdf0e10cSrcweirifneq (,$$(filter-out $(gb_Library_KNOWNLIBS),$(2))) 452cdf0e10cSrcweir$$(eval $$(call gb_Output_info,currently known libraries are: $(sort $(gb_Library_KNOWNLIBS)),ALL)) 453cdf0e10cSrcweir$$(eval $$(call gb_Output_error,Cannot link against library/libraries $$(filter-out $(gb_Library_KNOWNLIBS),$(2)). Libraries must be registered in Repository.mk)) 454cdf0e10cSrcweirendif 455cdf0e10cSrcweir 456cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_LIBS += $(2) 457cdf0e10cSrcweir 458cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $$(foreach lib,$(2),$$(call gb_Library_get_target,$$(lib))) 459cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,$(1)) : \ 460cdf0e10cSrcweir$$(foreach lib,$(2),$$(call gb_Library_get_headers_target,$$(lib))) 461cdf0e10cSrcweir 462cdf0e10cSrcweirendef 463cdf0e10cSrcweir 464cdf0e10cSrcweirdefine gb_LinkTarget_add_linked_static_libs 465cdf0e10cSrcweirifneq (,$$(filter-out $(gb_StaticLibrary_KNOWNLIBS),$(2))) 466cdf0e10cSrcweir$$(eval $$(call gb_Output_info, currently known static libraries are: $(sort $(gb_StaticLibrary_KNOWNLIBS)),ALL)) 467cdf0e10cSrcweir$$(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)) 468cdf0e10cSrcweirendif 469cdf0e10cSrcweir 470cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : LINKED_STATIC_LIBS += $(2) 471cdf0e10cSrcweir 472cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $$(foreach lib,$(2),$$(call gb_StaticLibrary_get_target,$$(lib))) 473cdf0e10cSrcweir$(call gb_LinkTarget_get_external_headers_target,$(1)) : \ 474cdf0e10cSrcweir$$(foreach lib,$(2),$$(call gb_StaticLibrary_get_headers_target,$$(lib))) 475cdf0e10cSrcweir 476cdf0e10cSrcweirendef 477cdf0e10cSrcweir 478cdf0e10cSrcweirdefine gb_LinkTarget_add_cobject 479cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : COBJECTS += $(2) 480cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : COBJECTS += $(2) 481cdf0e10cSrcweir 482cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_CObject_get_target,$(2)) 483cdf0e10cSrcweir$(call gb_CObject_get_target,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1)) 484cdf0e10cSrcweir$(call gb_CObject_get_target,$(2)) : CFLAGS += $(3) 485cdf0e10cSrcweir 486cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 487cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : COBJECTS += $(2) 488cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_CObject_get_dep_target,$(2)) 489cdf0e10cSrcweirendif 490cdf0e10cSrcweir 491cdf0e10cSrcweirendef 492cdf0e10cSrcweir 493cdf0e10cSrcweirdefine gb_LinkTarget_add_cxxobject 494cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : CXXOBJECTS += $(2) 495cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : CXXOBJECTS += $(2) 496cdf0e10cSrcweir 497cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_CxxObject_get_target,$(2)) 498cdf0e10cSrcweir$(call gb_CxxObject_get_target,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1)) 499cdf0e10cSrcweir$(call gb_CxxObject_get_target,$(2)) : CXXFLAGS += $(3) 500cdf0e10cSrcweir 501cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 502cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : CXXOBJECTS += $(2) 503cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_CxxObject_get_dep_target,$(2)) 504cdf0e10cSrcweirendif 505cdf0e10cSrcweir 506cdf0e10cSrcweirendef 507cdf0e10cSrcweir 508cdf0e10cSrcweirdefine gb_LinkTarget_add_objcxxobject 509cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : OBJCXXOBJECTS += $(2) 510cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : OBJCXXOBJECTS += $(2) 511cdf0e10cSrcweir 512cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_ObjCxxObject_get_target,$(2)) 513cdf0e10cSrcweir$(call gb_ObjCxxObject_get_target,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1)) 514cdf0e10cSrcweir$(call gb_ObjCxxObject_get_target,$(2)) : OBJCXXFLAGS += $(3) 515cdf0e10cSrcweir 516cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 517cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCXXOBJECTS += $(2) 518cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_ObjCxxObject_get_dep_target,$(2)) 519cdf0e10cSrcweirendif 520cdf0e10cSrcweir 521cdf0e10cSrcweirendef 522cdf0e10cSrcweir 523cdf0e10cSrcweirdefine gb_LinkTarget_add_generated_cxx_object 524cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : GENCXXOBJECTS += $(2) 525cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : GENCXXOBJECTS += $(2) 526cdf0e10cSrcweir 527cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : $(call gb_GenCxxObject_get_target,$(2)) 528cdf0e10cSrcweir$(call gb_GenCxxObject_get_source,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1)) 529cdf0e10cSrcweir$(call gb_GenCxxObject_get_target,$(2)) : CXXFLAGS += $(3) $(gb_COMPILEROPTFLAGS) 530cdf0e10cSrcweir 531cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 532cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : GENCXXOBJECTS += $(2) 533cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_GenCxxObject_get_dep_target,$(2)) 534cdf0e10cSrcweirendif 535cdf0e10cSrcweir 536cdf0e10cSrcweirendef 537cdf0e10cSrcweir 538cdf0e10cSrcweirdefine gb_LinkTarget_add_noexception_object 539cdf0e10cSrcweir$(call gb_LinkTarget_add_cxxobject,$(1),$(2),$(gb_LinkTarget_NOEXCEPTIONFLAGS) $(gb_COMPILEROPTFLAGS)) 540cdf0e10cSrcweirendef 541cdf0e10cSrcweir 542cdf0e10cSrcweirdefine gb_LinkTarget_add_exception_object 543cdf0e10cSrcweir$(call gb_LinkTarget_add_cxxobject,$(1),$(2),$(gb_LinkTarget_EXCEPTIONFLAGS) $(gb_COMPILEROPTFLAGS)) 544cdf0e10cSrcweirendef 545cdf0e10cSrcweir 546cdf0e10cSrcweirdefine gb_LinkTarget_add_cobjects 547cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_cobject,$(1),$(obj),$(3))) 548cdf0e10cSrcweirendef 549cdf0e10cSrcweir 550cdf0e10cSrcweirdefine gb_LinkTarget_add_cxxobjects 551cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_cxxobject,$(1),$(obj),$(3))) 552cdf0e10cSrcweirendef 553cdf0e10cSrcweir 554cdf0e10cSrcweirdefine gb_LinkTarget_add_objcxxobjects 555cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_objcxxobject,$(1),$(obj),$(3))) 556cdf0e10cSrcweirendef 557cdf0e10cSrcweir 558cdf0e10cSrcweirdefine gb_LinkTarget_add_noexception_objects 559cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_noexception_object,$(1),$(obj))) 560cdf0e10cSrcweirendef 561cdf0e10cSrcweir 562cdf0e10cSrcweirdefine gb_LinkTarget_add_exception_objects 563cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_exception_object,$(1),$(obj))) 564cdf0e10cSrcweirendef 565cdf0e10cSrcweir 566cdf0e10cSrcweirdefine gb_LinkTarget_add_generated_exception_object 567cdf0e10cSrcweir$(call gb_LinkTarget_add_generated_cxx_object,$(1),$(2),$(gb_LinkTarget_EXCEPTIONFLAGS)) 568cdf0e10cSrcweirendef 569cdf0e10cSrcweir 570cdf0e10cSrcweirdefine gb_LinkTarget_add_generated_exception_objects 571cdf0e10cSrcweir$(foreach obj,$(2),$(call gb_LinkTarget_add_generated_exception_object,$(1),$(obj))) 572cdf0e10cSrcweirendef 573cdf0e10cSrcweir 574cdf0e10cSrcweirdefine gb_LinkTarget_set_targettype 575cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) \ 576cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : TARGETTYPE := $(2) 577cdf0e10cSrcweirendef 578cdf0e10cSrcweir 579cdf0e10cSrcweirdefine gb_LinkTarget_set_dlltarget 580cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) \ 581cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : DLLTARGET := $(2) 582cdf0e10cSrcweirendef 583cdf0e10cSrcweir 584cdf0e10cSrcweirdefine gb_LinkTarget_set_auxtargets 585cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : AUXTARGETS := $(2) 586cdf0e10cSrcweirendef 587cdf0e10cSrcweir 588cdf0e10cSrcweirdefine gb_LinkTarget__add_internal_headers 589cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) : $(2) 590cdf0e10cSrcweir$(2) :| $(call gb_LinkTarget_get_external_headers_target,$(1)) 591cdf0e10cSrcweir 592cdf0e10cSrcweirendef 593cdf0e10cSrcweir 594cdf0e10cSrcweirdefine gb_LinkTarget_add_package_headers 595cdf0e10cSrcweir$(foreach package,$(2),$(call gb_LinkTarget__add_internal_headers,$(1),$(call gb_Package_get_target,$(package)))) 596cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(foreach package,$(2),$(call gb_Package_get_clean_target,$(package))) 597cdf0e10cSrcweir 598cdf0e10cSrcweirendef 599cdf0e10cSrcweir 600cdf0e10cSrcweirdefine gb_LinkTarget_add_sdi_headers 601cdf0e10cSrcweir$(call gb_LinkTarget__add_internal_headers,$(1),$(foreach sdi,$(2),$(call gb_SdiTarget_get_target,$(sdi)))) 602cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(foreach sdi,$(2),$(call gb_SdiTarget_get_clean_target,$(sdi))) 603cdf0e10cSrcweirendef 604cdf0e10cSrcweir 605cdf0e10cSrcweirdefine gb_LinkTarget__add_precompiled_header_impl 606cdf0e10cSrcweir$(call gb_LinkTarget__add_internal_headers,$(1),$(call gb_PrecompiledHeader_get_target,$(3))) 607cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(call gb_PrecompiledHeader_get_clean_target,$(3)) 608cdf0e10cSrcweir$(call gb_PrecompiledHeader_get_target,$(3)) : $(2).cxx 609cdf0e10cSrcweir 610cdf0e10cSrcweir$(call gb_LinkTarget__add_internal_headers,$(1),$(call gb_NoexPrecompiledHeader_get_target,$(3))) 611cdf0e10cSrcweir$(call gb_LinkTarget_get_clean_target,$(1)) : $(call gb_NoexPrecompiledHeader_get_clean_target,$(3)) 612cdf0e10cSrcweir$(call gb_NoexPrecompiledHeader_get_target,$(3)) : $(2).cxx 613cdf0e10cSrcweir 614cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_NAME := $(3) 615cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCHOBJS = $(call gb_PrecompiledHeader_get_target,$(3)).obj $(call gb_NoexPrecompiledHeader_get_target,$(3)).obj 616cdf0e10cSrcweir 617cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 618cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : DEFS := $$(DEFS) -DPRECOMPILED_HEADERS 619cdf0e10cSrcweir$(call gb_LinkTarget_get_headers_target,$(1)) \ 620cdf0e10cSrcweir$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS = $$(DEFS) 621cdf0e10cSrcweirifeq ($(gb_FULLDEPS),$(true)) 622cdf0e10cSrcweir-include \ 623cdf0e10cSrcweir $(call gb_PrecompiledHeader_get_dep_target,$(3)) \ 624cdf0e10cSrcweir $(call gb_NoexPrecompiledHeader_get_dep_target,$(3)) 625cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : DEFS := $$(DEFS) -DPRECOMPILED_HEADERS 626cdf0e10cSrcweir$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS = $$(DEFS) 627cdf0e10cSrcweirendif 628cdf0e10cSrcweir 629cdf0e10cSrcweirendef 630cdf0e10cSrcweir 631cdf0e10cSrcweirdefine gb_LinkTarget_add_precompiled_header 632cdf0e10cSrcweirifeq ($(gb_ENABLE_PCH),$(true)) 633cdf0e10cSrcweir$(call gb_LinkTarget__add_precompiled_header_impl,$(1),$(2),$(notdir $(2))) 634cdf0e10cSrcweirendif 635cdf0e10cSrcweir 636cdf0e10cSrcweirendef 637cdf0e10cSrcweir 638cdf0e10cSrcweir# vim: set noet sw=4 ts=4: 639