v.pref, v.builder: support `-no-rsp` (pass C options directly to the C compiler backend, without writing response files)
parent
7494d7f6c7
commit
f7cbcc241a
|
@ -228,6 +228,15 @@ see also `v help build`.
|
||||||
Write all C flags into `file.txt`, one flag per line.
|
Write all C flags into `file.txt`, one flag per line.
|
||||||
If `file.txt` is `-`, then write the flags to stdout, one flag per line.
|
If `file.txt` is `-`, then write the flags to stdout, one flag per line.
|
||||||
|
|
||||||
|
-no-rsp
|
||||||
|
By default, V passes all C compiler options to the backend C compiler
|
||||||
|
in so called "response files" (https://gcc.gnu.org/wiki/Response_Files).
|
||||||
|
This works in most cases, since it works around command line length
|
||||||
|
limitations on older systems (and windows), but some C compilers
|
||||||
|
(older versions of tcc for example) do not support them at all. When
|
||||||
|
you use -no-rsp, V will pass the C compiler options directly to the C
|
||||||
|
compiler, on the command line, without writing an .rsp file first.
|
||||||
|
|
||||||
-assert aborts
|
-assert aborts
|
||||||
Call abort() after an assertion failure. Debuggers usually
|
Call abort() after an assertion failure. Debuggers usually
|
||||||
install signal handlers for SIGABRT, so your program will stop and you
|
install signal handlers for SIGABRT, so your program will stop and you
|
||||||
|
|
|
@ -148,14 +148,11 @@ fn (mut v Builder) rebuild_cached_module(vexe string, imp_path string) string {
|
||||||
|
|
||||||
fn (mut v Builder) show_cc(cmd string, response_file string, response_file_content string) {
|
fn (mut v Builder) show_cc(cmd string, response_file string, response_file_content string) {
|
||||||
if v.pref.is_verbose || v.pref.show_cc {
|
if v.pref.is_verbose || v.pref.show_cc {
|
||||||
println('')
|
|
||||||
println('=====================')
|
|
||||||
println('> C compiler cmd: $cmd')
|
println('> C compiler cmd: $cmd')
|
||||||
if v.pref.show_cc {
|
if v.pref.show_cc && !v.pref.no_rsp {
|
||||||
println('> C compiler response file $response_file:')
|
println('> C compiler response file "$response_file":')
|
||||||
println(response_file_content)
|
println(response_file_content)
|
||||||
}
|
}
|
||||||
println('=====================')
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -610,16 +607,23 @@ fn (mut v Builder) cc() {
|
||||||
all_args := v.all_args(v.ccoptions)
|
all_args := v.all_args(v.ccoptions)
|
||||||
v.dump_c_options(all_args)
|
v.dump_c_options(all_args)
|
||||||
str_args := all_args.join(' ')
|
str_args := all_args.join(' ')
|
||||||
// write args to response file
|
mut cmd := '$ccompiler $str_args'
|
||||||
response_file := '${v.out_name_c}.rsp'
|
mut response_file := ''
|
||||||
response_file_content := str_args.replace('\\', '\\\\')
|
mut response_file_content := str_args
|
||||||
|
if !v.pref.no_rsp {
|
||||||
|
response_file = '${v.out_name_c}.rsp'
|
||||||
|
response_file_content = str_args.replace('\\', '\\\\')
|
||||||
|
cmd = '$ccompiler "@$response_file"'
|
||||||
os.write_file(response_file, response_file_content) or {
|
os.write_file(response_file, response_file_content) or {
|
||||||
verror('Unable to write response file "$response_file"')
|
verror('Unable to write to C response file "$response_file"')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if !v.ccoptions.debug_mode {
|
if !v.ccoptions.debug_mode {
|
||||||
v.pref.cleanup_files << v.out_name_c
|
v.pref.cleanup_files << v.out_name_c
|
||||||
|
if !v.pref.no_rsp {
|
||||||
v.pref.cleanup_files << response_file
|
v.pref.cleanup_files << response_file
|
||||||
}
|
}
|
||||||
|
}
|
||||||
$if windows {
|
$if windows {
|
||||||
if v.ccoptions.is_cc_tcc {
|
if v.ccoptions.is_cc_tcc {
|
||||||
def_name := v.pref.out_name[0..v.pref.out_name.len - 4]
|
def_name := v.pref.out_name[0..v.pref.out_name.len - 4]
|
||||||
|
@ -628,7 +632,6 @@ fn (mut v Builder) cc() {
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
os.chdir(vdir)
|
os.chdir(vdir)
|
||||||
cmd := '$ccompiler "@$response_file"'
|
|
||||||
tried_compilation_commands << cmd
|
tried_compilation_commands << cmd
|
||||||
v.show_cc(cmd, response_file, response_file_content)
|
v.show_cc(cmd, response_file, response_file_content)
|
||||||
// Run
|
// Run
|
||||||
|
|
|
@ -172,6 +172,7 @@ pub mut:
|
||||||
warns_are_errors bool // -W, like C's "-Werror", treat *every* warning is an error
|
warns_are_errors bool // -W, like C's "-Werror", treat *every* warning is an error
|
||||||
fatal_errors bool // unconditionally exit after the first error with exit(1)
|
fatal_errors bool // unconditionally exit after the first error with exit(1)
|
||||||
reuse_tmpc bool // do not use random names for .tmp.c and .tmp.c.rsp files, and do not remove them
|
reuse_tmpc bool // do not use random names for .tmp.c and .tmp.c.rsp files, and do not remove them
|
||||||
|
no_rsp bool // when true, pass C backend options directly on the CLI (do not use `.rsp` files for them, some older C compilers do not support them)
|
||||||
use_color ColorOutput // whether the warnings/errors should use ANSI color escapes.
|
use_color ColorOutput // whether the warnings/errors should use ANSI color escapes.
|
||||||
is_parallel bool
|
is_parallel bool
|
||||||
error_limit int
|
error_limit int
|
||||||
|
@ -474,6 +475,9 @@ pub fn parse_args(known_external_commands []string, args []string) (&Preferences
|
||||||
'-W' {
|
'-W' {
|
||||||
res.warns_are_errors = true
|
res.warns_are_errors = true
|
||||||
}
|
}
|
||||||
|
'-no-rsp' {
|
||||||
|
res.no_rsp = true
|
||||||
|
}
|
||||||
'-keepc' {
|
'-keepc' {
|
||||||
res.reuse_tmpc = true
|
res.reuse_tmpc = true
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue