From nobody Thu Dec 26 01:40:05 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 150485413225149.809227403927025; Fri, 8 Sep 2017 00:02:12 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 4252621CEB10D; Thu, 7 Sep 2017 23:59:18 -0700 (PDT) Received: from proxmox.maurer-it.com (proxmox.maurer-it.com [212.186.127.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 023EB20945C13 for ; Thu, 7 Sep 2017 23:59:17 -0700 (PDT) Received: from proxmox.maurer-it.com (localhost [127.0.0.1]) by proxmox.maurer-it.com (Proxmox) with ESMTP id 800F8100059C; Fri, 8 Sep 2017 09:02:07 +0200 (CEST) X-Original-To: edk2-devel@lists.01.org From: Thomas Lamprecht To: edk2-devel@lists.01.org Date: Fri, 8 Sep 2017 09:01:31 +0200 Message-Id: <20170908070131.25158-1-t.lamprecht@proxmox.com> X-Mailer: git-send-email 2.11.0 Subject: [edk2] [PATCH v2] BaseTools/GCC: set -Wno-unused-const-variables on RELEASE builds X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laszlo Ersek , Liming Gao , Ard Biesheuvel MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" TianoCore BZ#700 [1] Set the '-Wno-unused-const-variables' in RELEASE builds with the GGC49 and GCC5 toolchain. This fixes the RELEASE build of OVMF with GCC in version 6 or newer. GCC 6 added the '-Wunused-const-variable' warning, which gets activated by '-Wunused-variable' and has the following behavior: "Warn whenever a constant static variable is unused aside from its declaration" [2] Commit 2ad6ba80a1bd58382bde6b994070f7c01d2fb48d introduced a case where exactly this happens on a RELEASE build. All uses of the static const variable are located in debug code only, which gets thrown out by the compiler on RELEASE builds and thus triggers the unused-const-variable warning. There is currently no GCC 6 toolchain target defined and doing so would add a lot of boilerplate code. Instead, use the fact that GCC ignores unknown '-Wno-*' options: "[...] if the -Wno- form is used [...] no diagnostic is produced for -Wno-unknown-warning unless other diagnostics are being produced" This behavior is available in GCC 4.9 [3] (and also earlier, for that matter), so add the flag to the GCC49 and GCC5 toolchain, even if both GCC versions do not supports it. GCC49 doesn't enables LTO whereas GCC5 does. As GCC 6.0 through 6.2 had bugs relating to LTO there can be desire to use the GCC49 target even if compiling with GCC 6, see 432f1d83f77a. Orient the changes on 20d00edf21d2 which moved the '-Wno-unused-but-set-variable' flag to RELEASE builds only, as there it ensure that it does not gets raised if the only usage of a variable is in (then collapsed) debug code. [1] https://bugzilla.tianocore.org/show_bug.cgi?id=3D700 [2] https://gcc.gnu.org/onlinedocs/gcc-6.4.0/gcc/Warning-Options.html#index= -Wunused-const-variable [3] https://gcc.gnu.org/onlinedocs/gcc-4.9.0/gcc/Warning-Options.html Cc: Yonghong Zhu Cc: Liming Gao Cc: Laszlo Ersek Cc: Ard Biesheuvel Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Thomas Lamprecht Reviewed-by: Ard Biesheuvel Reviewed-by: Laszlo Ersek Reviewed-by: Liming Gao --- changes v1 -> v2: * add the flag also to the GCC49 toolchain to allow using GCC 6 with LTO disabled builds, thanks for the hints Laszlo and Liming! * adapt commit message slightly, especially to the fact that GCC49 gets the flag now too. * CC Ard BaseTools/Conf/tools_def.template | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.t= emplate index ba1d1a16de..cbb5024c1b 100755 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -5179,7 +5179,7 @@ RELEASE_GCC48_AARCH64_CC_FLAGS =3D DEF(GCC48_AARCH6= 4_CC_FLAGS) -Wno-unused-but-s *_GCC49_IA32_NASM_FLAGS =3D -f elf32 =20 DEBUG_GCC49_IA32_CC_FLAGS =3D DEF(GCC49_IA32_CC_FLAGS) -Os -RELEASE_GCC49_IA32_CC_FLAGS =3D DEF(GCC49_IA32_CC_FLAGS) -Os -Wno-un= used-but-set-variable +RELEASE_GCC49_IA32_CC_FLAGS =3D DEF(GCC49_IA32_CC_FLAGS) -Os -Wno-un= used-but-set-variable -Wno-unused-const-variable NOOPT_GCC49_IA32_CC_FLAGS =3D DEF(GCC49_IA32_CC_FLAGS) -O0 =20 ################## @@ -5207,7 +5207,7 @@ RELEASE_GCC49_IA32_CC_FLAGS =3D DEF(GCC49_IA32_= CC_FLAGS) -Os -Wno-unused-but *_GCC49_X64_NASM_FLAGS =3D -f elf64 =20 DEBUG_GCC49_X64_CC_FLAGS =3D DEF(GCC49_X64_CC_FLAGS) -Os -RELEASE_GCC49_X64_CC_FLAGS =3D DEF(GCC49_X64_CC_FLAGS) -Os -Wno-unus= ed-but-set-variable +RELEASE_GCC49_X64_CC_FLAGS =3D DEF(GCC49_X64_CC_FLAGS) -Os -Wno-unus= ed-but-set-variable -Wno-unused-const-variable NOOPT_GCC49_X64_CC_FLAGS =3D DEF(GCC49_X64_CC_FLAGS) -O0 =20 ################## @@ -5240,7 +5240,7 @@ RELEASE_GCC49_X64_CC_FLAGS =3D DEF(GCC49_X64_CC= _FLAGS) -Os -Wno-unused-but-s *_GCC49_ARM_CC_XIPFLAGS =3D DEF(GCC49_ARM_CC_XIPFLAGS) =20 DEBUG_GCC49_ARM_CC_FLAGS =3D DEF(GCC49_ARM_CC_FLAGS) -O0 -RELEASE_GCC49_ARM_CC_FLAGS =3D DEF(GCC49_ARM_CC_FLAGS) -Wno-unused-b= ut-set-variable +RELEASE_GCC49_ARM_CC_FLAGS =3D DEF(GCC49_ARM_CC_FLAGS) -Wno-unused-b= ut-set-variable -Wno-unused-const-variable NOOPT_GCC49_ARM_CC_FLAGS =3D DEF(GCC49_ARM_CC_FLAGS) -O0 =20 ################## @@ -5272,7 +5272,7 @@ RELEASE_GCC49_ARM_CC_FLAGS =3D DEF(GCC49_ARM_CC= _FLAGS) -Wno-unused-but-set-v DEBUG_GCC49_AARCH64_DLINK_FLAGS =3D DEF(GCC49_AARCH64_DLINK_FLAGS) -z c= ommon-page-size=3D0x1000 DEBUG_GCC49_AARCH64_DLINK_XIPFLAGS =3D -z common-page-size=3D0x20 =20 -RELEASE_GCC49_AARCH64_CC_FLAGS =3D DEF(GCC49_AARCH64_CC_FLAGS) -Wno-un= used-but-set-variable -mcmodel=3Dtiny -fomit-frame-pointer +RELEASE_GCC49_AARCH64_CC_FLAGS =3D DEF(GCC49_AARCH64_CC_FLAGS) -Wno-un= used-but-set-variable -Wno-unused-const-variable -mcmodel=3Dtiny -fomit-fra= me-pointer RELEASE_GCC49_AARCH64_DLINK_FLAGS =3D DEF(GCC49_AARCH64_DLINK_FLAGS) =20 NOOPT_GCC49_AARCH64_CC_FLAGS =3D DEF(GCC49_AARCH64_CC_FLAGS) -O0 -mc= model=3Dsmall @@ -5326,7 +5326,7 @@ RELEASE_GCC49_AARCH64_DLINK_FLAGS =3D DEF(GCC49_AARC= H64_DLINK_FLAGS) DEBUG_GCC5_IA32_CC_FLAGS =3D DEF(GCC5_IA32_CC_FLAGS) -flto -Os DEBUG_GCC5_IA32_DLINK_FLAGS =3D DEF(GCC5_IA32_X64_DLINK_FLAGS) -flto = -Os -Wl,-m,elf_i386,--oformat=3Delf32-i386 =20 -RELEASE_GCC5_IA32_CC_FLAGS =3D DEF(GCC5_IA32_CC_FLAGS) -flto -Os -Wn= o-unused-but-set-variable +RELEASE_GCC5_IA32_CC_FLAGS =3D DEF(GCC5_IA32_CC_FLAGS) -flto -Os -Wn= o-unused-but-set-variable -Wno-unused-const-variable RELEASE_GCC5_IA32_DLINK_FLAGS =3D DEF(GCC5_IA32_X64_DLINK_FLAGS) -flto = -Os -Wl,-m,elf_i386,--oformat=3Delf32-i386 =20 NOOPT_GCC5_IA32_CC_FLAGS =3D DEF(GCC5_IA32_CC_FLAGS) -O0 @@ -5358,7 +5358,7 @@ RELEASE_GCC5_IA32_DLINK_FLAGS =3D DEF(GCC5_IA32_X6= 4_DLINK_FLAGS) -flto -Os -Wl, DEBUG_GCC5_X64_CC_FLAGS =3D DEF(GCC5_X64_CC_FLAGS) -flto -DUSING_= LTO -Os DEBUG_GCC5_X64_DLINK_FLAGS =3D DEF(GCC5_X64_DLINK_FLAGS) -flto -Os =20 -RELEASE_GCC5_X64_CC_FLAGS =3D DEF(GCC5_X64_CC_FLAGS) -flto -DUSING_= LTO -Os -Wno-unused-but-set-variable +RELEASE_GCC5_X64_CC_FLAGS =3D DEF(GCC5_X64_CC_FLAGS) -flto -DUSING_= LTO -Os -Wno-unused-but-set-variable -Wno-unused-const-variable RELEASE_GCC5_X64_DLINK_FLAGS =3D DEF(GCC5_X64_DLINK_FLAGS) -flto -Os =20 NOOPT_GCC5_X64_CC_FLAGS =3D DEF(GCC5_X64_CC_FLAGS) -O0 @@ -5393,7 +5393,7 @@ RELEASE_GCC5_X64_DLINK_FLAGS =3D DEF(GCC5_X64_DLI= NK_FLAGS) -flto -Os DEBUG_GCC5_ARM_CC_FLAGS =3D DEF(GCC5_ARM_CC_FLAGS) -O0 DEBUG_GCC5_ARM_DLINK_FLAGS =3D DEF(GCC5_ARM_DLINK_FLAGS) =20 -RELEASE_GCC5_ARM_CC_FLAGS =3D DEF(GCC5_ARM_CC_FLAGS) -flto -Wno-unu= sed-but-set-variable +RELEASE_GCC5_ARM_CC_FLAGS =3D DEF(GCC5_ARM_CC_FLAGS) -flto -Wno-unu= sed-but-set-variable -Wno-unused-const-variable RELEASE_GCC5_ARM_DLINK_FLAGS =3D DEF(GCC5_ARM_DLINK_FLAGS) -flto -Os -= L$(WORKSPACE)/ArmPkg/Library/GccLto -llto-arm -Wl,-plugin-opt=3D-pass-throu= gh=3D-llto-arm =20 NOOPT_GCC5_ARM_CC_FLAGS =3D DEF(GCC5_ARM_CC_FLAGS) -O0 @@ -5428,7 +5428,7 @@ RELEASE_GCC5_ARM_DLINK_FLAGS =3D DEF(GCC5_ARM_DLI= NK_FLAGS) -flto -Os -L$(WORKS DEBUG_GCC5_AARCH64_DLINK_FLAGS =3D DEF(GCC5_AARCH64_DLINK_FLAGS) -z comm= on-page-size=3D0x1000 DEBUG_GCC5_AARCH64_DLINK_XIPFLAGS =3D -z common-page-size=3D0x20 =20 -RELEASE_GCC5_AARCH64_CC_FLAGS =3D DEF(GCC5_AARCH64_CC_FLAGS) -flto -Wno= -unused-but-set-variable -mcmodel=3Dtiny -fomit-frame-pointer +RELEASE_GCC5_AARCH64_CC_FLAGS =3D DEF(GCC5_AARCH64_CC_FLAGS) -flto -Wno= -unused-but-set-variable -Wno-unused-const-variable -mcmodel=3Dtiny -fomit-= frame-pointer RELEASE_GCC5_AARCH64_DLINK_FLAGS =3D DEF(GCC5_AARCH64_DLINK_FLAGS) -flto -= Os -L$(WORKSPACE)/ArmPkg/Library/GccLto -llto-aarch64 -Wl,-plugin-opt=3D-pa= ss-through=3D-llto-aarch64 -Wno-lto-type-mismatch =20 NOOPT_GCC5_AARCH64_CC_FLAGS =3D DEF(GCC5_AARCH64_CC_FLAGS) -O0 -mcmod= el=3Dsmall --=20 2.11.0 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel