File: precompile.mk

package info (click to toggle)
smlsharp 1.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: buster, jessie, jessie-kfreebsd, stretch
  • size: 31,176 kB
  • ctags: 43,408
  • sloc: ansic: 13,471; sh: 3,207; makefile: 352; ruby: 295; ml: 265; pascal: 256; awk: 225; asm: 97; sql: 24
file content (100 lines) | stat: -rw-r--r-- 3,763 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
94
95
96
97
98
99
100
# GNU make is required.
# This file assumes that srcdir and builddir are same ".".

include ./files.mk

SMLSHARP_ENV = SMLSHARP_HEAPSIZE=128M:1G
SMLSHARP = src/compiler/smlsharp
SMLSHARP_DEP =

all: precompiled/x86-darwin.xz \
     precompiled/x86-linux.xz \
     precompiled/x86-mingw.xz

OBJECTS = $(MINISMLSHARP_OBJECTS) \
	  src/compiler/minismlsharp.smi.o
SMIFILES = $(patsubst %.o,%.smi,$(patsubst %.smi.o,%.smi,$(OBJECTS)))
SMLFILES = $(patsubst %.o,%.sml,$(patsubst %.smi.o,%.smi,$(OBJECTS)))

precompiled/ids: $(SMIFILES) precompile.mk
	$(SMLSHARP) -Bsrc -nostdpath -fprint-main-ids \
	  src/compiler/minismlsharp.smi \
	| sed 's,\.smi$$,.sml,' > $@

precompiled/sums: $(SMLFILES) precompile.mk
	$(SMLSHARP) -Bsrc --sha1 $(SMLFILES) > $@

precompiled/files: precompiled/map precompiled/ids precompiled/sums \
	           precompile.mk
	awk 'BEGIN{while((getline < "precompiled/ids"))id[$$2]=$$1; \
	           while((getline < "precompiled/sums"))sum[$$2]=$$1} \
	     /\.smi\.o$$/{next} \
	     {sub("\\.o$$",".sml",$$2); \
	      printf "compile %s %s:%s %s\n",$$1,id[$$2],sum[$$2],$$2}' \
	  precompiled/map > $@

precompiled/minismlsharp-files: files.mk precompiled/map
	for i in src/compiler/minismlsharp.smi.o $(MINISMLSHARP_OBJECTS); do \
	  fgrep " $$i" precompiled/map; \
	done | cut -d\  -f1 > $@

precompiled/fastbuild1: files.mk precompiled/files
	{ echo 'check src/ml-lex/ml-lex.smi'; \
	  for i in $(BASIS_LIB_OBJECTS:.o=.sml); do \
	    fgrep " $$i" precompiled/files; \
	  done; } > $@

precompiled/fastbuild2: files.mk precompiled/files
	{ echo 'check src/compiler/minismlsharp.smi'; \
	  for i in $(MINISMLSHARP_OBJECTS:.o=.sml); do \
	    fgrep " $$i" precompiled/files; \
	  done; } > $@

src/compiler/minismlsharp.smi.x86-darwin.s: $(MINISMLSHARP_OBJECTS:.o=.smi)
	$(SMLSHARP_ENV) $(SMLSHARP) -Bsrc -nostdpath -dtarget=x86-darwin -S -o $@ src/compiler/minismlsharp.smi
src/compiler/minismlsharp.smi.x86-linux.s: $(MINISMLSHARP_OBJECTS:.o=.smi)
	$(SMLSHARP_ENV) $(SMLSHARP) -Bsrc -nostdpath -dtarget=x86-linux -S -o $@ src/compiler/minismlsharp.smi
src/compiler/minismlsharp.smi.x86-mingw.s: $(MINISMLSHARP_OBJECTS:.o=.smi)
	$(SMLSHARP_ENV) $(SMLSHARP) -Bsrc -nostdpath -dtarget=x86-mingw -S -o $@ src/compiler/minismlsharp.smi

%.x86-darwin.s: %.sml
	$(SMLSHARP_ENV) $(SMLSHARP) -Bsrc -nostdpath -dtarget=x86-darwin -S -o $@ $<
%.x86-linux.s: %.sml
	$(SMLSHARP_ENV) $(SMLSHARP) -Bsrc -nostdpath -dtarget=x86-linux -S -o $@ $<
%.x86-mingw.s: %.sml
	$(SMLSHARP_ENV) $(SMLSHARP) -Bsrc -nostdpath -dtarget=x86-mingw -S -o $@ $<

COPYASM = \
  copy () { \
    [ -d `dirname "$$2"` ] || mkdir -p `dirname "$$2"`; \
    cp "$$1" "$$2" && chmod 644 "$$2"; \
  }; copy

precompiled/map: files.mk precompile.mk
	c=001; \
	inc () { echo 00`expr $$1 + 1` | sed 's,.*\(...\)$$,\1,'; }; \
	echo $(OBJECTS) | awk '{gsub(" ","\n");print}' | sort | uniq \
	| while read i; do \
	    echo "$$c.s $$i"; \
	    c=`inc $$c`; \
	  done > $@

./precompile.dep: precompiled/map depend.mk precompile.mk
	for t in x86-darwin x86-linux x86-mingw; do \
	  { \
	    sed "/MLLEX_DEP/d;/MLYACC_DEP/d;/SMLFORMAT_DEP/d;s/\.o:/.$$t.s:/" \
	      depend.mk; \
	    files=; \
	    while read i; do \
	      set -- $$i; \
	      asm=`echo $$2 | sed "s,\\.o\$$,.$$t.s,"`; \
	      echo "precompiled/$$t/$$1: $$asm precompiled/map"; \
	      echo "	\$$(COPYASM) $$asm \$$@"; \
	      files="$$files precompiled/$$t/$$1"; \
	    done; \
	    echo "precompiled/$$t.xz: precompiled/minismlsharp-files precompiled/fastbuild1 precompiled/fastbuild2 $$files"; \
	    echo "	pax -w -s ',^precompiled/,,' -x cpio $$files precompiled/minismlsharp-files precompiled/fastbuild1 precompiled/fastbuild2 | xz -c > \$$@"; \
	  } < precompiled/map; \
	done > $@

include ./precompile.dep