Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S939924AbcKOPnw convert rfc822-to-8bit (ORCPT ); Tue, 15 Nov 2016 10:43:52 -0500 Received: from mga01.intel.com ([192.55.52.88]:53910 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933791AbcKOPnr (ORCPT ); Tue, 15 Nov 2016 10:43:47 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,495,1473145200"; d="scan'208";a="1059764666" From: "Moore, Robert" To: Al Stone , "linux-acpi@vger.kernel.org" , "devel@acpica.org" , "linux-kernel@vger.kernel.org" CC: "Rafael J . Wysocki" , Len Brown , "Zheng, Lv" Subject: RE: [PATCH] ACPI: allow compilation with bare metal compilers Thread-Topic: [PATCH] ACPI: allow compilation with bare metal compilers Thread-Index: AQHSPswWtK7wImfbvEymlosKA6VKnKDaLktg Date: Tue, 15 Nov 2016 15:43:46 +0000 Message-ID: <94F2FBAB4432B54E8AACC7DFDE6C92E37E51C7A4@ORSMSX110.amr.corp.intel.com> References: <1479164926-1733-1-git-send-email-ahs3@redhat.com> In-Reply-To: <1479164926-1733-1-git-send-email-ahs3@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.22.254.140] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3608 Lines: 85 The design for all of this is as follows: 1) OS-dependent includes 2) Compiler-specific includes 3) acenv.h is the master file that pulls in the correct headers (one compiler, and one OS) So, I think I see a couple of possible solutions for you: 1) If you are using GCC, the __GNUC__ symbol should already be defined. 2) If "aclinux.h" works for you, we can either add a conditional case that would apply to your environment, or: 2a) You could define _LINUX in your gcc invocations. Because ACPICA supports many different environments, we don't want to have a "default" case which in a sense would only be an attempt to guess what the user intended. We want to have a clear error that tells the user that something important needs to be done before the code can be compiled. Bob > -----Original Message----- > From: Al Stone [mailto:ahs3@redhat.com] > Sent: Monday, November 14, 2016 3:09 PM > To: linux-acpi@vger.kernel.org; devel@acpica.org; linux- > kernel@vger.kernel.org > Cc: Al Stone ; Rafael J . Wysocki ; > Len Brown ; Moore, Robert ; > Zheng, Lv > Subject: [PATCH] ACPI: allow compilation with bare metal compilers > > The ACPICA subsystem of the ACPI driver sets up a compilation > environment for itself, adding in multiple typedefs unique to ACPICA > that depend on where ACPICA will be used. > > The vast majority of such environments (Linux, QNX, ...) have an > environment defined by the acenv.h header file. When using a Linaro > compiler [1] specifically built to be used in an embedded environment > with perhaps a kernel and an init process as the only things running, > there is no environment defined for ACPICA so the typedefs it needs are > not set up, causing compilation to fail badly unless ACPI is completely > disabled. > Since ACPI is enabled in the default config for the kernel, the > compilation failure is fairly obvious. > > This may not be the optimal solution, but add in to the ACPI header file > include/acpi/platform/acenv.h a default so that if GCC is being used, > and all else fails, assume that we are going to be in a Linux-like > environment and re-use the environment definition for Linux. This > allows us to build a kernel using this compiler [1] with or without > ACPI. > > [1] > https://releases.linaro.org/components/toolchain/binaries/latest/aarch64 > -elff/gcc-linaro-6.1.1-2016-08-x86_64_aarch64-elf.tar.xz > > Signed-off-by: Al Stone > Cc: Rafael J. Wysocki > Cc: Len Brown > Cc: Robert Moore > Cc: Lv Zheng > --- > include/acpi/platform/acenv.h | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/include/acpi/platform/acenv.h > b/include/acpi/platform/acenv.h index 34cce72..cdd1cd6 100644 > --- a/include/acpi/platform/acenv.h > +++ b/include/acpi/platform/acenv.h > @@ -234,6 +234,21 @@ > #elif defined(_AED_EFI) || defined(_GNU_EFI) || defined(_EDK2_EFI) > #include "acefi.h" > > +/* > + * Up to this point, we've been looking for specific environments. In > + * some cases, there is no environment, and we're just working on bare > + * metal. However, since we're compiling the Linux kernel, let's just > + * pretend we're in a Linux environment. > + */ > +#elif defined(__GNUC__) && !defined(__INTEL_COMPILER) #if > +!defined(_LINUX) #define _LINUX #endif #if !defined(__linux__) #define > +__linux__ #endif #include > + > #else > > /* Unknown environment */ > -- > 2.10.2