This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][GCC][mingw-w64][Ada] Fix Ada native bootstrap (PR81878).
- From: Tamar Christina <Tamar dot Christina at arm dot com>
- To: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Cc: nd <nd at arm dot com>, "charlet at adacore dot com" <charlet at adacore dot com>, "ebotcazou at libertysurf dot fr" <ebotcazou at libertysurf dot fr>, "derodat at adacore dot com" <derodat at adacore dot com>
- Date: Thu, 25 Oct 2018 12:33:09 +0000
- Subject: [PATCH][GCC][mingw-w64][Ada] Fix Ada native bootstrap (PR81878).
Hi All,
Due to the changes in PR81878 builds of GCC8 and trunk are impossible
with Ada enabled[1][2].
The reason the patch breaks the bootstrap is due to how gnatlink receives it's
arguments.
gnatlink is usually invoked as
$(GNATLINK) -v gnatcmd -o ../../gnat$(exeext) \
--GCC="$(CC) $(ADA_INCLUDES)" --LINK="$(GCC_LINK)" $(TOOLS_LIBS)
so it passes $(CC) and $(GCC_LINK) as quoted arguments to the program.
Because of this quotation the msys2 shell does not translate any paths in
$(CC) and $(GCC_LINK) from their Unix version to their Windows version.
Furthermore because there are multiple paths in the values separated by space
and because the paths often contain a prefix like -L (e.g. -L/f/foo) we can't
use `fix_srcfile_path` to fix this.
An alternative solution would have been to create a stub program that echos the
commandline options it receives back, and calling this program with $(CC) and $(GCC_LINK)
unquoted to get them translated. However this was a bit more invasive.
So instead for native compilations we add -B../../ such that it picks up the lto plugin
from the previous built compiler. Since it's native there shouldn't be a mismatch here.
[1] https://github.com/Alexpux/MINGW-packages/pull/3877#issuecomment-408651809
[2] https://gcc.gnu.org/ml/gcc/2018-07/msg00410.html
Bootstrapped on x86_64-pc-linux-gnu and mingw-w64-x86_64.
Ok for trunk?
Thanks,
Tamar
gnattools/ChangeLog:
2018-10-25 Tamar Christina <tamar.christina@arm.com>
PR ada/81878
* Makefile.in (TOOLS_FLAGS_TO_PASS_NATIVE): Add -B ../../.
--
diff --git a/gnattools/Makefile.in b/gnattools/Makefile.in
index d19147fe5d74753249d9b9d8dceab79da72b1537..8a98a2d0b1895b1798e22a31b44c6e0c9bc4ab73 100644
--- a/gnattools/Makefile.in
+++ b/gnattools/Makefile.in
@@ -70,9 +70,12 @@ INCLUDES_FOR_SUBDIR = -iquote . -iquote .. -iquote ../.. \
ADA_INCLUDES_FOR_SUBDIR = -I. -I$(fsrcdir)/ada
# Variables for gnattools, native
+# Due to Windows path translations (See PR ada/81878) we need to add
+# -B../../ to the compiler paths as a workaround for that $(CXX) contains
+# Unix style paths that won't be translated by the runtime.
TOOLS_FLAGS_TO_PASS_NATIVE= \
"CC=../../xgcc -B../../" \
- "CXX=$(CXX)" \
+ "CXX=$(CXX) -B../../" \
"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
"LDFLAGS=$(LDFLAGS)" \
"ADAFLAGS=$(ADAFLAGS)" \