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