-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathStirfile
94 lines (81 loc) · 3.4 KB
/
Stirfile
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
@toplevel
@strict
@fileinclude @ignore "opts.smk"
# You can modify these for compilation
$WITH_WERROR ?= @false
$CC ?= "clang"
$CFLAGS ?= ["-Ofast", "-g", "-Wall", "-Wextra", "-Wno-missing-field-initializers", "-Wno-unused-parameter", "-Wno-tautological-compare", "-Wshadow", "-Wstrict-prototypes", "-Wmissing-prototypes", "-Wpointer-arith", "-fomit-frame-pointer", "-std=gnu11", "-fPIC"]
$LDFLAGS ?= []
$WITH_PYTHON ?= @false
$WITH_NEW_CPU ?= @false
@if($WITH_WERROR)
$CFLAGS = [@$CFLAGS, "-Werror"]
@endif
@if($WITH_PYTHON)
$PYTHON_CFLAGS_SET ?= @false
@if(!$PYTHON_CFLAGS_SET)
$PYTHON_CFLAGS ``= ["python3-config", "--includes"]
@endif
$CFLAGS = [@$CFLAGS, @$PYTHON_CFLAGS]
@endif
@if($WITH_NEW_CPU)
$CFLAGS = [@$CFLAGS, "-msse", "-msse2", "-msse3", "-mssse3", "-msse4.1", "-msse4.2", "-msse4", "-mavx", "-mavx2", "-msse4a", "-mbmi", "-mbmi2", "-march=skylake"]
@endif
# You can modify these during development
$MODS = ["yy", "core", "main", "runtime", "test", "pybridge", "cbridge"]
# You probably don't want to modify anything below this line
@function $LIST_TO_DICTS_SIMPLE($list, $param)
@locvar $i=0
@locvar $dicts=[]
@for($i=0,$i<$list[],$i=$i+1)
@append($dicts, {$param: $list[$i]})
@endfor
@return $dicts
@endfunction
@function $MODULE($lib, $src_lib, $src_prog, $libs, $unitdeps, $unitcmds)
@locvar $src = [@$src_lib, @$src_prog]
@locvar $obj_lib = @sufsuball($src_lib, ".c", ".o")
@locvar $obj_prog = @sufsuball($src_prog, ".c", ".o")
@locvar $obj = @sufsuball($src, ".c", ".o")
@locvar $dep = @sufsuball($src, ".c", ".d")
@locvar $prog = @sufsuball($src_prog, ".c", "")
@locvar $alldeps = [@$prog, $lib]
@locvar $i = 0
@addrule({"tgts": [{"name": "all"}], "attrs": {"phony": @true}, \
"deps": @L$LIST_TO_DICTS_SIMPLE($alldeps, "name")})
@addrule({"tgts": [{"name": "unit"}], "attrs": {"phony": @true}, \
"deps": @L$LIST_TO_DICTS_SIMPLE($unitdeps, "name"), \
"shells": [{"embed": @true, "cmds": $unitcmds}]})
@for($i=0,$i<$obj[],$i=$i+1)
@addrule({"tgts": [{"name": $obj[$i]}], \
"deps": [{"name": $src[$i]}, {"name": $dep[$i]}], \
"shells": [{"cmd": [ \
@D$(CC), @@D$(CFLAGS), "-c", "-o", $obj[$i], \
$src[$i]]}]})
@addrule({"tgts": [{"name": $dep[$i]}], \
"deps": [{"name": $src[$i]}], \
"shells": [{"cmd": [ \
@D$(CC), @@D$(CFLAGS), "-M", "-o", $dep[$i], \
$src[$i]]}]})
@endfor
@for($i=0,$i<$prog[],$i=$i+1)
@addrule({"tgts": [{"name": $prog[$i]}], \
"deps": [{"name": $obj_prog[$i]}, \
{"name": $lib}, \
@@L$LIST_TO_DICTS_SIMPLE($libs, "name")], \
"shells": [{"cmd": [ \
@D$(CC), @@D$(CFLAGS), "-o", $prog[$i], \
$obj_prog[$i], $lib, @$libs, @@D$(LDFLAGS), \
"-lpthread", "-ldl"]}]})
@endfor
@addrule({"tgts": [{"name": $lib}], \
"deps": @L$LIST_TO_DICTS_SIMPLE($obj_lib, "name"), \
"shells": [{"embed": @true, "cmds": [ \
["rm", "-f", $lib], \
["ar", "rvs", $lib, @$obj_lib]]}]})
@endfunction
$MODS_ALL = @sufsuball($MODS, "", "/all")
$MODS_UNIT = @sufsuball($MODS, "", "/unit")
@phonyrule: 'all': $MODS_ALL
@phonyrule: 'unit': $MODS_UNIT
@dirinclude $MODS