sbsv2/raptor/lib/flm/msvctools.flm
changeset 0 044383f39525
child 3 e1eecf4d390d
child 590 360bd6b35136
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/lib/flm/msvctools.flm	Tue Oct 27 16:36:35 2009 +0000
@@ -0,0 +1,212 @@
+# Copyright (c) 2008-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:
+# MSVC TOOLS EXE/LIB Function Like Makefile (FLM)
+# Knows how to build all possible executables for the TOOLS build
+# 
+#
+
+CLEANTARGETS:=
+RELEASABLES:=
+INSTALLTARGET:=
+
+RELEASEPATH:=$(RELEASEPATHROOT)/$(FULLVARIANTPATH)
+BUILDPATH:=$(OUTPUTPATH)/$(FULLVARIANTPATH)
+RELEASETARGET:=$(RELEASEPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
+
+# make the output directories while reading makefile - some build engines prefer this
+$(call makepath,$(RELEASEPATH))
+$(call makepath,$(BUILDPATH))
+
+CLEANTARGETS:=$(CLEANTARGETS) $(RELEASETARGET)
+RELEASEABLES:=$(RELEASEABLES) $(RELEASETARGET)
+
+GENDEBUGINFO:=$(if $(findstring deb,$(VARIANTTYPE)),1,)
+
+# MSVC "no space" arguments must take the form /<ARG><PATH_WITH_DOS_SLASHES> e.g.
+# 	/FoF:\object\file\to\be\created.obj
+define msvcformatarg
+	$(1)$(subst /,\\\,$(2))
+endef
+
+#############
+## COMPILE ##
+#############
+
+# object files and related
+OBJFILES:=$(patsubst %,$(BUILDPATH)/%.obj,$(basename $(notdir $(SOURCE))))
+SBRFILES:=$(addsuffix .sbr, $(basename $(OBJFILES)))
+LISFILES:=$(addsuffix .lis, $(basename $(OBJFILES)))
+LSTFILES:=$(addsuffix .tools.lst, $(basename $(SOURCE)))
+CLEANTARGETS:=$(CLEANTARGETS) $(OBJFILES) $(SBRFILES) $(LISFILES) $(LSTFILES)
+
+# include paths and preinclude file
+UINCLUDE:=$(patsubst %,$(OPT.USERINCLUDE)%,$(USERINCLUDE))
+SINCLUDE:=$(patsubst %,$(OPT.SYSINCLUDE)%,$(SYSTEMINCLUDE))
+PINCLUDE:=$(OPT.PREINCLUDE)$(notdir $(PRODUCT_INCLUDE))
+INCLUDES:=$(PINCLUDE) $(UINCLUDE) $(SINCLUDE)
+
+# macros
+DEFINES:=$(call makemacrodef,$(OPT.DEFINE),$(CDEFS) $(BASE_MACRO) $(CFLAGS.ADD))
+
+# other
+PDBFILE:=$(if $(GENDEBUGINFO),$(RELEASEPATH)/$(TARGET).pdb,)
+CLEANTARGETS:=$(CLEANTARGETS) $(PDBFILE)
+
+#compile
+define msvctoolscompile
+  $(BUILDPATH)/$(basename $(notdir $(1))).obj: $(1) $(PROJECT_META) $(if $(HAVE_ORDERONLY),|,)  EXPORT
+	$(call startrule,msvctoolscompile,,$(1)) \
+	$(CC) \
+	$(if $(findstring staticlib,$(BASE_TYPE)),,$(CFLAGS.LIB)) \
+	$(CFLAGS) $$(subst /,-,$(OPTION_MSVC)) \
+	$(if $(findstring /W,$(OPTION_MSVC)),,$(CFLAGS.DEFAULT.WARNLEVEL)) \
+	$(if $(PDBFILE),$$(call msvcformatarg,$(OPT.PDBFILE),$(PDBFILE)),) \
+	$(DEFINES) $(INCLUDES) \
+	$$(call msvcformatarg,$(OPT.BROWSEFILE),$(BUILDPATH)/$(basename $(notdir $(1))).sbr) \
+	$$(call msvcformatarg,$(OPT.OBJECTFILE),$$@) $(1) \
+	$(call endrule,msvctoolscompile)
+endef
+# make the output directories while reading makefile - some build engines prefer this
+$(call makepath,$(BUILDPATH))
+$(foreach SRCFILE,$(SOURCE),$(eval $(call msvctoolscompile,$(SRCFILE))))
+
+# assembler listing
+define msvctoolslisting
+  LISTING:: $(BUILDPATH)/$(basename $(notdir $(1))).lis
+	$(GNUCP) $$< $(basename $(1)).tools.lst
+  
+  $(BUILDPATH)/$(basename $(notdir $(1))).lis: $(1)
+	$(call startrule,msvctoolslisting) \
+	$(CC) \
+	$(if $(findstring staticlib,$(BASE_TYPE)),,$(CFLAGS.LIB)) \
+	$(CFLAGS) $$(subst /,-,$(OPTION_MSVC)) \
+	$(if $(findstring /W,$(OPTION_MSVC)),,$(CFLAGS.DEFAULT.WARNLEVEL)) \
+	$(DEFINES) $(INCLUDES) \
+	$$(call msvcformatarg,$(OPT.LISTING),$(BUILDPATH)/$(basename $(notdir $(1))).lis) \
+	$(1) \
+	$(call endrule,msvctoolslisting)
+
+  endef
+$(foreach SRCFILE,$(SOURCE),$(eval $(call msvctoolslisting,$(SRCFILE))))
+
+
+ifeq ($(BASE_TYPE),staticlib)
+
+  #############
+  ## ARCHIVE ##
+  #############
+
+  ARCHIVERRESPONSEFILE:=$(BUILDPATH)/$(TARGET).arf
+  CLEANTARGETS:=$(CLEANTARGETS) $(ARCHIVERRESPONSEFILE)
+
+  define msvctoolsarchive
+    $(RELEASETARGET): $(OBJFILES)
+	  @echo "" > $(ARCHIVERRESPONSEFILE);
+	  $(call groupin10infile,$(ARCHIVERRESPONSEFILE),$(OBJFILES)) ;
+	  $(call startrule,msvctoolsarchive) \
+	  $(AR) $(ARFLAGS) $(OPT.SUBSYSTEM)$(SUBSYSTEM) $$(call msvcformatarg,$(OPT.OUTFILE),$$@) \
+	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(ARCHIVERRESPONSEFILE)) \
+	  $(if $(SAVESPACE),; $(GNURM) -f $(OBJFILES); true,) \
+	  $(call endrule,msvctoolsarchive)
+
+  endef
+  $(eval $(msvctoolsarchive))
+
+else
+
+  ##########
+  ## LINK ##
+  ##########
+
+  STATICLIBS:=$(patsubst %,$(RELEASEPATH)/%.lib,$(STATICLIBRARY))
+  IMPORTLIBS:=$(patsubst %.dso,$(IMPORTLIBPATH)/%.lib,$(LIBRARY))
+  LINKERRESPONSEFILE:=$(BUILDPATH)/$(TARGET).lrf
+  CLEANTARGETS:=$(CLEANTARGETS) $(RELEASETARGET).lib $(LINKERRESPONSEFILE)
+  
+  define msvctoolslink
+    $(RELEASETARGET): $(OBJFILES) $(STATICLIBS) $(IMPORTLIBS)
+	  @echo "" > $(LINKERRESPONSEFILE);
+	  $(call groupin10infile,$(LINKERRESPONSEFILE),$(STATICLIBS) $(IMPORTLIBS) $(OBJFILES)) ;
+	  $(call startrule,msvctoolslink) \
+	  $(LD) $(LFLAGS) $(WIN32_LIBRARY) $(OPT.SUBSYSTEM)$(SUBSYSTEM) \
+	  $$(call msvcformatarg,$(OPT.OUTFILE),$$@) \
+	  $$(call msvcformatarg,$(OPT.IMPLIB),$(RELEASETARGET).lib) \
+	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(LINKERRESPONSEFILE)) \
+	  $(if $(SAVESPACE),; $(GNURM) -f $(OBJFILES); true,) \
+	  $(call endrule,msvctoolslink)
+  endef
+  $(eval $(msvctoolslink)) 
+
+endif
+
+
+#############
+## INSTALL ##
+#############
+
+ifneq ($(INSTALLPATH),)
+  INSTALLTARGET:=$(INSTALLPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
+  CLEANTARGETS:=$(CLEANTARGETS) $(INSTALLTARGET)
+  RELEASEABLES:=$(RELEASEABLES) $(INSTALLTARGET)
+
+  define msvctoolsinstall
+    $(INSTALLTARGET): $(RELEASETARGET)
+	  $(call startrule,msvctoolsinstall) \
+	  $(GNUCP) $$< $$@ && \
+	  $(GNUCHMOD) a+rwx $$@ \
+	  $(call endrule,msvctoolsinstall)
+  endef
+  # make the output directories while reading makefile - some build engines prefer this
+  $(call makepath,$(INSTALLPATH))
+  $(eval $(msvctoolsinstall))
+endif
+
+
+##########################
+## BROWSE DB GENERATION ##
+##########################
+
+ifneq ($(GENDEBUGINFO),)
+  BSCFILE:=$(RELEASEPATH)/$(TARGET).bsc
+  BSCRESPONSEFILE:=$(BUILDPATH)/$(TARGET).brf
+  CLEANTARGETS:=$(CLEANTARGETS) $(BSCFILE) $(BSCRESPONSEFILE)
+  RELEASEABLES:=$(RELEASEABLES) $(BSCFILE)
+
+  define msvctoolsgenbrowse  
+    $(BSCFILE): $(OBJFILES)
+	  @echo "" > $(BSCRESPONSEFILE);
+	  $(call groupin10infile,$(BSCRESPONSEFILE),$(SBRFILES)) ;
+	  $(call startrule,msvctoolsgenbrowse) \
+	  $(BROWSETOOL) $(BROWSEFLAGS) $$(call msvcformatarg,$(OPT.BROWSEDB),$$@) \
+	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(BSCRESPONSEFILE)) \
+	  $(if $(SAVESPACE),; $(GNURM) -f $(SBRFILES); true,) \
+	  $(call endrule,msvctoolsgenbrowse)
+  endef
+  $(eval $(msvctoolsgenbrowse)) 
+endif
+
+
+# Global targets
+.PHONY:: $(ALLTARGET)
+$(ALLTARGET):: $(RELEASEABLES)
+TARGET:: $(RELEASEABLES)
+
+ifeq ($(BASE_TYPE),staticlib)
+  LIBRARY:: $(RELEASETARGET) $(INSTALLTARGET)
+endif
+
+# clean up
+$(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),,))
+# for the abld -what target
+$(eval $(call whatmacro,$(INSTALLTARGET),WHATTOOLS))