Message ID | 87tuec8usd.fsf_-_@depni.sinp.msu.ru |
---|---|
State | New |
Headers | show |
Series | PING^2: [PATCH] Add --enable-first-stage-cross configure option | expand |
On 10/01/22 00:26 +0300, Serge Belyshev wrote: >Ping: [PATCH] Add --enable-first-stage-cross configure option >https://gcc.gnu.org/pipermail/gcc-patches/2021-July/575318.html > > >Add --enable-first-stage-cross configure option > >Build static-only, C-only compiler that is sufficient to cross compile >glibc. This option disables various runtime libraries that require >libc to compile, turns on --with-newlib, --without-headers, >--disable-decimal-float, --disable-shared, --disable-threads, and sets >--enable-languages=c. >Rationale: current way of building first stage compiler of a cross >toolchain requires specifying a list of target libraries that are not >going to be compiled due to their dependency on target libc. This >list is not documented in gccinstall.texi and sometimes changes. To >simplify the procedure, it is better to maintain that list in the GCC >itself. I think this is a great idea. I don't think it makes any difference to this patch, but I've just committed a change to libstdc++ so that you no longer neeed to add --with-newlib when libstdc++ is configured with --without-headers (because it's counter-intuitive to have to say which libc you're using when not using any libc). I only tested it for --disable-hosted-libstdcxx --without-headers because I am not sure what libstdc++ even does if you build it hosted but --without-headers.
Final ping before stage3 ends: [PATCH] Add --enable-first-stage-cross configure option https://gcc.gnu.org/pipermail/gcc-patches/2021-July/575318.html
On 1/9/2022 2:26 PM, Serge Belyshev wrote: > Ping: [PATCH] Add --enable-first-stage-cross configure option > https://gcc.gnu.org/pipermail/gcc-patches/2021-July/575318.html > > > Add --enable-first-stage-cross configure option > > Build static-only, C-only compiler that is sufficient to cross compile > glibc. This option disables various runtime libraries that require > libc to compile, turns on --with-newlib, --without-headers, > --disable-decimal-float, --disable-shared, --disable-threads, and sets > --enable-languages=c. > > Rationale: current way of building first stage compiler of a cross > toolchain requires specifying a list of target libraries that are not > going to be compiled due to their dependency on target libc. This > list is not documented in gccinstall.texi and sometimes changes. To > simplify the procedure, it is better to maintain that list in the GCC > itself. > > Usage example as a patch to glibc's scripts/build-many-libcs.py: > > diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py > index 580d25e8ee..3a6a7be76b 100755 > --- a/scripts/build-many-glibcs.py > +++ b/scripts/build-many-glibcs.py > @@ -1446,17 +1446,7 @@ class Config(object): > # required to define inhibit_libc (to stop some parts of > # libgcc including libc headers); --without-headers is not > # sufficient. > - cfg_opts += ['--enable-languages=c', '--disable-shared', > - '--disable-threads', > - '--disable-libatomic', > - '--disable-decimal-float', > - '--disable-libffi', > - '--disable-libgomp', > - '--disable-libitm', > - '--disable-libmpx', > - '--disable-libquadmath', > - '--disable-libsanitizer', > - '--without-headers', '--with-newlib', > + cfg_opts += ['--enable-first-stage-cross', > '--with-glibc-version=%s' % self.ctx.glibc_version > ] > cfg_opts += self.first_gcc_cfg > > Bootstrapped/regtested on x86_64-pc-linux-gnu, and > tested with build-many-glibcs.py with the above patch. > > OK for mainline? > > > ChangeLog: > > * configure.ac: Add --enable-first-stage-cross. > * configure: Regenerate. > > gcc/ChangeLog: > > * doc/install.texi: Document --enable-first-stage-cross. I'm not really sure we need a patch for this. Isn't it sufficient to "make all-gcc && make all-target-libgcc"? Folks have been doing that for decades. Jeff
Jeff Law via Gcc-patches <gcc-patches@gcc.gnu.org> writes: > I'm not really sure we need a patch for this. Isn't it sufficient to > "make all-gcc && make all-target-libgcc"? Folks have been doing that > for decades. > > Jeff Oh, I did not know that "make install-gcc install-target-libgcc" works in this case. So in the end, patch simplifies quirky first stage cross tool build procedure from configure --target=$target --enable-languages=c --disable-threads --disable-shared # plus --with-newlib when --with-sysroot= make all-gcc all-target-libgcc make install-gcc install-target-libgcc to configure --target=$target --enable-first-stage-cross make make install Either way is more or less okay for me, it just needs to be documented.
diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py index 580d25e8ee..3a6a7be76b 100755 --- a/scripts/build-many-glibcs.py +++ b/scripts/build-many-glibcs.py @@ -1446,17 +1446,7 @@ class Config(object): # required to define inhibit_libc (to stop some parts of # libgcc including libc headers); --without-headers is not # sufficient. - cfg_opts += ['--enable-languages=c', '--disable-shared', - '--disable-threads', - '--disable-libatomic', - '--disable-decimal-float', - '--disable-libffi', - '--disable-libgomp', - '--disable-libitm', - '--disable-libmpx', - '--disable-libquadmath', - '--disable-libsanitizer', - '--without-headers', '--with-newlib', + cfg_opts += ['--enable-first-stage-cross', '--with-glibc-version=%s' % self.ctx.glibc_version ] cfg_opts += self.first_gcc_cfg Bootstrapped/regtested on x86_64-pc-linux-gnu, and tested with build-many-glibcs.py with the above patch. OK for mainline? ChangeLog: * configure.ac: Add --enable-first-stage-cross. * configure: Regenerate. gcc/ChangeLog: * doc/install.texi: Document --enable-first-stage-cross. --- configure | 20 ++++++++++++++++++++ configure.ac | 15 +++++++++++++++ gcc/doc/install.texi | 7 +++++++ 3 files changed, 42 insertions(+) diff --git a/configure b/configure index 9c2d7df1bb2..44f6ebcb947 100755 --- a/configure +++ b/configure @@ -794,6 +794,7 @@ ac_user_opts=' enable_option_checking with_build_libsubdir with_system_zlib +enable_first_stage_cross enable_as_accelerator_for enable_offload_targets enable_offload_defaulted @@ -1522,6 +1523,9 @@ Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-first-stage-cross + Build a static-only compiler that is sufficient to + build glibc. --enable-as-accelerator-for=ARG build as offload target compiler. Specify offload host triple by ARG @@ -2971,6 +2975,22 @@ case $is_cross_compiler in no) skipdirs="${skipdirs} ${cross_only}" ;; esac +# Check whether --enable-first-stage-cross was given. +if test "${enable_first_stage_cross+set}" = set; then : + enableval=$enable_first_stage_cross; ENABLE_FIRST_STAGE_CROSS=$enableval +else + ENABLE_FIRST_STAGE_CROSS=no +fi + +case "${ENABLE_FIRST_STAGE_CROSS}" in + yes) + noconfigdirs="$noconfigdirs target-libatomic target-libquadmath target-libgomp target-libssp" + host_configargs="$host_configargs --disable-shared --disable-threads --disable-decimal-float --without-headers --with-newlib" + target_configargs="$target_configargs --disable-shared" + enable_languages=c + ;; +esac + # If both --with-headers and --with-libs are specified, default to # --without-newlib. if test x"${with_headers}" != x && test x"${with_headers}" != xno \ diff --git a/configure.ac b/configure.ac index 68cc5cc31fe..84ae8210a72 100644 --- a/configure.ac +++ b/configure.ac @@ -268,6 +268,21 @@ case $is_cross_compiler in no) skipdirs="${skipdirs} ${cross_only}" ;; esac +AC_ARG_ENABLE(first-stage-cross, +[AS_HELP_STRING([--enable-first-stage-cross], + [Build a static-only compiler that is + sufficient to build glibc.])], +ENABLE_FIRST_STAGE_CROSS=$enableval, +ENABLE_FIRST_STAGE_CROSS=no) +case "${ENABLE_FIRST_STAGE_CROSS}" in + yes) + noconfigdirs="$noconfigdirs target-libatomic target-libquadmath target-libgomp target-libssp" + host_configargs="$host_configargs --disable-shared --disable-threads --disable-decimal-float --without-headers --with-newlib" + target_configargs="$target_configargs --disable-shared" + enable_languages=c + ;; +esac + # If both --with-headers and --with-libs are specified, default to # --without-newlib. if test x"${with_headers}" != x && test x"${with_headers}" != xno \ diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 54ad7c7b47c..ba251b67fba 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -2529,6 +2529,13 @@ When you use this option, you should ensure that @var{dir} includes @command{ranlib} and @command{strip} if necessary, and possibly @command{objdump}. Otherwise, GCC may use an inconsistent set of tools. + +@item --enable-first-stage-cross +Build static-only, C-only compiler that is sufficient to cross compile glibc. +This option disables various runtime libraries that require libc to compile, +turns on @option{--with-newlib}, @option{--without-headers}, +@option{--disable-decimal-float}, @option{--disable-shared}, +@option{--disable-threads} and sets @option{--enable-languages=c}. @end table @subsubheading Overriding @command{configure} test results