public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "pali at kernel dot org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug target/108866] Allow to pass Windows resource file (.rc) as input to gcc
Date: Fri, 15 Mar 2024 17:27:16 +0000	[thread overview]
Message-ID: <bug-108866-4-xrKW6njeUZ@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-108866-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108866

--- Comment #8 from Pali Rohár <pali at kernel dot org> ---
Thank you for input, as you already figured out there is lot of work for this.
And I think I'm not skilled enough to implement everything properly, so I would
have to let this to gcc developers. I will answer questions:

> 1) should gcc pass through any arguments to windres?
>  -I --include-dir=<dir>       Include directory when preprocessing rc file
>  -D --define <sym>[=<val>]    Define SYM when preprocessing rc file
>  -U --undefine <sym>          Undefine SYM when preprocessing rc file

windres's -I -D and -U are used for when processing "rc" file. So yes, gcc
should propagate -I -D and -U to windres for "rc" files (but not to "res"
files).

> 2) does -m32 or -m64 need handling in any specific ways?

This is really a good question and I totally forgot about this. Because gcc's
-m32 generates coff for different arch that gcc's -m64, it means that -m32/-m64
switches has to be propagated to windres. I think that gcc's -m32 and -m64
should be "converted" to windres's --target= option (with the correct
argument).

> 3) the linker has -Wl, for passing arguments to it, does windres need an equivalent?

I think that it is not needed at all because all windres's flags should already
have some options in gcc.

> 4) windres --help says:
> FORMAT is one of rc, res, or coff, and is deduced from the file name
> should ".res" be handled too?

"rc" is text resource format, "res" is the binary resource format. "coff" is
PE/COFF object file format with binary resource.

windres has option -J which explicitly sets the input format (and then
extension is not used for deduction).

So I think that gcc driver should have rules for both text (rc) and binary
(res) formats. And in my "test.spec" experiment are rules for both formats.


> 5) windres --help has this list of "supported targets":
> x86_64-w64-mingw32-windres: supported targets: pe-x86-64 pei-x86-64 pe-bigobj-x86-64 elf64-x86-64 pe-i386 pei-i386 elf32-i386 elf32-iamcu elf64-little elf64-big elf32-little elf32-big srec symbolsrec verilog tekhex binary ihex plugin
> 
> Do they matter? I did not expect to see any "elf" on this list, because windows obviously doesn't use it.

This is for sure bug. ELF does not support embedding windows resource files.
Windows resources can be embedded only into PE/COFF image file or into PE/COFF
object file.

And AFAIK, windres supports parsing both PE/COFF image and object files, but
can generate only PE/COFF object file.

So windres target list for sure contains non-senses and that is also reason why
you got those errors when you specified ELF.

> 6) does llvm-windres need to be considered at all? should there be a way to select it? an -fuse-rc= command option or so?

GNU windres is part of the binutils, where is also GNU as. So if the gcc is
using GNU as from binutils for assembling then it should use also GNU windres
from binutils for processing resources.

So in my own opinion, usage of "windres" from gcc should be handled in the same
way as usage of "as" from gcc. If gcc has a way to specify its own as binary,
then it makes sense to allow specifying its own windres binary.

But gcc developers can have different opinion.

  parent reply	other threads:[~2024-03-15 17:27 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-20 21:17 [Bug c/108866] New: " pali at kernel dot org
2023-02-20 21:24 ` [Bug target/108866] " pinskia at gcc dot gnu.org
2023-02-20 21:24 ` pinskia at gcc dot gnu.org
2024-03-13 21:46 ` pali at kernel dot org
2024-03-13 22:06 ` pinskia at gcc dot gnu.org
2024-03-14 13:55 ` amonakov at gcc dot gnu.org
2024-03-14 20:19 ` pali at kernel dot org
2024-03-14 20:23 ` pinskia at gcc dot gnu.org
2024-03-15 15:55 ` peter0x44 at disroot dot org
2024-03-15 17:27 ` pali at kernel dot org [this message]
2024-03-24 16:07 ` pali at kernel dot org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-108866-4-xrKW6njeUZ@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).