[Bug target/108866] Allow to pass Windows resource file (.rc) as input to gcc
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Dec 15 14:58:54 GMT 2025
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108866
--- Comment #13 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Yong <jyong@gcc.gnu.org>:
https://gcc.gnu.org/g:a7852981ce15a12a083b7bf0071cc5946a6ea671
commit r16-6121-ga7852981ce15a12a083b7bf0071cc5946a6ea671
Author: Peter Damianov <peter0x44@disroot.org>
Date: Thu Dec 11 01:52:42 2025 +0000
Driver: Add support for Windows resource files (.rc, .res) [PR108866]
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
Add -J so that windres does not perform autodetection of input type
Add -O so that the output type is always COFF
-J rc -O coff \
For multilib configurations, tell windres to write out the correct COFF
format.
- If -m32 is specified, use pe-i386 format
- If -m64 is specified, use pe-x86_64 format
- If neither are specified, use the correct default for the target
This is defined in WINDRES_FORMAT_SPEC which expands to:
For 64-bit: "%{m32:-F pe-i386;m64|!m32:-F pe-x86-64}"
For 32-bit: "%{m64:-F pe-x86-64;m32|!m64:-F pe-i386}"
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 EXTRA_DEFAULT_COMPILERS so the
config
of a target can add an extra compiler spec to default_compilers.
* config/i386/cygming.h (WINDRES_FORMAT_SPEC): New macro to handle
PE format selection based on TARGET_64BIT_DEFAULT and -m32/-m64
flags.
(EXTRA_DEFAULT_COMPILERS): Add spec for windres.
* config/aarch64/cygming.h (EXTRA_DEFAULT_COMPILERS): Likewise.
Signed-off-by: Peter Damianov <peter0x44@disroot.org>
Signed-off-by: Jonathan Yong <10walls@gmail.com>
More information about the Gcc-bugs
mailing list