diff -r 820b22e13ff1 -r 39c28ec933dd sbsv2/raptor/lib/flm/metaflm.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/lib/flm/metaflm.mk Mon May 10 19:54:49 2010 +0100 @@ -0,0 +1,224 @@ +# +# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of the License "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# + + +# Macros for creating Standard targets + +ifeq ($(_METAFLM_MK_),) +_METAFLM_MK_:=1 + +# GENERATE STANDARD CLEAN TARGET +# example usage: +# $(eval $(call GenerateStandardCleanTarget,$(FILE_LIST),$(DIRECTORY_LIST))) + +## CLEAN macros ##################################### +# The clean macro does not generate a target but extension makefiles do have +# CLEAN targets that need to be attached to something. +.PHONY:: CLEAN + +define GenerateStandardCleanTarget +$(info ) +$(foreach ITEM,$(1),$(info $(ITEM))) +$(foreach ITEM,$(2),$(info $(ITEM))) +$(info ) +endef + +## End CLEAN macros ##################################### + + +## WHAT macros ##################################### + + +## Begin --what Macros ##### +define outputWhat +ifeq ($(OSTYPE),cygwin) +$(2):: + @for FILE in $(subst %20,$(CHAR_SPACE),$(subst /,\\,$(call dblquote,$(1)))); do \ + echo $$$$FILE; \ + done; +else +$(2):: + @for FILE in $(subst %20,$(CHAR_SPACE),$(1)); do \ + echo $$$$FILE; \ + done +endif +endef + +## End --what Macros ##### + +## Begin .whatlog Macros ##### +define whatLogOpen + +endef + +define whatLogItem +$(if $(findstring EXPORT,$(1)),,$(if $(findstring BITMAP,$(1)),,$(if $(findstring STRINGTABLE,$(1)),,$(if $(findstring ARCHIVE,$(1)),,)))))$(subst %20,$(CHAR_SPACE),$(2))$(if $(findstring EXPORT,$(1)),/>,$(if $(findstring RESOURCE,$(1)),,$(if $(findstring BITMAP,$(1)),,$(if $(findstring STRINGTABLE,$(1)),,$(if $(findstring ARCHIVE,$(1)),,))))) +endef + +define whatLogClose + +endef + +define outputWhatLog +$(info $(call whatLogOpen)) +$(foreach ITEM,$(1),$(info $(call whatLogItem,$(2),$(ITEM)))) +$(info $(call whatLogClose)) +endef + +## End .whatlog Macros ##### + +# General FLM entry points for what-related processing +define WhatExports +endef + +define whatmacro +$(call outputWhatLog,$(1),$(2)) +endef + +define whatUnzip +endef +## END WHAT UNZIP MACRO + +## End WHAT macros ##################################### + +# Macro for creating the test BATCH files. +# Arguments: $(1) -> Target Name $(2) -> Output Batch file path +define MakeTestBatchFiles + $(if $(BATCHFILE_CREATED_$(2)) + , + $(if $(TARGET_CREATED_$(2)_$(TARGET)) + , + , + $$(shell echo -e "$(1)\r" >> $(2)) + ) + , + $$(shell $(GNUMKDIR) -p $(dir $(2))) + $$(shell echo -e "$(1)\r" > $(2)) + ) +endef + +## path creation ######################### +# Make the destination directory if neccessary. For some +# make engines we must do this outside the rule or they +# get confused by the apparent way in which different rules +# can create a particular directory and they infer some kind +# of dependency. + +# Makepath. Copyright (C) 2008 Symbian Software Ltd. +# buffering with repeat prevention, makes directories after every 30 calls. Any more might overload +# the createprocess limit on arguments. +# +# makepathLIST is initialised in globals.mk +define makepath_single +$(if $(findstring $1,$(makepathLIST)),,$(eval makepathLIST:=$(makepathLIST) $1)) +$(if $(subst 30,,$(words $(makepathLIST))),,$(shell $(GNUMKDIR) -p $(makepathLIST))$(eval makepathLIST:=)) +endef + +# The following turns out to be extremely slow - something to do with using eval +# or to do with creating huge numbers of TARGET_ variables? BTW, this is an attempt +# to not make things that we have already made. +# define makepath +# $(info makepath_start)$(foreach DIR,$1,$(if $(TARGET_$(1)),,$(call makepath_single,$(DIR))$(eval TARGET_$(1):=1)))$(info makepath_end) +# endef + +# In general, makepath creates directories during FLM evaluation. +# However, if the WHAT target is being processed then it should do nothing. +ifeq ($(filter WHAT,$(call uppercase,$(MAKECMDGOALS))),) +define makepath +$(strip $(foreach DIR,$(sort $1),$(call makepath_single,$(DIR)))) +endef +else +define makepath +endef +endif + + +define makepathfor +$(call makepath,$(dir $1)) +endef + +# Make any remaining paths in the path buffer +define makepathfinalise +$(strip $(if $(makepathLIST),$(shell $(GNUMKDIR) -p $(makepathLIST))$(eval makepathLIST:=),)) +endef + +## ROMFILE macro ##################################### +define DoRomSet + +ifeq ($(call uppercase,$(TARGETTYPE)),LIB) +BUILDROMTARGET:= +endif + +ifeq ($(call uppercase,$(TARGETTYPE)),KEXT) +ROMFILETYPE:=extension[MAGIC] +ABIDIR:=KMAIN +endif +ifeq ($(call uppercase,$(TARGETTYPE)),LDD) +ROMFILETYPE:=device[MAGIC] +ABIDIR:=KMAIN +endif +ifeq ($(call uppercase,$(TARGETTYPE)),PDD) +ROMFILETYPE:=device[MAGIC] +ABIDIR:=KMAIN +endif +ifeq ($(call uppercase,$(TARGETTYPE)),VAR) +ROMFILETYPE:=variant[MAGIC] +ABIDIR:=KMAIN +endif +ifeq ($(call uppercase,$(TARGETTYPE)),KDLL) +ABIDIR:=KMAIN +endif + +ifneq ($(CALLDLLENTRYPOINTS),) +ROMFILETYPE:=dll +endif +ifeq ($(ROMFILETYPE),primary) +ABIDIR:=KMAIN +endif + +endef + +## End of ROMFILE macro ############################## + +## Macros for writing FLMs without needing to know eval + +# declaring targets as RELEASABLE, for example, +# +# $(call raptor_release,$(TARGET1) $(TARGET2),RESOURCE) +# +# the optional type (RESOURCE) can be one of, +# EXPORT RESOURCE BITMAP STRINGTABLE ARCHIVE +# +# no argument means just a default (binary) releasable. +# +define raptor_release +$(eval $(call outputWhatLog,$1,$2)) +endef + +# declaring things that need to be cleaned. +# +# any files which are generated but are not RELEASABLE should be listed +# using this macro, for example, +# +# $(call raptor_clean,$(OBJECT_FILES)) +# +define raptor_clean +$(eval $(call GenerateStandardCleanTarget,$1)) +endef + +endif +# end of metaflm +## END TEST BATCH FILES MACRO