From a2ee76228e29f4cf5f52197dd2a726620445c81b Mon Sep 17 00:00:00 2001 From: "Bedarkar, Malhar" Date: Mon, 5 Mar 2018 18:26:39 -0600 Subject: First cut of ARMCC support for MESON. Change-Id: I15d8258e84d392baaccb8f670e33eefcfe8cd49a --- mesonbuild/backend/ninjabackend.py | 8 +++--- mesonbuild/build.py | 5 +++- mesonbuild/compilers/__init__.py | 3 ++ mesonbuild/compilers/c.py | 57 ++++++++++++++++++++++++++++++++++++++ mesonbuild/compilers/compilers.py | 51 ++++++++++++++++++++++++++++++++++ mesonbuild/environment.py | 13 +++++++-- mesonbuild/linkers.py | 13 ++++++++- mesonbuild/wrap/wrap.py | 8 ++++-- 8 files changed, 147 insertions(+), 11 deletions(-) diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 660b1a5..1824e91 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1485,7 +1485,7 @@ int dummy; # gcc-ar blindly pass the --plugin argument to `ar` and you cannot pass # options as arguments while using the @file.rsp syntax. # See: https://github.com/mesonbuild/meson/issues/1646 - if mesonlib.is_windows() and not isinstance(static_linker, ArLinker): + if static_linker.can_linker_accept_rsp(): command_template = ''' command = {executable} @$out.rsp rspfile = $out.rsp rspfile_content = $LINK_ARGS {output_args} $in @@ -1540,7 +1540,7 @@ int dummy; except KeyError: pass rule = 'rule %s%s_LINKER\n' % (langname, crstr) - if mesonlib.is_windows(): + if compiler.can_linker_accept_rsp(): command_template = ''' command = {executable} @$out.rsp rspfile = $out.rsp rspfile_content = $ARGS {output_args} $in $LINK_ARGS {cross_args} $aliasing @@ -1669,7 +1669,7 @@ rule FORTRAN_DEP_HACK if getattr(self, 'created_llvm_ir_rule', False): return rule = 'rule llvm_ir{}_COMPILER\n'.format('_CROSS' if is_cross else '') - if mesonlib.is_windows(): + if compiler.can_linker_accept_rsp(): command_template = ' command = {executable} @$out.rsp\n' \ ' rspfile = $out.rsp\n' \ ' rspfile_content = {cross_args} $ARGS {output_args} {compile_only_args} $in\n' @@ -1730,7 +1730,7 @@ rule FORTRAN_DEP_HACK d = quote_func(d) quoted_depargs.append(d) cross_args = self.get_cross_info_lang_args(langname, is_cross) - if mesonlib.is_windows(): + if compiler.can_linker_accept_rsp(): command_template = ''' command = {executable} @$out.rsp rspfile = $out.rsp rspfile_content = {cross_args} $ARGS {dep_args} {output_args} {compile_only_args} $in diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 9eb74e9..ea2edc3 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -1178,7 +1178,10 @@ class Executable(BuildTarget): for_cygwin(is_cross, environment) or 'cs' in self.compilers): self.suffix = 'exe' else: - self.suffix = '' + if 'c' in self.compilers and self.compilers['c'].get_id().startswith('arm'): + self.suffix = 'axf' + else: + self.suffix = '' self.filename = self.name if self.suffix: self.filename += '.' + self.suffix diff --git a/mesonbuild/compilers/__init__.py b/mesonbuild/compilers/__init__.py index 84c87fb..a0ec469 100644 --- a/mesonbuild/compilers/__init__.py +++ b/mesonbuild/compilers/__init__.py @@ -41,6 +41,8 @@ __all__ = [ 'sanitizer_compile_args', 'sort_clike', + 'ARMCompiler', + 'ARMCCompiler', 'CCompiler', 'ClangCCompiler', 'ClangCompiler', @@ -115,6 +117,7 @@ from .compilers import ( IntelCompiler, ) from .c import ( + ARMCCompiler, CCompiler, ClangCCompiler, GnuCCompiler, diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py index 1c9b9b4..cc1a48e 100644 --- a/mesonbuild/compilers/c.py +++ b/mesonbuild/compilers/c.py @@ -31,6 +31,7 @@ from .compilers import ( msvc_winlibs, vs32_instruction_set_args, vs64_instruction_set_args, + ARMCompiler, ClangCompiler, Compiler, CompilerArgs, @@ -888,6 +889,62 @@ class GnuCCompiler(GnuCompiler, CCompiler): return ['-fpch-preprocess', '-include', os.path.basename(header)] +class ARMCCompiler(ARMCompiler, CCompiler): + def __init__(self, exelist, version, is_cross, exe_wrapper=None, defines=None, **kwargs): + CCompiler.__init__(self, exelist, version, is_cross, exe_wrapper, **kwargs) + ARMCompiler.__init__(self, defines) + + def sanity_check_impl(self, work_dir, environment, sname, code): + mlog.debug('Sanity testing disabled for armcc compiler') + return + + def get_options(self): + opts = {'c_std': coredata.UserComboOption('c_std', 'C language standard to use', + ['none', 'c89', 'c99', 'c11'], + 'none')} + return opts + + def get_warn_args(self, level): + # ARMCC doesn't have warning levels + return [] + + def get_coverage_args(self): + return [] + + def get_coverage_link_args(self): + return [] + + # Override CCompiler.get_always_args + def get_always_args(self): + return [] + + def get_option_compile_args(self, options): + return [] + + def get_linker_exelist(self): + args = ['armlink'] + return args + + # Override CCompiler.get_dependency_gen_args + def get_dependency_gen_args(self, outtarget, outfile): + return [] + + # Override CCompiler.get_std_shared_lib_link_args + def get_std_shared_lib_link_args(self): + return [] + + def get_pch_use_args(self, pch_dir, header): + # FIXME: Add required arguments + # NOTE from armcc user guide: + # "Support for Precompiled Header (PCH) files is deprecated from ARM Compiler 5.05 + # onwards on all platforms. Note that ARM Compiler on Windows 8 never supported + # PCH files." + return [] + + def get_compile_only_args(self): + return ['-c'] + + class IntelCCompiler(IntelCompiler, CCompiler): def __init__(self, exelist, version, icc_type, is_cross, exe_wrapper=None, **kwargs): CCompiler.__init__(self, exelist, version, is_cross, exe_wrapper, **kwargs) diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index 034fef4..cdc6f87 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -112,6 +112,12 @@ gnulike_buildtype_args = {'plain': [], 'debugoptimized': ['-O2', '-g'], 'release': ['-O3'], 'minsize': ['-Os', '-g']} +arm_buildtype_args = {'plain': [], + 'debug': ['-O0', '-g'], + 'debugoptimized': ['-O2', '-g'], + 'release': ['-O2'], + 'minsize': ['-Os', '-g'], + } msvc_buildtype_args = {'plain': [], 'debug': ["/MDd", "/ZI", "/Ob0", "/Od", "/RTC1"], @@ -133,6 +139,12 @@ gnulike_buildtype_linker_args = {'plain': [], 'release': ['-Wl,-O1'], 'minsize': [], } +arm_buildtype_linker_args = {'plain': [], + 'debug': [], + 'debugoptimized': [], + 'release': [], + 'minsize': [], + } msvc_buildtype_linker_args = {'plain': [], 'debug': [], @@ -657,6 +669,12 @@ class Compiler: def get_always_args(self): return [] + def can_linker_accept_rsp(self): + """ + Determines whether the linker can accept arguments using the @rsp syntax. + """ + return mesonlib.is_windows() + def get_linker_always_args(self): return [] @@ -1075,6 +1093,39 @@ class GnuCompiler: def get_default_include_dirs(self): return gnulike_default_include_dirs(self.exelist, self.language) +class ARMCompiler: + # Functionality that is common to all ARM family compilers. + def __init__(self, defines): + self.id = 'arm' + self.defines = defines or {} + self.base_options = ['b_pch', 'b_lto', 'b_pgo', 'b_sanitize', 'b_coverage', + 'b_colorout', 'b_ndebug', 'b_staticpic'] + # Assembly + self.can_compile_suffixes.add('s') + + def can_linker_accept_rsp(self): + return False + + def get_pic_args(self): + # FIXME: Add /ropi, /rwpi, /fpic etc. qualifiers to --apcs + return [] + + def get_buildtype_args(self, buildtype): + return arm_buildtype_args[buildtype] + + def get_buildtype_linker_args(self, buildtype): + return arm_buildtype_linker_args[buildtype] + + def get_pch_suffix(self): + # NOTE from armcc user guide: + # "Support for Precompiled Header (PCH) files is deprecated from ARM Compiler 5.05 + # onwards on all platforms. Note that ARM Compiler on Windows 8 never supported + # PCH files." + return 'pch' + + def split_shlib_to_parts(self, fname): + return os.path.split(fname)[0], fname + class ClangCompiler: def __init__(self, clang_type): diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index 31ca2a2..1d3ba72 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -38,6 +38,7 @@ from .compilers import ( is_source, ) from .compilers import ( + ARMCCompiler, ClangCCompiler, ClangCPPCompiler, ClangObjCCompiler, @@ -492,7 +493,10 @@ class Environment: continue arg = '/?' else: - arg = '--version' + if re.search('.*arm.*', compiler[0]): + arg = '--vsn' + else: + arg = '--version' try: p, out, err = Popen_safe(compiler + [arg]) except OSError as e: @@ -537,6 +541,8 @@ class Environment: inteltype = ICC_STANDARD cls = IntelCCompiler if lang == 'c' else IntelCPPCompiler return cls(ccache + compiler, version, inteltype, is_cross, exe_wrap, full_version=full_version) + if 'ARM' in out: + return ARMCCompiler(ccache + compiler, version, is_cross, exe_wrap, full_version=full_version) self._handle_exceptions(popen_exceptions, compilers) def detect_c_compiler(self, want_cross): @@ -791,7 +797,10 @@ class Environment: if 'lib' in linker or 'lib.exe' in linker: arg = '/?' else: - arg = '--version' + if re.search('.*arm.*', linker[0]): + arg = '--vsn' + else: + arg = '--version' try: p, out, err = Popen_safe(linker + [arg]) except OSError as e: diff --git a/mesonbuild/linkers.py b/mesonbuild/linkers.py index 2333e27..8e491d9 100644 --- a/mesonbuild/linkers.py +++ b/mesonbuild/linkers.py @@ -13,9 +13,14 @@ # limitations under the License. from .mesonlib import Popen_safe +from . import mesonlib class StaticLinker: - pass + def can_linker_accept_rsp(self): + """ + Determines whether the linker can accept arguments using the @rsp syntax. + """ + return mesonlib.is_windows() class VisualStudioLinker(StaticLinker): @@ -75,6 +80,12 @@ class ArLinker(StaticLinker): self.std_args = ['csrD'] else: self.std_args = ['csr'] + # For 'armar' the options should be prefixed with '-'. + if 'armar' in stdo: + self.std_args = ['-csr'] + + def can_linker_accept_rsp(self): + return False def build_rpath_args(self, build_dir, from_dir, rpath_paths, build_rpath, install_rpath): return [] diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index 54a928e..a3f8ab1 100644 --- a/mesonbuild/wrap/wrap.py +++ b/mesonbuild/wrap/wrap.py @@ -203,15 +203,17 @@ class Resolver: subprocess.call(['git', 'pull'], cwd=checkoutdir) else: if subprocess.call(['git', 'checkout', revno], cwd=checkoutdir) != 0: - subprocess.check_call(['git', 'fetch'], cwd=checkoutdir) + subprocess.check_call(['git', 'fetch', p.get('url'), revno], cwd=checkoutdir) subprocess.check_call(['git', 'checkout', revno], cwd=checkoutdir) else: subprocess.check_call(['git', 'clone', p.get('url'), p.get('directory')], cwd=self.subdir_root) if revno.lower() != 'head': - subprocess.check_call(['git', 'checkout', revno], - cwd=checkoutdir) + if subprocess.call(['git', 'checkout', revno], cwd=checkoutdir) != 0: + subprocess.check_call(['git', 'fetch', p.get('url'), revno], cwd=checkoutdir) + subprocess.check_call(['git', 'checkout', revno], + cwd=checkoutdir) push_url = p.values.get('push-url') if push_url: subprocess.check_call(['git', 'remote', 'set-url', -- cgit v1.1 From a470835778b4a9813e8a6046e04a958755797347 Mon Sep 17 00:00:00 2001 From: Somasekhar Penugonda Date: Tue, 6 Mar 2018 14:19:16 +0530 Subject: Meson Github pull request - 3186 requested changes - Fixing flake8 error in compilers.py - [E124] closing bracket does not match visual indentation - Updating ARMCCompiler constructor in c.py to raise error as per comments --- cross/armcc.txt | 11 +++++++++++ mesonbuild/compilers/c.py | 3 +++ mesonbuild/compilers/compilers.py | 6 ++++-- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 cross/armcc.txt diff --git a/cross/armcc.txt b/cross/armcc.txt new file mode 100644 index 0000000..2597738 --- /dev/null +++ b/cross/armcc.txt @@ -0,0 +1,11 @@ +[binaries] +c = 'armcc' +cpp = 'armcc' +ar = 'armar' +strip = 'armar' + +[host_machine] +system = 'WINDOWS' +cpu_family = 'arm' +cpu = 'Cortex-M0+' +endian = 'little' diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py index cc1a48e..01f76ef 100644 --- a/mesonbuild/compilers/c.py +++ b/mesonbuild/compilers/c.py @@ -891,6 +891,9 @@ class GnuCCompiler(GnuCompiler, CCompiler): class ARMCCompiler(ARMCompiler, CCompiler): def __init__(self, exelist, version, is_cross, exe_wrapper=None, defines=None, **kwargs): + # ARMCC is only a cross compiler + if not is_cross: + raise EnvironmentException('armcc supports only cross-compilation.') CCompiler.__init__(self, exelist, version, is_cross, exe_wrapper, **kwargs) ARMCompiler.__init__(self, defines) diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index cdc6f87..47e3daa 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -112,12 +112,13 @@ gnulike_buildtype_args = {'plain': [], 'debugoptimized': ['-O2', '-g'], 'release': ['-O3'], 'minsize': ['-Os', '-g']} + arm_buildtype_args = {'plain': [], 'debug': ['-O0', '-g'], 'debugoptimized': ['-O2', '-g'], 'release': ['-O2'], 'minsize': ['-Os', '-g'], - } + } msvc_buildtype_args = {'plain': [], 'debug': ["/MDd", "/ZI", "/Ob0", "/Od", "/RTC1"], @@ -139,12 +140,13 @@ gnulike_buildtype_linker_args = {'plain': [], 'release': ['-Wl,-O1'], 'minsize': [], } + arm_buildtype_linker_args = {'plain': [], 'debug': [], 'debugoptimized': [], 'release': [], 'minsize': [], - } + } msvc_buildtype_linker_args = {'plain': [], 'debug': [], -- cgit v1.1 From 93bdbc3162213bec9ce47303c780531e50da1ff8 Mon Sep 17 00:00:00 2001 From: "Bedarkar, Malhar" Date: Wed, 7 Mar 2018 18:41:05 -0600 Subject: Backed out changes to Wrap.py to add support for Gerrit Added cross_test_log.txt for review Change-Id: I6af9c4926dc8a63fa030ae7fe28868bf772d2099 --- cross_test_log.txt | 259 ++++++++++++++++++++++++++++++++++++++++++++++++ mesonbuild/wrap/wrap.py | 8 +- 2 files changed, 262 insertions(+), 5 deletions(-) create mode 100644 cross_test_log.txt diff --git a/cross_test_log.txt b/cross_test_log.txt new file mode 100644 index 0000000..f3f1477 --- /dev/null +++ b/cross_test_log.txt @@ -0,0 +1,259 @@ + +Running common tests. + +Succeeded test: test cases/common\1 trivial +Failed test during configure: 'test cases/common\\2 cpp' +Reason: Generating the build system failed. +Succeeded test: test cases/common\3 static +Succeeded test: test cases/common\4 shared +Succeeded test: test cases/common\5 linkstatic +Failed test during configure: 'test cases/common\\6 linkshared' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\7 mixed' +Reason: Generating the build system failed. +Failed test during validate: 'test cases/common\\8 install' +Reason: Expected file usr/bin/prog.exe missing. + +Succeeded test: test cases/common\9 header install +Succeeded test: test cases/common\10 man install +Succeeded test: test cases/common\11 subdir +Succeeded test: test cases/common\12 data +Failed test during build: 'test cases/common\\13 pch' +Reason: Compiling source code failed. +Failed test during configure: 'test cases/common\\14 cpp pch' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\15 mixed pch' +Reason: Generating the build system failed. +Succeeded test: test cases/common\16 configure file +Succeeded test: test cases/common\17 if +Succeeded test: test cases/common\18 else +Succeeded test: test cases/common\19 comparison +Succeeded test: test cases/common\20 array +Succeeded test: test cases/common\21 includedir +Succeeded test: test cases/common\22 header in file list +Failed test during configure: 'test cases/common\\23 global arg' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\24 target arg' +Reason: Generating the build system failed. +Succeeded test: test cases/common\25 object extraction +Succeeded test: test cases/common\26 endian +Succeeded test: test cases/common\27 library versions +Succeeded test: test cases/common\28 config subdir +Succeeded test: test cases/common\29 pipeline +Succeeded test: test cases/common\30 pipeline +Succeeded test: test cases/common\31 find program +Succeeded test: test cases/common\32 multiline string +Failed test during configure: 'test cases/common\\33 try compile' +Reason: Generating the build system failed. +Succeeded test: test cases/common\34 compiler id +Failed test during configure: 'test cases/common\\35 sizeof' +Reason: Generating the build system failed. +Succeeded test: test cases/common\36 define10 +Failed test during configure: 'test cases/common\\37 has header' +Reason: Generating the build system failed. +Succeeded test: test cases/common\38 run program +Failed test during configure: 'test cases/common\\39 tryrun' +Reason: Generating the build system failed. +Succeeded test: test cases/common\40 logic ops +Succeeded test: test cases/common\41 elif +Succeeded test: test cases/common\42 string operations +Failed test during configure: 'test cases/common\\43 has function' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\44 has member' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\45 alignment' +Reason: Generating the build system failed. +Failed test during build: 'test cases/common\\46 library chain' +Reason: Compiling source code failed. +Succeeded test: test cases/common\47 options +Failed test during build: 'test cases/common\\48 test args' +Reason: Compiling source code failed. +Failed test during build: 'test cases/common\\49 subproject' +Reason: Compiling source code failed. +Succeeded test: test cases/common\50 subproject options +Skipping: test cases/common\51 pkgconfig-gen +Failed test during validate: 'test cases/common\\52 custom install dirs' +Reason: Expected file usr/dib/dab/dub/prog.exe missing. +Expected file usr/dib/dab/dub2/prog2.exe missing. + +Failed test during build: 'test cases/common\\53 subproject subproject' +Reason: Compiling source code failed. +Succeeded test: test cases/common\54 same file name +Succeeded test: test cases/common\55 file grabber +Succeeded test: test cases/common\56 custom target +Succeeded test: test cases/common\57 custom target chain +Succeeded test: test cases/common\58 run target +Succeeded test: test cases/common\59 object generator +Failed test during validate: 'test cases/common\\60 install script' +Reason: Expected file usr/bin/prog.exe missing. + +Succeeded test: test cases/common\61 custom target source output +Failed test during build: 'test cases/common\\62 exe static shared' +Reason: Compiling source code failed. +Succeeded test: test cases/common\63 array methods +Succeeded test: test cases/common\64 custom header generator +Failed test during configure: 'test cases/common\\65 multiple generators' +Reason: Generating the build system failed. +Succeeded test: test cases/common\66 install subdir +Failed test during validate: 'test cases/common\\67 foreach' +Reason: Expected file usr/bin/prog1.exe missing. +Expected file usr/bin/prog2.exe missing. +Expected file usr/bin/prog3.exe missing. + +Succeeded test: test cases/common\68 number arithmetic +Succeeded test: test cases/common\69 string arithmetic +Succeeded test: test cases/common\70 array arithmetic +Succeeded test: test cases/common\71 arithmetic bidmas +Failed test during build: 'test cases/common\\72 build always' +Reason: Compiling source code failed. +Failed test during build: 'test cases/common\\73 vcstag' +Reason: Compiling source code failed. +Succeeded test: test cases/common\74 modules +Succeeded test: test cases/common\75 should fail +Succeeded test: test cases/common\76 configure file in custom target +Succeeded test: test cases/common\77 external test program +Succeeded test: test cases/common\78 ctarget dependency +Failed test during build: 'test cases/common\\79 shared subproject' +Reason: Compiling source code failed. +Failed test during build: 'test cases/common\\80 shared subproject 2' +Reason: Compiling source code failed. +Succeeded test: test cases/common\81 file object +Failed test during build: 'test cases/common\\82 custom subproject dir' +Reason: Compiling source code failed. +Failed test during configure: 'test cases/common\\83 has type' +Reason: Generating the build system failed. +Succeeded test: test cases/common\84 extract from nested subdir +Succeeded test: test cases/common\85 internal dependency +Failed test during build: 'test cases/common\\86 same basename' +Reason: Compiling source code failed. +Succeeded test: test cases/common\87 declare dep +Succeeded test: test cases/common\88 extract all +Failed test during configure: 'test cases/common\\89 add language' +Reason: Generating the build system failed. +Succeeded test: test cases/common\90 identical target name in subproject +Succeeded test: test cases/common\91 plusassign +Succeeded test: test cases/common\92 skip subdir +Succeeded test: test cases/common\93 private include +Failed test during configure: 'test cases/common\\94 default options' +Reason: Generating the build system failed. +Failed test during build: 'test cases/common\\95 dep fallback' +Reason: Compiling source code failed. +Failed test during configure: 'test cases/common\\96 default library' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\97 selfbuilt custom' +Reason: Generating the build system failed. +Succeeded test: test cases/common\98 gen extra +Failed test during build: 'test cases/common\\99 benchmark' +Reason: Compiling source code failed. +Succeeded test: test cases/common\100 test workdir +Succeeded test: test cases/common\101 suites +Failed test during configure: 'test cases/common\\102 threads' +Reason: Generating the build system failed. +Succeeded test: test cases/common\103 manygen +Succeeded test: test cases/common\104 stringdef +Succeeded test: test cases/common\105 find program path +Succeeded test: test cases/common\106 subproject subdir +Succeeded test: test cases/common\107 postconf +Succeeded test: test cases/common\108 postconf with args +Succeeded test: test cases/common\109 testframework options +Succeeded test: test cases/common\110 extract same name +Failed test during configure: 'test cases/common\\111 has header symbol' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\112 has arg' +Reason: Generating the build system failed. +Succeeded test: test cases/common\113 generatorcustom +Succeeded test: test cases/common\114 multiple dir configure file +Succeeded test: test cases/common\115 spaces backslash +Succeeded test: test cases/common\116 ternary +Succeeded test: test cases/common\117 custom target capture +Failed test during configure: 'test cases/common\\118 allgenerate' +Reason: Generating the build system failed. +Succeeded test: test cases/common\119 pathjoin +Succeeded test: test cases/common\120 subdir subproject +Succeeded test: test cases/common\121 interpreter copy mutable var on assignment +Skipping: test cases/common\122 skip +Failed test during configure: 'test cases/common\\123 subproject project arguments' +Reason: Generating the build system failed. +Succeeded test: test cases/common\124 test skip +Failed test during build: 'test cases/common\\125 shared module' +Reason: Compiling source code failed. +Failed test during configure: 'test cases/common\\126 llvm ir and assembly' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\127 cpp and asm' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\128 extract all shared library' +Reason: Generating the build system failed. +Failed test during build: 'test cases/common\\129 object only target' +Reason: Compiling source code failed. +Skipping: test cases/common\130 no buildincdir +Succeeded test: test cases/common\131 custom target directory install +Succeeded test: test cases/common\132 dependency file generation +Succeeded test: test cases/common\133 configure file in generator +Skipping: test cases/common\134 generated llvm ir +Failed test during build: 'test cases/common\\135 generated assembly' +Reason: Compiling source code failed. +Succeeded test: test cases/common\136 build by default targets in tests +Succeeded test: test cases/common\137 build by default +Failed test during build: 'test cases/common\\138 include order' +Reason: Compiling source code failed. +Succeeded test: test cases/common\139 override options +Failed test during configure: 'test cases/common\\140 get define' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\141 c cpp and asm' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\142 compute int' +Reason: Generating the build system failed. +Succeeded test: test cases/common\143 custom target object output +Succeeded test: test cases/common\144 empty build file +Failed test during configure: 'test cases/common\\145 whole archive' +Reason: Generating the build system failed. +Failed test during configure: 'test cases/common\\146 C and CPP link' +Reason: Generating the build system failed. +Succeeded test: test cases/common\147 mesonintrospect from scripts +Succeeded test: test cases/common\148 custom target multiple outputs +Succeeded test: test cases/common\149 special characters +Succeeded test: test cases/common\150 nested links +Succeeded test: test cases/common\151 list of file sources +Succeeded test: test cases/common\152 link depends custom target +Failed test during build: 'test cases/common\\153 recursive linking' +Reason: Compiling source code failed. +Failed test during build: 'test cases/common\\154 library at root' +Reason: Compiling source code failed. +Succeeded test: test cases/common\155 simd +Failed test during build: 'test cases/common\\156 shared module resolving symbol in executable' +Reason: Compiling source code failed. +Succeeded test: test cases/common\157 configure file in test +Succeeded test: test cases/common\158 dotinclude +Succeeded test: test cases/common\159 reserved targets +Succeeded test: test cases/common\160 duplicate source names +Succeeded test: test cases/common\161 index customtarget +Succeeded test: test cases/common\162 wrap file should not failed +Succeeded test: test cases/common\163 includedir subproj +Failed test during build: 'test cases/common\\164 subproject dir name collision' +Reason: Compiling source code failed. +Failed test during configure: 'test cases/common\\165 config tool variable' +Reason: Generating the build system failed. +Succeeded test: test cases/common\166 custom target subdir depend files +Succeeded test: test cases/common\167 external program shebang parsing +Succeeded test: test cases/common\168 disabler +Succeeded test: test cases/common\169 array option +Succeeded test: test cases/common\170 custom target template substitution +Succeeded test: test cases/common\171 not-found dependency +Succeeded test: test cases/common\172 subdir if_found +Succeeded test: test cases/common\173 default options prefix dependent defaults +Succeeded test: test cases/common\174 dependency factory +Succeeded test: test cases/common\175 get project license +Succeeded test: test cases/common\176 yield +Failed test during build: 'test cases/common\\177 subproject nested subproject dirs' +Reason: Compiling source code failed. +Succeeded test: test cases/common\178 preserve gendir +Failed test during configure: 'test cases/common\\179 source in dep' +Reason: Generating the build system failed. + +Total configuration time: 455.11s +Total build time: 253.61s +Total test time: 1.27s + +Total passed cross tests: 113 +Total failed cross tests: 62 +Total skipped cross tests: 4 diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index a3f8ab1..54a928e 100644 --- a/mesonbuild/wrap/wrap.py +++ b/mesonbuild/wrap/wrap.py @@ -203,17 +203,15 @@ class Resolver: subprocess.call(['git', 'pull'], cwd=checkoutdir) else: if subprocess.call(['git', 'checkout', revno], cwd=checkoutdir) != 0: - subprocess.check_call(['git', 'fetch', p.get('url'), revno], cwd=checkoutdir) + subprocess.check_call(['git', 'fetch'], cwd=checkoutdir) subprocess.check_call(['git', 'checkout', revno], cwd=checkoutdir) else: subprocess.check_call(['git', 'clone', p.get('url'), p.get('directory')], cwd=self.subdir_root) if revno.lower() != 'head': - if subprocess.call(['git', 'checkout', revno], cwd=checkoutdir) != 0: - subprocess.check_call(['git', 'fetch', p.get('url'), revno], cwd=checkoutdir) - subprocess.check_call(['git', 'checkout', revno], - cwd=checkoutdir) + subprocess.check_call(['git', 'checkout', revno], + cwd=checkoutdir) push_url = p.values.get('push-url') if push_url: subprocess.check_call(['git', 'remote', 'set-url', -- cgit v1.1 From 831d1e4c2e7b0ce8dfd0b2471bf2dab499181d66 Mon Sep 17 00:00:00 2001 From: "Bedarkar, Malhar" Date: Wed, 14 Mar 2018 22:42:06 -0500 Subject: - Updating cpp_std options similar to other compiler classes - Updating environment.py for selecting '--vsn' option for armcc only. - Updating build type arguments from GitHub pull request - 3157 Change-Id: Id3151e7715ec1016afdbd65391bb0d414ec7de13 --- mesonbuild/compilers/__init__.py | 2 ++ mesonbuild/compilers/c.py | 20 -------------------- mesonbuild/compilers/compilers.py | 34 ++++++++++++++++++++++++++++++---- mesonbuild/compilers/cpp.py | 30 ++++++++++++++++++++++++++++++ mesonbuild/environment.py | 9 ++++----- 5 files changed, 66 insertions(+), 29 deletions(-) diff --git a/mesonbuild/compilers/__init__.py b/mesonbuild/compilers/__init__.py index a0ec469..e58a604 100644 --- a/mesonbuild/compilers/__init__.py +++ b/mesonbuild/compilers/__init__.py @@ -43,6 +43,7 @@ __all__ = [ 'ARMCompiler', 'ARMCCompiler', + 'ARMCPPCompiler', 'CCompiler', 'ClangCCompiler', 'ClangCompiler', @@ -125,6 +126,7 @@ from .c import ( VisualStudioCCompiler, ) from .cpp import ( + ARMCPPCompiler, CPPCompiler, ClangCPPCompiler, GnuCPPCompiler, diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py index 01f76ef..a77842c 100644 --- a/mesonbuild/compilers/c.py +++ b/mesonbuild/compilers/c.py @@ -917,10 +917,6 @@ class ARMCCompiler(ARMCompiler, CCompiler): def get_coverage_link_args(self): return [] - # Override CCompiler.get_always_args - def get_always_args(self): - return [] - def get_option_compile_args(self, options): return [] @@ -928,22 +924,6 @@ class ARMCCompiler(ARMCompiler, CCompiler): args = ['armlink'] return args - # Override CCompiler.get_dependency_gen_args - def get_dependency_gen_args(self, outtarget, outfile): - return [] - - # Override CCompiler.get_std_shared_lib_link_args - def get_std_shared_lib_link_args(self): - return [] - - def get_pch_use_args(self, pch_dir, header): - # FIXME: Add required arguments - # NOTE from armcc user guide: - # "Support for Precompiled Header (PCH) files is deprecated from ARM Compiler 5.05 - # onwards on all platforms. Note that ARM Compiler on Windows 8 never supported - # PCH files." - return [] - def get_compile_only_args(self): return ['-c'] diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index 47e3daa..556d881 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -114,10 +114,10 @@ gnulike_buildtype_args = {'plain': [], 'minsize': ['-Os', '-g']} arm_buildtype_args = {'plain': [], - 'debug': ['-O0', '-g'], - 'debugoptimized': ['-O2', '-g'], - 'release': ['-O2'], - 'minsize': ['-Os', '-g'], + 'debug': ['-O0', '--debug'], + 'debugoptimized': ['-O1', '--debug'], + 'release': ['-O3', '-Otime'], + 'minsize': ['-O3', '-Ospace'], } msvc_buildtype_args = {'plain': [], @@ -1118,6 +1118,26 @@ class ARMCompiler: def get_buildtype_linker_args(self, buildtype): return arm_buildtype_linker_args[buildtype] + # Override CCompiler.get_always_args + def get_always_args(self): + return [] + + # Override CCompiler.get_dependency_gen_args + def get_dependency_gen_args(self, outtarget, outfile): + return [] + + # Override CCompiler.get_std_shared_lib_link_args + def get_std_shared_lib_link_args(self): + return [] + + def get_pch_use_args(self, pch_dir, header): + # FIXME: Add required arguments + # NOTE from armcc user guide: + # "Support for Precompiled Header (PCH) files is deprecated from ARM Compiler 5.05 + # onwards on all platforms. Note that ARM Compiler on Windows 8 never supported + # PCH files." + return [] + def get_pch_suffix(self): # NOTE from armcc user guide: # "Support for Precompiled Header (PCH) files is deprecated from ARM Compiler 5.05 @@ -1128,6 +1148,12 @@ class ARMCompiler: def split_shlib_to_parts(self, fname): return os.path.split(fname)[0], fname + def thread_flags(self, env): + return [] + + def thread_link_flags(self, env): + return [] + class ClangCompiler: def __init__(self, clang_type): diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py index 1fa6f15..15e8457 100644 --- a/mesonbuild/compilers/cpp.py +++ b/mesonbuild/compilers/cpp.py @@ -26,6 +26,7 @@ from .compilers import ( ClangCompiler, GnuCompiler, IntelCompiler, + ARMCompiler, ) class CPPCompiler(CCompiler): @@ -133,6 +134,35 @@ class GnuCPPCompiler(GnuCompiler, CPPCompiler): return ['-fpch-preprocess', '-include', os.path.basename(header)] +class ARMCPPCompiler(ARMCompiler, CPPCompiler): + def __init__(self, exelist, version, is_cross, exe_wrap=None, defines=None, **kwargs): + CPPCompiler.__init__(self, exelist, version, is_cross, exe_wrap, **kwargs) + ARMCompiler.__init__(self, defines) + default_warn_args = [] + self.warn_args = {'1': default_warn_args, + '2': default_warn_args + [], + '3': default_warn_args + []} + + def get_options(self): + opts = {'cpp_std': coredata.UserComboOption('cpp_std', 'C++ language standard to use', + ['none', 'c++11'], + 'none')} + return opts + + def get_option_compile_args(self, options): + args = [] + std = options['cpp_std'] + if std.value == 'c++11': + args.append('--cpp11') + return args + + def get_option_link_args(self, options): + return [] + + def get_compiler_check_args(self): + return [] + + class IntelCPPCompiler(IntelCompiler, CPPCompiler): def __init__(self, exelist, version, icc_type, is_cross, exe_wrap, **kwargs): CPPCompiler.__init__(self, exelist, version, is_cross, exe_wrap, **kwargs) diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index 1d3ba72..f9cd9ca 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -39,6 +39,7 @@ from .compilers import ( ) from .compilers import ( ARMCCompiler, + ARMCPPCompiler, ClangCCompiler, ClangCPPCompiler, ClangObjCCompiler, @@ -493,7 +494,7 @@ class Environment: continue arg = '/?' else: - if re.search('.*arm.*', compiler[0]): + if compiler[0] == 'armcc': arg = '--vsn' else: arg = '--version' @@ -542,7 +543,8 @@ class Environment: cls = IntelCCompiler if lang == 'c' else IntelCPPCompiler return cls(ccache + compiler, version, inteltype, is_cross, exe_wrap, full_version=full_version) if 'ARM' in out: - return ARMCCompiler(ccache + compiler, version, is_cross, exe_wrap, full_version=full_version) + cls = ARMCCompiler if lang == 'c' else ARMCPPCompiler + return cls(ccache + compiler, version, is_cross, exe_wrap, full_version=full_version) self._handle_exceptions(popen_exceptions, compilers) def detect_c_compiler(self, want_cross): @@ -797,9 +799,6 @@ class Environment: if 'lib' in linker or 'lib.exe' in linker: arg = '/?' else: - if re.search('.*arm.*', linker[0]): - arg = '--vsn' - else: arg = '--version' try: p, out, err = Popen_safe(linker + [arg]) -- cgit v1.1 From e62b8109ebfef437a380f2d8cedd1565095a5574 Mon Sep 17 00:00:00 2001 From: Somasekhar Penugonda Date: Thu, 15 Mar 2018 18:33:11 +0530 Subject: Updates to CPP support and update review changes --- cross/armcc.txt | 11 +- cross_test_log.txt | 259 ---------------------------------- docs/markdown/Reference-tables.md | 1 + docs/markdown/snippets/armcc-cross.md | 15 ++ mesonbuild/build.py | 3 +- mesonbuild/compilers/__init__.py | 7 +- mesonbuild/compilers/c.py | 60 +++----- mesonbuild/compilers/compilers.py | 129 +++++++++-------- mesonbuild/compilers/cpp.py | 58 ++++---- mesonbuild/environment.py | 15 +- 10 files changed, 155 insertions(+), 403 deletions(-) delete mode 100644 cross_test_log.txt create mode 100644 docs/markdown/snippets/armcc-cross.md diff --git a/cross/armcc.txt b/cross/armcc.txt index 2597738..c884ffa 100644 --- a/cross/armcc.txt +++ b/cross/armcc.txt @@ -1,11 +1,20 @@ +# This file assumes that path to the arm compiler toolchain is added +# to the environment(PATH) variable, so that Meson can find +# the armcc, armlink and armar while building. [binaries] c = 'armcc' cpp = 'armcc' ar = 'armar' strip = 'armar' +[properties] +# The '--cpu' option with the appropriate target type should be mentioned +# to cross compile c/c++ code with armcc,. +c_args = ['--cpu=Cortex-M0plus'] +cpp_args = ['--cpu=Cortex-M0plus'] + [host_machine] -system = 'WINDOWS' +system = 'bare metal' # Update with your system name - bare metal/OS. cpu_family = 'arm' cpu = 'Cortex-M0+' endian = 'little' diff --git a/cross_test_log.txt b/cross_test_log.txt deleted file mode 100644 index f3f1477..0000000 --- a/cross_test_log.txt +++ /dev/null @@ -1,259 +0,0 @@ - -Running common tests. - -Succeeded test: test cases/common\1 trivial -Failed test during configure: 'test cases/common\\2 cpp' -Reason: Generating the build system failed. -Succeeded test: test cases/common\3 static -Succeeded test: test cases/common\4 shared -Succeeded test: test cases/common\5 linkstatic -Failed test during configure: 'test cases/common\\6 linkshared' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\7 mixed' -Reason: Generating the build system failed. -Failed test during validate: 'test cases/common\\8 install' -Reason: Expected file usr/bin/prog.exe missing. - -Succeeded test: test cases/common\9 header install -Succeeded test: test cases/common\10 man install -Succeeded test: test cases/common\11 subdir -Succeeded test: test cases/common\12 data -Failed test during build: 'test cases/common\\13 pch' -Reason: Compiling source code failed. -Failed test during configure: 'test cases/common\\14 cpp pch' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\15 mixed pch' -Reason: Generating the build system failed. -Succeeded test: test cases/common\16 configure file -Succeeded test: test cases/common\17 if -Succeeded test: test cases/common\18 else -Succeeded test: test cases/common\19 comparison -Succeeded test: test cases/common\20 array -Succeeded test: test cases/common\21 includedir -Succeeded test: test cases/common\22 header in file list -Failed test during configure: 'test cases/common\\23 global arg' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\24 target arg' -Reason: Generating the build system failed. -Succeeded test: test cases/common\25 object extraction -Succeeded test: test cases/common\26 endian -Succeeded test: test cases/common\27 library versions -Succeeded test: test cases/common\28 config subdir -Succeeded test: test cases/common\29 pipeline -Succeeded test: test cases/common\30 pipeline -Succeeded test: test cases/common\31 find program -Succeeded test: test cases/common\32 multiline string -Failed test during configure: 'test cases/common\\33 try compile' -Reason: Generating the build system failed. -Succeeded test: test cases/common\34 compiler id -Failed test during configure: 'test cases/common\\35 sizeof' -Reason: Generating the build system failed. -Succeeded test: test cases/common\36 define10 -Failed test during configure: 'test cases/common\\37 has header' -Reason: Generating the build system failed. -Succeeded test: test cases/common\38 run program -Failed test during configure: 'test cases/common\\39 tryrun' -Reason: Generating the build system failed. -Succeeded test: test cases/common\40 logic ops -Succeeded test: test cases/common\41 elif -Succeeded test: test cases/common\42 string operations -Failed test during configure: 'test cases/common\\43 has function' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\44 has member' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\45 alignment' -Reason: Generating the build system failed. -Failed test during build: 'test cases/common\\46 library chain' -Reason: Compiling source code failed. -Succeeded test: test cases/common\47 options -Failed test during build: 'test cases/common\\48 test args' -Reason: Compiling source code failed. -Failed test during build: 'test cases/common\\49 subproject' -Reason: Compiling source code failed. -Succeeded test: test cases/common\50 subproject options -Skipping: test cases/common\51 pkgconfig-gen -Failed test during validate: 'test cases/common\\52 custom install dirs' -Reason: Expected file usr/dib/dab/dub/prog.exe missing. -Expected file usr/dib/dab/dub2/prog2.exe missing. - -Failed test during build: 'test cases/common\\53 subproject subproject' -Reason: Compiling source code failed. -Succeeded test: test cases/common\54 same file name -Succeeded test: test cases/common\55 file grabber -Succeeded test: test cases/common\56 custom target -Succeeded test: test cases/common\57 custom target chain -Succeeded test: test cases/common\58 run target -Succeeded test: test cases/common\59 object generator -Failed test during validate: 'test cases/common\\60 install script' -Reason: Expected file usr/bin/prog.exe missing. - -Succeeded test: test cases/common\61 custom target source output -Failed test during build: 'test cases/common\\62 exe static shared' -Reason: Compiling source code failed. -Succeeded test: test cases/common\63 array methods -Succeeded test: test cases/common\64 custom header generator -Failed test during configure: 'test cases/common\\65 multiple generators' -Reason: Generating the build system failed. -Succeeded test: test cases/common\66 install subdir -Failed test during validate: 'test cases/common\\67 foreach' -Reason: Expected file usr/bin/prog1.exe missing. -Expected file usr/bin/prog2.exe missing. -Expected file usr/bin/prog3.exe missing. - -Succeeded test: test cases/common\68 number arithmetic -Succeeded test: test cases/common\69 string arithmetic -Succeeded test: test cases/common\70 array arithmetic -Succeeded test: test cases/common\71 arithmetic bidmas -Failed test during build: 'test cases/common\\72 build always' -Reason: Compiling source code failed. -Failed test during build: 'test cases/common\\73 vcstag' -Reason: Compiling source code failed. -Succeeded test: test cases/common\74 modules -Succeeded test: test cases/common\75 should fail -Succeeded test: test cases/common\76 configure file in custom target -Succeeded test: test cases/common\77 external test program -Succeeded test: test cases/common\78 ctarget dependency -Failed test during build: 'test cases/common\\79 shared subproject' -Reason: Compiling source code failed. -Failed test during build: 'test cases/common\\80 shared subproject 2' -Reason: Compiling source code failed. -Succeeded test: test cases/common\81 file object -Failed test during build: 'test cases/common\\82 custom subproject dir' -Reason: Compiling source code failed. -Failed test during configure: 'test cases/common\\83 has type' -Reason: Generating the build system failed. -Succeeded test: test cases/common\84 extract from nested subdir -Succeeded test: test cases/common\85 internal dependency -Failed test during build: 'test cases/common\\86 same basename' -Reason: Compiling source code failed. -Succeeded test: test cases/common\87 declare dep -Succeeded test: test cases/common\88 extract all -Failed test during configure: 'test cases/common\\89 add language' -Reason: Generating the build system failed. -Succeeded test: test cases/common\90 identical target name in subproject -Succeeded test: test cases/common\91 plusassign -Succeeded test: test cases/common\92 skip subdir -Succeeded test: test cases/common\93 private include -Failed test during configure: 'test cases/common\\94 default options' -Reason: Generating the build system failed. -Failed test during build: 'test cases/common\\95 dep fallback' -Reason: Compiling source code failed. -Failed test during configure: 'test cases/common\\96 default library' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\97 selfbuilt custom' -Reason: Generating the build system failed. -Succeeded test: test cases/common\98 gen extra -Failed test during build: 'test cases/common\\99 benchmark' -Reason: Compiling source code failed. -Succeeded test: test cases/common\100 test workdir -Succeeded test: test cases/common\101 suites -Failed test during configure: 'test cases/common\\102 threads' -Reason: Generating the build system failed. -Succeeded test: test cases/common\103 manygen -Succeeded test: test cases/common\104 stringdef -Succeeded test: test cases/common\105 find program path -Succeeded test: test cases/common\106 subproject subdir -Succeeded test: test cases/common\107 postconf -Succeeded test: test cases/common\108 postconf with args -Succeeded test: test cases/common\109 testframework options -Succeeded test: test cases/common\110 extract same name -Failed test during configure: 'test cases/common\\111 has header symbol' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\112 has arg' -Reason: Generating the build system failed. -Succeeded test: test cases/common\113 generatorcustom -Succeeded test: test cases/common\114 multiple dir configure file -Succeeded test: test cases/common\115 spaces backslash -Succeeded test: test cases/common\116 ternary -Succeeded test: test cases/common\117 custom target capture -Failed test during configure: 'test cases/common\\118 allgenerate' -Reason: Generating the build system failed. -Succeeded test: test cases/common\119 pathjoin -Succeeded test: test cases/common\120 subdir subproject -Succeeded test: test cases/common\121 interpreter copy mutable var on assignment -Skipping: test cases/common\122 skip -Failed test during configure: 'test cases/common\\123 subproject project arguments' -Reason: Generating the build system failed. -Succeeded test: test cases/common\124 test skip -Failed test during build: 'test cases/common\\125 shared module' -Reason: Compiling source code failed. -Failed test during configure: 'test cases/common\\126 llvm ir and assembly' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\127 cpp and asm' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\128 extract all shared library' -Reason: Generating the build system failed. -Failed test during build: 'test cases/common\\129 object only target' -Reason: Compiling source code failed. -Skipping: test cases/common\130 no buildincdir -Succeeded test: test cases/common\131 custom target directory install -Succeeded test: test cases/common\132 dependency file generation -Succeeded test: test cases/common\133 configure file in generator -Skipping: test cases/common\134 generated llvm ir -Failed test during build: 'test cases/common\\135 generated assembly' -Reason: Compiling source code failed. -Succeeded test: test cases/common\136 build by default targets in tests -Succeeded test: test cases/common\137 build by default -Failed test during build: 'test cases/common\\138 include order' -Reason: Compiling source code failed. -Succeeded test: test cases/common\139 override options -Failed test during configure: 'test cases/common\\140 get define' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\141 c cpp and asm' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\142 compute int' -Reason: Generating the build system failed. -Succeeded test: test cases/common\143 custom target object output -Succeeded test: test cases/common\144 empty build file -Failed test during configure: 'test cases/common\\145 whole archive' -Reason: Generating the build system failed. -Failed test during configure: 'test cases/common\\146 C and CPP link' -Reason: Generating the build system failed. -Succeeded test: test cases/common\147 mesonintrospect from scripts -Succeeded test: test cases/common\148 custom target multiple outputs -Succeeded test: test cases/common\149 special characters -Succeeded test: test cases/common\150 nested links -Succeeded test: test cases/common\151 list of file sources -Succeeded test: test cases/common\152 link depends custom target -Failed test during build: 'test cases/common\\153 recursive linking' -Reason: Compiling source code failed. -Failed test during build: 'test cases/common\\154 library at root' -Reason: Compiling source code failed. -Succeeded test: test cases/common\155 simd -Failed test during build: 'test cases/common\\156 shared module resolving symbol in executable' -Reason: Compiling source code failed. -Succeeded test: test cases/common\157 configure file in test -Succeeded test: test cases/common\158 dotinclude -Succeeded test: test cases/common\159 reserved targets -Succeeded test: test cases/common\160 duplicate source names -Succeeded test: test cases/common\161 index customtarget -Succeeded test: test cases/common\162 wrap file should not failed -Succeeded test: test cases/common\163 includedir subproj -Failed test during build: 'test cases/common\\164 subproject dir name collision' -Reason: Compiling source code failed. -Failed test during configure: 'test cases/common\\165 config tool variable' -Reason: Generating the build system failed. -Succeeded test: test cases/common\166 custom target subdir depend files -Succeeded test: test cases/common\167 external program shebang parsing -Succeeded test: test cases/common\168 disabler -Succeeded test: test cases/common\169 array option -Succeeded test: test cases/common\170 custom target template substitution -Succeeded test: test cases/common\171 not-found dependency -Succeeded test: test cases/common\172 subdir if_found -Succeeded test: test cases/common\173 default options prefix dependent defaults -Succeeded test: test cases/common\174 dependency factory -Succeeded test: test cases/common\175 get project license -Succeeded test: test cases/common\176 yield -Failed test during build: 'test cases/common\\177 subproject nested subproject dirs' -Reason: Compiling source code failed. -Succeeded test: test cases/common\178 preserve gendir -Failed test during configure: 'test cases/common\\179 source in dep' -Reason: Generating the build system failed. - -Total configuration time: 455.11s -Total build time: 253.61s -Total test time: 1.27s - -Total passed cross tests: 113 -Total failed cross tests: 62 -Total skipped cross tests: 4 diff --git a/docs/markdown/Reference-tables.md b/docs/markdown/Reference-tables.md index 7611232..bda4c23 100644 --- a/docs/markdown/Reference-tables.md +++ b/docs/markdown/Reference-tables.md @@ -21,6 +21,7 @@ These are return values of the `get_id` method in a compiler object. | g95 | The G95 Fortran compiler | | open64 | The Open64 Fortran Compiler | | nagfor | The NAG Fortran compiler | +| arm | ARM compiler | ## Script environment variables diff --git a/docs/markdown/snippets/armcc-cross.md b/docs/markdown/snippets/armcc-cross.md new file mode 100644 index 0000000..668f0ab --- /dev/null +++ b/docs/markdown/snippets/armcc-cross.md @@ -0,0 +1,15 @@ +## ARM compiler for C and CPP + +Cross-compilation is now supported for ARM targets using ARM compiler - ARMCC. +The current implementation does not support shareable libraries. +The default extension of the output is .axf. +The environment path should be set properly for the ARM compiler executables. +The '--cpu' option with the appropriate target type should be mentioned +in the cross file as shown in the snippet below. + +``` +[properties] +c_args = ['--cpu=Cortex-M0plus'] +cpp_args = ['--cpu=Cortex-M0plus'] + +``` diff --git a/mesonbuild/build.py b/mesonbuild/build.py index ea2edc3..1332f08 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -1178,7 +1178,8 @@ class Executable(BuildTarget): for_cygwin(is_cross, environment) or 'cs' in self.compilers): self.suffix = 'exe' else: - if 'c' in self.compilers and self.compilers['c'].get_id().startswith('arm'): + if ('c' in self.compilers and self.compilers['c'].get_id().startswith('arm') or + 'cpp' in self.compilers and self.compilers['cpp'].get_id().startswith('arm')): self.suffix = 'axf' else: self.suffix = '' diff --git a/mesonbuild/compilers/__init__.py b/mesonbuild/compilers/__init__.py index e58a604..55276d9 100644 --- a/mesonbuild/compilers/__init__.py +++ b/mesonbuild/compilers/__init__.py @@ -41,9 +41,6 @@ __all__ = [ 'sanitizer_compile_args', 'sort_clike', - 'ARMCompiler', - 'ARMCCompiler', - 'ARMCPPCompiler', 'CCompiler', 'ClangCCompiler', 'ClangCompiler', @@ -118,7 +115,7 @@ from .compilers import ( IntelCompiler, ) from .c import ( - ARMCCompiler, + ArmCCompiler, CCompiler, ClangCCompiler, GnuCCompiler, @@ -126,7 +123,7 @@ from .c import ( VisualStudioCCompiler, ) from .cpp import ( - ARMCPPCompiler, + ArmCPPCompiler, CPPCompiler, ClangCPPCompiler, GnuCPPCompiler, diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py index a77842c..8884548 100644 --- a/mesonbuild/compilers/c.py +++ b/mesonbuild/compilers/c.py @@ -31,7 +31,7 @@ from .compilers import ( msvc_winlibs, vs32_instruction_set_args, vs64_instruction_set_args, - ARMCompiler, + ArmCompiler, ClangCompiler, Compiler, CompilerArgs, @@ -889,45 +889,6 @@ class GnuCCompiler(GnuCompiler, CCompiler): return ['-fpch-preprocess', '-include', os.path.basename(header)] -class ARMCCompiler(ARMCompiler, CCompiler): - def __init__(self, exelist, version, is_cross, exe_wrapper=None, defines=None, **kwargs): - # ARMCC is only a cross compiler - if not is_cross: - raise EnvironmentException('armcc supports only cross-compilation.') - CCompiler.__init__(self, exelist, version, is_cross, exe_wrapper, **kwargs) - ARMCompiler.__init__(self, defines) - - def sanity_check_impl(self, work_dir, environment, sname, code): - mlog.debug('Sanity testing disabled for armcc compiler') - return - - def get_options(self): - opts = {'c_std': coredata.UserComboOption('c_std', 'C language standard to use', - ['none', 'c89', 'c99', 'c11'], - 'none')} - return opts - - def get_warn_args(self, level): - # ARMCC doesn't have warning levels - return [] - - def get_coverage_args(self): - return [] - - def get_coverage_link_args(self): - return [] - - def get_option_compile_args(self, options): - return [] - - def get_linker_exelist(self): - args = ['armlink'] - return args - - def get_compile_only_args(self): - return ['-c'] - - class IntelCCompiler(IntelCompiler, CCompiler): def __init__(self, exelist, version, icc_type, is_cross, exe_wrapper=None, **kwargs): CCompiler.__init__(self, exelist, version, is_cross, exe_wrapper, **kwargs) @@ -1206,3 +1167,22 @@ class VisualStudioCCompiler(CCompiler): if 'INCLUDE' not in os.environ: return [] return os.environ['INCLUDE'].split(os.pathsep) + + +class ArmCCompiler(ArmCompiler, CCompiler): + def __init__(self, exelist, version, is_cross, exe_wrapper=None, **kwargs): + CCompiler.__init__(self, exelist, version, is_cross, exe_wrapper, **kwargs) + ArmCompiler.__init__(self) + + def get_options(self): + opts = {'c_std': coredata.UserComboOption('c_std', 'C language standard to use', + ['none', 'c90', 'c99'], + 'none')} + return opts + + def get_option_compile_args(self, options): + args = [] + std = options['c_std'] + if std.value != 'none': + args.append('--' + std.value) + return args diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index 556d881..966e205 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -1095,65 +1095,6 @@ class GnuCompiler: def get_default_include_dirs(self): return gnulike_default_include_dirs(self.exelist, self.language) -class ARMCompiler: - # Functionality that is common to all ARM family compilers. - def __init__(self, defines): - self.id = 'arm' - self.defines = defines or {} - self.base_options = ['b_pch', 'b_lto', 'b_pgo', 'b_sanitize', 'b_coverage', - 'b_colorout', 'b_ndebug', 'b_staticpic'] - # Assembly - self.can_compile_suffixes.add('s') - - def can_linker_accept_rsp(self): - return False - - def get_pic_args(self): - # FIXME: Add /ropi, /rwpi, /fpic etc. qualifiers to --apcs - return [] - - def get_buildtype_args(self, buildtype): - return arm_buildtype_args[buildtype] - - def get_buildtype_linker_args(self, buildtype): - return arm_buildtype_linker_args[buildtype] - - # Override CCompiler.get_always_args - def get_always_args(self): - return [] - - # Override CCompiler.get_dependency_gen_args - def get_dependency_gen_args(self, outtarget, outfile): - return [] - - # Override CCompiler.get_std_shared_lib_link_args - def get_std_shared_lib_link_args(self): - return [] - - def get_pch_use_args(self, pch_dir, header): - # FIXME: Add required arguments - # NOTE from armcc user guide: - # "Support for Precompiled Header (PCH) files is deprecated from ARM Compiler 5.05 - # onwards on all platforms. Note that ARM Compiler on Windows 8 never supported - # PCH files." - return [] - - def get_pch_suffix(self): - # NOTE from armcc user guide: - # "Support for Precompiled Header (PCH) files is deprecated from ARM Compiler 5.05 - # onwards on all platforms. Note that ARM Compiler on Windows 8 never supported - # PCH files." - return 'pch' - - def split_shlib_to_parts(self, fname): - return os.path.split(fname)[0], fname - - def thread_flags(self, env): - return [] - - def thread_link_flags(self, env): - return [] - class ClangCompiler: def __init__(self, clang_type): @@ -1294,3 +1235,73 @@ class IntelCompiler: def get_default_include_dirs(self): return gnulike_default_include_dirs(self.exelist, self.language) + + +class ArmCompiler: + # Functionality that is common to all ARM family compilers. + def __init__(self): + if not self.is_cross: + raise EnvironmentException('armcc supports only cross-compilation.') + self.id = 'arm' + default_warn_args = [] + self.warn_args = {'1': default_warn_args, + '2': default_warn_args + [], + '3': default_warn_args + []} + # Assembly + self.can_compile_suffixes.add('s') + + def can_linker_accept_rsp(self): + return False + + def get_pic_args(self): + # FIXME: Add /ropi, /rwpi, /fpic etc. qualifiers to --apcs + return [] + + def get_buildtype_args(self, buildtype): + return arm_buildtype_args[buildtype] + + def get_buildtype_linker_args(self, buildtype): + return arm_buildtype_linker_args[buildtype] + + # Override CCompiler.get_always_args + def get_always_args(self): + return [] + + # Override CCompiler.get_dependency_gen_args + def get_dependency_gen_args(self, outtarget, outfile): + return [] + + # Override CCompiler.get_std_shared_lib_link_args + def get_std_shared_lib_link_args(self): + return [] + + def get_pch_use_args(self, pch_dir, header): + # FIXME: Add required arguments + # NOTE from armcc user guide: + # "Support for Precompiled Header (PCH) files is deprecated from ARM Compiler 5.05 + # onwards on all platforms. Note that ARM Compiler on Windows 8 never supported + # PCH files." + return [] + + def get_pch_suffix(self): + # NOTE from armcc user guide: + # "Support for Precompiled Header (PCH) files is deprecated from ARM Compiler 5.05 + # onwards on all platforms. Note that ARM Compiler on Windows 8 never supported + # PCH files." + return 'pch' + + def thread_flags(self, env): + return [] + + def thread_link_flags(self, env): + return [] + + def get_linker_exelist(self): + args = ['armlink'] + return args + + def get_coverage_args(self): + return [] + + def get_coverage_link_args(self): + return [] diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py index 15e8457..952f7f2 100644 --- a/mesonbuild/compilers/cpp.py +++ b/mesonbuild/compilers/cpp.py @@ -26,7 +26,7 @@ from .compilers import ( ClangCompiler, GnuCompiler, IntelCompiler, - ARMCompiler, + ArmCompiler, ) class CPPCompiler(CCompiler): @@ -134,35 +134,6 @@ class GnuCPPCompiler(GnuCompiler, CPPCompiler): return ['-fpch-preprocess', '-include', os.path.basename(header)] -class ARMCPPCompiler(ARMCompiler, CPPCompiler): - def __init__(self, exelist, version, is_cross, exe_wrap=None, defines=None, **kwargs): - CPPCompiler.__init__(self, exelist, version, is_cross, exe_wrap, **kwargs) - ARMCompiler.__init__(self, defines) - default_warn_args = [] - self.warn_args = {'1': default_warn_args, - '2': default_warn_args + [], - '3': default_warn_args + []} - - def get_options(self): - opts = {'cpp_std': coredata.UserComboOption('cpp_std', 'C++ language standard to use', - ['none', 'c++11'], - 'none')} - return opts - - def get_option_compile_args(self, options): - args = [] - std = options['cpp_std'] - if std.value == 'c++11': - args.append('--cpp11') - return args - - def get_option_link_args(self, options): - return [] - - def get_compiler_check_args(self): - return [] - - class IntelCPPCompiler(IntelCompiler, CPPCompiler): def __init__(self, exelist, version, icc_type, is_cross, exe_wrap, **kwargs): CPPCompiler.__init__(self, exelist, version, is_cross, exe_wrap, **kwargs) @@ -245,3 +216,30 @@ class VisualStudioCPPCompiler(VisualStudioCCompiler, CPPCompiler): # Visual Studio C++ compiler doesn't support -fpermissive, # so just use the plain C args. return super(VisualStudioCCompiler, self).get_compiler_check_args() + + +class ArmCPPCompiler(ArmCompiler, CPPCompiler): + def __init__(self, exelist, version, is_cross, exe_wrap=None, defines=None, **kwargs): + CPPCompiler.__init__(self, exelist, version, is_cross, exe_wrap, **kwargs) + ArmCompiler.__init__(self, defines) + + def get_options(self): + opts = {'cpp_std': coredata.UserComboOption('cpp_std', 'C++ language standard to use', + ['none', 'c++03', 'c++11'], + 'none')} + return opts + + def get_option_compile_args(self, options): + args = [] + std = options['cpp_std'] + if std.value == 'c++11': + args.append('--cpp11') + elif std.value == 'c++03': + args.append('--cpp') + return args + + def get_option_link_args(self, options): + return [] + + def get_compiler_check_args(self): + return [] diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index f9cd9ca..5c982fd 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -38,8 +38,8 @@ from .compilers import ( is_source, ) from .compilers import ( - ARMCCompiler, - ARMCPPCompiler, + ArmCCompiler, + ArmCPPCompiler, ClangCCompiler, ClangCPPCompiler, ClangObjCCompiler, @@ -493,11 +493,10 @@ class Environment: if found_cl in watcom_cls: continue arg = '/?' + elif 'armcc' in compiler[0]: + arg = '--vsn' else: - if compiler[0] == 'armcc': - arg = '--vsn' - else: - arg = '--version' + arg = '--version' try: p, out, err = Popen_safe(compiler + [arg]) except OSError as e: @@ -543,7 +542,7 @@ class Environment: cls = IntelCCompiler if lang == 'c' else IntelCPPCompiler return cls(ccache + compiler, version, inteltype, is_cross, exe_wrap, full_version=full_version) if 'ARM' in out: - cls = ARMCCompiler if lang == 'c' else ARMCPPCompiler + cls = ArmCCompiler if lang == 'c' else ArmCPPCompiler return cls(ccache + compiler, version, is_cross, exe_wrap, full_version=full_version) self._handle_exceptions(popen_exceptions, compilers) @@ -799,7 +798,7 @@ class Environment: if 'lib' in linker or 'lib.exe' in linker: arg = '/?' else: - arg = '--version' + arg = '--version' try: p, out, err = Popen_safe(linker + [arg]) except OSError as e: -- cgit v1.1 From 7f8908336362cccd45516f48b5320380cec0e817 Mon Sep 17 00:00:00 2001 From: Somasekhar Penugonda Date: Wed, 28 Mar 2018 15:11:45 +0530 Subject: Fix for issue in cpp.py Change-Id: Iad9623d20eb5086528dacefce5d2f4f9bb9d0312 --- mesonbuild/compilers/cpp.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py index 952f7f2..f6f5bba 100644 --- a/mesonbuild/compilers/cpp.py +++ b/mesonbuild/compilers/cpp.py @@ -219,9 +219,9 @@ class VisualStudioCPPCompiler(VisualStudioCCompiler, CPPCompiler): class ArmCPPCompiler(ArmCompiler, CPPCompiler): - def __init__(self, exelist, version, is_cross, exe_wrap=None, defines=None, **kwargs): + def __init__(self, exelist, version, is_cross, exe_wrap=None, **kwargs): CPPCompiler.__init__(self, exelist, version, is_cross, exe_wrap, **kwargs) - ArmCompiler.__init__(self, defines) + ArmCompiler.__init__(self) def get_options(self): opts = {'cpp_std': coredata.UserComboOption('cpp_std', 'C++ language standard to use', -- cgit v1.1