Makefile 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. # $Header$
  2. EMHOME = ../../..
  3. INSTALL = $(EMHOME)/modules/install
  4. COMPARE = $(EMHOME)/modules/compare
  5. LINT = lint
  6. BINDIR = $(EMHOME)/lib
  7. # set HOWMUCH to head -20 to limit number of patterns used
  8. #HOWMUCH = head -20
  9. HOWMUCH = cat
  10. LEXLIB = -ll
  11. INCLDIR = -I$(EMHOME)/h -I$(EMHOME)/modules/h -I$(EMHOME)/modules/pkg
  12. PREFLAGS = $(INCLDIR) -DPRIVATE=static# -DDEBUG
  13. # Enable the next line to produce a version that output's the line number
  14. # from the patterns file each time an optimization is performed.
  15. #PREFLAGS = $(PREFLAGS) -DSTATS
  16. PROFFLAG = -O
  17. CFLAGS = $(PREFLAGS) $(PROFFLAG) $(COPT)
  18. LINTFLAGS = $(PREFLAGS) -DNORCSID
  19. LLOPT =
  20. CMD = '$(CC) -c $(CFLAGS)'
  21. AR = ar
  22. SUF = o
  23. LIBSUF = a
  24. LIBOPT = libemopt.$(LIBSUF)
  25. LIBCEOPT = libCEopt.$(LIBSUF)
  26. .SUFFIXES: .d .r
  27. .r.d: ; CMD=$(CMD); export CMD; awk -f makefuns.awk $*.r | sh -x
  28. touch $@
  29. .SUFFIXES: .$(SUF)
  30. .c.$(SUF):
  31. $(CC) -c $(CFLAGS) $*.c
  32. CSRC = main.c nopt.c mkstrct.c aux.c outputdfa.c outcalls.c\
  33. findworst.c initlex.c
  34. SRCS = Makefile nopt.h parser.h parser.g syntax.l pseudo.r\
  35. patterns $(CSRC)
  36. NOFILES = nopt.$(SUF) dfa.$(SUF) trans.$(SUF) aux.$(SUF) mkstrct.$(SUF)
  37. POFILES = parser.$(SUF) syntax.$(SUF) outputdfa.$(SUF) outcalls.$(SUF) findworst.$(SUF)\
  38. initlex.$(SUF) Lpars.$(SUF)
  39. GENFILES = Lpars.h Lpars.c parserdummy parser.c syntax.c \
  40. dfa.c dfa.c.new trans.c trans.c.new\
  41. incalls.d incalls.r incalls.r.new pseudo.d
  42. all: em_nopt $(LIBOPT) $(LIBCEOPT) em_opt.3
  43. install: all
  44. $(INSTALL) lib/$(LIBOPT)
  45. $(INSTALL) lib/$(LIBCEOPT)
  46. $(INSTALL) man/em_opt.3
  47. cp em_nopt.6 $(EMHOME)/man
  48. cp em_nopt $(BINDIR)/em_nopt
  49. cmp: all
  50. -$(COMPARE) lib/$(LIBOPT)
  51. -$(COMPARE) lib/$(LIBCEOPT)
  52. -$(COMPARE) man/em_opt.3
  53. -cmp em_nopt $(BINDIR)/em_nopt
  54. pr:
  55. @pr $(SRCS)
  56. opr:
  57. make pr | opr
  58. lint: lintparser lintnopt
  59. clean:
  60. rm -f O_*.$(SUF)
  61. rm -f O_*.c
  62. rm -f $(NOFILES) main.$(SUF) $(POFILES)
  63. rm -f $(GENFILES) parser em_nopt $(LIBOPT) $(LIBCEOPT)
  64. # How to build stand alone version of the optimizer
  65. NOPTLIB = $(EMHOME)/modules/lib/libread_emk.$(LIBSUF)\
  66. $(EMHOME)/modules/lib/libemk.$(LIBSUF)\
  67. $(EMHOME)/modules/lib/liballoc.$(LIBSUF)\
  68. $(EMHOME)/modules/lib/malloc.$(SUF)\
  69. $(EMHOME)/modules/lib/libprint.$(LIBSUF)\
  70. $(EMHOME)/modules/lib/libstring.$(LIBSUF)\
  71. $(EMHOME)/modules/lib/libsystem.$(LIBSUF)\
  72. $(EMHOME)/lib/em_data.$(LIBSUF)
  73. em_nopt: incalls.r main.$(SUF) $(NOFILES)
  74. $(CC) -o em_nopt main.$(SUF) $(NOFILES) $(NOPTLIB)
  75. OLINT = main.c mkstrct.c nopt.c aux.c dfa.c trans.c
  76. OLINTLIB = $(EMHOME)/modules/lib/llib-lread_emkV.ln\
  77. $(EMHOME)/modules/lib/llib-lemk.ln\
  78. $(EMHOME)/modules/lib/llib-lsystem.ln\
  79. $(EMHOME)/modules/lib/llib-lalloc.ln\
  80. $(EMHOME)/modules/lib/llib-lprint.ln\
  81. $(EMHOME)/modules/lib/llib-lstring.ln
  82. lintnopt: incalls.r $(OLINT)
  83. $(LINT) $(LINTFLAGS) $(OLINT) $(OLINTLIB)
  84. # How to build the library version of the optimizer
  85. $(LIBOPT): $(NOFILES) pseudo.d incalls.d
  86. rm -f $(LIBOPT)
  87. ar rc $(LIBOPT) O_*.$(SUF) $(NOFILES)
  88. -sh -c 'ranlib $(LIBOPT)'
  89. $(LIBCEOPT): incalls.r
  90. rm -f O_*.$(SUF) $(NOFILES) pseudo.d incalls.d
  91. -mv $(LIBOPT) $(LIBOPT).saved
  92. make "EMHOME="$(EMHOME) PREFLAGS='$(INCLDIR) -DPRIVATE=static -DCODE_EXPANDER' $(LIBOPT)
  93. mv $(LIBOPT) $(LIBCEOPT)
  94. -mv $(LIBOPT).saved $(LIBOPT)
  95. rm -f O_*.$(SUF) $(NOFILES)
  96. incalls.r: patterns parser
  97. -$(EMHOME)/lib/cpp patterns | $(HOWMUCH) >/tmp/patts
  98. parser </tmp/patts
  99. -rm /tmp/patts
  100. # How to build the lint library for the optimizer
  101. LLINT = nopt.c mkstrct.c aux.c dfa.c trans.c
  102. lintlib: incalls.r $(LLINT)
  103. $(LINT) $(LINTFLAGS) $(LLINT) -Cemopt
  104. mv llib-lemopt.ln $(EMHOME)/modules/lib
  105. # How to build program to parse patterns table and build c files.
  106. PARSERLIB = $(EMHOME)/lib/em_data.$(LIBSUF)\
  107. $(EMHOME)/modules/lib/liballoc.$(LIBSUF)\
  108. $(EMHOME)/modules/lib/libstring.$(LIBSUF)\
  109. $(EMHOME)/modules/lib/libsystem.$(LIBSUF)
  110. parser: parserdummy $(POFILES) $(PARSERLIB)
  111. $(CC) -o parser $(LDFLAGS) $(POFILES) $(PARSERLIB) $(LEXLIB)
  112. parserdummy: parser.g
  113. LLgen $(LLOPT) parser.g
  114. touch parserdummy
  115. PLINT = parser.c syntax.c outputdfa.c outcalls.c\
  116. findworst.c initlex.c Lpars.c
  117. PLINTLIB = $(EMHOME)/modules/lib/llib-lalloc.ln\
  118. $(EMHOME)/modules/lib/llib-lstring.ln\
  119. $(EMHOME)/modules/lib/llib-lsystem.ln
  120. lintparser: parserdummy $(PLINT)
  121. $(LINT) $(LINTFLAGS) $(PLINT) $(PLINTLIB)
  122. # Dependancies
  123. main.$(SUF): nopt.h
  124. nopt.$(SUF): nopt.h
  125. mkstrct.$(SUF): nopt.h
  126. aux.$(SUF): nopt.h
  127. pseudo.d: nopt.h makefuns.awk
  128. dfa.$(SUF): nopt.h
  129. trans.$(SUF): nopt.h
  130. incalls.d: nopt.h makefuns.awk
  131. parser.$(SUF): Lpars.h parser.h
  132. Lpars.$(SUF): Lpars.h
  133. syntax.$(SUF): syntax.l parser.h Lpars.h
  134. outputdfa.$(SUF): parser.h Lpars.h
  135. outcalls.$(SUF): parser.h
  136. findworst.$(SUF): parser.h
  137. initlex.$(SUF): parser.h