public inbox for llvm@lists.linux.dev
 help / color / mirror / Atom feed
* [PATCH] tools: feature/test-libperl.c: Sync PERL_EMBED_CCOPTS with perf
@ 2022-03-10  6:19 Sedat Dilek
  2022-03-10 20:59 ` Nick Desaulniers
  2022-03-11 11:56 ` Jiri Olsa
  0 siblings, 2 replies; 6+ messages in thread
From: Sedat Dilek @ 2022-03-10  6:19 UTC (permalink / raw)
  To: Nathan Chancellor, Nick Desaulniers, Arnaldo Carvalho de Melo,
	Ian Rogers, Florian Fainelli, Fangrui Song, Jiri Olsa,
	Michael Petlan, Leo Yan, John Keeping, Sedat Dilek, linux-kernel,
	llvm
  Cc: Jiri Olsa, Arnaldo Carvalho de Melo

When trying to build perf with a LLVM/Clang toolchain people see errors
when testing for libperl feature.

Jiri reports:

> I'm getting some other lto related error:
>
>         $ cat test-libperl.make.output
>         clang-13: error: optimization flag '-ffat-lto-objects' is not supported [-Werror,-Wignored-optimization-argument]
>

The reason is PERL_EMBED_CCOPTS is defined in two places:

tools/build/feature/Makefile
tools/perf/Makefile.config

As an result FLAGS_PERL_EMBED is set differently.

For building perf '-ffat-lto-objects' is filtered-out:

$ git grep ffat-lto-objects tools/perf/
tools/perf/Makefile.config:  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))

Sync PERL_EMBED_CCOPTS in tools/build/feature/Makefile to fix this.

For a minimal fix for Linux v5.17 this here was preferred by Arnaldo.

Link: https://marc.info/?t=164646683300002&r=1&w=2
Reported-by: Jiri Olsa <olsajiri@gmail.com>
Reported-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
Tested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
Suggested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
Signed-off-by: Sedat Dilek <sedat.dilek@gmail.com>
---
 tools/build/feature/Makefile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index 1480910c792e..869073cf8449 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -218,6 +218,7 @@ PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
 PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
 PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
 PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
+PERL_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
 FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
 
 $(OUTPUT)test-libperl.bin:
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] tools: feature/test-libperl.c: Sync PERL_EMBED_CCOPTS with perf
  2022-03-10  6:19 [PATCH] tools: feature/test-libperl.c: Sync PERL_EMBED_CCOPTS with perf Sedat Dilek
@ 2022-03-10 20:59 ` Nick Desaulniers
  2022-03-11 11:56 ` Jiri Olsa
  1 sibling, 0 replies; 6+ messages in thread
From: Nick Desaulniers @ 2022-03-10 20:59 UTC (permalink / raw)
  To: Sedat Dilek
  Cc: Nathan Chancellor, Arnaldo Carvalho de Melo, Ian Rogers,
	Florian Fainelli, Fangrui Song, Jiri Olsa, Michael Petlan,
	Leo Yan, John Keeping, linux-kernel, llvm, Jiri Olsa,
	Arnaldo Carvalho de Melo

On Wed, Mar 9, 2022 at 10:19 PM Sedat Dilek <sedat.dilek@gmail.com> wrote:
>
> When trying to build perf with a LLVM/Clang toolchain people see errors
> when testing for libperl feature.
>
> Jiri reports:
>
> > I'm getting some other lto related error:
> >
> >         $ cat test-libperl.make.output
> >         clang-13: error: optimization flag '-ffat-lto-objects' is not supported [-Werror,-Wignored-optimization-argument]
> >
>
> The reason is PERL_EMBED_CCOPTS is defined in two places:
>
> tools/build/feature/Makefile
> tools/perf/Makefile.config
>
> As an result FLAGS_PERL_EMBED is set differently.

s/an/a/

>
> For building perf '-ffat-lto-objects' is filtered-out:
>
> $ git grep ffat-lto-objects tools/perf/
> tools/perf/Makefile.config:  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
>
> Sync PERL_EMBED_CCOPTS in tools/build/feature/Makefile to fix this.
>
> For a minimal fix for Linux v5.17 this here was preferred by Arnaldo.
>
> Link: https://marc.info/?t=164646683300002&r=1&w=2

Hey Sedat, we prefer lore links now to external mirrors!

Link: https://lore.kernel.org/lkml/CA+icZUWHd4VTKNwBtuxt9-fHoiYV+Q7tQ809Cn83k8sbQ_uNHw@mail.gmail.com/

> Reported-by: Jiri Olsa <olsajiri@gmail.com>
> Reported-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> Tested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> Suggested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> Signed-off-by: Sedat Dilek <sedat.dilek@gmail.com>

Thanks for the patch!
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>

> ---
>  tools/build/feature/Makefile | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> index 1480910c792e..869073cf8449 100644
> --- a/tools/build/feature/Makefile
> +++ b/tools/build/feature/Makefile
> @@ -218,6 +218,7 @@ PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
>  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
>  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
>  PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
> +PERL_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
>  FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
>
>  $(OUTPUT)test-libperl.bin:
> --
> 2.35.1
>


-- 
Thanks,
~Nick Desaulniers

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] tools: feature/test-libperl.c: Sync PERL_EMBED_CCOPTS with perf
  2022-03-10  6:19 [PATCH] tools: feature/test-libperl.c: Sync PERL_EMBED_CCOPTS with perf Sedat Dilek
  2022-03-10 20:59 ` Nick Desaulniers
@ 2022-03-11 11:56 ` Jiri Olsa
  2022-03-11 23:30   ` Sedat Dilek
  1 sibling, 1 reply; 6+ messages in thread
From: Jiri Olsa @ 2022-03-11 11:56 UTC (permalink / raw)
  To: Sedat Dilek
  Cc: Nathan Chancellor, Nick Desaulniers, Arnaldo Carvalho de Melo,
	Ian Rogers, Florian Fainelli, Fangrui Song, Jiri Olsa,
	Michael Petlan, Leo Yan, John Keeping, linux-kernel, llvm,
	Arnaldo Carvalho de Melo

On Thu, Mar 10, 2022 at 07:19:09AM +0100, Sedat Dilek wrote:
> When trying to build perf with a LLVM/Clang toolchain people see errors
> when testing for libperl feature.
> 
> Jiri reports:
> 
> > I'm getting some other lto related error:
> >
> >         $ cat test-libperl.make.output
> >         clang-13: error: optimization flag '-ffat-lto-objects' is not supported [-Werror,-Wignored-optimization-argument]
> >
> 
> The reason is PERL_EMBED_CCOPTS is defined in two places:
> 
> tools/build/feature/Makefile
> tools/perf/Makefile.config
> 
> As an result FLAGS_PERL_EMBED is set differently.
> 
> For building perf '-ffat-lto-objects' is filtered-out:
> 
> $ git grep ffat-lto-objects tools/perf/
> tools/perf/Makefile.config:  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> 
> Sync PERL_EMBED_CCOPTS in tools/build/feature/Makefile to fix this.
> 
> For a minimal fix for Linux v5.17 this here was preferred by Arnaldo.
> 
> Link: https://marc.info/?t=164646683300002&r=1&w=2
> Reported-by: Jiri Olsa <olsajiri@gmail.com>
> Reported-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> Tested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> Suggested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> Signed-off-by: Sedat Dilek <sedat.dilek@gmail.com>
> ---
>  tools/build/feature/Makefile | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> index 1480910c792e..869073cf8449 100644
> --- a/tools/build/feature/Makefile
> +++ b/tools/build/feature/Makefile
> @@ -218,6 +218,7 @@ PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
>  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
>  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
>  PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
> +PERL_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PERL_EMBED_CCOPTS))

it looks like this is not enough, at least on fedora 35

I had to add changes below on top of your patch, it fixed the perl
feature detection and perf build itself, but I'm still getting error
with perf/python.so:

	$ CC=clang make JOBS=1 
	...
	  GEN     python/perf.so
	python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o: file not recognized: file format not recognized
	clang-13: error: linker command failed with exit code 1 (use -v to see invocation)
	error: command 'clang' failed with exit status 1
	cp: cannot stat 'python_ext_build/lib/perf*.so': No such file or directory

with:

	$ file python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o
	python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o: LLVM IR bitcode

do you get clean compile with python lang enabled?

jirka


---
diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index 869073cf8449..86df0fe11ee5 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -217,9 +217,9 @@ strip-libs = $(filter-out -l%,$(1))
 PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
 PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
 PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
-PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
+PERL_EMBED_CCOPTS := $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
 PERL_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
-FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
+FLAGS_PERL_EMBED  := $(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS) -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro
 
 $(OUTPUT)test-libperl.bin:
 	$(BUILD) $(FLAGS_PERL_EMBED)
diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 96ad944ca6a8..38b0b0e7a168 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -778,7 +778,7 @@ else
   PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
   PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
   PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS))
-  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
+  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS)) -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro
   PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
   FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
 
diff --git a/tools/perf/util/setup.py b/tools/perf/util/setup.py
index 483f05004e68..cfbb03babf63 100644
--- a/tools/perf/util/setup.py
+++ b/tools/perf/util/setup.py
@@ -43,7 +43,7 @@ class install_lib(_install_lib):
 
 cflags = getenv('CFLAGS', '').split()
 # switch off several checks (need to be at the end of cflags list)
-cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls', '-DPYTHON_PERF' ]
+cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls', '-Wno-ignored-optimization-argument', '-DPYTHON_PERF' ]
 if not cc_is_clang:
     cflags += ['-Wno-cast-function-type' ]
 

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] tools: feature/test-libperl.c: Sync PERL_EMBED_CCOPTS with perf
  2022-03-11 11:56 ` Jiri Olsa
@ 2022-03-11 23:30   ` Sedat Dilek
  2022-03-11 23:39     ` Sedat Dilek
  0 siblings, 1 reply; 6+ messages in thread
From: Sedat Dilek @ 2022-03-11 23:30 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Nathan Chancellor, Nick Desaulniers, Arnaldo Carvalho de Melo,
	Ian Rogers, Florian Fainelli, Fangrui Song, Jiri Olsa,
	Michael Petlan, Leo Yan, John Keeping, linux-kernel, llvm,
	Arnaldo Carvalho de Melo

On Fri, Mar 11, 2022 at 12:56 PM Jiri Olsa <olsajiri@gmail.com> wrote:
>
> On Thu, Mar 10, 2022 at 07:19:09AM +0100, Sedat Dilek wrote:
> > When trying to build perf with a LLVM/Clang toolchain people see errors
> > when testing for libperl feature.
> >
> > Jiri reports:
> >
> > > I'm getting some other lto related error:
> > >
> > >         $ cat test-libperl.make.output
> > >         clang-13: error: optimization flag '-ffat-lto-objects' is not supported [-Werror,-Wignored-optimization-argument]
> > >
> >
> > The reason is PERL_EMBED_CCOPTS is defined in two places:
> >
> > tools/build/feature/Makefile
> > tools/perf/Makefile.config
> >
> > As an result FLAGS_PERL_EMBED is set differently.
> >
> > For building perf '-ffat-lto-objects' is filtered-out:
> >
> > $ git grep ffat-lto-objects tools/perf/
> > tools/perf/Makefile.config:  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> >
> > Sync PERL_EMBED_CCOPTS in tools/build/feature/Makefile to fix this.
> >
> > For a minimal fix for Linux v5.17 this here was preferred by Arnaldo.
> >
> > Link: https://marc.info/?t=164646683300002&r=1&w=2
> > Reported-by: Jiri Olsa <olsajiri@gmail.com>
> > Reported-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> > Tested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> > Suggested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> > Signed-off-by: Sedat Dilek <sedat.dilek@gmail.com>
> > ---
> >  tools/build/feature/Makefile | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> > index 1480910c792e..869073cf8449 100644
> > --- a/tools/build/feature/Makefile
> > +++ b/tools/build/feature/Makefile
> > @@ -218,6 +218,7 @@ PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
> >  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
> >  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
> >  PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
> > +PERL_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
>
> it looks like this is not enough, at least on fedora 35
>
> I had to add changes below on top of your patch, it fixed the perl
> feature detection and perf build itself, but I'm still getting error
> with perf/python.so:
>

Correct. This patch simply fixes the perl feature detection.

>         $ CC=clang make JOBS=1
>         ...
>           GEN     python/perf.so
>         python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o: file not recognized: file format not recognized
>         clang-13: error: linker command failed with exit code 1 (use -v to see invocation)
>         error: command 'clang' failed with exit status 1
>         cp: cannot stat 'python_ext_build/lib/perf*.so': No such file or directory
>
> with:
>
>         $ file python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o
>         python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o: LLVM IR bitcode
>
> do you get clean compile with python lang enabled?
>
> jirka
>
>
> ---
> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> index 869073cf8449..86df0fe11ee5 100644
> --- a/tools/build/feature/Makefile
> +++ b/tools/build/feature/Makefile
> @@ -217,9 +217,9 @@ strip-libs = $(filter-out -l%,$(1))
>  PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
>  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
>  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
> -PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
> +PERL_EMBED_CCOPTS := $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
>  PERL_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> -FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
> +FLAGS_PERL_EMBED  := $(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS) -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro
>
>  $(OUTPUT)test-libperl.bin:
>         $(BUILD) $(FLAGS_PERL_EMBED)
> diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> index 96ad944ca6a8..38b0b0e7a168 100644
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -778,7 +778,7 @@ else
>    PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
>    PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
>    PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS))
> -  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> +  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS)) -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro
>    PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
>    FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
>

I fixed that differently by (see [1]),

--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -213,7 +213,7 @@ endif

# Treat warnings as errors unless directed not to
ifneq ($(WERROR),0)
-  CORE_CFLAGS += -Werror
+  CORE_CFLAGS += -Werror -Wno-compound-token-split-by-macro
  CXXFLAGS += -Werror
  HOSTCFLAGS += -Werror
endif

This was sufficient here to build perf successfully.
And maybe ifdef-ed for clang?

But all this is a follow-up?

[1] https://lore.kernel.org/lkml/CA+icZUUCO+gOPLZumu_rTOJz1_v7gRRYVzzEZ+RZPOZBmkqCQg@mail.gmail.com/

> diff --git a/tools/perf/util/setup.py b/tools/perf/util/setup.py
> index 483f05004e68..cfbb03babf63 100644
> --- a/tools/perf/util/setup.py
> +++ b/tools/perf/util/setup.py
> @@ -43,7 +43,7 @@ class install_lib(_install_lib):
>
>  cflags = getenv('CFLAGS', '').split()
>  # switch off several checks (need to be at the end of cflags list)
> -cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls', '-DPYTHON_PERF' ]
> +cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls', '-Wno-ignored-optimization-argument', '-DPYTHON_PERF' ]
>  if not cc_is_clang:
>      cflags += ['-Wno-cast-function-type' ]
>

Cannot say much to that.

Do we want to fix perf building with LLVM/Clang for Linux v5.17 final or later?
Arnaldo?

- Sedat -

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] tools: feature/test-libperl.c: Sync PERL_EMBED_CCOPTS with perf
  2022-03-11 23:30   ` Sedat Dilek
@ 2022-03-11 23:39     ` Sedat Dilek
  2022-03-12  1:41       ` Sedat Dilek
  0 siblings, 1 reply; 6+ messages in thread
From: Sedat Dilek @ 2022-03-11 23:39 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Nathan Chancellor, Nick Desaulniers, Arnaldo Carvalho de Melo,
	Ian Rogers, Florian Fainelli, Fangrui Song, Jiri Olsa,
	Michael Petlan, Leo Yan, John Keeping, linux-kernel, llvm,
	Arnaldo Carvalho de Melo

[-- Attachment #1: Type: text/plain, Size: 6923 bytes --]

On Sat, Mar 12, 2022 at 12:30 AM Sedat Dilek <sedat.dilek@gmail.com> wrote:
>
> On Fri, Mar 11, 2022 at 12:56 PM Jiri Olsa <olsajiri@gmail.com> wrote:
> >
> > On Thu, Mar 10, 2022 at 07:19:09AM +0100, Sedat Dilek wrote:
> > > When trying to build perf with a LLVM/Clang toolchain people see errors
> > > when testing for libperl feature.
> > >
> > > Jiri reports:
> > >
> > > > I'm getting some other lto related error:
> > > >
> > > >         $ cat test-libperl.make.output
> > > >         clang-13: error: optimization flag '-ffat-lto-objects' is not supported [-Werror,-Wignored-optimization-argument]
> > > >
> > >
> > > The reason is PERL_EMBED_CCOPTS is defined in two places:
> > >
> > > tools/build/feature/Makefile
> > > tools/perf/Makefile.config
> > >
> > > As an result FLAGS_PERL_EMBED is set differently.
> > >
> > > For building perf '-ffat-lto-objects' is filtered-out:
> > >
> > > $ git grep ffat-lto-objects tools/perf/
> > > tools/perf/Makefile.config:  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> > >
> > > Sync PERL_EMBED_CCOPTS in tools/build/feature/Makefile to fix this.
> > >
> > > For a minimal fix for Linux v5.17 this here was preferred by Arnaldo.
> > >
> > > Link: https://marc.info/?t=164646683300002&r=1&w=2
> > > Reported-by: Jiri Olsa <olsajiri@gmail.com>
> > > Reported-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> > > Tested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> > > Suggested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> > > Signed-off-by: Sedat Dilek <sedat.dilek@gmail.com>
> > > ---
> > >  tools/build/feature/Makefile | 1 +
> > >  1 file changed, 1 insertion(+)
> > >
> > > diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> > > index 1480910c792e..869073cf8449 100644
> > > --- a/tools/build/feature/Makefile
> > > +++ b/tools/build/feature/Makefile
> > > @@ -218,6 +218,7 @@ PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
> > >  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
> > >  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
> > >  PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
> > > +PERL_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> >
> > it looks like this is not enough, at least on fedora 35
> >
> > I had to add changes below on top of your patch, it fixed the perl
> > feature detection and perf build itself, but I'm still getting error
> > with perf/python.so:
> >
>
> Correct. This patch simply fixes the perl feature detection.
>
> >         $ CC=clang make JOBS=1
> >         ...
> >           GEN     python/perf.so
> >         python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o: file not recognized: file format not recognized
> >         clang-13: error: linker command failed with exit code 1 (use -v to see invocation)
> >         error: command 'clang' failed with exit status 1
> >         cp: cannot stat 'python_ext_build/lib/perf*.so': No such file or directory
> >
> > with:
> >
> >         $ file python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o
> >         python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o: LLVM IR bitcode
> >
> > do you get clean compile with python lang enabled?
> >
> > jirka
> >
> >
> > ---
> > diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> > index 869073cf8449..86df0fe11ee5 100644
> > --- a/tools/build/feature/Makefile
> > +++ b/tools/build/feature/Makefile
> > @@ -217,9 +217,9 @@ strip-libs = $(filter-out -l%,$(1))
> >  PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
> >  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
> >  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
> > -PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
> > +PERL_EMBED_CCOPTS := $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
> >  PERL_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> > -FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
> > +FLAGS_PERL_EMBED  := $(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS) -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro
> >
> >  $(OUTPUT)test-libperl.bin:
> >         $(BUILD) $(FLAGS_PERL_EMBED)
> > diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> > index 96ad944ca6a8..38b0b0e7a168 100644
> > --- a/tools/perf/Makefile.config
> > +++ b/tools/perf/Makefile.config
> > @@ -778,7 +778,7 @@ else
> >    PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
> >    PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
> >    PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS))
> > -  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> > +  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS)) -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro
> >    PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
> >    FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
> >
>
> I fixed that differently by (see [1]),
>
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -213,7 +213,7 @@ endif
>
> # Treat warnings as errors unless directed not to
> ifneq ($(WERROR),0)
> -  CORE_CFLAGS += -Werror
> +  CORE_CFLAGS += -Werror -Wno-compound-token-split-by-macro
>   CXXFLAGS += -Werror
>   HOSTCFLAGS += -Werror
> endif
>
> This was sufficient here to build perf successfully.
> And maybe ifdef-ed for clang?
>
> But all this is a follow-up?
>
> [1] https://lore.kernel.org/lkml/CA+icZUUCO+gOPLZumu_rTOJz1_v7gRRYVzzEZ+RZPOZBmkqCQg@mail.gmail.com/
>
> > diff --git a/tools/perf/util/setup.py b/tools/perf/util/setup.py
> > index 483f05004e68..cfbb03babf63 100644
> > --- a/tools/perf/util/setup.py
> > +++ b/tools/perf/util/setup.py
> > @@ -43,7 +43,7 @@ class install_lib(_install_lib):
> >
> >  cflags = getenv('CFLAGS', '').split()
> >  # switch off several checks (need to be at the end of cflags list)
> > -cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls', '-DPYTHON_PERF' ]
> > +cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls', '-Wno-ignored-optimization-argument', '-DPYTHON_PERF' ]
> >  if not cc_is_clang:
> >      cflags += ['-Wno-cast-function-type' ]
> >
>
> Cannot say much to that.
>
> Do we want to fix perf building with LLVM/Clang for Linux v5.17 final or later?
> Arnaldo?
>

Attached is the patch I use to build perf.
( As said in the initial report I wanted to test perf with -std=gnu11. )
( Cannot say much if this related to perl v5.34 only. )

- Sedat -

[1] https://lore.kernel.org/lkml/CA+icZUWHd4VTKNwBtuxt9-fHoiYV+Q7tQ809Cn83k8sbQ_uNHw@mail.gmail.com/

[-- Attachment #2: 0001-perf-Fix-libperl-support-with-clang-and-perl-v5.34.patch --]
[-- Type: text/x-patch, Size: 1405 bytes --]

From 316a1917ec05772ab0f99dad534fabdd74547865 Mon Sep 17 00:00:00 2001
From: Sedat Dilek <sedat.dilek@gmail.com>
Date: Sun, 6 Mar 2022 11:29:50 +0100
Subject: [PATCH] perf: Fix libperl support with clang and perl v5.34

---
 tools/build/feature/Makefile | 2 +-
 tools/perf/Makefile.config   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index 1480910c792e..ef9b37c5c652 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -81,7 +81,7 @@ PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config
 
 all: $(FILES)
 
-__BUILD = $(CC) $(CFLAGS) -MD -Wall -Werror -o $@ $(patsubst %.bin,%.c,$(@F)) $(LDFLAGS)
+__BUILD = $(CC) $(CFLAGS) -MD -Wall -Werror -Wno-compound-token-split-by-macro -o $@ $(patsubst %.bin,%.c,$(@F)) $(LDFLAGS)
   BUILD = $(__BUILD) > $(@:.bin=.make.output) 2>&1
 
 __BUILDXX = $(CXX) $(CXXFLAGS) -MD -Wall -Werror -o $@ $(patsubst %.bin,%.cpp,$(@F)) $(LDFLAGS)
diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 96ad944ca6a8..acc987daf56e 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -213,7 +213,7 @@ endif
 
 # Treat warnings as errors unless directed not to
 ifneq ($(WERROR),0)
-  CORE_CFLAGS += -Werror
+  CORE_CFLAGS += -Werror -Wno-compound-token-split-by-macro
   CXXFLAGS += -Werror
   HOSTCFLAGS += -Werror
 endif
-- 
2.35.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] tools: feature/test-libperl.c: Sync PERL_EMBED_CCOPTS with perf
  2022-03-11 23:39     ` Sedat Dilek
@ 2022-03-12  1:41       ` Sedat Dilek
  0 siblings, 0 replies; 6+ messages in thread
From: Sedat Dilek @ 2022-03-12  1:41 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: Nathan Chancellor, Nick Desaulniers, Arnaldo Carvalho de Melo,
	Ian Rogers, Florian Fainelli, Fangrui Song, Jiri Olsa,
	Michael Petlan, Leo Yan, John Keeping, linux-kernel, llvm,
	Arnaldo Carvalho de Melo

On Sat, Mar 12, 2022 at 12:39 AM Sedat Dilek <sedat.dilek@gmail.com> wrote:
>
> On Sat, Mar 12, 2022 at 12:30 AM Sedat Dilek <sedat.dilek@gmail.com> wrote:
> >
> > On Fri, Mar 11, 2022 at 12:56 PM Jiri Olsa <olsajiri@gmail.com> wrote:
> > >
> > > On Thu, Mar 10, 2022 at 07:19:09AM +0100, Sedat Dilek wrote:
> > > > When trying to build perf with a LLVM/Clang toolchain people see errors
> > > > when testing for libperl feature.
> > > >
> > > > Jiri reports:
> > > >
> > > > > I'm getting some other lto related error:
> > > > >
> > > > >         $ cat test-libperl.make.output
> > > > >         clang-13: error: optimization flag '-ffat-lto-objects' is not supported [-Werror,-Wignored-optimization-argument]
> > > > >
> > > >
> > > > The reason is PERL_EMBED_CCOPTS is defined in two places:
> > > >
> > > > tools/build/feature/Makefile
> > > > tools/perf/Makefile.config
> > > >
> > > > As an result FLAGS_PERL_EMBED is set differently.
> > > >
> > > > For building perf '-ffat-lto-objects' is filtered-out:
> > > >
> > > > $ git grep ffat-lto-objects tools/perf/
> > > > tools/perf/Makefile.config:  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> > > >
> > > > Sync PERL_EMBED_CCOPTS in tools/build/feature/Makefile to fix this.
> > > >
> > > > For a minimal fix for Linux v5.17 this here was preferred by Arnaldo.
> > > >
> > > > Link: https://marc.info/?t=164646683300002&r=1&w=2
> > > > Reported-by: Jiri Olsa <olsajiri@gmail.com>
> > > > Reported-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> > > > Tested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> > > > Suggested-by: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
> > > > Signed-off-by: Sedat Dilek <sedat.dilek@gmail.com>
> > > > ---
> > > >  tools/build/feature/Makefile | 1 +
> > > >  1 file changed, 1 insertion(+)
> > > >
> > > > diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> > > > index 1480910c792e..869073cf8449 100644
> > > > --- a/tools/build/feature/Makefile
> > > > +++ b/tools/build/feature/Makefile
> > > > @@ -218,6 +218,7 @@ PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
> > > >  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
> > > >  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
> > > >  PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
> > > > +PERL_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> > >
> > > it looks like this is not enough, at least on fedora 35
> > >
> > > I had to add changes below on top of your patch, it fixed the perl
> > > feature detection and perf build itself, but I'm still getting error
> > > with perf/python.so:
> > >
> >
> > Correct. This patch simply fixes the perl feature detection.
> >
> > >         $ CC=clang make JOBS=1
> > >         ...
> > >           GEN     python/perf.so
> > >         python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o: file not recognized: file format not recognized
> > >         clang-13: error: linker command failed with exit code 1 (use -v to see invocation)
> > >         error: command 'clang' failed with exit status 1
> > >         cp: cannot stat 'python_ext_build/lib/perf*.so': No such file or directory
> > >
> > > with:
> > >
> > >         $ file python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o
> > >         python_ext_build/tmp/home/jolsa/kernel/linux-perf/tools/perf/util/python.o: LLVM IR bitcode
> > >
> > > do you get clean compile with python lang enabled?
> > >
> > > jirka
> > >
> > >
> > > ---
> > > diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> > > index 869073cf8449..86df0fe11ee5 100644
> > > --- a/tools/build/feature/Makefile
> > > +++ b/tools/build/feature/Makefile
> > > @@ -217,9 +217,9 @@ strip-libs = $(filter-out -l%,$(1))
> > >  PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
> > >  PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
> > >  PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
> > > -PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
> > > +PERL_EMBED_CCOPTS := $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
> > >  PERL_EMBED_CCOPTS := $(filter-out -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> > > -FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
> > > +FLAGS_PERL_EMBED  := $(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS) -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro
> > >
> > >  $(OUTPUT)test-libperl.bin:
> > >         $(BUILD) $(FLAGS_PERL_EMBED)
> > > diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> > > index 96ad944ca6a8..38b0b0e7a168 100644
> > > --- a/tools/perf/Makefile.config
> > > +++ b/tools/perf/Makefile.config
> > > @@ -778,7 +778,7 @@ else
> > >    PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
> > >    PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
> > >    PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS))
> > > -  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
> > > +  PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS)) -Wno-unused-command-line-argument -Wno-compound-token-split-by-macro
> > >    PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
> > >    FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
> > >
> >
> > I fixed that differently by (see [1]),
> >
> > --- a/tools/perf/Makefile.config
> > +++ b/tools/perf/Makefile.config
> > @@ -213,7 +213,7 @@ endif
> >
> > # Treat warnings as errors unless directed not to
> > ifneq ($(WERROR),0)
> > -  CORE_CFLAGS += -Werror
> > +  CORE_CFLAGS += -Werror -Wno-compound-token-split-by-macro
> >   CXXFLAGS += -Werror
> >   HOSTCFLAGS += -Werror
> > endif
> >
> > This was sufficient here to build perf successfully.
> > And maybe ifdef-ed for clang?
> >
> > But all this is a follow-up?
> >
> > [1] https://lore.kernel.org/lkml/CA+icZUUCO+gOPLZumu_rTOJz1_v7gRRYVzzEZ+RZPOZBmkqCQg@mail.gmail.com/
> >
> > > diff --git a/tools/perf/util/setup.py b/tools/perf/util/setup.py
> > > index 483f05004e68..cfbb03babf63 100644
> > > --- a/tools/perf/util/setup.py
> > > +++ b/tools/perf/util/setup.py
> > > @@ -43,7 +43,7 @@ class install_lib(_install_lib):
> > >
> > >  cflags = getenv('CFLAGS', '').split()
> > >  # switch off several checks (need to be at the end of cflags list)
> > > -cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls', '-DPYTHON_PERF' ]
> > > +cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls', '-Wno-ignored-optimization-argument', '-DPYTHON_PERF' ]
> > >  if not cc_is_clang:
> > >      cflags += ['-Wno-cast-function-type' ]
> > >
> >
> > Cannot say much to that.
> >
> > Do we want to fix perf building with LLVM/Clang for Linux v5.17 final or later?
> > Arnaldo?
> >
>
> Attached is the patch I use to build perf.
> ( As said in the initial report I wanted to test perf with -std=gnu11. )
> ( Cannot say much if this related to perl v5.34 only. )
>
> - Sedat -
>
> [1] https://lore.kernel.org/lkml/CA+icZUWHd4VTKNwBtuxt9-fHoiYV+Q7tQ809Cn83k8sbQ_uNHw@mail.gmail.com/

I am not familiar with your Red Hat / Fedore LLVM toolchain
environment as I use Debian/unstable AMD64.
Also, I am not a perl expert.

Again, tools/ has its own build-system and rules other than top-level Makefile.

By building with...

CC=clang ...

You simply use the clang compiler, but *GNU binutils*.

My reproducer uses clang + LLVM (bin)utils by setting also for HOSTXX:

make V=1 -j4
   HOSTCC=clang HOSTLD=ld.lld HOSTAR=llvm-ar
   CC=clang LD=ld.lld AR=llvm-ar STRIP=llvm-strip
   -C tools/perf
   PYTHON=python3.10 install-bin

I highly suggest testing this first.

Please, have a look into:

[ tools/scripts/Makefile.include ]

ifneq ($(LLVM),)
$(call allow-override,CC,clang)
$(call allow-override,AR,llvm-ar)
$(call allow-override,LD,ld.lld)
$(call allow-override,CXX,clang++)
$(call allow-override,STRIP,llvm-strip)
...
endif
...
ifneq ($(LLVM),)
HOSTAR  ?= llvm-ar
HOSTCC  ?= clang
HOSTLD  ?= ld.lld
...
endif

Furthermore, to pass unused compiler flags for clang we use in
top-level Makefile:

[ Makefile ]

ifdef CONFIG_CC_IS_CLANG
KBUILD_CPPFLAGS += -Qunused-arguments
...
endif

Again, tools/ ECO build-system is different.
No nothing -Qunused-arguments passed to any (CPP)FLAGS.

The other possibility is to do this for perf like here (as you did):

[ tools/testing/selftests/bpf/Makefile ]

ifneq ($(LLVM),)
CFLAGS += -Wno-unused-command-line-argument
endif

NOTE: Cannot say to use "ifneq ($(LLVM),)" or check for CC_NO_CLANG or
"ifeq ($(USE_CLANG), 1)" (see tools/perf/Makefile.perf).

Or even better in tools/scripts/Makefile.include.
That's sort of "tools/ top-level Make(file) include".

But I guess the problem with perf and LLVM/Clang and specific versions
of perl is the usage of -Werror.

I did:

[ tools/build/feature/Makefile ]

__BUILD = $(CC) $(CFLAGS) -MD -Wall -Werror -o $@ $(patsubst
%.bin,%.c,$(@F)) $(LDFLAGS)
__BUILD = $(CC) $(CFLAGS) -MD -Wall -Werror
-Wno-compound-token-split-by-macro -o $@ $(patsubst %.bin,%.c,$(@F))
$(LDFLAGS)

[ tools/perf/Makefile.config ]

CORE_CFLAGS += -Werror
CORE_CFLAGS += -Werror -Wno-compound-token-split-by-macro

With those changes I am able to build perf with:
1. LLVM/Clang v13 and v14
2. LLVM (bin)utils v13 and v14
3. perf v5.34
4. -std=gnu11 (with some additional patches to tools/)

Might be worth testing with (UNTESTED):

[ tools/build/feature/Makefile ]
[ tools/perf/Makefile.config ]

ifneq ($(LLVM),)
CFLAGS += -Wno-unused-command-line-argument
CFLAGS += -Wno-compound-token-split-by-macro
CFLAGS += -Wno-ignored-optimization-argument
endif

The tools/ build-system is a mess and needs to be cleaned up.

And as Arnaldo pointed out:
Consolidate PERL_EMBED_XXX and XXX_PERL_EMBED in a single place.

Happy hacking!
- sed@ -

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-03-12  1:41 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-10  6:19 [PATCH] tools: feature/test-libperl.c: Sync PERL_EMBED_CCOPTS with perf Sedat Dilek
2022-03-10 20:59 ` Nick Desaulniers
2022-03-11 11:56 ` Jiri Olsa
2022-03-11 23:30   ` Sedat Dilek
2022-03-11 23:39     ` Sedat Dilek
2022-03-12  1:41       ` Sedat Dilek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox