@ -147,6 +147,14 @@ arm_buildtype_args = {'plain': [],
' custom ' : [ ] ,
}
ccrx_buildtype_args = { ' plain ' : [ ] ,
' debug ' : [ ] ,
' debugoptimized ' : [ ] ,
' release ' : [ ] ,
' minsize ' : [ ] ,
' custom ' : [ ] ,
}
msvc_buildtype_args = { ' plain ' : [ ] ,
' debug ' : [ " /ZI " , " /Ob0 " , " /Od " , " /RTC1 " ] ,
' debugoptimized ' : [ " /Zi " , " /Ob1 " ] ,
@ -179,6 +187,14 @@ arm_buildtype_linker_args = {'plain': [],
' custom ' : [ ] ,
}
ccrx_buildtype_linker_args = { ' plain ' : [ ] ,
' debug ' : [ ] ,
' debugoptimized ' : [ ] ,
' release ' : [ ] ,
' minsize ' : [ ] ,
' custom ' : [ ] ,
}
msvc_buildtype_linker_args = { ' plain ' : [ ] ,
' debug ' : [ ] ,
' debugoptimized ' : [ ] ,
@ -295,6 +311,14 @@ gnu_optimization_args = {'0': [],
' s ' : [ ' -Os ' ] ,
}
ccrx_optimization_args = { ' 0 ' : [ ' -optimize=0 ' ] ,
' g ' : [ ' -optimize=0 ' ] ,
' 1 ' : [ ' -optimize=1 ' ] ,
' 2 ' : [ ' -optimize=2 ' ] ,
' 3 ' : [ ' -optimize=max ' ] ,
' s ' : [ ' -optimize=2 ' , ' -size ' ]
}
msvc_optimization_args = { ' 0 ' : [ ] ,
' g ' : [ ' /O0 ' ] ,
' 1 ' : [ ' /O1 ' ] ,
@ -309,6 +333,9 @@ clike_debug_args = {False: [],
msvc_debug_args = { False : [ ] ,
True : [ ] } # Fixme!
ccrx_debug_args = { False : [ ] ,
True : [ ' -debug ' ] }
base_options = { ' b_pch ' : coredata . UserBooleanOption ( ' b_pch ' , ' Use precompiled headers ' , True ) ,
' b_lto ' : coredata . UserBooleanOption ( ' b_lto ' , ' Use link time optimization ' , False ) ,
' b_sanitize ' : coredata . UserComboOption ( ' b_sanitize ' ,
@ -871,6 +898,9 @@ class Compiler:
def get_linker_always_args ( self ) :
return [ ]
def get_linker_lib_prefix ( self ) :
return ' '
def gen_import_library_args ( self , implibname ) :
"""
Used only on Windows for libraries that need an import library .
@ -1244,6 +1274,8 @@ class CompilerType(enum.Enum):
ARM_WIN = 30
CCRX_WIN = 40
@property
def is_standard_compiler ( self ) :
return self . name in ( ' GCC_STANDARD ' , ' CLANG_STANDARD ' , ' ICC_STANDARD ' )
@ -1254,7 +1286,7 @@ class CompilerType(enum.Enum):
@property
def is_windows_compiler ( self ) :
return self . name in ( ' GCC_MINGW ' , ' GCC_CYGWIN ' , ' CLANG_MINGW ' , ' ICC_WIN ' , ' ARM_WIN ' )
return self . name in ( ' GCC_MINGW ' , ' GCC_CYGWIN ' , ' CLANG_MINGW ' , ' ICC_WIN ' , ' ARM_WIN ' , ' CCRX_WIN ' )
def get_macos_dylib_install_name ( prefix , shlib_name , suffix , soversion ) :
@ -1804,3 +1836,97 @@ class ArmCompiler:
def get_debug_args ( self , is_debug ) :
return clike_debug_args [ is_debug ]
class CcrxCompiler :
def __init__ ( self , compiler_type ) :
if not self . is_cross :
raise EnvironmentException ( ' ccrx supports only cross-compilation. ' )
# Check whether 'rlink.exe' is available in path
self . linker_exe = ' rlink.exe '
args = ' --version '
try :
p , stdo , stderr = Popen_safe ( self . linker_exe , args )
except OSError as e :
err_msg = ' Unknown linker \n Running " {0} " gave \n " {1} " ' . format ( ' ' . join ( [ self . linker_exe ] + [ args ] ) , e )
raise EnvironmentException ( err_msg )
self . id = ' ccrx '
self . compiler_type = compiler_type
# Assembly
self . can_compile_suffixes . update ( ' s ' )
default_warn_args = [ ]
self . warn_args = { ' 1 ' : default_warn_args ,
' 2 ' : default_warn_args + [ ] ,
' 3 ' : default_warn_args + [ ] }
def can_linker_accept_rsp ( self ) :
return False
def get_pic_args ( self ) :
# PIC support is not enabled by default for CCRX,
# if users want to use it, they need to add the required arguments explicitly
return [ ]
def get_buildtype_args ( self , buildtype ) :
return ccrx_buildtype_args [ buildtype ]
def get_buildtype_linker_args ( self , buildtype ) :
return ccrx_buildtype_linker_args [ buildtype ]
# Override CCompiler.get_std_shared_lib_link_args
def get_std_shared_lib_link_args ( self ) :
return [ ]
def get_pch_suffix ( self ) :
return ' pch '
def get_pch_use_args ( self , pch_dir , header ) :
return [ ]
# Override CCompiler.get_dependency_gen_args
def get_dependency_gen_args ( self , outtarget , outfile ) :
return [ ]
# Override CCompiler.build_rpath_args
def build_rpath_args ( self , build_dir , from_dir , rpath_paths , build_rpath , install_rpath ) :
return [ ]
def thread_flags ( self , env ) :
return [ ]
def thread_link_flags ( self , env ) :
return [ ]
def get_linker_exelist ( self ) :
return [ self . linker_exe ]
def get_linker_lib_prefix ( self ) :
return ' -lib= '
def get_coverage_args ( self ) :
return [ ]
def get_coverage_link_args ( self ) :
return [ ]
def get_optimization_args ( self , optimization_level ) :
return ccrx_optimization_args [ optimization_level ]
def get_debug_args ( self , is_debug ) :
return ccrx_debug_args [ is_debug ]
@classmethod
def unix_args_to_native ( cls , args ) :
result = [ ]
for i in args :
if i . startswith ( ' -D ' ) :
i = ' -define= ' + i [ 2 : ]
if i . startswith ( ' -I ' ) :
i = ' -include= ' + i [ 2 : ]
if i . startswith ( ' -Wl,-rpath= ' ) :
continue
elif i == ' --print-search-dirs ' :
continue
elif i . startswith ( ' -L ' ) :
continue
result . append ( i )
return result