From patchwork Wed Jul 27 11:13:37 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 72849 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp242918qga; Wed, 27 Jul 2016 04:14:09 -0700 (PDT) X-Received: by 10.66.170.44 with SMTP id aj12mr48620822pac.131.1469618049066; Wed, 27 Jul 2016 04:14:09 -0700 (PDT) Return-Path: Received: from ml01.01.org (ml01.01.org. [198.145.21.10]) by mx.google.com with ESMTPS id q1si5923446paz.267.2016.07.27.04.14.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Jul 2016 04:14:09 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 198.145.21.10 as permitted sender) client-ip=198.145.21.10; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 198.145.21.10 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org; dmarc=fail (p=NONE dis=NONE) header.from=linaro.org Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 1E8691A1E24; Wed, 27 Jul 2016 04:14:07 -0700 (PDT) X-Original-To: edk2-devel@lists.01.org Delivered-To: edk2-devel@lists.01.org Received: from mail-wm0-x22a.google.com (mail-wm0-x22a.google.com [IPv6:2a00:1450:400c:c09::22a]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id B24E01A1E2C for ; Wed, 27 Jul 2016 04:14:05 -0700 (PDT) Received: by mail-wm0-x22a.google.com with SMTP id o80so56990915wme.1 for ; Wed, 27 Jul 2016 04:14:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0DlEpahCXVhdlWE91i2lO87ygNzlUf18eIy11I5UNlA=; b=V4F7dq3AA1uwemmQd920oRGjBaqX8Zg6eIGvIggao8vomuO5wJhUo8zWLMoIpDJ5Jf Py3VlYyTgktTIK9KqVN/KfyL4sPcYIfmTX5XhYihrYcodqMQweKZEXPBN6UMCzKHwDOZ YSntI+PRpCFnG7tG3U8ijguNhJfOB1uGNmhiQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0DlEpahCXVhdlWE91i2lO87ygNzlUf18eIy11I5UNlA=; b=mdQInei454hHahk3iYqz0fC7qffYqhLGv+MKzyqxN/VoKvG2Y/435EI55QYC1dloPV Ctru0Z8ESd+3u6HGwO5WWKo7eLC853bNRPPFhPd1HKqOpXps3dJzitEMoFO3MV42A1zl 24Heg+hTrEOM7dAn6giWEYLLaSwrD4aSg5EaHKT+y2BKMmd8VmTkHKJZBVnSUxUDNF5Y mAjfc3Wzh4Lo4jIxiaZkoWIGLpr2LMWrv5S9iNCmmm4Wvoj+t/2mlqlcxJqsLTk01RPG slkaHhnZejY7oZQjGRx1GscEQWdpaLVHdFWagK8hH0VSQNBb+ouF3vD9gmK7P9xPeTnn YYbw== X-Gm-Message-State: AEkoouvyoxt/zGI07ifrlywiMlZi6qgDSb70P+RMHuX1rIL4dzOz3fbPu+hVcbaLWZ5uJABx X-Received: by 10.194.142.78 with SMTP id ru14mr29847516wjb.41.1469618044294; Wed, 27 Jul 2016 04:14:04 -0700 (PDT) Received: from localhost.localdomain (154.red-83-36-182.dynamicip.rima-tde.net. [83.36.182.154]) by smtp.gmail.com with ESMTPSA id s184sm21699514wmb.11.2016.07.27.04.14.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 27 Jul 2016 04:14:03 -0700 (PDT) From: Ard Biesheuvel To: edk2-devel@lists.01.org, lersek@redhat.com, liming.gao@intel.com, steven.shi@intel.com, yonghong.zhu@intel.com, jordan.l.justen@intel.com Date: Wed, 27 Jul 2016 13:13:37 +0200 Message-Id: <1469618017-6534-8-git-send-email-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1469618017-6534-1-git-send-email-ard.biesheuvel@linaro.org> References: <1469618017-6534-1-git-send-email-ard.biesheuvel@linaro.org> Subject: [edk2] [PATCH v4 7/7] BaseTools GCC: add support for GCC v5.x in LTO mode X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: leif.lindholm@linaro.org, Ard Biesheuvel MIME-Version: 1.0 Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" This adds support for GCC 5.x in LTO mode for IA32, X64, ARM and AARCH64. Due to the fact that the GCC project switched to a new numbering scheme where the first digit is now incremented for every major release, the new toolchain is simply called 'GCC5', and is intended to support all GCC v5.x releases. Since IA32 and X64 enable compiler optimizations (-Os) for both DEBUG and RELEASE builds, LTO support is equally enabled for both targets. On ARM and AARCH64, DEBUG builds are not optimized, and so the LTO optimizations are only enabled for RELEASE. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel --- BaseTools/Conf/tools_def.template | 158 ++++++++++++++++++++ 1 file changed, 158 insertions(+) -- 2.7.4 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template index 10ac21e42c8f..389969408078 100644 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -197,6 +197,9 @@ DEFINE GCC48_X64_PREFIX = ENV(GCC48_BIN) DEFINE GCC49_IA32_PREFIX = ENV(GCC49_BIN) DEFINE GCC49_X64_PREFIX = ENV(GCC49_BIN) +DEFINE GCC5_IA32_PREFIX = ENV(GCC5_BIN) +DEFINE GCC5_X64_PREFIX = ENV(GCC5_BIN) + DEFINE UNIX_IASL_BIN = ENV(IASL_PREFIX)iasl DEFINE WIN_ASL_BIN_DIR = C:\ASL DEFINE WIN_IASL_BIN = DEF(WIN_ASL_BIN_DIR)\iasl.exe @@ -4452,6 +4455,27 @@ DEFINE GCC49_AARCH64_DLINK2_FLAGS = DEF(GCC48_AARCH64_DLINK2_FLAGS) DEFINE GCC49_ARM_ASLDLINK_FLAGS = DEF(GCC48_ARM_ASLDLINK_FLAGS) DEFINE GCC49_AARCH64_ASLDLINK_FLAGS = DEF(GCC48_AARCH64_ASLDLINK_FLAGS) +DEFINE GCC5_IA32_CC_FLAGS = DEF(GCC49_IA32_CC_FLAGS) -flto -fno-builtin +DEFINE GCC5_X64_CC_FLAGS = DEF(GCC49_X64_CC_FLAGS) -flto -fno-builtin +DEFINE GCC5_IA32_X64_DLINK_COMMON = DEF(GCC49_IA32_X64_DLINK_COMMON) +DEFINE GCC5_IA32_X64_ASLDLINK_FLAGS = DEF(GCC49_IA32_X64_ASLDLINK_FLAGS) +DEFINE GCC5_IA32_X64_DLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_FLAGS) -flto +DEFINE GCC5_IA32_DLINK2_FLAGS = DEF(GCC49_IA32_DLINK2_FLAGS) +DEFINE GCC5_X64_DLINK_FLAGS = DEF(GCC49_X64_DLINK_FLAGS) +DEFINE GCC5_X64_DLINK2_FLAGS = DEF(GCC49_X64_DLINK2_FLAGS) +DEFINE GCC5_ASM_FLAGS = DEF(GCC49_ASM_FLAGS) +DEFINE GCC5_ARM_ASM_FLAGS = DEF(GCC49_ARM_ASM_FLAGS) +DEFINE GCC5_AARCH64_ASM_FLAGS = DEF(GCC49_AARCH64_ASM_FLAGS) +DEFINE GCC5_ARM_CC_FLAGS = DEF(GCC49_ARM_CC_FLAGS) +DEFINE GCC5_AARCH64_CC_FLAGS = DEF(GCC49_AARCH64_CC_FLAGS) +DEFINE GCC5_AARCH64_CC_XIPFLAGS = DEF(GCC49_AARCH64_CC_XIPFLAGS) +DEFINE GCC5_ARM_DLINK_FLAGS = DEF(GCC49_ARM_DLINK_FLAGS) -flto +DEFINE GCC5_ARM_DLINK2_FLAGS = DEF(GCC49_ARM_DLINK2_FLAGS) +DEFINE GCC5_AARCH64_DLINK_FLAGS = DEF(GCC49_AARCH64_DLINK_FLAGS) -flto +DEFINE GCC5_AARCH64_DLINK2_FLAGS = DEF(GCC49_AARCH64_DLINK2_FLAGS) +DEFINE GCC5_ARM_ASLDLINK_FLAGS = DEF(GCC49_ARM_ASLDLINK_FLAGS) +DEFINE GCC5_AARCH64_ASLDLINK_FLAGS = DEF(GCC49_AARCH64_ASLDLINK_FLAGS) + #################################################################################### # # Unix GCC And Intel Linux ACPI Compiler @@ -5186,6 +5210,140 @@ RELEASE_GCC49_AARCH64_DLINK_FLAGS = DEF(GCC49_AARCH64_DLINK_FLAGS) #################################################################################### # +# GCC 5 - This configuration is used to compile under Linux to produce +# PE/COFF binaries using GCC 5 +# +#################################################################################### +*_GCC5_*_*_FAMILY = GCC + +*_GCC5_*_MAKE_PATH = DEF(GCC5_IA32_PREFIX)make +*_GCC5_*_*_DLL = ENV(GCC5_DLL) +*_GCC5_*_ASL_PATH = DEF(UNIX_IASL_BIN) + +*_GCC5_*_PP_FLAGS = DEF(GCC_PP_FLAGS) +*_GCC5_*_ASLPP_FLAGS = DEF(GCC_ASLPP_FLAGS) +*_GCC5_*_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) +*_GCC5_*_VFRPP_FLAGS = DEF(GCC_VFRPP_FLAGS) +*_GCC5_*_APP_FLAGS = +*_GCC5_*_ASL_FLAGS = DEF(IASL_FLAGS) +*_GCC5_*_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS) + +################## +# GCC5 IA32 definitions +################## +*_GCC5_IA32_OBJCOPY_PATH = DEF(GCC5_IA32_PREFIX)objcopy +*_GCC5_IA32_CC_PATH = DEF(GCC5_IA32_PREFIX)gcc +*_GCC5_IA32_SLINK_PATH = DEF(GCC5_IA32_PREFIX)gcc-ar +*_GCC5_IA32_DLINK_PATH = DEF(GCC5_IA32_PREFIX)gcc +*_GCC5_IA32_ASLDLINK_PATH = DEF(GCC5_IA32_PREFIX)gcc +*_GCC5_IA32_ASM_PATH = DEF(GCC5_IA32_PREFIX)gcc +*_GCC5_IA32_PP_PATH = DEF(GCC5_IA32_PREFIX)gcc +*_GCC5_IA32_VFRPP_PATH = DEF(GCC5_IA32_PREFIX)gcc +*_GCC5_IA32_ASLCC_PATH = DEF(GCC5_IA32_PREFIX)gcc +*_GCC5_IA32_ASLPP_PATH = DEF(GCC5_IA32_PREFIX)gcc +*_GCC5_IA32_RC_PATH = DEF(GCC5_IA32_PREFIX)objcopy + +*_GCC5_IA32_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m32 -fno-lto +*_GCC5_IA32_ASLDLINK_FLAGS = DEF(GCC5_IA32_X64_ASLDLINK_FLAGS) -Wl,-m,elf_i386 +*_GCC5_IA32_ASM_FLAGS = DEF(GCC5_ASM_FLAGS) -m32 -march=i386 +*_GCC5_IA32_DLINK_FLAGS = DEF(GCC5_IA32_X64_DLINK_FLAGS) -Os -Wl,-m,elf_i386,--oformat=elf32-i386 +*_GCC5_IA32_DLINK2_FLAGS = DEF(GCC5_IA32_DLINK2_FLAGS) +*_GCC5_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS) +*_GCC5_IA32_OBJCOPY_FLAGS = +*_GCC5_IA32_NASM_FLAGS = -f elf32 + + DEBUG_GCC5_IA32_CC_FLAGS = DEF(GCC5_IA32_CC_FLAGS) -Os +RELEASE_GCC5_IA32_CC_FLAGS = DEF(GCC5_IA32_CC_FLAGS) -Os -Wno-unused-but-set-variable + +################## +# GCC5 X64 definitions +################## +*_GCC5_X64_OBJCOPY_PATH = DEF(GCC5_X64_PREFIX)objcopy +*_GCC5_X64_CC_PATH = DEF(GCC5_X64_PREFIX)gcc +*_GCC5_X64_SLINK_PATH = DEF(GCC5_X64_PREFIX)gcc-ar +*_GCC5_X64_DLINK_PATH = DEF(GCC5_X64_PREFIX)gcc +*_GCC5_X64_ASLDLINK_PATH = DEF(GCC5_X64_PREFIX)gcc +*_GCC5_X64_ASM_PATH = DEF(GCC5_X64_PREFIX)gcc +*_GCC5_X64_PP_PATH = DEF(GCC5_X64_PREFIX)gcc +*_GCC5_X64_VFRPP_PATH = DEF(GCC5_X64_PREFIX)gcc +*_GCC5_X64_ASLCC_PATH = DEF(GCC5_X64_PREFIX)gcc +*_GCC5_X64_ASLPP_PATH = DEF(GCC5_X64_PREFIX)gcc +*_GCC5_X64_RC_PATH = DEF(GCC5_X64_PREFIX)objcopy + +*_GCC5_X64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m64 -fno-lto +*_GCC5_X64_ASLDLINK_FLAGS = DEF(GCC5_IA32_X64_ASLDLINK_FLAGS) -Wl,-m,elf_x86_64 +*_GCC5_X64_ASM_FLAGS = DEF(GCC5_ASM_FLAGS) -m64 +*_GCC5_X64_DLINK_FLAGS = DEF(GCC5_X64_DLINK_FLAGS) -Os +*_GCC5_X64_DLINK2_FLAGS = DEF(GCC5_X64_DLINK2_FLAGS) +*_GCC5_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS) +*_GCC5_X64_OBJCOPY_FLAGS = +*_GCC5_X64_NASM_FLAGS = -f elf64 + + DEBUG_GCC5_X64_CC_FLAGS = DEF(GCC5_X64_CC_FLAGS) +RELEASE_GCC5_X64_CC_FLAGS = DEF(GCC5_X64_CC_FLAGS) -Wno-unused-but-set-variable + +################## +# GCC5 ARM definitions +################## +*_GCC5_ARM_CC_PATH = ENV(GCC5_ARM_PREFIX)gcc +*_GCC5_ARM_SLINK_PATH = ENV(GCC5_ARM_PREFIX)gcc-ar +*_GCC5_ARM_DLINK_PATH = ENV(GCC5_ARM_PREFIX)gcc +*_GCC5_ARM_ASLDLINK_PATH = ENV(GCC5_ARM_PREFIX)gcc +*_GCC5_ARM_ASM_PATH = ENV(GCC5_ARM_PREFIX)gcc +*_GCC5_ARM_PP_PATH = ENV(GCC5_ARM_PREFIX)gcc +*_GCC5_ARM_VFRPP_PATH = ENV(GCC5_ARM_PREFIX)gcc +*_GCC5_ARM_ASLCC_PATH = ENV(GCC5_ARM_PREFIX)gcc +*_GCC5_ARM_ASLPP_PATH = ENV(GCC5_ARM_PREFIX)gcc +*_GCC5_ARM_RC_PATH = ENV(GCC5_ARM_PREFIX)objcopy + +*_GCC5_ARM_ARCHCC_FLAGS = -mthumb +*_GCC5_ARM_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -fno-lto +*_GCC5_ARM_ASLDLINK_FLAGS = DEF(GCC5_ARM_ASLDLINK_FLAGS) +*_GCC5_ARM_ASM_FLAGS = DEF(GCC5_ARM_ASM_FLAGS) +*_GCC5_ARM_DLINK2_FLAGS = DEF(GCC5_ARM_DLINK2_FLAGS) +*_GCC5_ARM_PLATFORM_FLAGS = -march=armv7-a +*_GCC5_ARM_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_PP_FLAGS) +*_GCC5_ARM_RC_FLAGS = DEF(GCC_ARM_RC_FLAGS) +*_GCC5_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_VFRPP_FLAGS) + + DEBUG_GCC5_ARM_CC_FLAGS = DEF(GCC5_ARM_CC_FLAGS) -O0 +RELEASE_GCC5_ARM_CC_FLAGS = DEF(GCC5_ARM_CC_FLAGS) -flto -Wno-unused-but-set-variable + + DEBUG_GCC5_ARM_DLINK_FLAGS = DEF(GCC5_ARM_DLINK_FLAGS) +RELEASE_GCC5_ARM_DLINK_FLAGS = DEF(GCC5_ARM_DLINK_FLAGS) -Os -L$(WORKSPACE)/ArmPkg/GccLto -llto-arm -Wl,-plugin-opt=-pass-through=-llto-arm + +################## +# GCC5 AARCH64 definitions +################## +*_GCC5_AARCH64_CC_PATH = ENV(GCC5_AARCH64_PREFIX)gcc +*_GCC5_AARCH64_SLINK_PATH = ENV(GCC5_AARCH64_PREFIX)gcc-ar +*_GCC5_AARCH64_DLINK_PATH = ENV(GCC5_AARCH64_PREFIX)gcc +*_GCC5_AARCH64_ASLDLINK_PATH = ENV(GCC5_AARCH64_PREFIX)gcc +*_GCC5_AARCH64_ASM_PATH = ENV(GCC5_AARCH64_PREFIX)gcc +*_GCC5_AARCH64_PP_PATH = ENV(GCC5_AARCH64_PREFIX)gcc +*_GCC5_AARCH64_VFRPP_PATH = ENV(GCC5_AARCH64_PREFIX)gcc +*_GCC5_AARCH64_ASLCC_PATH = ENV(GCC5_AARCH64_PREFIX)gcc +*_GCC5_AARCH64_ASLPP_PATH = ENV(GCC5_AARCH64_PREFIX)gcc +*_GCC5_AARCH64_RC_PATH = ENV(GCC5_AARCH64_PREFIX)objcopy + +*_GCC5_AARCH64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -fno-lto +*_GCC5_AARCH64_ASLDLINK_FLAGS = DEF(GCC5_AARCH64_ASLDLINK_FLAGS) +*_GCC5_AARCH64_ASM_FLAGS = DEF(GCC5_AARCH64_ASM_FLAGS) +*_GCC5_AARCH64_DLINK2_FLAGS = DEF(GCC5_AARCH64_DLINK2_FLAGS) +*_GCC5_AARCH64_PLATFORM_FLAGS = +*_GCC5_AARCH64_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_PP_FLAGS) +*_GCC5_AARCH64_RC_FLAGS = DEF(GCC_AARCH64_RC_FLAGS) +*_GCC5_AARCH64_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_VFRPP_FLAGS) +*_GCC5_AARCH64_CC_XIPFLAGS = DEF(GCC5_AARCH64_CC_XIPFLAGS) + + DEBUG_GCC5_AARCH64_CC_FLAGS = DEF(GCC5_AARCH64_CC_FLAGS) -O0 -mcmodel=small + DEBUG_GCC5_AARCH64_DLINK_FLAGS = DEF(GCC5_AARCH64_DLINK_FLAGS) -z common-page-size=0x1000 + +RELEASE_GCC5_AARCH64_CC_FLAGS = DEF(GCC5_AARCH64_CC_FLAGS) -flto -Wno-unused-but-set-variable -mcmodel=tiny +RELEASE_GCC5_AARCH64_DLINK_FLAGS = DEF(GCC5_AARCH64_DLINK_FLAGS) -Os -L$(WORKSPACE)/ArmPkg/GccLto -llto-aarch64 -Wl,-plugin-opt=-pass-through=-llto-aarch64 + +#################################################################################### +# # CLANG35 - This configuration is used to compile under Linux to produce # PE/COFF binaries using the clang compiler and assembler (v3.5 and up) # and GNU linker