Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.

GCC compatibility in Windows?

GAl-G
Beginner
839 Views

Most cross-platform developers from the GNU world (according to anecdotal evidence) are familiar with using MingW and GCC in Windows, which works remarkably well and has become the de facto standard for compiling GNU-licensed tools such as x264, etc.

I am one of those folks. Is there a way I can use ICC in the GCC environment on Windows? I loathe visual studio nonsense and don't want another 8 gigs of disk space eaten up by this monster software I will never use. Can I just use the ICC in a GNU-like environment as in Linux or Mac like GCC (or MingW, more generally) enables in Windows? For example, to compile a simple program in Linux, Mac, and Windows I do: gcc -O2 program.c -o program, and of course it works in all three platforms.

Also, my code uses GCC vector extensions a lot, and I am not sure whether they are supported under Windows as they are in Linux and Mac. Please advise before I make the switch!

Final question: can opemMP be statically linked as with GCC (via -static-libgcc on all platforms)?

Thanks,

Gabe

0 Kudos
4 Replies
KitturGanesh
Employee
839 Views

Hi Gabriel! 
Very good question and interesting request as well on icl.  Well, presently there is no such support for now :-(  But, I'll pass this on to the product team as a feature request.  BTW, although not related to your issue per-se the link https://software.intel.com/en-us/articles/alias-method-for-using-intel-windows-compilers-under-cygwin-bash-shell  goes over some details on how to use the compiler for windows (icl) using Cygwin* bash shell but of course does require VS and other dependencies as well. I'll keep you updated as and when there's such support in our windows compilers.

_Kittur

0 Kudos
KitturGanesh
Employee
839 Views

Gabriel, on your other question: can opemMP be statically linked?  Well, by default the compiler performs a dynamic linking of the OpenMP libs which is the recommendation. To perform a static link you can use the option -openmp-link=static and it controls whether the linker uses the static or dynamic option. 

_Kittur

0 Kudos
GAl-G
Beginner
839 Views

Thanks Kittur! Very helpful. I'll take a look at your link and see if I can at least get the compiler working in a GNU-ish environment on Windows (like Cygwin, as you mention, so maybe Msys will work too). Even if I still have to install Visual Studio, this may prove to be a good workaround in the meantime.

Also, good to know about the static OpenMP support, thanks.

I still am wondering if the Intel C Compiler supports GCC vector extensions (mentioned here: https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html). I have found this a remarkably powerful feature for using SIMD commands in a very natural way, as a large number of options are supported using standard C syntax (initialization, loading, addition, conditional testing, etc) without using intrinsics. I have been informed that the Intel Compiler recognizes these (since version 13) on Linux, but do not know about Windows.

Thanks again,

Gabe

0 Kudos
KitturGanesh
Employee
839 Views

HI Gabe,
Good question again on GCC vector extensions support. Well, unfortunately, we don’t support the gnu vector extensions (i.e. defining SIMD types using “__attribute__((vector_size()))”) on Windows.  But, we DO support the built-in SIMD types on Windows – i.e. those defined in the *mmintin.h header files (e.g. __m128).  That said, we do NOT support the full use of those types with C/C++ operators.  Those types are defined, like with Visual C++,as struct/unions and hence we are a bit constrained. We DO provide C++ class libraries on Windows that allow users to use normal C/C++ operators with SIMD types (both floating-point and integer).  You can learn more on those at:  https://software.intel.com/en-us/node/524399

Hope the above helps.

_Kittur

0 Kudos
Reply