From patchwork Sun Jan 9 21:26:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Serge Belyshev X-Patchwork-Id: 1577582 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JX96K6V2Wz9sRR for ; Mon, 10 Jan 2022 08:27:53 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A70FA3891C16 for ; Sun, 9 Jan 2022 21:27:51 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from depni-mx.sinp.msu.ru (depni-mx.sinp.msu.ru [213.131.7.21]) by sourceware.org (Postfix) with ESMTP id 7C6E43890423 for ; Sun, 9 Jan 2022 21:27:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7C6E43890423 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=depni.sinp.msu.ru Authentication-Results: sourceware.org; spf=none smtp.mailfrom=depni.sinp.msu.ru Received: from spider (unknown [176.195.59.180]) by depni-mx.sinp.msu.ru (Postfix) with ESMTPSA id D3D5C1BF485; Mon, 10 Jan 2022 00:27:06 +0300 (MSK) From: Serge Belyshev To: gcc-patches@gcc.gnu.org Subject: PING^2: [PATCH] Add --enable-first-stage-cross configure option References: <87czrj1ysc.fsf@depni.sinp.msu.ru> <87mtophmo0.fsf@depni.sinp.msu.ru> Date: Mon, 10 Jan 2022 00:26:58 +0300 In-Reply-To: <87mtophmo0.fsf@depni.sinp.msu.ru> (Serge Belyshev's message of "Mon, 06 Sep 2021 16:13:35 +0300") Message-ID: <87tuec8usd.fsf_-_@depni.sinp.msu.ru> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" 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. --- 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