Newer
Older
zweic / Makefile
  1. ############################################################-*-Makefile-*-####
  2. # Makefile pour le projet de compilation (nécessite GNUMake).
  3. ##############################################################################
  4. #
  5. # Par défaut, ne recompile que les fichiers qui ont été modifiés après
  6. # la dernière compilation réussie.
  7. # Pour forcer la compilation de tous les fichiers, utiliser "make force".
  8. #
  9. # $Id$
  10. #
  11. ##############################################################################
  12.  
  13. ##############################################################################
  14. # Variables
  15.  
  16. # Groupe
  17. GROUP_NUMBER = 39 # remplacez ceci par votre numéro de groupe #
  18. GROUP = $(GROUP_NUMBER:%=compil%)
  19.  
  20. COMPILER_MAIN = zweic.GeneratorTest
  21. EXAMPLES_DIR = $(ROOT)/examples
  22. TESTS_DIR = $(ROOT)/tests/5
  23.  
  24. TO_ADDRESS = compilation@lampsun1.epfl.ch
  25.  
  26. # Global
  27. ROOT = .
  28. TARGETS += $(JC_TARGET)
  29. TARGETS += $(SC_TARGET)
  30. SOURCES += $(JC_SOURCES)
  31. SOURCES += $(SC_SOURCES)
  32. OBJECTS += $(SC_OUTPUTDIR)
  33.  
  34. # Compilation Java
  35. JC_COMMAND = javac
  36. JC_FLAGS = -g -deprecation -source 1.4
  37. JC_OUTPUTDIR = $(ROOT)/classes
  38. JC_CLASSPATH = $(JC_OUTPUTDIR)
  39. JC_TARGET = .latest-jc
  40.  
  41. JC_FILES += RISC
  42. JC_SOURCES += $(JC_FILES:%=sources/zweic/%.java)
  43.  
  44. # Compilation Scala
  45. SC_COMMAND = scalac
  46. SC_FLAGS =
  47. SC_OUTPUTDIR = $(ROOT)/classes
  48. SC_CLASSPATH = $(SC_OUTPUTDIR)
  49. SC_TARGET = .latest-sc
  50.  
  51. SC_FILES += Position
  52. SC_FILES += Report
  53. SC_FILES += Tokens
  54. SC_FILES += Scanner
  55. SC_FILES += ScannerTest
  56. SC_FILES += Name
  57. SC_FILES += Operators
  58. SC_FILES += Tree
  59. SC_FILES += Parser
  60. SC_FILES += ParserTest
  61. SC_FILES += Printer
  62. SC_FILES += PrinterTest
  63. SC_FILES += Symbol
  64. SC_FILES += Type
  65. SC_FILES += Analyzer
  66. SC_FILES += AnalyzerTest
  67. SC_FILES += Code
  68. SC_FILES += Generator
  69. SC_FILES += GeneratorTest
  70. SC_SOURCES += $(SC_FILES:%=sources/zweic/%.scala)
  71.  
  72. # Execution Scala
  73. SCALA_COMMAND = scala
  74.  
  75. # Comptage
  76. WC_COMMAND = wc
  77. WC_FILES = $(SOURCES)
  78.  
  79. # Recherche
  80. GREP_COMMAND = grep
  81. GREP_FILES = $(SOURCES)
  82. GREP_ARGS ?= $(ARGS)
  83.  
  84. # Utilitaires divers
  85. CHGRP = chgrp
  86. CHMOD = chmod
  87. ECHO = echo
  88. FIND = find
  89. MKDIR = mkdir
  90. MPACK = /home/iclamp/soft/bin/mpack
  91. PRINTF = printf
  92. RM = rm -f
  93. SED = sed
  94. TOUCH = touch
  95. WC = wc
  96. ZIP = zip
  97.  
  98. ##############################################################################
  99. # Fonctions
  100.  
  101. # Affiche puis exécute une commande
  102. run = $(ECHO) $(1); $(1) || exit $$?
  103.  
  104. ##############################################################################
  105. # Commandes
  106.  
  107. all : $(TARGETS)
  108.  
  109. force :
  110. $(RM) $(TARGETS)
  111. $(MAKE) all
  112.  
  113. clean :
  114. $(RM) $(TARGETS)
  115. $(RM) -r $(OBJECTS)
  116.  
  117. distclean : clean
  118. $(RM) $(GROUP).zip
  119. $(strip $(FIND) . \
  120. \( -name "*~" \
  121. -o -name "*.class" \
  122. -o -name "core" \
  123. \) \
  124. -exec $(RM) "{}" ";")
  125.  
  126. wc :
  127. @$(WC_COMMAND) $(WC_FILES)
  128.  
  129. grep :
  130. @if [ -z $(GREP_ARGS) ]; then \
  131. $(ECHO) "usage: $(MAKE) grep ARGS=<regexp>"; \
  132. else \
  133. $(GREP_COMMAND) $(GREP_ARGS) $(GREP_FILES); \
  134. fi
  135.  
  136. stat :
  137. @sorted=`echo $(JC_SOURCES) $(SC_SOURCES) | xargs -n 1 | sort`; \
  138. total=0; total1=0; \
  139. tmpfile="/tmp/$(USER)_stat.tmp"; \
  140. for file in $$sorted; do \
  141. size=0; size1=0; \
  142. if [ -f "$$file" ]; then \
  143. size=`stat -L -c%s $$file`; \
  144. total=`echo "$$total + $$size" | bc`; \
  145. $(SED) -es"#^[ \t]*\(.*\)#\1#" $$file > $$tmpfile; \
  146. size1=`stat -L -c%s $$tmpfile`; \
  147. total1=`echo "$$total1 + $$size1" | bc`; \
  148. fi; \
  149. $(PRINTF) "%6d %6d %s\n" $$size $$size1 $$file; \
  150. done; \
  151. $(PRINTF) "%6d %6d\n" $$total $$total1; \
  152. $(RM) $$tmpfile
  153.  
  154. fix-permissions : test-group
  155. $(CHGRP) -R $(GROUP) .
  156. $(CHMOD) -R g=u .
  157. $(CHMOD) -R o-rwx .
  158.  
  159. submit : test-group
  160. $(ZIP) $(GROUP).zip $(SOURCES)
  161. $(MPACK) -s "$(GROUP)" $(GROUP).zip "$(TO_ADDRESS)"
  162. $(RM) $(GROUP).zip
  163.  
  164. test-group :
  165. @if [ -z "$(GROUP_NUMBER)" ]; then \
  166. $(ECHO) "erreur : votre numero de groupe manque"; \
  167. $(ECHO) "solution: definissez-le dans votre fichier Makefile"; \
  168. exit 1; \
  169. fi
  170. @exist=`groups | grep -c $(GROUP)`; \
  171. if [ "$$exist" -lt 1 ]; then \
  172. $(ECHO) "erreur : le groupe Unix \"$(GROUP)\" n'existe pas"; \
  173. $(ECHO) "solution: verifiez votre numero de groupe"; \
  174. exit 1; \
  175. fi
  176.  
  177. tests : all
  178. @for file in `ls -1 $(TESTS_DIR)/*.zwei`; do \
  179. $(ECHO); \
  180. $(ECHO) "fichier $$file"; \
  181. $(SCALA_COMMAND) -cp $(SC_OUTPUTDIR) $(COMPILER_MAIN) $$file; \
  182. done
  183.  
  184. examples : all
  185. @for file in `ls -1 $(EXAMPLES_DIR)/*.zwei`; do \
  186. $(ECHO); \
  187. $(ECHO) "fichier $$file"; \
  188. $(SCALA_COMMAND) -cp $(SC_OUTPUTDIR) $(COMPILER_MAIN) $$file; \
  189. done
  190.  
  191. .PHONY : all
  192. .PHONY : force
  193. .PHONY : clean
  194. .PHONY : distclean
  195. .PHONY : wc
  196. .PHONY : grep
  197. .PHONY : stat
  198. .PHONY : fix-premissions
  199. .PHONY : submit
  200. .PHONY : test-group
  201. .PHONY : tests
  202. .PHONY : examples
  203.  
  204. ##############################################################################
  205. # Règles
  206.  
  207. $(JC_TARGET) : $(JC_SOURCES)
  208. @if [ ! -d $(JC_OUTPUTDIR) ]; then \
  209. $(call run,$(MKDIR) -p $(JC_OUTPUTDIR)); \
  210. fi
  211. $(strip $(JC_COMMAND) $(JC_FLAGS) $(JC_OUTPUTDIR:%=-d %) \
  212. $(JC_CLASSPATH:%=-classpath %) $?)
  213. $(TOUCH) $@
  214.  
  215. $(SC_TARGET) : $(SC_SOURCES)
  216. @if [ ! -d $(SC_OUTPUTDIR) ]; then \
  217. $(call run,$(MKDIR) -p $(SC_OUTPUTDIR)); \
  218. fi
  219. $(strip $(SC_COMMAND) $(SC_FLAGS) $(SC_OUTPUTDIR:%=-d %) \
  220. $(SC_CLASSPATH:%=-classpath %) $?)
  221. $(TOUCH) $@
  222.  
  223. ##############################################################################