mirror of
https://github.com/nodejs/node.git
synced 2025-08-15 13:48:44 +02:00
build: check Apple clang version in configure script
Apple clang version number is not the same as the actual LLVM version PR-URL: https://github.com/nodejs/node/pull/59358 Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Richard Lau <richard.lau@ibm.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
parent
0309806a74
commit
954d3f44ef
1 changed files with 14 additions and 12 deletions
26
configure.py
26
configure.py
|
@ -1117,18 +1117,20 @@ def try_check_compiler(cc, lang):
|
||||||
|
|
||||||
with proc:
|
with proc:
|
||||||
proc.stdin.write(b'__clang__ __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__ '
|
proc.stdin.write(b'__clang__ __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__ '
|
||||||
b'__clang_major__ __clang_minor__ __clang_patchlevel__')
|
b'__clang_major__ __clang_minor__ __clang_patchlevel__ '
|
||||||
|
b'__APPLE__')
|
||||||
|
|
||||||
if sys.platform == 'zos':
|
if sys.platform == 'zos':
|
||||||
values = (to_utf8(proc.communicate()[0]).split('\n')[-2].split() + ['0'] * 7)[0:7]
|
values = (to_utf8(proc.communicate()[0]).split('\n')[-2].split() + ['0'] * 7)[0:8]
|
||||||
else:
|
else:
|
||||||
values = (to_utf8(proc.communicate()[0]).split() + ['0'] * 7)[0:7]
|
values = (to_utf8(proc.communicate()[0]).split() + ['0'] * 7)[0:8]
|
||||||
|
|
||||||
is_clang = values[0] == '1'
|
is_clang = values[0] == '1'
|
||||||
gcc_version = tuple(map(int, values[1:1+3]))
|
gcc_version = tuple(map(int, values[1:1+3]))
|
||||||
clang_version = tuple(map(int, values[4:4+3])) if is_clang else None
|
clang_version = tuple(map(int, values[4:4+3])) if is_clang else None
|
||||||
|
is_apple = values[7] == '1'
|
||||||
|
|
||||||
return (True, is_clang, clang_version, gcc_version)
|
return (True, is_clang, clang_version, gcc_version, is_apple)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1292,18 +1294,18 @@ def check_compiler(o):
|
||||||
o['variables']['openssl_no_asm'] = 1
|
o['variables']['openssl_no_asm'] = 1
|
||||||
return
|
return
|
||||||
|
|
||||||
ok, is_clang, clang_version, gcc_version = try_check_compiler(CXX, 'c++')
|
ok, is_clang, clang_version, gcc_version, is_apple = try_check_compiler(CXX, 'c++')
|
||||||
o['variables']['clang'] = B(is_clang)
|
o['variables']['clang'] = B(is_clang)
|
||||||
version_str = ".".join(map(str, clang_version if is_clang else gcc_version))
|
version_str = ".".join(map(str, clang_version if is_clang else gcc_version))
|
||||||
print_verbose(f"Detected {'clang ' if is_clang else ''}C++ compiler (CXX={CXX}) version: {version_str}")
|
print_verbose(f"Detected {'Apple ' if is_apple else ''}{'clang ' if is_clang else ''}C++ compiler (CXX={CXX}) version: {version_str}")
|
||||||
if not ok:
|
if not ok:
|
||||||
warn(f'failed to autodetect C++ compiler version (CXX={CXX})')
|
warn(f'failed to autodetect C++ compiler version (CXX={CXX})')
|
||||||
elif clang_version < (19, 1, 0) if is_clang else gcc_version < (12, 2, 0):
|
elif (is_apple and clang_version < (17, 0, 0) or not is_apple and clang_version < (19, 1, 0)) if is_clang else gcc_version < (12, 2, 0):
|
||||||
warn(f'C++ compiler (CXX={CXX}, {version_str}) too old, need g++ 12.2.0 or clang++ 19.1.0')
|
warn(f'C++ compiler (CXX={CXX}, {version_str}) too old, need g++ 12.2.0, clang++ 19.1.0, or Apple clang++ 17.0.0')
|
||||||
|
|
||||||
ok, is_clang, clang_version, gcc_version = try_check_compiler(CC, 'c')
|
ok, is_clang, clang_version, gcc_version, is_apple = try_check_compiler(CC, 'c')
|
||||||
version_str = ".".join(map(str, clang_version if is_clang else gcc_version))
|
version_str = ".".join(map(str, clang_version if is_clang else gcc_version))
|
||||||
print_verbose(f"Detected {'clang ' if is_clang else ''}C compiler (CC={CC}) version: {version_str}")
|
print_verbose(f"Detected {'Apple ' if is_apple else ''}{'clang ' if is_clang else ''}C compiler (CC={CC}) version: {version_str}")
|
||||||
if not ok:
|
if not ok:
|
||||||
warn(f'failed to autodetect C compiler version (CC={CC})')
|
warn(f'failed to autodetect C compiler version (CC={CC})')
|
||||||
elif not is_clang and gcc_version < (4, 2, 0):
|
elif not is_clang and gcc_version < (4, 2, 0):
|
||||||
|
@ -1481,7 +1483,7 @@ def configure_zos(o):
|
||||||
|
|
||||||
def clang_version_ge(version_checked):
|
def clang_version_ge(version_checked):
|
||||||
for compiler in [(CC, 'c'), (CXX, 'c++')]:
|
for compiler in [(CC, 'c'), (CXX, 'c++')]:
|
||||||
_, is_clang, clang_version, _1 = (
|
_, is_clang, clang_version, _1, _2 = (
|
||||||
try_check_compiler(compiler[0], compiler[1])
|
try_check_compiler(compiler[0], compiler[1])
|
||||||
)
|
)
|
||||||
if is_clang and clang_version >= version_checked:
|
if is_clang and clang_version >= version_checked:
|
||||||
|
@ -1490,7 +1492,7 @@ def clang_version_ge(version_checked):
|
||||||
|
|
||||||
def gcc_version_ge(version_checked):
|
def gcc_version_ge(version_checked):
|
||||||
for compiler in [(CC, 'c'), (CXX, 'c++')]:
|
for compiler in [(CC, 'c'), (CXX, 'c++')]:
|
||||||
_, is_clang, _1, gcc_version = (
|
_, is_clang, _1, gcc_version, _2 = (
|
||||||
try_check_compiler(compiler[0], compiler[1])
|
try_check_compiler(compiler[0], compiler[1])
|
||||||
)
|
)
|
||||||
if is_clang or gcc_version < version_checked:
|
if is_clang or gcc_version < version_checked:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue