public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Chris Co <Christopher.Co@microsoft.com>
To: "Gao, Liming" <liming.gao@intel.com>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	Leif Lindholm <leif.lindholm@linaro.org>,
	Charles Garcia-Tobin <Charles.Garcia-Tobin@arm.com>
Subject: Re: [PATCH v2 1/1] BaseTools/tools_def: Add GCC49xASL Toolchain support
Date: Mon, 25 Jun 2018 18:21:27 +0000	[thread overview]
Message-ID: <DM5PR2101MB11285765EC9702660CCC7678944A0@DM5PR2101MB1128.namprd21.prod.outlook.com> (raw)
In-Reply-To: <4A89E2EF3DFEDB4C8BFDE51014F606A14E29D7EF@SHSMSX104.ccr.corp.intel.com>



> -----Original Message-----
> From: Gao, Liming <liming.gao@intel.com>
> Sent: Monday, June 25, 2018 1:15 AM
> To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> Cc: Chris Co <Christopher.Co@microsoft.com>; edk2-devel@lists.01.org; Leif
> Lindholm <leif.lindholm@linaro.org>; Charles Garcia-Tobin <Charles.Garcia-
> Tobin@arm.com>
> Subject: RE: [edk2] [PATCH v2 1/1] BaseTools/tools_def: Add GCC49xASL
> Toolchain support
> 
> Ard:
>   The commit log message says that the Microsoft ASL compiler is necessary
> to expose Windows-specific Pin Function Config Descriptors on Windows IoT
> devices.
> 

I'll add a bit more detail here.  Prior to the inclusion of Pin Function Descriptors in the 6.2 spec, we added a vendor-specific descriptor through the MSFT ASL compiler with /MsftInternal flag which essentially implemented the functionality of the proposed Pin Function Config Descriptors so that pins could be exposed to user-mode applications.  Now that the spec is updated and the standard ASL compiler supports the new descriptors, I wanted to move us to the standardized ASL compiler but was disappointed to find out that Windows has not been enlightened to process the Pin Function Config Descriptor yet.  So we still need this fall back to the MSFT ASL compiler with /MsftInternal flag while I work with the ACPI team here to implement these descriptors.  My hope is that in the next year I can move us back to the standard ASL compiler.

>   Besides, there is no ways to configure tool chain with the parameter in build
> command. But, tool chain ASL path and flag can be overridden in
> [BuildOptions] of platform DSC file. Another way is to provide the generic
> DSC file to include MS ASL option setting in [BuildOptions] section. Platform
> DSC can decide to include it or not.
> 

Since the MS ASL really only impacts Windows IoT boards, platform dsc overrides on the Windows IoT ARM boards might be a better option here.

> Thanks
> Liming
> >-----Original Message-----
> >From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org]
> >Sent: Monday, June 25, 2018 3:34 PM
> >To: Gao, Liming <liming.gao@intel.com>
> >Cc: Chris Co <Christopher.Co@microsoft.com>; edk2-devel@lists.01.org;
> >Leif Lindholm <leif.lindholm@linaro.org>; Charles Garcia-Tobin
> ><Charles.Garcia- Tobin@arm.com>
> >Subject: Re: [edk2] [PATCH v2 1/1] BaseTools/tools_def: Add GCC49xASL
> >Toolchain support
> >
> >(+ Charles)
> >
> >On 25 June 2018 at 03:38, Gao, Liming <liming.gao@intel.com> wrote:
> >> Chris:
> >>    GCC 4.9 targeting arm-none-eabi. This GCC4.9 should run in Windows
> OS.
> >So, could you give some info where windows GCC49 is from.
> >>

We get Windows GCC49 from linaro: https://releases.linaro.org/archive/14.09/components/toolchain/binaries/gcc-linaro-arm-none-eabi-4.9-2014.09_win32.zip
Make comes from MinGW

> >
> >OK, so first of all, could you elaborate on why we need a different ASL
> >compiler? We have spent the past 5 years in conference calls and
> >meeting rooms to standardize ACPI on ARM, so I am rather disappointed
> >that we have this discrepancy.
> >
> >Then, could you explain why you chose GCC49? We have GCC5 now as well,
> >which enables LTO and generally results in smaller code. Also, is there
> >any way we could parameterize the existing GCCx toolchains to allow a
> >different ASL compiler to be selected?
> >

We are using GCC49 because this was the last GCC build for Windows as exe we could find.  We use these tools to build using GCC on Windows: https://releases.linaro.org/archive/14.09/components/toolchain/binaries/gcc-linaro-arm-none-eabi-4.9-2014.09_win32.zip
I would love to use GCC5 if toolchain exes are readily available for Windows.

There are two main deltas between existing GCCx toolchains and the one I am adding here: ASL compiler delta and echo/noop delta.
The ASL delta was discussed above.  We have one more delta: (*_GCC49xASL_ARM_OBJCOPY_PATH         = noop, *_GCC49xASL_ARM_SYMRENAME_PATH       = noop).  On Linux, these are set to `echo` which effectively no-ops them.  On Windows, echo behaves differently and unfortunately there's no clean Windows command to noop, so we made a noop.exe program and added it to our build tools.  If we can find a way to parameterize the existing GCCx toolchain to select command based on build environment, then I think this patch can be dropped in favor of reusing the existing GCCx chain.

> >Thanks,
> >Ard.
> >
> >
> >>>-----Original Message-----
> >>>From: Chris Co [mailto:Christopher.Co@microsoft.com]
> >>>Sent: Saturday, June 23, 2018 8:58 AM
> >>>To: edk2-devel@lists.01.org
> >>>Cc: Zhu, Yonghong <yonghong.zhu@intel.com>; Gao, Liming
> >>><liming.gao@intel.com>; Leif Lindholm <leif.lindholm@linaro.org>
> >>>Subject: [PATCH v2 1/1] BaseTools/tools_def: Add GCC49xASL Toolchain
> >>>support
> >>>
> >>>From: Chris Co <chrco@microsoft.com>
> >>>
> >>>This patch adds a build option for invoking GCC49 ARM cross compiler
> >>>in the Windows environment to build firmware for Windows 10 IoT
> >>>devices using NXP i.MX6 and i.MX7 SoCs.
> >>>
> >>>In addition, this build option targets the Microsoft ASL compiler
> >>>instead of iasl.  The Microsoft ASL compiler is necessary to expose
> >>>Windows-specific Pin Function Config Descriptors on Windows IoT
> >>>devices.
> >>>
> >>>Contributed-under: TianoCore Contribution Agreement 1.1
> >>>Signed-off-by: Christopher Co <christopher.co@microsoft.com>
> >>>Cc: Yonghong Zhu <yonghong.zhu@intel.com>
> >>>Cc: Liming Gao <liming.gao@intel.com>
> >>>Cc: Leif Lindholm <leif.lindholm@linaro.org>
> >>>---
> >>> BaseTools/Conf/tools_def.template | 61 ++++++++++++++++++++
> >>> 1 file changed, 61 insertions(+)
> >>>
> >>>diff --git a/BaseTools/Conf/tools_def.template
> >>>b/BaseTools/Conf/tools_def.template
> >>>index 11a79029b890..f7a375ebaf1e 100755
> >>>--- a/BaseTools/Conf/tools_def.template
> >>>+++ b/BaseTools/Conf/tools_def.template
> >>>@@ -393,6 +393,12 @@ DEFINE DTC_BIN                 = ENV(DTC_PREFIX)dtc
> >>> #                             Required to build platforms or ACPI tables:
> >>> #                               Intel(r) ACPI Compiler from
> >>> #
> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Facpica.
> org%2Fdownloads&amp;data=02%7C01%7CChristopher.Co%40microsoft.co
> m%7C04783c7442e045028b6b08d5da73c590%7C72f988bf86f141af91ab2d7cd0
> 11db47%7C1%7C0%7C636655113127087911&amp;sdata=rekWKjfTCvj%2FCv
> mXi%2FtAcEOw7ooGMYGo6uyKoNCL0os%3D&amp;reserved=0
> >>>+#   GCC49xASL   -Windows-  Requires:
> >>>+#                             GCC 4.9 targeting arm-none-eabi
> >>>+#                        Optional:
> >>>+#                             Required to build platforms or ACPI tables:
> >>>+#                               Microsoft ASL ACPI Compiler (asl.exe) from Windows
> >WDK
> >>>+#
> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs.
> microsoft.com%2Fen-us%2Fwindows-
> &amp;data=02%7C01%7CChristopher.Co%40microsoft.com%7C04783c7442e
> 045028b6b08d5da73c590%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0
> %7C636655113127087911&amp;sdata=OEHhpxkYbIqRmALJeMDjp4RekTgVKG
> 6dlmdmYa3HNOg%3D&amp;reserved=0
> >>>hardware/drivers/download-the-wdk
> >>> #   GCC5        -Linux,Windows-  Requires:
> >>> #                             GCC 5 with LTO support, targeting x86_64-linux-gnu,
> >aarch64-
> >>>linux-gnu, or arm-linux-gnueabi
> >>> #                        Optional:
> >>>@@ -5466,6 +5472,61 @@ RELEASE_GCC49_AARCH64_DLINK_FLAGS  =
> >>>DEF(GCC49_AARCH64_DLINK_FLAGS)
> >>>   NOOPT_GCC49_AARCH64_DLINK_FLAGS  =
> >>>DEF(GCC49_AARCH64_DLINK_FLAGS) -z common-page-size=0x1000 -O0
> >>>   NOOPT_GCC49_AARCH64_DLINK_XIPFLAGS = -z common-page-
> size=0x20
> >-
> >>>O0
> >>>
> >>>+######################################################
> ##
> >##
> >>>##########################
> >>>+#
> >>>+# GCC49xASL - This configuration is used to compile under Windows to
> >>>produce
> >>>+#           PE/COFF binaries using GCC 4.9.
> >>>+#
> >>>+######################################################
> ##
> >##
> >>>##########################
> >>>+*_GCC49xASL_*_*_FAMILY               = GCC
> >>>+
> >>>+*_GCC49xASL_*_MAKE_PATH                    =
> DEF(GCC_HOST_PREFIX)make
> >>>+*_GCC49xASL_*_*_DLL                        = ENV(GCC49_DLL)
> >>>+*_GCC49xASL_*_ASL_PATH                     = DEF(WIN_ASL_BIN)
> >>>+
> >>>+*_GCC49xASL_*_PP_FLAGS                     = DEF(GCC_PP_FLAGS)
> >>>+*_GCC49xASL_*_ASLPP_FLAGS                  = DEF(GCC_ASLPP_FLAGS)
> >>>+*_GCC49xASL_*_ASLCC_FLAGS                  = DEF(GCC_ASLCC_FLAGS)
> >>>+*_GCC49xASL_*_VFRPP_FLAGS                  = DEF(GCC_VFRPP_FLAGS)
> >>>+*_GCC49xASL_*_APP_FLAGS                    =
> >>>+*_GCC49xASL_*_ASL_FLAGS                    = /MsftInternal
> >>>+*_GCC49xASL_*_ASL_OUTFLAGS                 = DEF(MS_ASL_OUTFLAGS)
> >>>+
> >>>+##################
> >>>+# GCC49xASL ARM definitions
> >>>+##################
> >>>+*_GCC49xASL_ARM_OBJCOPY_PATH         = noop
> >>>+*_GCC49xASL_ARM_CC_PATH              = ENV(GCC49_ARM_PREFIX)gcc
> >>>+*_GCC49xASL_ARM_SLINK_PATH           = ENV(GCC49_ARM_PREFIX)ar
> >>>+*_GCC49xASL_ARM_DLINK_PATH           = ENV(GCC49_ARM_PREFIX)gcc
> >>>+*_GCC49xASL_ARM_ASLDLINK_PATH        =
> ENV(GCC49_ARM_PREFIX)gcc
> >>>+*_GCC49xASL_ARM_ASM_PATH             = ENV(GCC49_ARM_PREFIX)gcc
> >>>+*_GCC49xASL_ARM_PP_PATH              = ENV(GCC49_ARM_PREFIX)gcc
> >>>+*_GCC49xASL_ARM_VFRPP_PATH           =
> ENV(GCC49_ARM_PREFIX)gcc
> >>>+*_GCC49xASL_ARM_ASLCC_PATH           = ENV(GCC49_ARM_PREFIX)gcc
> >>>+*_GCC49xASL_ARM_ASLPP_PATH           = ENV(GCC49_ARM_PREFIX)gcc
> >>>+*_GCC49xASL_ARM_RC_PATH              =
> >ENV(GCC49_ARM_PREFIX)objcopy
> >>>+*_GCC49xASL_ARM_SYMRENAME_PATH       = noop
> >>>+
> >>>+*_GCC49xASL_ARM_ARCHCC_FLAGS         = -mthumb
> >>>+*_GCC49xASL_ARM_PLATFORM_FLAGS       = -march=armv7-a
> >>>+
> >>>+*_GCC49xASL_ARM_ASLCC_FLAGS          = DEF(GCC_ASLCC_FLAGS)
> >>>+*_GCC49xASL_ARM_ASLDLINK_FLAGS       =
> >>>DEF(GCC49_ARM_ASLDLINK_FLAGS)
> >>>+*_GCC49xASL_ARM_ASM_FLAGS            =
> DEF(GCC49_ARM_ASM_FLAGS)
> >>>+*_GCC49xASL_ARM_DLINK_FLAGS          =
> >DEF(GCC49_ARM_DLINK_FLAGS)
> >>>+*_GCC49xASL_ARM_DLINK2_FLAGS         =
> >DEF(GCC49_ARM_DLINK2_FLAGS)
> >>>+*_GCC49xASL_ARM_DTCPP_FLAGS          = DEF(GCC_DTCPP_FLAGS)
> >>>+*_GCC49xASL_ARM_PLATFORM_FLAGS       = -march=armv7-a
> >>>+*_GCC49xASL_ARM_PP_FLAGS             = $(ARCHCC_FLAGS)
> >>>$(PLATFORM_FLAGS) DEF(GCC_PP_FLAGS)
> >>>+*_GCC49xASL_ARM_RC_FLAGS             = DEF(GCC_ARM_RC_FLAGS)
> >>>+*_GCC49xASL_ARM_VFRPP_FLAGS          = $(ARCHCC_FLAGS)
> >>>$(PLATFORM_FLAGS) DEF(GCC_VFRPP_FLAGS)
> >>>+*_GCC49xASL_ARM_CC_XIPFLAGS          =
> DEF(GCC49_ARM_CC_XIPFLAGS)
> >>>+
> >>>+  DEBUG_GCC49xASL_ARM_CC_FLAGS       =
> DEF(GCC49_ARM_CC_FLAGS)
> >-
> >>>O0
> >>>+RELEASE_GCC49xASL_ARM_CC_FLAGS       =
> DEF(GCC49_ARM_CC_FLAGS)
> >-
> >>>Wno-unused-but-set-variable -Wno-unused-const-variable
> >>>+  NOOPT_GCC49xASL_ARM_CC_FLAGS       =
> DEF(GCC49_ARM_CC_FLAGS)
> >-
> >>>O0
> >>>+
> >>>
> >>>#######################################################
> ##
> >##
> >>>#########################
> >>> #
> >>> # GCC 5 - This configuration is used to compile under Linux to
> >>>produce
> >>>--
> >>>2.16.2.gvfs.1.33.gf5370f1
> >>
> >> _______________________________________________
> >> edk2-devel mailing list
> >> edk2-devel@lists.01.org
> >> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flist
> >> s.01.org%2Fmailman%2Flistinfo%2Fedk2-
> devel&amp;data=02%7C01%7CChristo
> >>
> pher.Co%40microsoft.com%7C04783c7442e045028b6b08d5da73c590%7C72f9
> 88bf
> >>
> 86f141af91ab2d7cd011db47%7C1%7C0%7C636655113127087911&amp;sdata=
> WLQCR
> >> O6Olja0J14OBnX1PSsdXnTYEXDMki9fN7CuAHs%3D&amp;reserved=0

  reply	other threads:[~2018-06-25 18:21 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-23  0:57 [PATCH v2 0/1] BaseTools/tools_def: Add GCC49xASL Toolchain support Chris Co
2018-06-23  0:57 ` [PATCH v2 1/1] " Chris Co
2018-06-25  1:38   ` Gao, Liming
2018-06-25  7:33     ` Ard Biesheuvel
2018-06-25  8:15       ` Gao, Liming
2018-06-25 18:21         ` Chris Co [this message]
2018-06-25 19:10           ` Leif Lindholm
2018-06-25 19:50             ` Chris Co
2018-06-26  4:40           ` Gao, Liming
2018-06-26  8:22             ` Ard Biesheuvel
2018-06-26 18:42               ` Chris Co
2018-06-26 18:51                 ` Ard Biesheuvel
2018-06-27  4:14                   ` Chris Co
2018-06-27  5:07                     ` Ard Biesheuvel
2018-06-29  3:49                       ` Chris Co

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DM5PR2101MB11285765EC9702660CCC7678944A0@DM5PR2101MB1128.namprd21.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox