From cb06688c9e48539947d47e3cade923bff0bbd825 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Sat, 30 May 2026 13:57:22 +0300 Subject: [PATCH] builder: detect resolved tcc path in parallel cc --- vlib/v/builder/cbuilder/parallel_cc.v | 11 ++++++++++- vlib/v/builder/cbuilder/parallel_cc_test.v | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 vlib/v/builder/cbuilder/parallel_cc_test.v diff --git a/vlib/v/builder/cbuilder/parallel_cc.v b/vlib/v/builder/cbuilder/parallel_cc.v index 36ab7d675..8fb105fee 100644 --- a/vlib/v/builder/cbuilder/parallel_cc.v +++ b/vlib/v/builder/cbuilder/parallel_cc.v @@ -19,6 +19,15 @@ fn parallel_cc_compiler_path(b &builder.Builder) string { return cc_compiler } +fn parallel_cc_uses_tcc(cc_kind builder.CC, ccompiler string) bool { + if cc_kind == .tcc { + return true + } + normalized := ccompiler.replace('\\', '/').to_lower() + return normalized == 'tcc' || normalized.ends_with('/tcc') || normalized.ends_with('/tcc.exe') + || normalized.contains('/thirdparty/tcc/') +} + fn parallel_cc(mut b builder.Builder, result c.GenOutput) ! { tmp_dir := os.vtmp_dir() sw_total := time.new_stopwatch() @@ -79,7 +88,7 @@ fn parallel_cc(mut b builder.Builder, result c.GenOutput) ! { cc := b.quote_compiler_name(parallel_cc_compiler_path(b)) mut compile_args := b.get_compile_args() mut linker_args := b.get_linker_args() - if b.ccoptions.cc == .tcc { + if parallel_cc_uses_tcc(b.ccoptions.cc, parallel_cc_compiler_path(b)) { // vlang/tcc can have its runtime objects under `${vroot}/thirdparty/tcc/lib/tcc/` // or directly under `${vroot}/thirdparty/tcc/lib/`, while its system headers // can be under that install dir or `${vroot}/thirdparty/tcc/include/`. diff --git a/vlib/v/builder/cbuilder/parallel_cc_test.v b/vlib/v/builder/cbuilder/parallel_cc_test.v new file mode 100644 index 000000000..290ea6e9b --- /dev/null +++ b/vlib/v/builder/cbuilder/parallel_cc_test.v @@ -0,0 +1,9 @@ +module cbuilder + +fn test_parallel_cc_uses_tcc_for_resolved_compiler_paths() { + assert parallel_cc_uses_tcc(.tcc, 'cc') + assert parallel_cc_uses_tcc(.unknown, 'tcc') + assert parallel_cc_uses_tcc(.unknown, '/tmp/v/thirdparty/tcc/tcc') + assert parallel_cc_uses_tcc(.unknown, 'D:\\a\\v\\v\\thirdparty\\tcc\\tcc.exe') + assert !parallel_cc_uses_tcc(.unknown, '/usr/bin/clang') +} -- 2.39.5