|
|
|
@ -13,8 +13,7 @@ |
|
|
|
|
# limitations under the License. |
|
|
|
|
|
|
|
|
|
import contextlib, os.path, re, tempfile |
|
|
|
|
import typing |
|
|
|
|
from typing import Optional, Tuple, List |
|
|
|
|
from typing import TYPE_CHECKING, Optional, Tuple, List, Union |
|
|
|
|
|
|
|
|
|
from ..linkers import StaticLinker, GnuLikeDynamicLinkerMixin, SolarisDynamicLinker |
|
|
|
|
from .. import coredata |
|
|
|
@ -28,7 +27,7 @@ from ..envconfig import ( |
|
|
|
|
Properties, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
if typing.TYPE_CHECKING: |
|
|
|
|
if TYPE_CHECKING: |
|
|
|
|
from ..coredata import OptionDictType |
|
|
|
|
from ..envconfig import MachineInfo |
|
|
|
|
from ..environment import Environment |
|
|
|
@ -522,7 +521,7 @@ class CompilerArgs(list): |
|
|
|
|
return True |
|
|
|
|
return False |
|
|
|
|
|
|
|
|
|
def to_native(self, copy: bool = False) -> typing.List[str]: |
|
|
|
|
def to_native(self, copy: bool = False) -> List[str]: |
|
|
|
|
# Check if we need to add --start/end-group for circular dependencies |
|
|
|
|
# between static libraries, and for recursively searching for symbols |
|
|
|
|
# needed by static libraries that are provided by object files or |
|
|
|
@ -669,10 +668,10 @@ class Compiler: |
|
|
|
|
# manually searched. |
|
|
|
|
internal_libs = () |
|
|
|
|
|
|
|
|
|
LINKER_PREFIX = None # type: typing.Union[None, str, typing.List[str]] |
|
|
|
|
LINKER_PREFIX = None # type: Union[None, str, List[str]] |
|
|
|
|
|
|
|
|
|
def __init__(self, exelist, version, for_machine: MachineChoice, info: 'MachineInfo', |
|
|
|
|
linker: typing.Optional['DynamicLinker'] = None, **kwargs): |
|
|
|
|
linker: Optional['DynamicLinker'] = None, **kwargs): |
|
|
|
|
if isinstance(exelist, str): |
|
|
|
|
self.exelist = [exelist] |
|
|
|
|
elif isinstance(exelist, list): |
|
|
|
@ -747,10 +746,10 @@ class Compiler: |
|
|
|
|
def get_exelist(self): |
|
|
|
|
return self.exelist[:] |
|
|
|
|
|
|
|
|
|
def get_linker_exelist(self) -> typing.List[str]: |
|
|
|
|
def get_linker_exelist(self) -> List[str]: |
|
|
|
|
return self.linker.get_exelist() |
|
|
|
|
|
|
|
|
|
def get_linker_output_args(self, outputname: str) -> typing.List[str]: |
|
|
|
|
def get_linker_output_args(self, outputname: str) -> List[str]: |
|
|
|
|
return self.linker.get_output_args(outputname) |
|
|
|
|
|
|
|
|
|
def get_builtin_define(self, *args, **kwargs): |
|
|
|
@ -793,10 +792,10 @@ class Compiler: |
|
|
|
|
""" |
|
|
|
|
return self.get_language() in languages_using_ldflags |
|
|
|
|
|
|
|
|
|
def get_linker_args_from_envvars(self) -> typing.List[str]: |
|
|
|
|
def get_linker_args_from_envvars(self) -> List[str]: |
|
|
|
|
return self.linker.get_args_from_envvars() |
|
|
|
|
|
|
|
|
|
def get_args_from_envvars(self) -> typing.Tuple[typing.List[str], typing.List[str]]: |
|
|
|
|
def get_args_from_envvars(self) -> Tuple[List[str], List[str]]: |
|
|
|
|
""" |
|
|
|
|
Returns a tuple of (compile_flags, link_flags) for the specified language |
|
|
|
|
from the inherited environment |
|
|
|
@ -813,8 +812,8 @@ class Compiler: |
|
|
|
|
if lang not in cflags_mapping: |
|
|
|
|
return [], [] |
|
|
|
|
|
|
|
|
|
compile_flags = [] # type: typing.List[str] |
|
|
|
|
link_flags = [] # type: typing.List[str] |
|
|
|
|
compile_flags = [] # type: List[str] |
|
|
|
|
link_flags = [] # type: List[str] |
|
|
|
|
|
|
|
|
|
env_compile_flags = os.environ.get(cflags_mapping[lang]) |
|
|
|
|
log_var(cflags_mapping[lang], env_compile_flags) |
|
|
|
@ -885,7 +884,7 @@ class Compiler: |
|
|
|
|
def get_option_compile_args(self, options): |
|
|
|
|
return [] |
|
|
|
|
|
|
|
|
|
def get_option_link_args(self, options: 'OptionDictType') -> typing.List[str]: |
|
|
|
|
def get_option_link_args(self, options: 'OptionDictType') -> List[str]: |
|
|
|
|
return self.linker.get_option_args(options) |
|
|
|
|
|
|
|
|
|
def check_header(self, *args, **kwargs) -> Tuple[bool, bool]: |
|
|
|
@ -921,7 +920,7 @@ class Compiler: |
|
|
|
|
return args[:] |
|
|
|
|
|
|
|
|
|
@classmethod |
|
|
|
|
def native_args_to_unix(cls, args: typing.List[str]) -> typing.List[str]: |
|
|
|
|
def native_args_to_unix(cls, args: List[str]) -> List[str]: |
|
|
|
|
"Always returns a copy that can be independently mutated" |
|
|
|
|
return args[:] |
|
|
|
|
|
|
|
|
@ -939,7 +938,7 @@ class Compiler: |
|
|
|
|
'Language {} does not support has_multi_arguments.'.format( |
|
|
|
|
self.get_display_language())) |
|
|
|
|
|
|
|
|
|
def has_multi_link_arguments(self, args: typing.List[str], env: 'Environment') -> Tuple[bool, bool]: |
|
|
|
|
def has_multi_link_arguments(self, args: List[str], env: 'Environment') -> Tuple[bool, bool]: |
|
|
|
|
return self.linker.has_multi_arguments(args, env) |
|
|
|
|
|
|
|
|
|
def _get_compile_output(self, dirname, mode): |
|
|
|
@ -1053,22 +1052,22 @@ class Compiler: |
|
|
|
|
def get_compile_debugfile_args(self, rel_obj, **kwargs): |
|
|
|
|
return [] |
|
|
|
|
|
|
|
|
|
def get_link_debugfile_args(self, targetfile: str) -> typing.List[str]: |
|
|
|
|
def get_link_debugfile_args(self, targetfile: str) -> List[str]: |
|
|
|
|
return self.linker.get_debugfile_args(targetfile) |
|
|
|
|
|
|
|
|
|
def get_std_shared_lib_link_args(self) -> typing.List[str]: |
|
|
|
|
def get_std_shared_lib_link_args(self) -> List[str]: |
|
|
|
|
return self.linker.get_std_shared_lib_args() |
|
|
|
|
|
|
|
|
|
def get_std_shared_module_link_args(self, options: 'OptionDictType') -> typing.List[str]: |
|
|
|
|
def get_std_shared_module_link_args(self, options: 'OptionDictType') -> List[str]: |
|
|
|
|
return self.linker.get_std_shared_module_args(options) |
|
|
|
|
|
|
|
|
|
def get_link_whole_for(self, args: typing.List[str]) -> typing.List[str]: |
|
|
|
|
def get_link_whole_for(self, args: List[str]) -> List[str]: |
|
|
|
|
return self.linker.get_link_whole_for(args) |
|
|
|
|
|
|
|
|
|
def get_allow_undefined_link_args(self) -> typing.List[str]: |
|
|
|
|
def get_allow_undefined_link_args(self) -> List[str]: |
|
|
|
|
return self.linker.get_allow_undefined_args() |
|
|
|
|
|
|
|
|
|
def no_undefined_link_args(self) -> typing.List[str]: |
|
|
|
|
def no_undefined_link_args(self) -> List[str]: |
|
|
|
|
return self.linker.no_undefined_args() |
|
|
|
|
|
|
|
|
|
# Compiler arguments needed to enable the given instruction set. |
|
|
|
@ -1079,7 +1078,7 @@ class Compiler: |
|
|
|
|
|
|
|
|
|
def build_rpath_args(self, env: 'Environment', build_dir: str, from_dir: str, |
|
|
|
|
rpath_paths: str, build_rpath: str, |
|
|
|
|
install_rpath: str) -> typing.List[str]: |
|
|
|
|
install_rpath: str) -> List[str]: |
|
|
|
|
return self.linker.build_rpath_args( |
|
|
|
|
env, build_dir, from_dir, rpath_paths, build_rpath, install_rpath) |
|
|
|
|
|
|
|
|
@ -1110,7 +1109,7 @@ class Compiler: |
|
|
|
|
m = 'Language {} does not support position-independent executable' |
|
|
|
|
raise EnvironmentException(m.format(self.get_display_language())) |
|
|
|
|
|
|
|
|
|
def get_pie_link_args(self) -> typing.List[str]: |
|
|
|
|
def get_pie_link_args(self) -> List[str]: |
|
|
|
|
return self.linker.get_pie_args() |
|
|
|
|
|
|
|
|
|
def get_argument_syntax(self): |
|
|
|
@ -1132,7 +1131,7 @@ class Compiler: |
|
|
|
|
raise EnvironmentException( |
|
|
|
|
'%s does not support get_profile_use_args ' % self.get_id()) |
|
|
|
|
|
|
|
|
|
def get_undefined_link_args(self) -> typing.List[str]: |
|
|
|
|
def get_undefined_link_args(self) -> List[str]: |
|
|
|
|
return self.linker.get_undefined_link_args() |
|
|
|
|
|
|
|
|
|
def remove_linkerlike_args(self, args): |
|
|
|
@ -1150,21 +1149,21 @@ class Compiler: |
|
|
|
|
def sanitizer_link_args(self, value: str) -> List[str]: |
|
|
|
|
return self.linker.sanitizer_args(value) |
|
|
|
|
|
|
|
|
|
def get_asneeded_args(self) -> typing.List[str]: |
|
|
|
|
def get_asneeded_args(self) -> List[str]: |
|
|
|
|
return self.linker.get_asneeded_args() |
|
|
|
|
|
|
|
|
|
def bitcode_args(self) -> typing.List[str]: |
|
|
|
|
def bitcode_args(self) -> List[str]: |
|
|
|
|
return self.linker.bitcode_args() |
|
|
|
|
|
|
|
|
|
def get_linker_debug_crt_args(self) -> typing.List[str]: |
|
|
|
|
def get_linker_debug_crt_args(self) -> List[str]: |
|
|
|
|
return self.linker.get_debug_crt_args() |
|
|
|
|
|
|
|
|
|
def get_buildtype_linker_args(self, buildtype: str) -> typing.List[str]: |
|
|
|
|
def get_buildtype_linker_args(self, buildtype: str) -> List[str]: |
|
|
|
|
return self.linker.get_buildtype_args(buildtype) |
|
|
|
|
|
|
|
|
|
def get_soname_args(self, env: 'Environment', prefix: str, shlib_name: str, |
|
|
|
|
suffix: str, soversion: str, darwin_versions: typing.Tuple[str, str], |
|
|
|
|
is_shared_module: bool) -> typing.List[str]: |
|
|
|
|
suffix: str, soversion: str, darwin_versions: Tuple[str, str], |
|
|
|
|
is_shared_module: bool) -> List[str]: |
|
|
|
|
return self.linker.get_soname_args( |
|
|
|
|
env, prefix, shlib_name, suffix, soversion, |
|
|
|
|
darwin_versions, is_shared_module) |
|
|
|
|