File: stage0.mk

package info (click to toggle)
smlsharp 1.2.0-2.1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 31,180 kB
  • sloc: ansic: 13,471; sh: 3,207; makefile: 352; ruby: 295; ml: 265; pascal: 256; awk: 225; asm: 97; sql: 24
file content (93 lines) | stat: -rw-r--r-- 3,044 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
GEN_CM = \
    gencm () { \
      echo "$$1" \
      | awk '{gsub(" ","\n");print}' \
      | sed '\,^src/basis/,d;\,^src/smlnj/,d;s,^src/,../src/,' \
      | awk 'BEGIN{print "Group is";\
             print "\043if defined(SMLNJ_VERSION)";\
             print "$$/basis.cm";\
             print "\043endif"}\
             NR==1{s="\043if defined(SMLNJ_VERSION)\n\043else\n"\
                     $$0"\n\043endif\n";next}\
             {s=$$0"\n"s}\
             END{print s}'; \
    }; gencm

MAKESML_SMLNJ = \
    makesml () { \
      heap="$$1_h.$(SMLNJ_HEAP_SUFFIX)"; \
      rm -f "$heap"; \
      { echo "structure SMLofNJ_ = SMLofNJ;"; \
        echo "CM.make \"$$1.cm\";"; \
        echo "SMLofNJ_.exportFn (\"$$1_h\", $$2)"; \
      } | $(SMLNJ) || exit $$?; \
      heap="$$1_h.$(SMLNJ_HEAP_SUFFIX)"; \
      test -f "$$heap" || exit $$?; \
      case '$(SMLNJ_HEAP_SUFFIX)' in \
      *win32*) \
        sml=`echo '$(SMLNJ)' | sed 's,^cmd /c "\(.*\)"$$,\1,'`; \
        awk 'BEGIN{ \
             print"\043!/bin/sh";\
             print"cmd /c '"'$$sml @SMLload=$$heap '"'\"$$*\""}' > "$$1"; \
        ;; \
      *cygwin*) \
        awk 'BEGIN{ \
             print"\043!/bin/sh";\
             print"SMLNJ_CYGWIN_RUNTIME=1";\
             print"export SMLNJ_CYGWIN_RUNTIME";\
             print"$(SMLNJ) @SMLload='"$$heap"' \"$$@\""}' > "$$1"; \
        chmod +x "$$1"; \
        ;; \
      *) \
        awk 'BEGIN{ \
             print"\043!/bin/sh";\
             print"$(SMLNJ) @SMLload='"$$heap"' \"$$@\""}' > "$$1"; \
        chmod +x "$$1"; \
        ;; \
      esac; \
    }; makesml

MAKESML_MLTON = \
    makesml () { '$(MLTON)' -verbose 2 -output "$$1" "$$1.cm"; }; makesml

MAKESML = false

stage0/smllex.cm: stage0.mk files.mk
	$(GEN_CM) '$(MLLEX_SOURCES)' > $@
stage0/smlyacc.cm: stage0.mk files.mk
	$(GEN_CM) '$(MLYACC_SOURCES)' > $@
stage0/smlformat.cm: stage0.mk files.mk
	$(GEN_CM) '$(SMLFORMAT_SOURCES)' > $@
stage0/smlsharp.cm: stage0.mk files.mk
	$(GEN_CM) '$(MINISMLSHARP_SOURCES)' \
	| awk '/src\/sql/{next}\
	       /src\/ffi/{next}\
	       {sub("RunLoop\\.sml$$","RunLoop_dummy.sml");\
	        sub("ExecutablePath\\.sml$$","ExecutablePath_dummy.sml");\
	        print}\
	       /basis.cm$$/{\
	         print"../src/compiler/compat/main/Real32_compat.sml";\
	         print"../src/compiler/compat/main/IEEEReal_compat.sml"}'\
	> $@

stage0/smllex: stage0/smllex.cm $(MLLEX_SOURCES)
	$(MAKESML) stage0/smllex ExportLexGen.lexGen
stage0/smlyacc: stage0/smlyacc.cm $(MLYACC_SOURCES)
	$(MAKESML) stage0/smlyacc ExportParseGen.parseGen
stage0/smlformat: stage0/smlformat.cm $(SMLFORMAT_SOURCES)
	$(MAKESML) stage0/smlformat Main.main
stage0/smlsharp: stage0/smlsharp.cm $(MINISMLSHARP_SOURCES)
	$(MAKESML) stage0/smlsharp Main.main

stage0: PHONY
	-mkdir stage0
	$(MAKE) \
	MAKESML='$$(MAKESML_$(STAGE0_COMPILER))' \
	MLLEX=stage0/smllex \
	MLYACC=stage0/smlyacc \
	SMLFORMAT=stage0/smlformat \
	stage0/smlsharp
	@echo
	@echo "***"
	@echo "*** Building stage 0 compiler is completed. Do \`make'."
	@echo "***"