summaryrefslogtreecommitdiff
path: root/mbld/opts.myr
blob: 6b5e4c56ef7e7255b82cb70f9adb0166f04bd949 (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
use std
use thread

use "config"

pkg bld =
	var opt_arch 		: byte[:]
	var opt_sys		: byte[:]
	var opt_sysvers		: (int, int, int)
	var opt_runtime		: byte[:]
	var opt_genasm		: bool
	var opt_incpaths	: byte[:][:]
	var opt_mcflags		: byte[:][:]
	var opt_museflags	: byte[:][:]
	var opt_ldflags		: byte[:][:]
	var opt_instbase	: byte[:]
	var opt_destdir		: byte[:]
	var opt_objdir		: byte[:]
	var opt_maxproc 	: std.size
	var opt_debug		: bool
	var opt_silent		: bool

	/* undocumented/unsupported opts */
	var opt_mc	: byte[:]
	var opt_muse	: byte[:]

	var sysarchstr	: byte[:]
	var archstr	: byte[:]
	var sysstr	: byte[:]

	const initopts	: (-> void)
	const parseversion	: (v : byte[:] -> (int, int, int))
;;

var opt_arch 		= ""
var opt_sys		= ""
var opt_binname		= ""
var opt_libname		= ""
var opt_runtime		= ""
var opt_incpaths	/* FIXME: taking a constant slice is a nonconstant initializer */
var opt_instbase	= ""
var opt_destdir		= ""
var opt_sysvers
var opt_debug		= false
var opt_mc		= "6m"
var opt_as		= "as"
var opt_muse		= "muse"
var opt_mcflags		= [][:]
var opt_museflags	= [][:]
var opt_ldflags		= [][:]
var opt_objdir		= "obj"
var opt_genasm  	= false
var opt_silent		= false
var opt_maxproc 	= 1

const initopts = {
	var si

	std.getsysinfo(&si)
	match si.system
	| "Linux":	opt_sys = "linux"
	| "Darwin":	opt_sys = "osx"
	| "FreeBSD":	opt_sys = "freebsd"
	| "NetBSD":	opt_sys = "netbsd"
	| "OpenBSD":	opt_sys = "openbsd"
	| "Plan9":	opt_sys = "plan9"
	| unknown:	std.fatal("unknown systemy \"{}\"\n", unknown)
	;;

	opt_sysvers = parseversion(si.release)

	match si.arch
	| "x86_64":	opt_arch = "x64"
	| "amd64":	opt_arch = "x64"
	| unknown:	std.fatal("unknown architecture \"{}\"\n", unknown)
	;;

	opt_maxproc = 2*(thread.ncpu() : std.size)
	opt_incpaths = [][:]
	opt_instbase = config.Instroot
	opt_destdir = std.getenvv("DESTDIR", "")
	opt_mc = std.getenvv("MYR_MC", "6m")
	opt_muse = std.getenvv("MYR_MUSE", "muse")
	opt_runtime = std.getenvv("MYR_RT", "")
	match std.getenv("MYR_MCFLAGS")
	| `std.Some s:	opt_mcflags = std.strtok(s)
	| `std.None:	/* ok */
	;;
	match std.getenv("MYR_MUSEFLAGS")
	| `std.Some s:	opt_mcflags = std.strtok(s)
	| `std.None:	/* ok */
	;;
	match std.getenv("MYR_LDFLAGS")
	| `std.Some s:	opt_ldflags = std.strtok(s)
	| `std.None:	/* ok */
	;;
	if opt_runtime.len == 0
		opt_runtime = std.pathjoin([opt_instbase, config.Libpath, config.Runtime][:]) 
	;;
}

const parseversion = {v
	var a
	var i

	i = 0
	a = [0, 0, 0]
	for e : std.bysplit(v, ".")
		match std.intparse(e)
		| `std.Some n:	a[i++] = n
		| `std.None:	continue
		;;
		if i == 3
			break
		;;
	;;
	-> (a[0], a[1], a[2])
}