I'm a newbie in clang
. I have read a paper about source to source transformation from cuda
to opencl
using clang
compiler front end.
Can anyone tell me why the option -cc1
is sometimes used?
The Clang compiler front-end has several additional Clang specific features which are not exposed through the GCC compatibility driver interface. The -cc1
argument indicates that the compiler front-end is to be used, and not the driver. The clang -cc1
functionality implements the core compiler functionality.
So, simply speaking. If you do not give -cc1
then you can expect the "look&feel" of standard GCC. That is the vast majority of compiler flags work just like you would expect them to work with GCC. If you pass the option "-cc1" then you get the Clang compiler flag set. Thus, there might be differences to GCC.
Hope that makes it a little clearer.
clang -cc1
not return immediately? I was hoping to set an alias for a clang -cc1
command with many arguments. When running it with no arguments I'd like it to return something like clang-7: error: no input files
.
Commented
Dec 6, 2018 at 17:51
[ -t 0 ]
, as in alias cc1='if [ -t 0 ]; then clang -cc1; else echo No; fi'
. You could also look at your own arguments from a wrapper function, like alias cc1='(){ [ $# > 0 ] &&... }'
; Try this, it aborts the clang call if it can't read any of the args and stdin is on the terminal. alias cc1='(){ go=false; for a do { [ -r "$a" ] || continue; go=true }; done; if ! $go && [ -t 0 ]; then echo "Sorry" 1>&2; else clang -cc1 $@; fi }'
. I don't think [ -r "$a" ]
is bulletproof, but it's better than just $#
and that's better than nothing.
The usual compiler consists of so-called compiler driver, which knows how to execute compiler itself, assembler, linker, etc. and compiler itself which just takes the source code (sometimes already preprocessed) and emit assembler/object code.
Clang implements all these components in the single binary, the difference is just the cmdline. Here clang -cc1
invokes the compiler itself with its internal/undocumented set of options, etc.