Message ID | 20230116215751.633675-2-irogers@google.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | BPF |
Headers | show |
Series | [v2,1/2] tools/resolve_btfids: Install subcmd headers | expand |
On Mon, Jan 16, 2023 at 01:57:51PM -0800, Ian Rogers wrote: > HOSTCC is always wanted when building. Setting CC to HOSTCC happens > after tools/scripts/Makefile.include is included, meaning flags are > set assuming say CC is gcc, but then it can be later set to HOSTCC > which may be clang. tools/scripts/Makefile.include is needed for host > set up and common macros in objtool's Makefile. Rather than override > CC to HOSTCC, just pass CC as HOSTCC to Makefile.build, the libsubcmd > builds and the linkage step. This means the Makefiles don't see things > like CC changing and tool flag determination, and similar, work > properly. > > Also, clear the passed subdir as otherwise an outer build may break by > inadvertently passing an inappropriate value. > > Signed-off-by: Ian Rogers <irogers@google.com> lgtm did you try cross build and build with clang? jirka > --- > tools/bpf/resolve_btfids/Makefile | 17 +++++++---------- > 1 file changed, 7 insertions(+), 10 deletions(-) > > diff --git a/tools/bpf/resolve_btfids/Makefile b/tools/bpf/resolve_btfids/Makefile > index 76b737b2560d..515d87b32fb8 100644 > --- a/tools/bpf/resolve_btfids/Makefile > +++ b/tools/bpf/resolve_btfids/Makefile > @@ -18,14 +18,11 @@ else > endif > > # always use the host compiler > -AR = $(HOSTAR) > -CC = $(HOSTCC) > -LD = $(HOSTLD) > -ARCH = $(HOSTARCH) > +HOST_OVERRIDES := AR=$(HOSTAR) CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \ > + ARCH=$(HOSTARCH) EXTRA_CFLAGS="$(HOSTCFLAGS) $(KBUILD_HOSTCFLAGS)" > + > RM ?= rm > CROSS_COMPILE = > -CFLAGS := $(KBUILD_HOSTCFLAGS) > -LDFLAGS := $(KBUILD_HOSTLDFLAGS) > > OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/ > > @@ -56,12 +53,12 @@ $(OUTPUT) $(OUTPUT)/libsubcmd $(LIBBPF_OUT): > > $(SUBCMDOBJ): fixdep FORCE | $(OUTPUT)/libsubcmd > $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(SUBCMD_OUT) \ > - DESTDIR=$(SUBCMD_DESTDIR) prefix= \ > + DESTDIR=$(SUBCMD_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ > $(abspath $@) install_headers > > $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OUT) > $(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) OUTPUT=$(LIBBPF_OUT) \ > - DESTDIR=$(LIBBPF_DESTDIR) prefix= EXTRA_CFLAGS="$(CFLAGS)" \ > + DESTDIR=$(LIBBPF_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ > $(abspath $@) install_headers > > CFLAGS += -g \ > @@ -76,11 +73,11 @@ export srctree OUTPUT CFLAGS Q > include $(srctree)/tools/build/Makefile.include > > $(BINARY_IN): fixdep FORCE prepare | $(OUTPUT) > - $(Q)$(MAKE) $(build)=resolve_btfids > + $(Q)$(MAKE) $(build)=resolve_btfids $(HOST_OVERRIDES) > > $(BINARY): $(BPFOBJ) $(SUBCMDOBJ) $(BINARY_IN) > $(call msg,LINK,$@) > - $(Q)$(CC) $(BINARY_IN) $(LDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) > + $(Q)$(HOSTCC) $(BINARY_IN) $(KBUILD_HOSTLDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) > > clean_objects := $(wildcard $(OUTPUT)/*.o \ > $(OUTPUT)/.*.o.cmd \ > -- > 2.39.0.314.g84b9a713c41-goog >
On Tue, Jan 17, 2023 at 2:07 PM Jiri Olsa <olsajiri@gmail.com> wrote: > > On Mon, Jan 16, 2023 at 01:57:51PM -0800, Ian Rogers wrote: > > HOSTCC is always wanted when building. Setting CC to HOSTCC happens > > after tools/scripts/Makefile.include is included, meaning flags are > > set assuming say CC is gcc, but then it can be later set to HOSTCC > > which may be clang. tools/scripts/Makefile.include is needed for host > > set up and common macros in objtool's Makefile. Rather than override > > CC to HOSTCC, just pass CC as HOSTCC to Makefile.build, the libsubcmd > > builds and the linkage step. This means the Makefiles don't see things > > like CC changing and tool flag determination, and similar, work > > properly. > > > > Also, clear the passed subdir as otherwise an outer build may break by > > inadvertently passing an inappropriate value. > > > > Signed-off-by: Ian Rogers <irogers@google.com> > > lgtm did you try cross build and build with clang? Hmm.. I don't have a cross build but I checked clang. Any chance you could check the cross build? Thanks, Ian > jirka > > > --- > > tools/bpf/resolve_btfids/Makefile | 17 +++++++---------- > > 1 file changed, 7 insertions(+), 10 deletions(-) > > > > diff --git a/tools/bpf/resolve_btfids/Makefile b/tools/bpf/resolve_btfids/Makefile > > index 76b737b2560d..515d87b32fb8 100644 > > --- a/tools/bpf/resolve_btfids/Makefile > > +++ b/tools/bpf/resolve_btfids/Makefile > > @@ -18,14 +18,11 @@ else > > endif > > > > # always use the host compiler > > -AR = $(HOSTAR) > > -CC = $(HOSTCC) > > -LD = $(HOSTLD) > > -ARCH = $(HOSTARCH) > > +HOST_OVERRIDES := AR=$(HOSTAR) CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \ > > + ARCH=$(HOSTARCH) EXTRA_CFLAGS="$(HOSTCFLAGS) $(KBUILD_HOSTCFLAGS)" > > + > > RM ?= rm > > CROSS_COMPILE = > > -CFLAGS := $(KBUILD_HOSTCFLAGS) > > -LDFLAGS := $(KBUILD_HOSTLDFLAGS) > > > > OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/ > > > > @@ -56,12 +53,12 @@ $(OUTPUT) $(OUTPUT)/libsubcmd $(LIBBPF_OUT): > > > > $(SUBCMDOBJ): fixdep FORCE | $(OUTPUT)/libsubcmd > > $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(SUBCMD_OUT) \ > > - DESTDIR=$(SUBCMD_DESTDIR) prefix= \ > > + DESTDIR=$(SUBCMD_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ > > $(abspath $@) install_headers > > > > $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OUT) > > $(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) OUTPUT=$(LIBBPF_OUT) \ > > - DESTDIR=$(LIBBPF_DESTDIR) prefix= EXTRA_CFLAGS="$(CFLAGS)" \ > > + DESTDIR=$(LIBBPF_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ > > $(abspath $@) install_headers > > > > CFLAGS += -g \ > > @@ -76,11 +73,11 @@ export srctree OUTPUT CFLAGS Q > > include $(srctree)/tools/build/Makefile.include > > > > $(BINARY_IN): fixdep FORCE prepare | $(OUTPUT) > > - $(Q)$(MAKE) $(build)=resolve_btfids > > + $(Q)$(MAKE) $(build)=resolve_btfids $(HOST_OVERRIDES) > > > > $(BINARY): $(BPFOBJ) $(SUBCMDOBJ) $(BINARY_IN) > > $(call msg,LINK,$@) > > - $(Q)$(CC) $(BINARY_IN) $(LDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) > > + $(Q)$(HOSTCC) $(BINARY_IN) $(KBUILD_HOSTLDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) > > > > clean_objects := $(wildcard $(OUTPUT)/*.o \ > > $(OUTPUT)/.*.o.cmd \ > > -- > > 2.39.0.314.g84b9a713c41-goog > >
On Tue, Jan 17, 2023 at 03:20:38PM -0800, Ian Rogers wrote: > On Tue, Jan 17, 2023 at 2:07 PM Jiri Olsa <olsajiri@gmail.com> wrote: > > > > On Mon, Jan 16, 2023 at 01:57:51PM -0800, Ian Rogers wrote: > > > HOSTCC is always wanted when building. Setting CC to HOSTCC happens > > > after tools/scripts/Makefile.include is included, meaning flags are > > > set assuming say CC is gcc, but then it can be later set to HOSTCC > > > which may be clang. tools/scripts/Makefile.include is needed for host > > > set up and common macros in objtool's Makefile. Rather than override > > > CC to HOSTCC, just pass CC as HOSTCC to Makefile.build, the libsubcmd > > > builds and the linkage step. This means the Makefiles don't see things > > > like CC changing and tool flag determination, and similar, work > > > properly. > > > > > > Also, clear the passed subdir as otherwise an outer build may break by > > > inadvertently passing an inappropriate value. > > > > > > Signed-off-by: Ian Rogers <irogers@google.com> > > > > lgtm did you try cross build and build with clang? > > Hmm.. I don't have a cross build but I checked clang. Any chance you > could check the cross build? ok, I'll try tomorrow jirka > > Thanks, > Ian > > > jirka > > > > > --- > > > tools/bpf/resolve_btfids/Makefile | 17 +++++++---------- > > > 1 file changed, 7 insertions(+), 10 deletions(-) > > > > > > diff --git a/tools/bpf/resolve_btfids/Makefile b/tools/bpf/resolve_btfids/Makefile > > > index 76b737b2560d..515d87b32fb8 100644 > > > --- a/tools/bpf/resolve_btfids/Makefile > > > +++ b/tools/bpf/resolve_btfids/Makefile > > > @@ -18,14 +18,11 @@ else > > > endif > > > > > > # always use the host compiler > > > -AR = $(HOSTAR) > > > -CC = $(HOSTCC) > > > -LD = $(HOSTLD) > > > -ARCH = $(HOSTARCH) > > > +HOST_OVERRIDES := AR=$(HOSTAR) CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \ > > > + ARCH=$(HOSTARCH) EXTRA_CFLAGS="$(HOSTCFLAGS) $(KBUILD_HOSTCFLAGS)" > > > + > > > RM ?= rm > > > CROSS_COMPILE = > > > -CFLAGS := $(KBUILD_HOSTCFLAGS) > > > -LDFLAGS := $(KBUILD_HOSTLDFLAGS) > > > > > > OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/ > > > > > > @@ -56,12 +53,12 @@ $(OUTPUT) $(OUTPUT)/libsubcmd $(LIBBPF_OUT): > > > > > > $(SUBCMDOBJ): fixdep FORCE | $(OUTPUT)/libsubcmd > > > $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(SUBCMD_OUT) \ > > > - DESTDIR=$(SUBCMD_DESTDIR) prefix= \ > > > + DESTDIR=$(SUBCMD_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ > > > $(abspath $@) install_headers > > > > > > $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OUT) > > > $(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) OUTPUT=$(LIBBPF_OUT) \ > > > - DESTDIR=$(LIBBPF_DESTDIR) prefix= EXTRA_CFLAGS="$(CFLAGS)" \ > > > + DESTDIR=$(LIBBPF_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ > > > $(abspath $@) install_headers > > > > > > CFLAGS += -g \ > > > @@ -76,11 +73,11 @@ export srctree OUTPUT CFLAGS Q > > > include $(srctree)/tools/build/Makefile.include > > > > > > $(BINARY_IN): fixdep FORCE prepare | $(OUTPUT) > > > - $(Q)$(MAKE) $(build)=resolve_btfids > > > + $(Q)$(MAKE) $(build)=resolve_btfids $(HOST_OVERRIDES) > > > > > > $(BINARY): $(BPFOBJ) $(SUBCMDOBJ) $(BINARY_IN) > > > $(call msg,LINK,$@) > > > - $(Q)$(CC) $(BINARY_IN) $(LDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) > > > + $(Q)$(HOSTCC) $(BINARY_IN) $(KBUILD_HOSTLDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) > > > > > > clean_objects := $(wildcard $(OUTPUT)/*.o \ > > > $(OUTPUT)/.*.o.cmd \ > > > -- > > > 2.39.0.314.g84b9a713c41-goog > > >
On Mon, Jan 16, 2023 at 01:57:51PM -0800, Ian Rogers wrote: > HOSTCC is always wanted when building. Setting CC to HOSTCC happens > after tools/scripts/Makefile.include is included, meaning flags are > set assuming say CC is gcc, but then it can be later set to HOSTCC > which may be clang. tools/scripts/Makefile.include is needed for host > set up and common macros in objtool's Makefile. Rather than override > CC to HOSTCC, just pass CC as HOSTCC to Makefile.build, the libsubcmd > builds and the linkage step. This means the Makefiles don't see things > like CC changing and tool flag determination, and similar, work > properly. > > Also, clear the passed subdir as otherwise an outer build may break by > inadvertently passing an inappropriate value. I tested with cross builds for s390/ppc/arm64 and it was ok some comments below thanks, jirka > > Signed-off-by: Ian Rogers <irogers@google.com> > --- > tools/bpf/resolve_btfids/Makefile | 17 +++++++---------- > 1 file changed, 7 insertions(+), 10 deletions(-) > > diff --git a/tools/bpf/resolve_btfids/Makefile b/tools/bpf/resolve_btfids/Makefile > index 76b737b2560d..515d87b32fb8 100644 > --- a/tools/bpf/resolve_btfids/Makefile > +++ b/tools/bpf/resolve_btfids/Makefile > @@ -18,14 +18,11 @@ else > endif > > # always use the host compiler > -AR = $(HOSTAR) > -CC = $(HOSTCC) > -LD = $(HOSTLD) > -ARCH = $(HOSTARCH) I wonder all the tools should use HOSTCC in the first place? seems more clear than forcing it from other makefiles subcmd even has: CC ?= $(CROSS_COMPILE)gcc LD ?= $(CROSS_COMPILE)ld AR ?= $(CROSS_COMPILE)ar which seems wrong unless I'm missing something.. should be always the host compiler, right? > +HOST_OVERRIDES := AR=$(HOSTAR) CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \ > + ARCH=$(HOSTARCH) EXTRA_CFLAGS="$(HOSTCFLAGS) $(KBUILD_HOSTCFLAGS)" there's extra AR set and ARCH value is not in "" > + > RM ?= rm > CROSS_COMPILE = > -CFLAGS := $(KBUILD_HOSTCFLAGS) > -LDFLAGS := $(KBUILD_HOSTLDFLAGS) > > OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/ > > @@ -56,12 +53,12 @@ $(OUTPUT) $(OUTPUT)/libsubcmd $(LIBBPF_OUT): > > $(SUBCMDOBJ): fixdep FORCE | $(OUTPUT)/libsubcmd > $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(SUBCMD_OUT) \ > - DESTDIR=$(SUBCMD_DESTDIR) prefix= \ > + DESTDIR=$(SUBCMD_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ > $(abspath $@) install_headers > > $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OUT) > $(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) OUTPUT=$(LIBBPF_OUT) \ > - DESTDIR=$(LIBBPF_DESTDIR) prefix= EXTRA_CFLAGS="$(CFLAGS)" \ > + DESTDIR=$(LIBBPF_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ > $(abspath $@) install_headers > > CFLAGS += -g \ > @@ -76,11 +73,11 @@ export srctree OUTPUT CFLAGS Q > include $(srctree)/tools/build/Makefile.include > > $(BINARY_IN): fixdep FORCE prepare | $(OUTPUT) > - $(Q)$(MAKE) $(build)=resolve_btfids > + $(Q)$(MAKE) $(build)=resolve_btfids $(HOST_OVERRIDES) > > $(BINARY): $(BPFOBJ) $(SUBCMDOBJ) $(BINARY_IN) > $(call msg,LINK,$@) > - $(Q)$(CC) $(BINARY_IN) $(LDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) > + $(Q)$(HOSTCC) $(BINARY_IN) $(KBUILD_HOSTLDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) > > clean_objects := $(wildcard $(OUTPUT)/*.o \ > $(OUTPUT)/.*.o.cmd \ > -- > 2.39.0.314.g84b9a713c41-goog >
On Thu, Jan 19, 2023 at 6:51 AM Jiri Olsa <olsajiri@gmail.com> wrote: > > On Mon, Jan 16, 2023 at 01:57:51PM -0800, Ian Rogers wrote: > > HOSTCC is always wanted when building. Setting CC to HOSTCC happens > > after tools/scripts/Makefile.include is included, meaning flags are > > set assuming say CC is gcc, but then it can be later set to HOSTCC > > which may be clang. tools/scripts/Makefile.include is needed for host > > set up and common macros in objtool's Makefile. Rather than override > > CC to HOSTCC, just pass CC as HOSTCC to Makefile.build, the libsubcmd > > builds and the linkage step. This means the Makefiles don't see things > > like CC changing and tool flag determination, and similar, work > > properly. > > > > Also, clear the passed subdir as otherwise an outer build may break by > > inadvertently passing an inappropriate value. > > I tested with cross builds for s390/ppc/arm64 and it was ok > > some comments below > > thanks, > jirka > > > > > > Signed-off-by: Ian Rogers <irogers@google.com> > > --- > > tools/bpf/resolve_btfids/Makefile | 17 +++++++---------- > > 1 file changed, 7 insertions(+), 10 deletions(-) > > > > diff --git a/tools/bpf/resolve_btfids/Makefile b/tools/bpf/resolve_btfids/Makefile > > index 76b737b2560d..515d87b32fb8 100644 > > --- a/tools/bpf/resolve_btfids/Makefile > > +++ b/tools/bpf/resolve_btfids/Makefile > > @@ -18,14 +18,11 @@ else > > endif > > > > # always use the host compiler > > -AR = $(HOSTAR) > > -CC = $(HOSTCC) > > -LD = $(HOSTLD) > > -ARCH = $(HOSTARCH) > > I wonder all the tools should use HOSTCC in the first place? > seems more clear than forcing it from other makefiles > > subcmd even has: > > CC ?= $(CROSS_COMPILE)gcc > LD ?= $(CROSS_COMPILE)ld > AR ?= $(CROSS_COMPILE)ar > > which seems wrong unless I'm missing something.. should be always > the host compiler, right? Hmm.. it seems like a feature to be able to cross compile things like the perf tool. I agree the way this is all done is muddling and we should try to keep the way it is done consistent. The pattern of always early including Makefile.include, that sets flags based on CC, but then overriding CC was what I was after cleaning up here. Let's work on migrating to something better. > > +HOST_OVERRIDES := AR=$(HOSTAR) CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \ > > + ARCH=$(HOSTARCH) EXTRA_CFLAGS="$(HOSTCFLAGS) $(KBUILD_HOSTCFLAGS)" > > there's extra AR set and ARCH value is not in "" Ack. Will fix in v3. Thanks, Ian > > + > > RM ?= rm > > CROSS_COMPILE = > > -CFLAGS := $(KBUILD_HOSTCFLAGS) > > -LDFLAGS := $(KBUILD_HOSTLDFLAGS) > > > > OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/ > > > > @@ -56,12 +53,12 @@ $(OUTPUT) $(OUTPUT)/libsubcmd $(LIBBPF_OUT): > > > > $(SUBCMDOBJ): fixdep FORCE | $(OUTPUT)/libsubcmd > > $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(SUBCMD_OUT) \ > > - DESTDIR=$(SUBCMD_DESTDIR) prefix= \ > > + DESTDIR=$(SUBCMD_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ > > $(abspath $@) install_headers > > > > $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OUT) > > $(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) OUTPUT=$(LIBBPF_OUT) \ > > - DESTDIR=$(LIBBPF_DESTDIR) prefix= EXTRA_CFLAGS="$(CFLAGS)" \ > > + DESTDIR=$(LIBBPF_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ > > $(abspath $@) install_headers > > > > CFLAGS += -g \ > > @@ -76,11 +73,11 @@ export srctree OUTPUT CFLAGS Q > > include $(srctree)/tools/build/Makefile.include > > > > $(BINARY_IN): fixdep FORCE prepare | $(OUTPUT) > > - $(Q)$(MAKE) $(build)=resolve_btfids > > + $(Q)$(MAKE) $(build)=resolve_btfids $(HOST_OVERRIDES) > > > > $(BINARY): $(BPFOBJ) $(SUBCMDOBJ) $(BINARY_IN) > > $(call msg,LINK,$@) > > - $(Q)$(CC) $(BINARY_IN) $(LDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) > > + $(Q)$(HOSTCC) $(BINARY_IN) $(KBUILD_HOSTLDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) > > > > clean_objects := $(wildcard $(OUTPUT)/*.o \ > > $(OUTPUT)/.*.o.cmd \ > > -- > > 2.39.0.314.g84b9a713c41-goog > >
diff --git a/tools/bpf/resolve_btfids/Makefile b/tools/bpf/resolve_btfids/Makefile index 76b737b2560d..515d87b32fb8 100644 --- a/tools/bpf/resolve_btfids/Makefile +++ b/tools/bpf/resolve_btfids/Makefile @@ -18,14 +18,11 @@ else endif # always use the host compiler -AR = $(HOSTAR) -CC = $(HOSTCC) -LD = $(HOSTLD) -ARCH = $(HOSTARCH) +HOST_OVERRIDES := AR=$(HOSTAR) CC="$(HOSTCC)" LD="$(HOSTLD)" AR="$(HOSTAR)" \ + ARCH=$(HOSTARCH) EXTRA_CFLAGS="$(HOSTCFLAGS) $(KBUILD_HOSTCFLAGS)" + RM ?= rm CROSS_COMPILE = -CFLAGS := $(KBUILD_HOSTCFLAGS) -LDFLAGS := $(KBUILD_HOSTLDFLAGS) OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/ @@ -56,12 +53,12 @@ $(OUTPUT) $(OUTPUT)/libsubcmd $(LIBBPF_OUT): $(SUBCMDOBJ): fixdep FORCE | $(OUTPUT)/libsubcmd $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(SUBCMD_OUT) \ - DESTDIR=$(SUBCMD_DESTDIR) prefix= \ + DESTDIR=$(SUBCMD_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ $(abspath $@) install_headers $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OUT) $(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) OUTPUT=$(LIBBPF_OUT) \ - DESTDIR=$(LIBBPF_DESTDIR) prefix= EXTRA_CFLAGS="$(CFLAGS)" \ + DESTDIR=$(LIBBPF_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \ $(abspath $@) install_headers CFLAGS += -g \ @@ -76,11 +73,11 @@ export srctree OUTPUT CFLAGS Q include $(srctree)/tools/build/Makefile.include $(BINARY_IN): fixdep FORCE prepare | $(OUTPUT) - $(Q)$(MAKE) $(build)=resolve_btfids + $(Q)$(MAKE) $(build)=resolve_btfids $(HOST_OVERRIDES) $(BINARY): $(BPFOBJ) $(SUBCMDOBJ) $(BINARY_IN) $(call msg,LINK,$@) - $(Q)$(CC) $(BINARY_IN) $(LDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) + $(Q)$(HOSTCC) $(BINARY_IN) $(KBUILD_HOSTLDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) clean_objects := $(wildcard $(OUTPUT)/*.o \ $(OUTPUT)/.*.o.cmd \
HOSTCC is always wanted when building. Setting CC to HOSTCC happens after tools/scripts/Makefile.include is included, meaning flags are set assuming say CC is gcc, but then it can be later set to HOSTCC which may be clang. tools/scripts/Makefile.include is needed for host set up and common macros in objtool's Makefile. Rather than override CC to HOSTCC, just pass CC as HOSTCC to Makefile.build, the libsubcmd builds and the linkage step. This means the Makefiles don't see things like CC changing and tool flag determination, and similar, work properly. Also, clear the passed subdir as otherwise an outer build may break by inadvertently passing an inappropriate value. Signed-off-by: Ian Rogers <irogers@google.com> --- tools/bpf/resolve_btfids/Makefile | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-)