sbsv2/raptor/lib/flm/msvctools.flm
changeset 0 044383f39525
child 3 e1eecf4d390d
child 590 360bd6b35136
equal deleted inserted replaced
-1:000000000000 0:044383f39525
       
     1 # Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 # All rights reserved.
       
     3 # This component and the accompanying materials are made available
       
     4 # under the terms of the License "Eclipse Public License v1.0"
       
     5 # which accompanies this distribution, and is available
       
     6 # at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 #
       
     8 # Initial Contributors:
       
     9 # Nokia Corporation - initial contribution.
       
    10 #
       
    11 # Contributors:
       
    12 #
       
    13 # Description:
       
    14 # MSVC TOOLS EXE/LIB Function Like Makefile (FLM)
       
    15 # Knows how to build all possible executables for the TOOLS build
       
    16 # 
       
    17 #
       
    18 
       
    19 CLEANTARGETS:=
       
    20 RELEASABLES:=
       
    21 INSTALLTARGET:=
       
    22 
       
    23 RELEASEPATH:=$(RELEASEPATHROOT)/$(FULLVARIANTPATH)
       
    24 BUILDPATH:=$(OUTPUTPATH)/$(FULLVARIANTPATH)
       
    25 RELEASETARGET:=$(RELEASEPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
       
    26 
       
    27 # make the output directories while reading makefile - some build engines prefer this
       
    28 $(call makepath,$(RELEASEPATH))
       
    29 $(call makepath,$(BUILDPATH))
       
    30 
       
    31 CLEANTARGETS:=$(CLEANTARGETS) $(RELEASETARGET)
       
    32 RELEASEABLES:=$(RELEASEABLES) $(RELEASETARGET)
       
    33 
       
    34 GENDEBUGINFO:=$(if $(findstring deb,$(VARIANTTYPE)),1,)
       
    35 
       
    36 # MSVC "no space" arguments must take the form /<ARG><PATH_WITH_DOS_SLASHES> e.g.
       
    37 # 	/FoF:\object\file\to\be\created.obj
       
    38 define msvcformatarg
       
    39 	$(1)$(subst /,\\\,$(2))
       
    40 endef
       
    41 
       
    42 #############
       
    43 ## COMPILE ##
       
    44 #############
       
    45 
       
    46 # object files and related
       
    47 OBJFILES:=$(patsubst %,$(BUILDPATH)/%.obj,$(basename $(notdir $(SOURCE))))
       
    48 SBRFILES:=$(addsuffix .sbr, $(basename $(OBJFILES)))
       
    49 LISFILES:=$(addsuffix .lis, $(basename $(OBJFILES)))
       
    50 LSTFILES:=$(addsuffix .tools.lst, $(basename $(SOURCE)))
       
    51 CLEANTARGETS:=$(CLEANTARGETS) $(OBJFILES) $(SBRFILES) $(LISFILES) $(LSTFILES)
       
    52 
       
    53 # include paths and preinclude file
       
    54 UINCLUDE:=$(patsubst %,$(OPT.USERINCLUDE)%,$(USERINCLUDE))
       
    55 SINCLUDE:=$(patsubst %,$(OPT.SYSINCLUDE)%,$(SYSTEMINCLUDE))
       
    56 PINCLUDE:=$(OPT.PREINCLUDE)$(notdir $(PRODUCT_INCLUDE))
       
    57 INCLUDES:=$(PINCLUDE) $(UINCLUDE) $(SINCLUDE)
       
    58 
       
    59 # macros
       
    60 DEFINES:=$(call makemacrodef,$(OPT.DEFINE),$(CDEFS) $(BASE_MACRO) $(CFLAGS.ADD))
       
    61 
       
    62 # other
       
    63 PDBFILE:=$(if $(GENDEBUGINFO),$(RELEASEPATH)/$(TARGET).pdb,)
       
    64 CLEANTARGETS:=$(CLEANTARGETS) $(PDBFILE)
       
    65 
       
    66 #compile
       
    67 define msvctoolscompile
       
    68   $(BUILDPATH)/$(basename $(notdir $(1))).obj: $(1) $(PROJECT_META) $(if $(HAVE_ORDERONLY),|,)  EXPORT
       
    69 	$(call startrule,msvctoolscompile,,$(1)) \
       
    70 	$(CC) \
       
    71 	$(if $(findstring staticlib,$(BASE_TYPE)),,$(CFLAGS.LIB)) \
       
    72 	$(CFLAGS) $$(subst /,-,$(OPTION_MSVC)) \
       
    73 	$(if $(findstring /W,$(OPTION_MSVC)),,$(CFLAGS.DEFAULT.WARNLEVEL)) \
       
    74 	$(if $(PDBFILE),$$(call msvcformatarg,$(OPT.PDBFILE),$(PDBFILE)),) \
       
    75 	$(DEFINES) $(INCLUDES) \
       
    76 	$$(call msvcformatarg,$(OPT.BROWSEFILE),$(BUILDPATH)/$(basename $(notdir $(1))).sbr) \
       
    77 	$$(call msvcformatarg,$(OPT.OBJECTFILE),$$@) $(1) \
       
    78 	$(call endrule,msvctoolscompile)
       
    79 endef
       
    80 # make the output directories while reading makefile - some build engines prefer this
       
    81 $(call makepath,$(BUILDPATH))
       
    82 $(foreach SRCFILE,$(SOURCE),$(eval $(call msvctoolscompile,$(SRCFILE))))
       
    83 
       
    84 # assembler listing
       
    85 define msvctoolslisting
       
    86   LISTING:: $(BUILDPATH)/$(basename $(notdir $(1))).lis
       
    87 	$(GNUCP) $$< $(basename $(1)).tools.lst
       
    88   
       
    89   $(BUILDPATH)/$(basename $(notdir $(1))).lis: $(1)
       
    90 	$(call startrule,msvctoolslisting) \
       
    91 	$(CC) \
       
    92 	$(if $(findstring staticlib,$(BASE_TYPE)),,$(CFLAGS.LIB)) \
       
    93 	$(CFLAGS) $$(subst /,-,$(OPTION_MSVC)) \
       
    94 	$(if $(findstring /W,$(OPTION_MSVC)),,$(CFLAGS.DEFAULT.WARNLEVEL)) \
       
    95 	$(DEFINES) $(INCLUDES) \
       
    96 	$$(call msvcformatarg,$(OPT.LISTING),$(BUILDPATH)/$(basename $(notdir $(1))).lis) \
       
    97 	$(1) \
       
    98 	$(call endrule,msvctoolslisting)
       
    99 
       
   100   endef
       
   101 $(foreach SRCFILE,$(SOURCE),$(eval $(call msvctoolslisting,$(SRCFILE))))
       
   102 
       
   103 
       
   104 ifeq ($(BASE_TYPE),staticlib)
       
   105 
       
   106   #############
       
   107   ## ARCHIVE ##
       
   108   #############
       
   109 
       
   110   ARCHIVERRESPONSEFILE:=$(BUILDPATH)/$(TARGET).arf
       
   111   CLEANTARGETS:=$(CLEANTARGETS) $(ARCHIVERRESPONSEFILE)
       
   112 
       
   113   define msvctoolsarchive
       
   114     $(RELEASETARGET): $(OBJFILES)
       
   115 	  @echo "" > $(ARCHIVERRESPONSEFILE);
       
   116 	  $(call groupin10infile,$(ARCHIVERRESPONSEFILE),$(OBJFILES)) ;
       
   117 	  $(call startrule,msvctoolsarchive) \
       
   118 	  $(AR) $(ARFLAGS) $(OPT.SUBSYSTEM)$(SUBSYSTEM) $$(call msvcformatarg,$(OPT.OUTFILE),$$@) \
       
   119 	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(ARCHIVERRESPONSEFILE)) \
       
   120 	  $(if $(SAVESPACE),; $(GNURM) -f $(OBJFILES); true,) \
       
   121 	  $(call endrule,msvctoolsarchive)
       
   122 
       
   123   endef
       
   124   $(eval $(msvctoolsarchive))
       
   125 
       
   126 else
       
   127 
       
   128   ##########
       
   129   ## LINK ##
       
   130   ##########
       
   131 
       
   132   STATICLIBS:=$(patsubst %,$(RELEASEPATH)/%.lib,$(STATICLIBRARY))
       
   133   IMPORTLIBS:=$(patsubst %.dso,$(IMPORTLIBPATH)/%.lib,$(LIBRARY))
       
   134   LINKERRESPONSEFILE:=$(BUILDPATH)/$(TARGET).lrf
       
   135   CLEANTARGETS:=$(CLEANTARGETS) $(RELEASETARGET).lib $(LINKERRESPONSEFILE)
       
   136   
       
   137   define msvctoolslink
       
   138     $(RELEASETARGET): $(OBJFILES) $(STATICLIBS) $(IMPORTLIBS)
       
   139 	  @echo "" > $(LINKERRESPONSEFILE);
       
   140 	  $(call groupin10infile,$(LINKERRESPONSEFILE),$(STATICLIBS) $(IMPORTLIBS) $(OBJFILES)) ;
       
   141 	  $(call startrule,msvctoolslink) \
       
   142 	  $(LD) $(LFLAGS) $(WIN32_LIBRARY) $(OPT.SUBSYSTEM)$(SUBSYSTEM) \
       
   143 	  $$(call msvcformatarg,$(OPT.OUTFILE),$$@) \
       
   144 	  $$(call msvcformatarg,$(OPT.IMPLIB),$(RELEASETARGET).lib) \
       
   145 	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(LINKERRESPONSEFILE)) \
       
   146 	  $(if $(SAVESPACE),; $(GNURM) -f $(OBJFILES); true,) \
       
   147 	  $(call endrule,msvctoolslink)
       
   148   endef
       
   149   $(eval $(msvctoolslink)) 
       
   150 
       
   151 endif
       
   152 
       
   153 
       
   154 #############
       
   155 ## INSTALL ##
       
   156 #############
       
   157 
       
   158 ifneq ($(INSTALLPATH),)
       
   159   INSTALLTARGET:=$(INSTALLPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
       
   160   CLEANTARGETS:=$(CLEANTARGETS) $(INSTALLTARGET)
       
   161   RELEASEABLES:=$(RELEASEABLES) $(INSTALLTARGET)
       
   162 
       
   163   define msvctoolsinstall
       
   164     $(INSTALLTARGET): $(RELEASETARGET)
       
   165 	  $(call startrule,msvctoolsinstall) \
       
   166 	  $(GNUCP) $$< $$@ && \
       
   167 	  $(GNUCHMOD) a+rwx $$@ \
       
   168 	  $(call endrule,msvctoolsinstall)
       
   169   endef
       
   170   # make the output directories while reading makefile - some build engines prefer this
       
   171   $(call makepath,$(INSTALLPATH))
       
   172   $(eval $(msvctoolsinstall))
       
   173 endif
       
   174 
       
   175 
       
   176 ##########################
       
   177 ## BROWSE DB GENERATION ##
       
   178 ##########################
       
   179 
       
   180 ifneq ($(GENDEBUGINFO),)
       
   181   BSCFILE:=$(RELEASEPATH)/$(TARGET).bsc
       
   182   BSCRESPONSEFILE:=$(BUILDPATH)/$(TARGET).brf
       
   183   CLEANTARGETS:=$(CLEANTARGETS) $(BSCFILE) $(BSCRESPONSEFILE)
       
   184   RELEASEABLES:=$(RELEASEABLES) $(BSCFILE)
       
   185 
       
   186   define msvctoolsgenbrowse  
       
   187     $(BSCFILE): $(OBJFILES)
       
   188 	  @echo "" > $(BSCRESPONSEFILE);
       
   189 	  $(call groupin10infile,$(BSCRESPONSEFILE),$(SBRFILES)) ;
       
   190 	  $(call startrule,msvctoolsgenbrowse) \
       
   191 	  $(BROWSETOOL) $(BROWSEFLAGS) $$(call msvcformatarg,$(OPT.BROWSEDB),$$@) \
       
   192 	  $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(BSCRESPONSEFILE)) \
       
   193 	  $(if $(SAVESPACE),; $(GNURM) -f $(SBRFILES); true,) \
       
   194 	  $(call endrule,msvctoolsgenbrowse)
       
   195   endef
       
   196   $(eval $(msvctoolsgenbrowse)) 
       
   197 endif
       
   198 
       
   199 
       
   200 # Global targets
       
   201 .PHONY:: $(ALLTARGET)
       
   202 $(ALLTARGET):: $(RELEASEABLES)
       
   203 TARGET:: $(RELEASEABLES)
       
   204 
       
   205 ifeq ($(BASE_TYPE),staticlib)
       
   206   LIBRARY:: $(RELEASETARGET) $(INSTALLTARGET)
       
   207 endif
       
   208 
       
   209 # clean up
       
   210 $(eval $(call GenerateStandardCleanTarget,$(CLEANTARGETS),,))
       
   211 # for the abld -what target
       
   212 $(eval $(call whatmacro,$(INSTALLTARGET),WHATTOOLS))