This patch adds support for compiling Windows resource files
(.rc) and pre-compiled resource files (.res) directly through the
GCC driver on PECOFF targets.
Previously, users had to manually invoke windres to compile resource
files before linking:
windres -o resource.o resource.rc
gcc main.c resource.o -o program.exe
With this patch, GCC can handle resource files automatically:
gcc main.c resource.rc -o program.exe
gcc main.c resource.res -o program.exe
Now, for an explanation of each line of the spec:
If any of -E -M or -MM were passed, do nothing. No object files are output.
"%{!E:%{!M:%{!MM:windres \
For multilib configurations, tell windres to write out the correct COFF format
%{m32:--target=pe-i386} %{m64:--target=pe-x86-64} \
Pass through -I -D -U on to windres, because it supports them.
%{I*:-I%*} %{D*:-D%*} %{U*:-U%*} \
If -c is passed, pass through -o to windres, if it was specified. Otherwise,
output to the input basename with .o suffix. Else, output to a
temp file that will be deleted after linking.
%{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O} %i}}}",
gcc/ChangeLog:
PR driver/108866
* gcc.cc (default_compilers): Add spec for handling .rc and .res files
Signed-off-by: Peter Damianov <[email protected]>
---
gcc/gcc.cc | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index b5d0f759f14..70faf4ba877 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -1517,6 +1517,18 @@ static const struct compiler default_compilers[] =
#endif
, 0, 0, 0},
+#if TARGET_PECOFF
+ /* Support for Windows resource files. */
+ {".rc", "@windres", 0, 0, 0},
+ {".res", "@windres", 0, 0, 0},
+ {"@windres",
+ "%{!E:%{!M:%{!MM:windres \
+ %{m32:--target=pe-i386} %{m64:--target=pe-x86-64} \
+ %{I*:-I%*} %{D*:-D%*} %{U*:-U%*} \
+ %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O} %i}}}",
+ 0, 0, 0},
+#endif
+
#include "specs.h"
/* Mark end of table. */
{0, 0, 0, 0, 0}
--
2.47.3