From 47f5e1178ff308b87267ea07856f2a6574cfd84b Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 4 Dec 2019 02:01:17 +0300 Subject: [PATCH] -output-cross-platform-c for creating a single x-platform C file --- vlib/builtin/cfns.v | 1 + vlib/compiler/comptime.v | 4 +++- vlib/compiler/main.v | 8 +++++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/vlib/builtin/cfns.v b/vlib/builtin/cfns.v index 0df6bbeb56..3eb17de03d 100644 --- a/vlib/builtin/cfns.v +++ b/vlib/builtin/cfns.v @@ -86,6 +86,7 @@ fn C.DEFAULT_GE() bool fn C.isatty() int fn C.syscall() int +fn C.sysctl() int diff --git a/vlib/compiler/comptime.v b/vlib/compiler/comptime.v index a6946eae14..242781e7cf 100644 --- a/vlib/compiler/comptime.v +++ b/vlib/compiler/comptime.v @@ -34,7 +34,9 @@ fn (p mut Parser) comp_time() { } p.check(.lcbr) os := os_from_string(name) - if (!not && os != p.os) || (not && os == p.os) { + if ((!not && os != p.os) || (not && os == p.os)) && + !p.pref.output_cross_c + { // `$if os {` for a different target, skip everything inside // to avoid compilation errors (like including // on non-Windows systems) diff --git a/vlib/compiler/main.v b/vlib/compiler/main.v index 666d14ebf8..a14a0be049 100644 --- a/vlib/compiler/main.v +++ b/vlib/compiler/main.v @@ -129,6 +129,7 @@ pub mut: vlib_path string vpath string x64 bool + output_cross_c bool } // Should be called by main at the end of the compilation process, to cleanup @@ -407,7 +408,7 @@ fn (v mut V) generate_init() { } ') } - + if !v.pref.is_bare { // vlib can't have `init_consts()` v.cgen.genln('void init() { @@ -523,9 +524,9 @@ pub fn (v mut V) generate_main() { pub fn (v mut V) gen_main_start(add_os_args bool){ v.cgen.genln('int main(int argc, char** argv) { ') - + v.cgen.genln(' init();') - + if add_os_args && 'os' in v.table.imports { v.cgen.genln(' os__args = os__init_os_args(argc, (byteptr*)argv);') } @@ -1042,6 +1043,7 @@ pub fn new_v(args[]string) &V { fast: '-fast' in args is_bare: '-freestanding' in args x64: '-x64' in args + output_cross_c: '-output-cross-platform-c' in args is_repl: is_repl build_mode: build_mode cflags: cflags