v.builder: fix iOS compilation from non-macOS, allow -cc to override the default cross compiler (#13866)

pull/13872/head
Cameron Katri 2022-03-30 03:26:13 -04:00 committed by GitHub
parent 3e69d3813b
commit 093994655c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 16 deletions

View File

@ -526,17 +526,7 @@ pub fn (mut v Builder) cc() {
// try to compile with the choosen compiler
// if compilation fails, retry again with another
mut ccompiler := v.pref.ccompiler
if v.pref.os == .ios {
ios_sdk := if v.pref.is_ios_simulator { 'iphonesimulator' } else { 'iphoneos' }
ios_sdk_path_res := os.execute_or_exit('xcrun --sdk $ios_sdk --show-sdk-path')
mut isysroot := ios_sdk_path_res.output.replace('\n', '')
arch := if v.pref.is_ios_simulator {
'-arch x86_64'
} else {
'-arch armv7 -arch armv7s -arch arm64'
}
ccompiler = 'xcrun --sdk iphoneos clang -isysroot $isysroot $arch'
} else if v.pref.os == .wasm32 {
if v.pref.os == .wasm32 {
ccompiler = 'clang'
}
v.setup_ccompiler_options(ccompiler)
@ -622,7 +612,7 @@ pub fn (mut v Builder) cc() {
}
if v.pref.retry_compilation {
tcc_output = res
v.pref.ccompiler = pref.default_c_compiler()
v.pref.default_c_compiler()
if v.pref.is_verbose {
eprintln('Compilation with tcc failed. Retrying with $v.pref.ccompiler ...')
}

View File

@ -652,6 +652,7 @@ pub fn (mut g Gen) init() {
g.cheaders.writeln('#include <stddef.h>')
} else {
g.cheaders.writeln(get_guarded_include_text('<inttypes.h>', 'The C compiler can not find <inttypes.h>. Please install build-essentials')) // int64_t etc
g.cheaders.writeln(get_guarded_include_text('<stdbool.h>', 'The C compiler can not find <stdbool.h>. Please install build-essentials')) // bool, true, false
g.cheaders.writeln(get_guarded_include_text('<stddef.h>', 'The C compiler can not find <stddef.h>. Please install build-essentials')) // size_t, ptrdiff_t
}
}

View File

@ -92,7 +92,7 @@ pub fn (mut p Preferences) fill_with_defaults() {
//
p.try_to_use_tcc_by_default()
if p.ccompiler == '' {
p.ccompiler = default_c_compiler()
p.default_c_compiler()
}
p.find_cc_if_cross_compiling()
p.ccompiler_type = cc_from_string(p.ccompiler)
@ -203,16 +203,32 @@ pub fn default_tcc_compiler() string {
return ''
}
pub fn default_c_compiler() string {
pub fn (mut p Preferences) default_c_compiler() {
// fast_clang := '/usr/local/Cellar/llvm/8.0.0/bin/clang'
// if os.exists(fast_clang) {
// return fast_clang
// }
// TODO fix $if after 'string'
$if windows {
return 'gcc'
p.ccompiler = 'gcc'
return
}
return 'cc'
if p.os == .ios {
$if !ios {
ios_sdk := if p.is_ios_simulator { 'iphonesimulator' } else { 'iphoneos' }
ios_sdk_path_res := os.execute_or_exit('xcrun --sdk $ios_sdk --show-sdk-path')
mut isysroot := ios_sdk_path_res.output.replace('\n', '')
arch := if p.is_ios_simulator {
'-arch x86_64'
} else {
'-arch armv7 -arch armv7s -arch arm64'
}
p.ccompiler = 'xcrun --sdk iphoneos clang -isysroot $isysroot $arch'
return
}
}
p.ccompiler = 'cc'
return
}
pub fn vexe_path() string {