v2 / vlib / v / builder / cflags.v
48 lines · 45 sloc · 1.11 KB · b5b93b092b8c72e76ff578650e01950fcc7c2314
Raw
1module builder
2
3import os
4import v.pref
5import v.cflag
6
7// get flags for current os
8fn (mut v Builder) get_os_cflags() []cflag.CFlag {
9 mut flags := []cflag.CFlag{}
10 mut ctimedefines := []string{}
11 if v.pref.compile_defines.len > 0 {
12 ctimedefines << v.pref.compile_defines
13 }
14 for mut flag in v.table.cflags {
15 ext := os.file_ext(flag.value)
16 if ext in ['.o', '.obj'] {
17 flag.cached = v.pref.cache_manager.mod_postfix_with_key2cpath(flag.mod, ext,
18 os.real_path(flag.value))
19 }
20 if flag.os == '' || flag.os in ctimedefines {
21 flags << flag
22 continue
23 }
24 fos := pref.os_from_string(flag.os) or { pref.OS.all }
25 if fos != .all && fos == v.pref.os {
26 flags << flag
27 continue
28 }
29 if v.pref.os == .windows && flag.os == 'mingw' && v.pref.ccompiler != 'msvc' {
30 flags << flag
31 }
32 }
33 return flags
34}
35
36fn (mut v Builder) get_rest_of_module_cflags(c &cflag.CFlag) []cflag.CFlag {
37 mut flags := []cflag.CFlag{}
38 cflags := v.get_os_cflags()
39 for flag in cflags {
40 if c.mod == flag.mod {
41 if c.name == flag.name && c.value == flag.value && c.os == flag.os {
42 continue
43 }
44 flags << flag
45 }
46 }
47 return flags
48}
49