|
|
|
@ -23,24 +23,31 @@ from .mixins.gnu import GnuCompiler |
|
|
|
|
from .mixins.clang import ClangCompiler |
|
|
|
|
|
|
|
|
|
if T.TYPE_CHECKING: |
|
|
|
|
from ..dependencies import ExternalProgram |
|
|
|
|
from ..envconfig import MachineInfo |
|
|
|
|
from ..environment import Environment |
|
|
|
|
from ..linkers import DynamicLinker |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ObjCCompiler(CLikeCompiler, Compiler): |
|
|
|
|
|
|
|
|
|
language = 'objc' |
|
|
|
|
|
|
|
|
|
def __init__(self, exelist, version, for_machine: MachineChoice, |
|
|
|
|
def __init__(self, exelist: T.List[str], version: str, for_machine: MachineChoice, |
|
|
|
|
is_cross: bool, info: 'MachineInfo', |
|
|
|
|
exe_wrap: T.Optional[str], **kwargs): |
|
|
|
|
Compiler.__init__(self, exelist, version, for_machine, info, is_cross=is_cross, **kwargs) |
|
|
|
|
exe_wrap: T.Optional['ExternalProgram'], |
|
|
|
|
linker: T.Optional['DynamicLinker'] = None, |
|
|
|
|
full_version: T.Optional[str] = None): |
|
|
|
|
Compiler.__init__(self, exelist, version, for_machine, info, |
|
|
|
|
is_cross=is_cross, full_version=full_version, |
|
|
|
|
linker=linker) |
|
|
|
|
CLikeCompiler.__init__(self, exe_wrap) |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def get_display_language(): |
|
|
|
|
def get_display_language() -> str: |
|
|
|
|
return 'Objective-C' |
|
|
|
|
|
|
|
|
|
def sanity_check(self, work_dir, environment): |
|
|
|
|
def sanity_check(self, work_dir: str, environment: 'Environment') -> None: |
|
|
|
|
# TODO try to use sanity_check_impl instead of duplicated code |
|
|
|
|
source_name = os.path.join(work_dir, 'sanitycheckobjc.m') |
|
|
|
|
binary_name = os.path.join(work_dir, 'sanitycheckobjc') |
|
|
|
@ -67,11 +74,14 @@ class ObjCCompiler(CLikeCompiler, Compiler): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GnuObjCCompiler(GnuCompiler, ObjCCompiler): |
|
|
|
|
def __init__(self, exelist, version, for_machine: MachineChoice, |
|
|
|
|
is_cross, info: 'MachineInfo', exe_wrapper=None, |
|
|
|
|
defines=None, **kwargs): |
|
|
|
|
def __init__(self, exelist: T.List[str], version: str, for_machine: MachineChoice, |
|
|
|
|
is_cross: bool, info: 'MachineInfo', |
|
|
|
|
exe_wrapper: T.Optional['ExternalProgram'] = None, |
|
|
|
|
defines: T.Optional[T.Dict[str, str]] = None, |
|
|
|
|
linker: T.Optional['DynamicLinker'] = None, |
|
|
|
|
full_version: T.Optional[str] = None): |
|
|
|
|
ObjCCompiler.__init__(self, exelist, version, for_machine, is_cross, |
|
|
|
|
info, exe_wrapper, **kwargs) |
|
|
|
|
info, exe_wrapper, linker=linker, full_version=full_version) |
|
|
|
|
GnuCompiler.__init__(self, defines) |
|
|
|
|
default_warn_args = ['-Wall', '-Winvalid-pch'] |
|
|
|
|
self.warn_args = {'0': [], |
|
|
|
@ -81,12 +91,15 @@ class GnuObjCCompiler(GnuCompiler, ObjCCompiler): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ClangObjCCompiler(ClangCompiler, ObjCCompiler): |
|
|
|
|
def __init__(self, exelist, version, for_machine: MachineChoice, |
|
|
|
|
is_cross, info: 'MachineInfo', exe_wrapper=None, |
|
|
|
|
**kwargs): |
|
|
|
|
def __init__(self, exelist: T.List[str], version: str, for_machine: MachineChoice, |
|
|
|
|
is_cross: bool, info: 'MachineInfo', |
|
|
|
|
exe_wrapper: T.Optional['ExternalProgram'] = None, |
|
|
|
|
defines: T.Optional[T.Dict[str, str]] = None, |
|
|
|
|
linker: T.Optional['DynamicLinker'] = None, |
|
|
|
|
full_version: T.Optional[str] = None): |
|
|
|
|
ObjCCompiler.__init__(self, exelist, version, for_machine, is_cross, |
|
|
|
|
info, exe_wrapper, **kwargs) |
|
|
|
|
ClangCompiler.__init__(self, []) |
|
|
|
|
info, exe_wrapper, linker=linker, full_version=full_version) |
|
|
|
|
ClangCompiler.__init__(self, defines) |
|
|
|
|
default_warn_args = ['-Wall', '-Winvalid-pch'] |
|
|
|
|
self.warn_args = {'0': [], |
|
|
|
|
'1': default_warn_args, |
|
|
|
|