Hi,
I am using a trial version (7.9) with support for C/C++. I have built our code through the build wrapper and can see that a json was generated. But when I try to run the scanner I get this error “cc1plus.exe: error: target CPU does not support ARM mode”. This is somewhat puzzling to me as we do build towards and ARM target (Cortex M4). Can someone please help me getting this solved?
Kind regards,
Christian
cc1plus.exe: error: target CPU does not support ARM mode
13:39:15.241 INFO: ------------------------------------------------------------------------
13:39:15.242 INFO: EXECUTION FAILURE
13:39:15.242 INFO: ------------------------------------------------------------------------
13:39:15.243 INFO: Total time: 1:58.288s
13:39:15.326 INFO: Final Memory: 22M/87M
13:39:15.326 INFO: ------------------------------------------------------------------------
13:39:15.326 ERROR: Error during SonarQube Scanner execution
java.lang.NullPointerException
at com.sonar.cpp.analyzer.StdFlags.fromCppMacros(StdFlags.java:23)
at com.sonar.cpp.analyzer.ClangDriver.onCapture(ClangDriver.java:349)
at com.sonar.cpp.plugin.CFamilySensor.process(CFamilySensor.java:273)
at com.sonar.cpp.plugin.CFamilySensor.execute(CFamilySensor.java:205)
at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:48)
Could you please shared with us the build-wrapper-dump.json file?
Normally, we should ignore cc1plus, and instead focus on the parent gcc process to get the compilation options. So I’m not sure how you are seeing anything related to cc1plus…
Hi Loïc,
Thank you for looking into this issue. I have uploaded the json file so please take a look. Hopefully it will shed some light on this.
I have replaced my computer name and user ID with XXX’s, which I assume is OK.
Unfortunately, I did not see anything fishy in the build-wrapper-dump.json file… To better understand the context of this error, I would need the full sonar-scanner log (with debug logs enabled). Can you send it to me?
It shows that at some point, to detect what macros are define by default in your compiler, we try to run the following command line:
C:\Work\RemoteLink\extern\sdk_gnuarm\bin\arm-none-eabi-g++.exe -x c++ -mcpu=cortex-m4 -v -dM -E -
And this is this command that produces the message:
cc1plus.exe: error: target CPU does not support ARM mode
And because of this failure, we fail to retrieve the necessary configuration.
Since I don’t have arm-none-eabi-g++ on my computer, it’s hard for me to debug further… Can you try and manually run this command line on your build environment to see what you get? If it fails there too (as it should), maybe you can tune it and tell us what needs to be changed so that this command produces correct output (it should list in stdout all predefined macros)?
Usage: arm-none-eabi-g++.exe [options] file...
Options:
-pass-exit-codes Exit with highest error code from a phase
--help Display this information
--target-help Display target specific command line options
--help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]
Display specific types of command line options
(Use '-v --help' to display command line options of sub-processes)
--version Display compiler version information
-dumpspecs Display all of the built in spec strings
-dumpversion Display the version of the compiler
-dumpmachine Display the compiler's target processor
-print-search-dirs Display the directories in the compiler's search path
-print-libgcc-file-name Display the name of the compiler's companion library
-print-file-name=<lib> Display the full path to library <lib>
-print-prog-name=<prog> Display the full path to compiler component <prog>
-print-multiarch Display the target's normalized GNU triplet, used as
a component in the library path
-print-multi-directory Display the root directory for versions of libgcc
-print-multi-lib Display the mapping between command line options and
multiple library search directories
-print-multi-os-directory Display the relative path to OS libraries
-print-sysroot Display the target libraries directory
-print-sysroot-headers-suffix Display the sysroot suffix used to find headers
-Wa,<options> Pass comma-separated <options> on to the assembler
-Wp,<options> Pass comma-separated <options> on to the preprocessor
-Wl,<options> Pass comma-separated <options> on to the linker
-Xassembler <arg> Pass <arg> on to the assembler
-Xpreprocessor <arg> Pass <arg> on to the preprocessor
-Xlinker <arg> Pass <arg> on to the linker
-save-temps Do not delete intermediate files
-save-temps=<arg> Do not delete intermediate files
-no-canonical-prefixes Do not canonicalize paths when building relative
prefixes to other gcc components
-pipe Use pipes rather than intermediate files
-time Time the execution of each subprocess
-specs=<file> Override built-in specs with the contents of <file>
-std=<standard> Assume that the input sources are for <standard>
--sysroot=<directory> Use <directory> as the root directory for headers
and libraries
-B <directory> Add <directory> to the compiler's search paths
-v Display the programs invoked by the compiler
-### Like -v but options quoted and commands not executed
-E Preprocess only; do not compile, assemble or link
-S Compile only; do not assemble or link
-c Compile and assemble, but do not link
-o <file> Place the output into <file>
-pie Create a position independent executable
-shared Create a shared library
-x <language> Specify the language of the following input files
Permissible languages include: c c++ assembler none
'none' means revert to the default behavior of
guessing the language based on the file's extension
Options starting with -g, -f, -m, -O, -W, or --param are automatically
passed on to the various sub-processes invoked by arm-none-eabi-g++.exe. In order to pass
other options on to these processes the -W<letter> options must be used.
For bug reporting instructions, please see:
<http://gcc.gnu.org/bugs.html>.
Is this the command that you want to execute?:
arm-none-eabi-g++.exe -x c++ -mcpu=cortex-m4 -v -dM -E -dumpspecs