summaryrefslogtreecommitdiff
path: root/pkg/mc/gen.lua
blob: c5d87c73bd9844ad6a2c48467fafe90ab58b9630 (plain)
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
cflags{
	'-I $outdir',
	'-I $srcdir',
	'-I $srcdir/mi',
	'-I $srcdir/parse',
	'-I $srcdir/util',
}

yacc('gram', '$srcdir/parse/gram.y')
build('copy', '$outdir/gram.h', '$outdir/gram.tab.h')

lib('libparse.a', [[
	$outdir/gram.tab.c
	parse/(
		dump.c
		err.c
		export.c
		fold.c
		infer.c
		names.c
		node.c
		specialize.c
		stab.c
		tok.c
		type.c
		use.c
	)
]], {'$outdir/gram.h'})
lib('libmi.a', 'mi/(cfg.c flatten.c dfcheck.c match.c reaching.c)')
lib('libutil.a', 'util/(alloc.c bitset.c htab.c pack.c util.c)')

exe('bin/6m', [[
	6/(
		blob.c
		gen.c
		gengas.c
		genp9.c
		isel.c
		locs.c
		main.c
		ra.c
		peep.c
		simp.c
		typeinfo.c
	)
	libmi.a libparse.a libutil.a
]])
file('bin/6m', '755', '$outdir/bin/6m')

exe('bin/muse', {'muse/muse.c', 'libparse.a', 'libutil.a'})
file('bin/muse', '755', '$outdir/bin/muse')

build('cat', '$outdir/_myrrt.s', {
	'$srcdir/rt/start-linux.s',
	'$srcdir/rt/common.s',
	'$srcdir/rt/abort-linux.s',
})
build('as', '$outdir/_myrrt.o', '$outdir/_myrrt.s')
file('lib/myr/_myrrt.o', '644', '$outdir/_myrrt.o')

set('mcflags', {
	'-I $outdir/lib/sys',
	'-I $outdir/lib/std',
	'-I $outdir/lib/bio',
	'-I $outdir/lib/iter',
	'-I $outdir/lib/regex',
	'-I $outdir/lib/thread',
})

include '$dir/myr.ninja'
local libs = {
	'bio',
	'crypto',
	'date',
	'escfmt',
	'fileutil',
	'flate',
	'http',
	'inifile',
	'iter',
	'json',
	'math',
	'regex',
	'std',
	'sys',
	'testr',
	'thread',
}
for _, lib in ipairs(libs) do
	file('lib/myr/lib'..lib..'.use', '644', '$outdir/lib/'..lib..'/lib'..lib..'.use')
	file('lib/myr/lib'..lib..'.a', '644', '$outdir/lib/'..lib..'/lib'..lib..'.a')
end
file('bin/mbld', '755', '$outdir/mbld/mbld')

man{'doc/6m.1', 'doc/muse.1', 'mbld/mbld.1'}

fetch 'git'