Failed and successful native builds of gcc 5.3.0
David Gressett <[email protected]> Wed, 25 Jan 2017 22:13:48 +0000
| Newsgroups | gmane.comp.gnu.mingw.devel |
|---|---|
| Message-ID | <MWHPR13MB16478E1853A05C243A03A229D4740@MWHPR13MB1647.namprd13.prod.outlook.com> |
In my investigations to discover why mingw-pkg fails to compile gcc 5.3.0 in a native build with msys, I used sh -vx to determine the actual command line passed to make by mingw-pkg when doing the compile stage of the build, and found that it was indeed just "make" with no arguments. my next step was to extract the exact make command line that was used in the successful build that used Earnie's gcc 4.8.1 build system. The relevant portion of his makefile looked like this: LDFLAGS = --verbose -L/mingw/$(HOST)/lib -B/mingw/$(HOST)/lib COMPILE = mkdir -p bld/gcc; cp -a /mingw/lib/crt2.o bld/gcc/; cd bld && \ export GCC_EXEC_PREFIX=/mingw/lib/gcc/; \ export LDFLAGS="$(LDFLAGS)"; \ export LDFLAGS_FOR_TARGET="$(LDFLAGS)"; \ export LDFLAGS_FOR_BUILD="$(LDFLAGS)"; \ export STAGE1_LDFLAGS="$(LDFLAGS)"; \ export POSTSTAGE1_LDFLAGS="$(LDFLAGS)"; \ export BOOT_LDFLAGS="$(LDFLAGS)"; \ export TOOLS_LIBS="$(LDFLAGS)"; \ export SYSLIBS="$(LDFLAGS)"; \ /bin/make \ LDFLAGS_FOR_TARGET="$(LDFLAGS)" \ LDFLAGS_FOR_BUILD="$(LDFLAGS)" \ STAGE1_LDFLAGS="$(LDFLAGS)" \ POSTSTAGE1_LDFLAGS="$(LDFLAGS)" \ BOOT_LDFLAGS="$(LDFLAGS)" \ TOOLS_LIBS="$(LDFLAGS)" \ SYSLIBS="$(LDFLAGS)" \ LDFLAGS="$(LDFLAGS)" I lifted this into my Windows text editor and expanded all of the $ definitions to construct the actual command lines. I then used mingw-pkg to do the first steps of a new build starting from scratch. I did the patch and configure steps with mingw-pkg. I then copied, pasted, and executed each of my reconstructed command lines. The result was a successful compile step. It did strike me as interesting that Earnie's command lines did the various flags definitions as both exported environment variables and command line arguments to make, and that he prefaced the make with a bit of work to copy crt2.o from the /mingw/lib directory into a place in the bld directory tree. I do not at this point know how much, if any, of this structure can be eliminated; experiments are slow, as the build runs for about 5 hours on my build computer. It is not clear to me why this works - the offending libcrt2.o is not located in the directory specified by LDFLAGS and is not copied into the build directory tree. In any case, it does appear to me that mingw-pkg needs to do some things for a native build with msys that it does not need to do in a cross-build environment on a Linux host. After completing the successful build, I then looked to see what mingw-pkg would do as the equivalent of Earnie's make stage. mingw-pkg --help was not helpful; it is obviously an incomplete work in progress. A search of the source code turned up something similar to the structure of the compilation: # Action "install": install the application into the target directory # specified at configuration time, or a staging directory specified by # $INSTALLDIR, at installation time. An attempt to do mingw-pkg INSTALLDIR=... install didn't work well - the INSTALLDIR was ignored and the results went into the mingw directories but did not overwrite all of the existing gcc 5.3.0 files. I renamed the mingw directory and did a fresh install from scratch so that I could investigate the details of the failure later. ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot