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