diff mbox series

bpftool: Fix bootstrapping during a cross compilation

Message ID 8d297f0c-cfd0-ef6f-3970-6dddb3d9a87a@synopsys.com (mailing list archive)
State Accepted
Commit 0b817059a8830b8bc3d50bb2402dea923cd89b01
Delegated to: BPF
Headers show
Series bpftool: Fix bootstrapping during a cross compilation | expand

Checks

Context Check Description
netdev/tree_selection success Not a local patch
bpf/vmtest-bpf-next-VM_Test-2 success Logs for Kernel LATEST on ubuntu-latest with llvm-15
bpf/vmtest-bpf-next-PR fail PR summary
bpf/vmtest-bpf-next-VM_Test-3 success Logs for Kernel LATEST on z15 with gcc
bpf/vmtest-bpf-next-VM_Test-1 pending Logs for Kernel LATEST on ubuntu-latest with gcc

Commit Message

Shahab Vahedi June 8, 2022, 2:29 p.m. UTC
This change adjusts the Makefile to use "HOSTAR" as the archive tool
to keep the sanity of the build process for the bootstrap part in
check. For the rationale, please continue reading.

When cross compiling bpftool with buildroot, it leads to an invocation
like:

$ AR="/path/to/buildroot/host/bin/arc-linux-gcc-ar" \
  CC="/path/to/buildroot/host/bin/arc-linux-gcc"    \
  ...
  make

Which in return fails while building the bootstrap section:

----------------------------------8<----------------------------------

  make: Entering directory '/src/bpftool-v6.7.0/src'
  ...                        libbfd: [ on  ]
  ...        disassembler-four-args: [ on  ]
  ...                          zlib: [ on  ]
  ...                        libcap: [ OFF ]
  ...               clang-bpf-co-re: [ on  ] <-- triggers bootstrap

  .
  .
  .

    LINK     /src/bpftool-v6.7.0/src/bootstrap/bpftool
  /usr/bin/ld: /src/bpftool-v6.7.0/src/bootstrap/libbpf/libbpf.a:
               error adding symbols: archive has no index; run ranlib
               to add one
  collect2: error: ld returned 1 exit status
  make: *** [Makefile:211: /src/bpftool-v6.7.0/src/bootstrap/bpftool]
            Error 1
  make: *** Waiting for unfinished jobs....
    AR       /src/bpftool-v6.7.0/src/libbpf/libbpf.a
    make[1]: Leaving directory '/src/bpftool-v6.7.0/libbpf/src'
    make: Leaving directory '/src/bpftool-v6.7.0/src'

---------------------------------->8----------------------------------

This occurs because setting "AR" confuses the build process for the
bootstrap section and it calls "arc-linux-gcc-ar" to create and index
"libbpf.a" instead of the host "ar".

Signed-off-by: Shahab Vahedi <shahab@synopsys.com>
---
 tools/bpf/bpftool/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Quentin Monnet June 8, 2022, 4:49 p.m. UTC | #1
2022-06-08 14:29 UTC+0000 ~ Shahab Vahedi <Shahab.Vahedi@synopsys.com>
> This change adjusts the Makefile to use "HOSTAR" as the archive tool
> to keep the sanity of the build process for the bootstrap part in
> check. For the rationale, please continue reading.
> 
> When cross compiling bpftool with buildroot, it leads to an invocation
> like:
> 
> $ AR="/path/to/buildroot/host/bin/arc-linux-gcc-ar" \
>   CC="/path/to/buildroot/host/bin/arc-linux-gcc"    \
>   ...
>   make
> 
> Which in return fails while building the bootstrap section:
> 
> ----------------------------------8<----------------------------------
> 
>   make: Entering directory '/src/bpftool-v6.7.0/src'
>   ...                        libbfd: [ on  ]
>   ...        disassembler-four-args: [ on  ]
>   ...                          zlib: [ on  ]
>   ...                        libcap: [ OFF ]
>   ...               clang-bpf-co-re: [ on  ] <-- triggers bootstrap
> 
>   .
>   .
>   .
> 
>     LINK     /src/bpftool-v6.7.0/src/bootstrap/bpftool
>   /usr/bin/ld: /src/bpftool-v6.7.0/src/bootstrap/libbpf/libbpf.a:
>                error adding symbols: archive has no index; run ranlib
>                to add one
>   collect2: error: ld returned 1 exit status
>   make: *** [Makefile:211: /src/bpftool-v6.7.0/src/bootstrap/bpftool]
>             Error 1
>   make: *** Waiting for unfinished jobs....
>     AR       /src/bpftool-v6.7.0/src/libbpf/libbpf.a
>     make[1]: Leaving directory '/src/bpftool-v6.7.0/libbpf/src'
>     make: Leaving directory '/src/bpftool-v6.7.0/src'
> 
> ---------------------------------->8----------------------------------
> 
> This occurs because setting "AR" confuses the build process for the
> bootstrap section and it calls "arc-linux-gcc-ar" to create and index
> "libbpf.a" instead of the host "ar".
> 
> Signed-off-by: Shahab Vahedi <shahab@synopsys.com>
> ---
>  tools/bpf/bpftool/Makefile | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
> index c6d2c77d0252..c19e0e4c41bd 100644
> --- a/tools/bpf/bpftool/Makefile
> +++ b/tools/bpf/bpftool/Makefile
> @@ -53,7 +53,7 @@ $(LIBBPF_INTERNAL_HDRS): $(LIBBPF_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_HDRS_
>  $(LIBBPF_BOOTSTRAP): $(wildcard $(BPF_DIR)/*.[ch] $(BPF_DIR)/Makefile) | $(LIBBPF_BOOTSTRAP_OUTPUT)
>  	$(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_BOOTSTRAP_OUTPUT) \
>  		DESTDIR=$(LIBBPF_BOOTSTRAP_DESTDIR:/=) prefix= \
> -		ARCH= CROSS_COMPILE= CC=$(HOSTCC) LD=$(HOSTLD) $@ install_headers
> +		ARCH= CROSS_COMPILE= CC=$(HOSTCC) LD=$(HOSTLD) AR=$(HOSTAR) $@ install_headers
>  
>  $(LIBBPF_BOOTSTRAP_INTERNAL_HDRS): $(LIBBPF_BOOTSTRAP_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_BOOTSTRAP_HDRS_DIR)
>  	$(call QUIET_INSTALL, $@)

+Cc Jean-Philippe

Looks good to me, thank you!
Reviewed-by: Quentin Monnet <quentin@isovalent.com>
patchwork-bot+netdevbpf@kernel.org June 9, 2022, 12:10 p.m. UTC | #2
Hello:

This patch was applied to bpf/bpf-next.git (master)
by Daniel Borkmann <daniel@iogearbox.net>:

On Wed, 8 Jun 2022 14:29:28 +0000 you wrote:
> This change adjusts the Makefile to use "HOSTAR" as the archive tool
> to keep the sanity of the build process for the bootstrap part in
> check. For the rationale, please continue reading.
> 
> When cross compiling bpftool with buildroot, it leads to an invocation
> like:
> 
> [...]

Here is the summary with links:
  - bpftool: Fix bootstrapping during a cross compilation
    https://git.kernel.org/bpf/bpf-next/c/0b817059a883

You are awesome, thank you!
Jean-Philippe Brucker June 9, 2022, 1:43 p.m. UTC | #3
On Wed, Jun 08, 2022 at 05:49:41PM +0100, Quentin Monnet wrote:
> 2022-06-08 14:29 UTC+0000 ~ Shahab Vahedi <Shahab.Vahedi@synopsys.com>
> > This change adjusts the Makefile to use "HOSTAR" as the archive tool
> > to keep the sanity of the build process for the bootstrap part in
> > check. For the rationale, please continue reading.
> > 
> > When cross compiling bpftool with buildroot, it leads to an invocation
> > like:
> > 
> > $ AR="/path/to/buildroot/host/bin/arc-linux-gcc-ar" \
> >   CC="/path/to/buildroot/host/bin/arc-linux-gcc"    \
> >   ...
> >   make
> > 
> > Which in return fails while building the bootstrap section:
> > 
> > ----------------------------------8<----------------------------------
> > 
> >   make: Entering directory '/src/bpftool-v6.7.0/src'
> >   ...                        libbfd: [ on  ]
> >   ...        disassembler-four-args: [ on  ]
> >   ...                          zlib: [ on  ]
> >   ...                        libcap: [ OFF ]
> >   ...               clang-bpf-co-re: [ on  ] <-- triggers bootstrap
> > 
> >   .
> >   .
> >   .
> > 
> >     LINK     /src/bpftool-v6.7.0/src/bootstrap/bpftool
> >   /usr/bin/ld: /src/bpftool-v6.7.0/src/bootstrap/libbpf/libbpf.a:
> >                error adding symbols: archive has no index; run ranlib
> >                to add one
> >   collect2: error: ld returned 1 exit status
> >   make: *** [Makefile:211: /src/bpftool-v6.7.0/src/bootstrap/bpftool]
> >             Error 1
> >   make: *** Waiting for unfinished jobs....
> >     AR       /src/bpftool-v6.7.0/src/libbpf/libbpf.a
> >     make[1]: Leaving directory '/src/bpftool-v6.7.0/libbpf/src'
> >     make: Leaving directory '/src/bpftool-v6.7.0/src'
> > 
> > ---------------------------------->8----------------------------------
> > 
> > This occurs because setting "AR" confuses the build process for the
> > bootstrap section and it calls "arc-linux-gcc-ar" to create and index
> > "libbpf.a" instead of the host "ar".
> > 
> > Signed-off-by: Shahab Vahedi <shahab@synopsys.com>
> > ---
> >  tools/bpf/bpftool/Makefile | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
> > index c6d2c77d0252..c19e0e4c41bd 100644
> > --- a/tools/bpf/bpftool/Makefile
> > +++ b/tools/bpf/bpftool/Makefile
> > @@ -53,7 +53,7 @@ $(LIBBPF_INTERNAL_HDRS): $(LIBBPF_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_HDRS_
> >  $(LIBBPF_BOOTSTRAP): $(wildcard $(BPF_DIR)/*.[ch] $(BPF_DIR)/Makefile) | $(LIBBPF_BOOTSTRAP_OUTPUT)
> >  	$(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_BOOTSTRAP_OUTPUT) \
> >  		DESTDIR=$(LIBBPF_BOOTSTRAP_DESTDIR:/=) prefix= \
> > -		ARCH= CROSS_COMPILE= CC=$(HOSTCC) LD=$(HOSTLD) $@ install_headers
> > +		ARCH= CROSS_COMPILE= CC=$(HOSTCC) LD=$(HOSTLD) AR=$(HOSTAR) $@ install_headers
> >  
> >  $(LIBBPF_BOOTSTRAP_INTERNAL_HDRS): $(LIBBPF_BOOTSTRAP_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_BOOTSTRAP_HDRS_DIR)
> >  	$(call QUIET_INSTALL, $@)
> 
> +Cc Jean-Philippe
> 
> Looks good to me, thank you!
> Reviewed-by: Quentin Monnet <quentin@isovalent.com>

Thanks, it makes sense to me as well

Reviewed-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
diff mbox series

Patch

diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
index c6d2c77d0252..c19e0e4c41bd 100644
--- a/tools/bpf/bpftool/Makefile
+++ b/tools/bpf/bpftool/Makefile
@@ -53,7 +53,7 @@  $(LIBBPF_INTERNAL_HDRS): $(LIBBPF_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_HDRS_
 $(LIBBPF_BOOTSTRAP): $(wildcard $(BPF_DIR)/*.[ch] $(BPF_DIR)/Makefile) | $(LIBBPF_BOOTSTRAP_OUTPUT)
 	$(Q)$(MAKE) -C $(BPF_DIR) OUTPUT=$(LIBBPF_BOOTSTRAP_OUTPUT) \
 		DESTDIR=$(LIBBPF_BOOTSTRAP_DESTDIR:/=) prefix= \
-		ARCH= CROSS_COMPILE= CC=$(HOSTCC) LD=$(HOSTLD) $@ install_headers
+		ARCH= CROSS_COMPILE= CC=$(HOSTCC) LD=$(HOSTLD) AR=$(HOSTAR) $@ install_headers
 
 $(LIBBPF_BOOTSTRAP_INTERNAL_HDRS): $(LIBBPF_BOOTSTRAP_HDRS_DIR)/%.h: $(BPF_DIR)/%.h | $(LIBBPF_BOOTSTRAP_HDRS_DIR)
 	$(call QUIET_INSTALL, $@)