mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-03-28 08:37:25 +00:00
Merge pull request #6975 from davidhorstmann-arm/c-build-helper-improvements
Minor improvements to `c_build_helper.py`
This commit is contained in:
commit
4c77601832
4
ChangeLog.d/c-build-helper-hostcc.txt
Normal file
4
ChangeLog.d/c-build-helper-hostcc.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Features
|
||||||
|
* Use HOSTCC (if it is set) when compiling C code during generation of the
|
||||||
|
configuration-independent files. This allows them to be generated when
|
||||||
|
CC is set for cross compilation.
|
@ -89,6 +89,37 @@ int main(void)
|
|||||||
}
|
}
|
||||||
''')
|
''')
|
||||||
|
|
||||||
|
def compile_c_file(c_filename, exe_filename, include_dirs):
|
||||||
|
"""Compile a C source file with the host compiler.
|
||||||
|
|
||||||
|
* ``c_filename``: the name of the source file to compile.
|
||||||
|
* ``exe_filename``: the name for the executable to be created.
|
||||||
|
* ``include_dirs``: a list of paths to include directories to be passed
|
||||||
|
with the -I switch.
|
||||||
|
"""
|
||||||
|
# Respect $HOSTCC if it is set
|
||||||
|
cc = os.getenv('HOSTCC', None)
|
||||||
|
if cc is None:
|
||||||
|
cc = os.getenv('CC', 'cc')
|
||||||
|
cmd = [cc]
|
||||||
|
|
||||||
|
proc = subprocess.Popen(cmd,
|
||||||
|
stdout=subprocess.DEVNULL,
|
||||||
|
stderr=subprocess.PIPE,
|
||||||
|
universal_newlines=True)
|
||||||
|
cc_is_msvc = 'Microsoft (R) C/C++' in proc.communicate()[1]
|
||||||
|
|
||||||
|
cmd += ['-I' + dir for dir in include_dirs]
|
||||||
|
if cc_is_msvc:
|
||||||
|
# MSVC has deprecated using -o to specify the output file,
|
||||||
|
# and produces an object file in the working directory by default.
|
||||||
|
obj_filename = exe_filename[:-4] + '.obj'
|
||||||
|
cmd += ['-Fe' + exe_filename, '-Fo' + obj_filename]
|
||||||
|
else:
|
||||||
|
cmd += ['-o' + exe_filename]
|
||||||
|
|
||||||
|
subprocess.check_call(cmd + [c_filename])
|
||||||
|
|
||||||
def get_c_expression_values(
|
def get_c_expression_values(
|
||||||
cast_to, printf_format,
|
cast_to, printf_format,
|
||||||
expressions,
|
expressions,
|
||||||
@ -128,24 +159,8 @@ def get_c_expression_values(
|
|||||||
expressions)
|
expressions)
|
||||||
)
|
)
|
||||||
c_file.close()
|
c_file.close()
|
||||||
cc = os.getenv('CC', 'cc')
|
|
||||||
cmd = [cc]
|
|
||||||
|
|
||||||
proc = subprocess.Popen(cmd,
|
compile_c_file(c_name, exe_name, include_path)
|
||||||
stdout=subprocess.DEVNULL,
|
|
||||||
stderr=subprocess.PIPE,
|
|
||||||
universal_newlines=True)
|
|
||||||
cc_is_msvc = 'Microsoft (R) C/C++' in proc.communicate()[1]
|
|
||||||
|
|
||||||
cmd += ['-I' + dir for dir in include_path]
|
|
||||||
if cc_is_msvc:
|
|
||||||
# MSVC has deprecated using -o to specify the output file,
|
|
||||||
# and produces an object file in the working directory by default.
|
|
||||||
obj_name = exe_name[:-4] + '.obj'
|
|
||||||
cmd += ['-Fe' + exe_name, '-Fo' + obj_name]
|
|
||||||
else:
|
|
||||||
cmd += ['-o' + exe_name]
|
|
||||||
subprocess.check_call(cmd + [c_name])
|
|
||||||
if keep_c:
|
if keep_c:
|
||||||
sys.stderr.write('List of {} tests kept at {}\n'
|
sys.stderr.write('List of {} tests kept at {}\n'
|
||||||
.format(caller, c_name))
|
.format(caller, c_name))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user