msvctools.flm 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. # Copyright (c) 2008-2011 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. CLEANTARGETS:=
  19. RELEASABLES:=
  20. INSTALLTARGET:=
  21. RELEASEPATH:=$(RELEASEPATHROOT)/$(FULLVARIANTPATH)
  22. BUILDPATH:=$(OUTPUTPATH)/$(FULLVARIANTPATH)
  23. RELEASETARGET:=$(RELEASEPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
  24. # make the output directories while reading makefile - some build engines prefer this
  25. $(call makepath,$(RELEASEPATH))
  26. $(call makepath,$(BUILDPATH))
  27. RELEASABLES:=$(RELEASABLES) $(RELEASETARGET)
  28. GENDEBUGINFO:=$(if $(findstring deb,$(VARIANTTYPE)),1,)
  29. # MSVC "no space" arguments must take the form /<ARG><PATH_WITH_DOS_SLASHES> e.g.
  30. # /FoF:\object\file\to\be\created.obj
  31. define msvcformatarg
  32. $(1)$(subst /,\\\,$(2))
  33. endef
  34. #############
  35. ## COMPILE ##
  36. #############
  37. # object files and related
  38. OBJFILES:=$(patsubst %,$(BUILDPATH)/%.obj,$(basename $(notdir $(SOURCE))))
  39. SBRFILES:=$(addsuffix .sbr, $(basename $(OBJFILES)))
  40. LISFILES:=$(addsuffix .lis, $(basename $(OBJFILES)))
  41. LSTFILES:=$(addsuffix .tools.lst, $(basename $(SOURCE)))
  42. CLEANTARGETS:=$(CLEANTARGETS) $(OBJFILES) $(SBRFILES) $(LISFILES) $(LSTFILES)
  43. # include paths and preinclude file
  44. UINCLUDE:=$(patsubst %,$(OPT.USERINCLUDE)%,$(USERINCLUDE))
  45. SINCLUDE:=$(patsubst %,$(OPT.SYSINCLUDE)%,$(SYSTEMINCLUDE))
  46. PINCLUDE:=$(OPT.PREINCLUDE)$(notdir $(PRODUCT_INCLUDE))
  47. INCLUDES:=$(PINCLUDE) $(UINCLUDE) $(SINCLUDE)
  48. # macros
  49. DEFINES:=$(call makemacrodef,$(OPT.DEFINE),$(CDEFS) $(BASE_MACRO) $(CFLAGS.ADD))
  50. #compile
  51. define msvctoolscompile
  52. $(BUILDPATH)/$(basename $(notdir $(1))).obj: $(1) $(PROJECT_META_DEP) $(if $(HAVE_ORDERONLY),|,) EXPORT
  53. $(call startrule,msvctoolscompile,,$(1)) \
  54. $(CC) \
  55. $(if $(findstring staticlib,$(BASE_TYPE)),,$(CFLAGS.LIB)) \
  56. $(CFLAGS) $$(subst /,-,$(OPTION_MSVC)) \
  57. $(if $(findstring /W,$(OPTION_MSVC)),,$(CFLAGS.DEFAULT.WARNLEVEL)) \
  58. $(DEFINES) $(INCLUDES) \
  59. $$(call msvcformatarg,$(OPT.BROWSEFILE),$(BUILDPATH)/$(basename $(notdir $(1))).sbr) \
  60. $$(call msvcformatarg,$(OPT.OBJECTFILE),$$@) $(1) \
  61. $(call endrule,msvctoolscompile)
  62. endef
  63. # make the output directories while reading makefile - some build engines prefer this
  64. $(call makepath,$(BUILDPATH))
  65. $(foreach SRCFILE,$(SOURCE),$(eval $(call msvctoolscompile,$(SRCFILE))))
  66. # assembler listing
  67. define msvctoolslisting
  68. LISTING:: $(BUILDPATH)/$(basename $(notdir $(1))).lis
  69. $(GNUCP) $$< $(basename $(1)).tools.lst
  70. $(BUILDPATH)/$(basename $(notdir $(1))).lis: $(1)
  71. $(call startrule,msvctoolslisting) \
  72. $(CC) \
  73. $(if $(findstring staticlib,$(BASE_TYPE)),,$(CFLAGS.LIB)) \
  74. $(CFLAGS) $$(subst /,-,$(OPTION_MSVC)) \
  75. $(if $(findstring /W,$(OPTION_MSVC)),,$(CFLAGS.DEFAULT.WARNLEVEL)) \
  76. $(DEFINES) $(INCLUDES) \
  77. $$(call msvcformatarg,$(OPT.LISTING),$(BUILDPATH)/$(basename $(notdir $(1))).lis) \
  78. $(1) \
  79. $(call endrule,msvctoolslisting)
  80. endef
  81. $(foreach SRCFILE,$(SOURCE),$(eval $(call msvctoolslisting,$(SRCFILE))))
  82. ifeq ($(BASE_TYPE),staticlib)
  83. #############
  84. ## ARCHIVE ##
  85. #############
  86. ARCHIVERRESPONSEFILE:=$(BUILDPATH)/$(TARGET).arf
  87. CLEANTARGETS:=$(CLEANTARGETS) $(ARCHIVERRESPONSEFILE)
  88. define msvctoolsarchive
  89. $(RELEASETARGET): $(OBJFILES)
  90. @echo "" > $(ARCHIVERRESPONSEFILE);
  91. $(call groupin10infile,$(ARCHIVERRESPONSEFILE),$(OBJFILES)) ;
  92. $(call startrule,msvctoolsarchive) \
  93. $(AR) $(ARFLAGS) $(OPT.SUBSYSTEM)$(SUBSYSTEM) $$(call msvcformatarg,$(OPT.OUTFILE),$$@) \
  94. $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(ARCHIVERRESPONSEFILE)) \
  95. $(if $(SAVESPACE),; $(GNURM) -f $(OBJFILES); true,) \
  96. $(call endrule,msvctoolsarchive)
  97. endef
  98. $(eval $(msvctoolsarchive))
  99. else
  100. ##########
  101. ## LINK ##
  102. ##########
  103. STATICLIBS:=$(patsubst %,$(RELEASEPATH)/%.lib,$(STATICLIBRARY))
  104. IMPORTLIBS:=$(patsubst %.dso,$(IMPORTLIBPATH)/%.lib,$(LIBRARY))
  105. LINKERRESPONSEFILE:=$(BUILDPATH)/$(TARGET).lrf
  106. CLEANTARGETS:=$(CLEANTARGETS) $(RELEASETARGET).lib $(LINKERRESPONSEFILE)
  107. define msvctoolslink
  108. $(RELEASETARGET): $(OBJFILES) $(STATICLIBS) $(IMPORTLIBS)
  109. @echo "" > $(LINKERRESPONSEFILE);
  110. $(call groupin10infile,$(LINKERRESPONSEFILE),$(STATICLIBS) $(IMPORTLIBS) $(OBJFILES)) ;
  111. $(call startrule,msvctoolslink) \
  112. $(LD) $(LFLAGS) $(WIN32_LIBRARY) $(OPT.SUBSYSTEM)$(SUBSYSTEM) \
  113. $$(call msvcformatarg,$(OPT.OUTFILE),$$@) \
  114. $$(call msvcformatarg,$(OPT.IMPLIB),$(RELEASETARGET).lib) \
  115. $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(LINKERRESPONSEFILE)) \
  116. $(if $(SAVESPACE),; $(GNURM) -f $(OBJFILES); true,) \
  117. $(call endrule,msvctoolslink)
  118. endef
  119. $(eval $(msvctoolslink))
  120. endif
  121. #############
  122. ## INSTALL ##
  123. #############
  124. ifneq ($(INSTALLPATH),)
  125. INSTALLTARGET:=$(INSTALLPATH)/$(TARGET).$(if $(REQUESTEDTARGETEXT),$(REQUESTEDTARGETEXT),$(TARGETTYPE))
  126. RELEASABLES:=$(RELEASABLES) $(INSTALLTARGET)
  127. define msvctoolsinstall
  128. $(INSTALLTARGET): $(RELEASETARGET)
  129. $(call startrule,msvctoolsinstall) \
  130. $(GNUCP) $$< $$@ && \
  131. $(GNUCHMOD) a+rwx $$@ \
  132. $(call endrule,msvctoolsinstall)
  133. endef
  134. # make the output directories while reading makefile - some build engines prefer this
  135. $(call makepath,$(INSTALLPATH))
  136. $(eval $(msvctoolsinstall))
  137. endif
  138. ##########################
  139. ## BROWSE DB GENERATION ##
  140. ##########################
  141. ifneq ($(GENDEBUGINFO),)
  142. BSCFILE:=$(RELEASEPATH)/$(TARGET).bsc
  143. BSCRESPONSEFILE:=$(BUILDPATH)/$(TARGET).brf
  144. CLEANTARGETS:=$(CLEANTARGETS) $(BSCRESPONSEFILE)
  145. RELEASABLES:=$(RELEASABLES) $(BSCFILE)
  146. define msvctoolsgenbrowse
  147. $(BSCFILE): $(OBJFILES)
  148. @echo "" > $(BSCRESPONSEFILE);
  149. $(call groupin10infile,$(BSCRESPONSEFILE),$(SBRFILES)) ;
  150. $(call startrule,msvctoolsgenbrowse) \
  151. $(BROWSETOOL) $(BROWSEFLAGS) $$(call msvcformatarg,$(OPT.BROWSEDB),$$@) \
  152. $$(call msvcformatarg,$(PREFIX.RESPONSEFILE),$(BSCRESPONSEFILE)) \
  153. $(if $(SAVESPACE),; $(GNURM) -f $(SBRFILES); true,) \
  154. $(call endrule,msvctoolsgenbrowse)
  155. endef
  156. $(eval $(msvctoolsgenbrowse))
  157. endif
  158. # Global targets
  159. .PHONY:: $(ALLTARGET)
  160. $(ALLTARGET):: $(RELEASABLES)
  161. TARGET:: $(RELEASABLES)
  162. ifeq ($(BASE_TYPE),staticlib)
  163. LIBRARY:: $(RELEASETARGET) $(INSTALLTARGET)
  164. endif
  165. # clean up
  166. $(call raptor_clean,$(CLEANTARGETS))
  167. # for the --what option and the log file
  168. $(call raptor_release,$(INSTALLTARGET))