cgen: add support for `$if gcc {}` too
parent
fbb260159b
commit
0fb8074353
|
@ -4026,6 +4026,9 @@ fn (mut g Gen) comp_if_to_ifdef(name string, is_comptime_optional bool) string {
|
|||
return '_VJS'
|
||||
}
|
||||
// compilers:
|
||||
'gcc' {
|
||||
return '__V_GCC__'
|
||||
}
|
||||
'tinyc' {
|
||||
return '__TINYC__'
|
||||
}
|
||||
|
|
|
@ -28,6 +28,23 @@ const (
|
|||
#define __NOINLINE __attribute__((noinline))
|
||||
#define __IRQHANDLER __attribute__((interrupt))
|
||||
|
||||
// Using just __GNUC__ for detecting gcc, is not reliable because other compilers define it too:
|
||||
#ifdef __GNUC__
|
||||
#define __V_GCC__
|
||||
#endif
|
||||
#ifdef __TINYC__
|
||||
#undef __V_GCC__
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
#undef __V_GCC__
|
||||
#endif
|
||||
#ifdef __clang__
|
||||
#undef __V_GCC__
|
||||
#endif
|
||||
#ifdef _MSC_VER
|
||||
#undef __V_GCC__
|
||||
#endif
|
||||
|
||||
#ifdef __TINYC__
|
||||
#undef EMPTY_STRUCT_DECLARATION
|
||||
#undef EMPTY_STRUCT_INITIALIZATION
|
||||
|
|
|
@ -225,19 +225,26 @@ fn (mut p Parser) comp_if() ast.Stmt {
|
|||
name_pos := name_pos_start.extend(p.tok.position())
|
||||
//
|
||||
mut stmts := []ast.Stmt{}
|
||||
mut skip := false
|
||||
mut skip_os := false
|
||||
mut skip_cc := false
|
||||
if val in supported_platforms {
|
||||
os := os_from_string(val)
|
||||
if (!is_not && os != p.pref.os) || (is_not && os == p.pref.os) {
|
||||
skip = true
|
||||
skip_os = true
|
||||
}
|
||||
} else if val in supported_ccompilers {
|
||||
if p.pref.ccompiler.len == 2 && p.pref.ccompiler == 'cc' {
|
||||
// we just do not know, so we can not skip:
|
||||
skip_cc = false
|
||||
}else {
|
||||
cc := cc_from_string(val)
|
||||
user_cc := cc_from_string(p.pref.ccompiler)
|
||||
if (!is_not && cc != user_cc) || (is_not && cc == user_cc) {
|
||||
skip = true
|
||||
skip_cc = true
|
||||
}
|
||||
}
|
||||
}
|
||||
mut skip := skip_os || skip_cc
|
||||
// `$if os {` or `$if compiler {` for a different target, skip everything inside
|
||||
// to avoid compilation errors (like including <windows.h> or calling WinAPI fns
|
||||
// on non-Windows systems)
|
||||
|
|
Loading…
Reference in New Issue