Message ID | 20240807-macos-build-support-v1-6-4cd1ded85694@samsung.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Enable build system on macOS hosts | expand |
On Tue, Aug 6, 2024 at 7:10 PM Daniel Gomez via B4 Relay <devnull+da.gomez.samsung.com@kernel.org> wrote: > > From: Daniel Gomez <da.gomez@samsung.com> > > The genheaders requires the bitsperlong.h and posix_types.h headers. > To ensure these headers are found during compilation on macOS hosts, > add usr/include to HOST_EXTRACFLAGS in the genheaders Makefile. This > adjustment allows the compiler to locate all necessary headers when they > are not available by default on macOS. > > Signed-off-by: Daniel Gomez <da.gomez@samsung.com> > --- > scripts/selinux/genheaders/Makefile | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) This patch, and 7/12, look fine to me. I can pull them into the SELinux tree now, or would you prefer them to go via a different tree?
On Wed, Aug 07, 2024 at 01:09:20AM +0200, Daniel Gomez via B4 Relay wrote: > From: Daniel Gomez <da.gomez@samsung.com> > > The genheaders requires the bitsperlong.h and posix_types.h headers. > To ensure these headers are found during compilation on macOS hosts, > add usr/include to HOST_EXTRACFLAGS in the genheaders Makefile. This > adjustment allows the compiler to locate all necessary headers when they > are not available by default on macOS. > > Signed-off-by: Daniel Gomez <da.gomez@samsung.com> > --- > scripts/selinux/genheaders/Makefile | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/scripts/selinux/genheaders/Makefile b/scripts/selinux/genheaders/Makefile > index 1faf7f07e8db..017149c90f8e 100644 > --- a/scripts/selinux/genheaders/Makefile > +++ b/scripts/selinux/genheaders/Makefile > @@ -2,4 +2,5 @@ > hostprogs-always-y += genheaders > HOST_EXTRACFLAGS += \ > -I$(srctree)/include/uapi -I$(srctree)/include \ > - -I$(srctree)/security/selinux/include > + -I$(srctree)/security/selinux/include \ > + -I$(srctree)/usr/include 'make headers' composes the UAPI header tree in $(objtree)/usr/include. So, if you build out-of-source, -I$(srctree)/usr/include will not match. Just remove the '$(srctree)/' prefix as '$(objtree)/' is always '.'. But I am suspecting that this break cross-building. Kind regards, Nicolas
On Thu, Aug 8, 2024 at 12:39 AM Nicolas Schier <nicolas@fjasle.eu> wrote: > > On Wed, Aug 07, 2024 at 01:09:20AM +0200, Daniel Gomez via B4 Relay wrote: > > From: Daniel Gomez <da.gomez@samsung.com> > > > > The genheaders requires the bitsperlong.h and posix_types.h headers. > > To ensure these headers are found during compilation on macOS hosts, > > add usr/include to HOST_EXTRACFLAGS in the genheaders Makefile. This > > adjustment allows the compiler to locate all necessary headers when they > > are not available by default on macOS. > > > > Signed-off-by: Daniel Gomez <da.gomez@samsung.com> > > --- > > scripts/selinux/genheaders/Makefile | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/scripts/selinux/genheaders/Makefile b/scripts/selinux/genheaders/Makefile > > index 1faf7f07e8db..017149c90f8e 100644 > > --- a/scripts/selinux/genheaders/Makefile > > +++ b/scripts/selinux/genheaders/Makefile > > @@ -2,4 +2,5 @@ > > hostprogs-always-y += genheaders > > HOST_EXTRACFLAGS += \ > > -I$(srctree)/include/uapi -I$(srctree)/include \ > > - -I$(srctree)/security/selinux/include > > + -I$(srctree)/security/selinux/include \ > > + -I$(srctree)/usr/include > > 'make headers' composes the UAPI header tree in $(objtree)/usr/include. > So, if you build out-of-source, -I$(srctree)/usr/include will not match. > Just remove the '$(srctree)/' prefix as '$(objtree)/' is always '.'. Right. > But I am suspecting that this break cross-building. Right. We cannot do this. -- Best Regards Masahiro Yamada
On Wed, Aug 7, 2024 at 11:45 AM Masahiro Yamada <masahiroy@kernel.org> wrote: > > On Thu, Aug 8, 2024 at 12:39 AM Nicolas Schier <nicolas@fjasle.eu> wrote: > > > > On Wed, Aug 07, 2024 at 01:09:20AM +0200, Daniel Gomez via B4 Relay wrote: > > > From: Daniel Gomez <da.gomez@samsung.com> > > > > > > The genheaders requires the bitsperlong.h and posix_types.h headers. > > > To ensure these headers are found during compilation on macOS hosts, > > > add usr/include to HOST_EXTRACFLAGS in the genheaders Makefile. This > > > adjustment allows the compiler to locate all necessary headers when they > > > are not available by default on macOS. > > > > > > Signed-off-by: Daniel Gomez <da.gomez@samsung.com> > > > --- > > > scripts/selinux/genheaders/Makefile | 3 ++- > > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > > > diff --git a/scripts/selinux/genheaders/Makefile b/scripts/selinux/genheaders/Makefile > > > index 1faf7f07e8db..017149c90f8e 100644 > > > --- a/scripts/selinux/genheaders/Makefile > > > +++ b/scripts/selinux/genheaders/Makefile > > > @@ -2,4 +2,5 @@ > > > hostprogs-always-y += genheaders > > > HOST_EXTRACFLAGS += \ > > > -I$(srctree)/include/uapi -I$(srctree)/include \ > > > - -I$(srctree)/security/selinux/include > > > + -I$(srctree)/security/selinux/include \ > > > + -I$(srctree)/usr/include > > > > 'make headers' composes the UAPI header tree in $(objtree)/usr/include. > > So, if you build out-of-source, -I$(srctree)/usr/include will not match. > > Just remove the '$(srctree)/' prefix as '$(objtree)/' is always '.'. > > Right. > > > But I am suspecting that this break cross-building. > > Right. > > We cannot do this. Thanks for the review and catching this :)
On Wed, Aug 07, 2024 at 05:38:28PM GMT, Nicolas Schier wrote: > On Wed, Aug 07, 2024 at 01:09:20AM +0200, Daniel Gomez via B4 Relay wrote: > > From: Daniel Gomez <da.gomez@samsung.com> > > > > The genheaders requires the bitsperlong.h and posix_types.h headers. > > To ensure these headers are found during compilation on macOS hosts, > > add usr/include to HOST_EXTRACFLAGS in the genheaders Makefile. This > > adjustment allows the compiler to locate all necessary headers when they > > are not available by default on macOS. > > > > Signed-off-by: Daniel Gomez <da.gomez@samsung.com> > > --- > > scripts/selinux/genheaders/Makefile | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/scripts/selinux/genheaders/Makefile b/scripts/selinux/genheaders/Makefile > > index 1faf7f07e8db..017149c90f8e 100644 > > --- a/scripts/selinux/genheaders/Makefile > > +++ b/scripts/selinux/genheaders/Makefile > > @@ -2,4 +2,5 @@ > > hostprogs-always-y += genheaders > > HOST_EXTRACFLAGS += \ > > -I$(srctree)/include/uapi -I$(srctree)/include \ > > - -I$(srctree)/security/selinux/include > > + -I$(srctree)/security/selinux/include \ > > + -I$(srctree)/usr/include > > 'make headers' composes the UAPI header tree in $(objtree)/usr/include. > So, if you build out-of-source, -I$(srctree)/usr/include will not match. > Just remove the '$(srctree)/' prefix as '$(objtree)/' is always '.'. The 'headers' target also deploys installs the headers in arch/$(SRCARCH)/ include/uapi, so I've updated selinux/genheaders/Makefile to the following: diff --git a/scripts/selinux/genheaders/Makefile b/scripts/selinux/genheaders/Makefile index 1faf7f07e8db..ae1f195b6f67 100644 --- a/scripts/selinux/genheaders/Makefile +++ b/scripts/selinux/genheaders/Makefile @@ -2,4 +2,6 @@ hostprogs-always-y += genheaders HOST_EXTRACFLAGS += \ -I$(srctree)/include/uapi -I$(srctree)/include \ - -I$(srctree)/security/selinux/include + -I$(srctree)/security/selinux/include \ + -I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \ + -I$(objtree)/arch/$(SRCARCH)/include/uapi The include path -I$(objtree)/arch/$(SRCARCH)/include/generated/uapi enables locating the asm/types.h. The include path -I$(objtree)/arch/$(SRCARCH)/include/uapi enables locating the asm/bitsperlong.h and asm/posix_types.h. > > But I am suspecting that this break cross-building. I’ve tested this change on macOS with ARCH=arm64, as well as on Debian with ARCH=arm64 and ARCH=x86_64. Is it enough to just confirm that cross-building still works after this change? > > Kind regards, > Nicolas
Am Wed, Aug 07, 2024 at 09:41:00PM +0000 schrieb Daniel Gomez: > Date: Wed, 7 Aug 2024 21:41:00 +0000 > From: Daniel Gomez <da.gomez@samsung.com> > To: Nicolas Schier <nicolas@fjasle.eu> > CC: Masahiro Yamada <masahiroy@kernel.org>, Nathan Chancellor > <nathan@kernel.org>, Lucas De Marchi <lucas.demarchi@intel.com>, Thomas > Hellström <thomas.hellstrom@linux.intel.com>, Rodrigo Vivi > <rodrigo.vivi@intel.com>, Maarten Lankhorst > <maarten.lankhorst@linux.intel.com>, Maxime Ripard <mripard@kernel.org>, > Thomas Zimmermann <tzimmermann@suse.de>, David Airlie <airlied@gmail.com>, > Daniel Vetter <daniel@ffwll.ch>, William Hubbs <w.d.hubbs@gmail.com>, > Chris Brannon <chris@the-brannons.com>, Kirk Reiser <kirk@reisers.ca>, > Samuel Thibault <samuel.thibault@ens-lyon.org>, Paul Moore > <paul@paul-moore.com>, Stephen Smalley <stephen.smalley.work@gmail.com>, > Ondrej Mosnacek <omosnace@redhat.com>, Catalin Marinas > <catalin.marinas@arm.com>, Will Deacon <will@kernel.org>, Marc Zyngier > <maz@kernel.org>, Oliver Upton <oliver.upton@linux.dev>, James Morse > <james.morse@arm.com>, Suzuki K Poulose <suzuki.poulose@arm.com>, Zenghui > Yu <yuzenghui@huawei.com>, Greg Kroah-Hartman > <gregkh@linuxfoundation.org>, Jiri Slaby <jirislaby@kernel.org>, Nick > Desaulniers <ndesaulniers@google.com>, Bill Wendling <morbo@google.com>, > Justin Stitt <justinstitt@google.com>, "linux-kernel@vger.kernel.org" > <linux-kernel@vger.kernel.org>, "linux-kbuild@vger.kernel.org" > <linux-kbuild@vger.kernel.org>, "intel-xe@lists.freedesktop.org" > <intel-xe@lists.freedesktop.org>, "dri-devel@lists.freedesktop.org" > <dri-devel@lists.freedesktop.org>, "speakup@linux-speakup.org" > <speakup@linux-speakup.org>, "selinux@vger.kernel.org" > <selinux@vger.kernel.org>, "linux-arm-kernel@lists.infradead.org" > <linux-arm-kernel@lists.infradead.org>, "kvmarm@lists.linux.dev" > <kvmarm@lists.linux.dev>, "linux-serial@vger.kernel.org" > <linux-serial@vger.kernel.org>, "llvm@lists.linux.dev" > <llvm@lists.linux.dev>, Finn Behrens <me@kloenk.dev>, "Daniel Gomez > (Samsung)" <d+samsung@kruces.com>, "gost.dev@samsung.com" > <gost.dev@samsung.com> > Subject: Re: [PATCH 06/12] selinux/genheaders: include bitsperlong and > posix_types headers > Message-ID: <sbj3c3tlafewy2n4pylbnpb4gwylpnyxovdykfy3dhk2wqmpry@ekhhe3mgqnd6> > > On Wed, Aug 07, 2024 at 05:38:28PM GMT, Nicolas Schier wrote: > > On Wed, Aug 07, 2024 at 01:09:20AM +0200, Daniel Gomez via B4 Relay wrote: > > > From: Daniel Gomez <da.gomez@samsung.com> > > > > > > The genheaders requires the bitsperlong.h and posix_types.h headers. > > > To ensure these headers are found during compilation on macOS hosts, > > > add usr/include to HOST_EXTRACFLAGS in the genheaders Makefile. This > > > adjustment allows the compiler to locate all necessary headers when they > > > are not available by default on macOS. > > > > > > Signed-off-by: Daniel Gomez <da.gomez@samsung.com> > > > --- > > > scripts/selinux/genheaders/Makefile | 3 ++- > > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > > > diff --git a/scripts/selinux/genheaders/Makefile b/scripts/selinux/genheaders/Makefile > > > index 1faf7f07e8db..017149c90f8e 100644 > > > --- a/scripts/selinux/genheaders/Makefile > > > +++ b/scripts/selinux/genheaders/Makefile > > > @@ -2,4 +2,5 @@ > > > hostprogs-always-y += genheaders > > > HOST_EXTRACFLAGS += \ > > > -I$(srctree)/include/uapi -I$(srctree)/include \ > > > - -I$(srctree)/security/selinux/include > > > + -I$(srctree)/security/selinux/include \ > > > + -I$(srctree)/usr/include > > > > 'make headers' composes the UAPI header tree in $(objtree)/usr/include. > > So, if you build out-of-source, -I$(srctree)/usr/include will not match. > > Just remove the '$(srctree)/' prefix as '$(objtree)/' is always '.'. > > The 'headers' target also deploys installs the headers in arch/$(SRCARCH)/ > include/uapi, so I've updated selinux/genheaders/Makefile to the following: > > diff --git a/scripts/selinux/genheaders/Makefile b/scripts/selinux/genheaders/Makefile > index 1faf7f07e8db..ae1f195b6f67 100644 > --- a/scripts/selinux/genheaders/Makefile > +++ b/scripts/selinux/genheaders/Makefile > @@ -2,4 +2,6 @@ > hostprogs-always-y += genheaders > HOST_EXTRACFLAGS += \ > -I$(srctree)/include/uapi -I$(srctree)/include \ > - -I$(srctree)/security/selinux/include > + -I$(srctree)/security/selinux/include \ > + -I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \ > + -I$(objtree)/arch/$(SRCARCH)/include/uapi SRCARCH is not derived from the host but from $(ARCH) (cp. top-level Makefile), thus you must not use arch/$(SRCARCH)/include/* for building host progs as this breaks cross-building (e.g. consider build Linux for 32bit m68k on a arm64 host). > > The include path -I$(objtree)/arch/$(SRCARCH)/include/generated/uapi > enables locating the asm/types.h. > > The include path -I$(objtree)/arch/$(SRCARCH)/include/uapi enables > locating the asm/bitsperlong.h and asm/posix_types.h. > > > > > But I am suspecting that this break cross-building. > > I’ve tested this change on macOS with ARCH=arm64, as well as on Debian with > ARCH=arm64 and ARCH=x86_64. Is it enough to just confirm that cross-building > still works after this change? No, it isn't. asm/bitsperlong.h is probably similar (enough) for current 64-bit systems, but 32-bit platforms will have different versions. Anyway, we must not use target arch/platform-specific header files for host progs. If we do, it will break. You want to use arm64 specific header files for building your arm64 host progs, as MacOS does not provide these (thus, it's a missing build dependency). As this is not common (yet), such a build hack should be limited to MacOS/Darwin only to not accidentally break other platforms. (Do you also have MacOS/amd64 in mind?) As written elsewhere, another approach could be to create and maintain a Linux kernel dev kit for MacOS, that delivers (fetches, downloads, generates) all missing header files. Kind regards, Nicolas
diff --git a/scripts/selinux/genheaders/Makefile b/scripts/selinux/genheaders/Makefile index 1faf7f07e8db..017149c90f8e 100644 --- a/scripts/selinux/genheaders/Makefile +++ b/scripts/selinux/genheaders/Makefile @@ -2,4 +2,5 @@ hostprogs-always-y += genheaders HOST_EXTRACFLAGS += \ -I$(srctree)/include/uapi -I$(srctree)/include \ - -I$(srctree)/security/selinux/include + -I$(srctree)/security/selinux/include \ + -I$(srctree)/usr/include