linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* cross compiling perf
@ 2016-06-15 14:24 Milian Wolff
  2016-06-15 15:47 ` Kim Phillips
  2016-06-16 16:11 ` Arnaldo Carvalho de Melo
  0 siblings, 2 replies; 15+ messages in thread
From: Milian Wolff @ 2016-06-15 14:24 UTC (permalink / raw)
  To: linux-perf-users

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

Hey all,

I'm trying to compile a more modern version of the user-space perf tools for 
an arm64 embedded target. So far, no cigar.

Neither tools/build/Documentation nor tools/perf/Documentation/Build.txt 
explain how this should be done. Right now, I'm trying the following from an 
SDK with an environment that already sets up CC, CFLAGS etc. pp.

[SDK] ~/milian/linux/tools/perf$ make ARCH=arm64 CROSS_COMPILE=/home/sdk/
sysroots/x86_64-oesdk-linux/usr/bin/aarch64-gnu-linux/aarch64-gnu-linux- 
CFLAGS="--sysroot=/home/sdk/sysroots/aarch64-gnu-linux -I/home/milian/target-
prefix/include -L/home/milian/target-prefix/lib $CFLAGS" 
  BUILD:   Doing 'make -j8' parallel build

Auto-detecting system features:
...                         dwarf: [ OFF ]
...            dwarf_getlocations: [ OFF ]
...                         glibc: [ OFF ]
...                          gtk2: [ OFF ]
...                      libaudit: [ OFF ]
...                        libbfd: [ OFF ]
...                        libelf: [ OFF ]
...                       libnuma: [ OFF ]
...        numa_num_possible_cpus: [ OFF ]
...                       libperl: [ OFF ]
...                     libpython: [ OFF ]
...                      libslang: [ OFF ]
...                     libcrypto: [ OFF ]
...                     libunwind: [ OFF ]
...            libdw-dwarf-unwind: [ OFF ]
...                          zlib: [ OFF ]
...                          lzma: [ OFF ]
...                     get_cpuid: [ OFF ]
...                           bpf: [ OFF ]

config/Makefile:272: *** No gnu/libc-version.h found, please install glibc-
dev[el].  Stop

How can I figure out where perf's buildsystem is looking for the dependencies? 
How can I configure it to look into both, my sysroot as well as a secondary 
path that contains some additional software I compiled manually?

Thanks

-- 
Milian Wolff | milian.wolff@kdab.com | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5903 bytes --]

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

* Re: cross compiling perf
  2016-06-15 14:24 cross compiling perf Milian Wolff
@ 2016-06-15 15:47 ` Kim Phillips
  2016-06-27 11:56   ` Milian Wolff
  2016-06-16 16:11 ` Arnaldo Carvalho de Melo
  1 sibling, 1 reply; 15+ messages in thread
From: Kim Phillips @ 2016-06-15 15:47 UTC (permalink / raw)
  To: Milian Wolff; +Cc: linux-perf-users

On Wed, 15 Jun 2016 16:24:52 +0200
Milian Wolff <milian.wolff@kdab.com> wrote:

> I'm trying to compile a more modern version of the user-space perf tools for 
> an arm64 embedded target. So far, no cigar.
...
> config/Makefile:272: *** No gnu/libc-version.h found, please install glibc-
> dev[el].  Stop

fwiw, I've had marginally greater success in the past by perfoming an
arm64-cross 'make defconfig; make -C tools/perf clean perf' before
switching to building fully-featured perfs natively.

Kim

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

* Re: cross compiling perf
  2016-06-15 14:24 cross compiling perf Milian Wolff
  2016-06-15 15:47 ` Kim Phillips
@ 2016-06-16 16:11 ` Arnaldo Carvalho de Melo
  2016-06-17  9:49   ` Milian Wolff
  1 sibling, 1 reply; 15+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-06-16 16:11 UTC (permalink / raw)
  To: Milian Wolff; +Cc: linux-perf-users

Em Wed, Jun 15, 2016 at 04:24:52PM +0200, Milian Wolff escreveu:
> I'm trying to compile a more modern version of the user-space perf tools for 
> an arm64 embedded target. So far, no cigar.
 
> Neither tools/build/Documentation nor tools/perf/Documentation/Build.txt 
> explain how this should be done. Right now, I'm trying the following from an 
> SDK with an environment that already sets up CC, CFLAGS etc. pp.
 
> [SDK] ~/milian/linux/tools/perf$ make ARCH=arm64 CROSS_COMPILE=/home/sdk/
> sysroots/x86_64-oesdk-linux/usr/bin/aarch64-gnu-linux/aarch64-gnu-linux- 
> CFLAGS="--sysroot=/home/sdk/sysroots/aarch64-gnu-linux -I/home/milian/target-
> prefix/include -L/home/milian/target-prefix/lib $CFLAGS" 
>   BUILD:   Doing 'make -j8' parallel build
 
> Auto-detecting system features:
> ...                         dwarf: [ OFF ]
> ...            dwarf_getlocations: [ OFF ]
> ...                         glibc: [ OFF ]
> ...                          gtk2: [ OFF ]
> ...                      libaudit: [ OFF ]
> ...                        libbfd: [ OFF ]
> ...                        libelf: [ OFF ]
> ...                       libnuma: [ OFF ]
> ...        numa_num_possible_cpus: [ OFF ]
> ...                       libperl: [ OFF ]
> ...                     libpython: [ OFF ]
> ...                      libslang: [ OFF ]
> ...                     libcrypto: [ OFF ]
> ...                     libunwind: [ OFF ]
> ...            libdw-dwarf-unwind: [ OFF ]
> ...                          zlib: [ OFF ]
> ...                          lzma: [ OFF ]
> ...                     get_cpuid: [ OFF ]
> ...                           bpf: [ OFF ]
> 
> config/Makefile:272: *** No gnu/libc-version.h found, please install glibc-
> dev[el].  Stop
 
> How can I figure out where perf's buildsystem is looking for the dependencies? 
> How can I configure it to look into both, my sysroot as well as a secondary 
> path that contains some additional software I compiled manually?

So, I have these cross build images here:

[root@jouet ~]# docker images | grep -- -x-
perf-build-minimal-debian-experimental-x-mips64    latest  53b5bb082ace  11 weeks ago  595.3 MB
perf-build-minimal-debian-experimental-x-mips64el  latest  427fa4c1ad0a  11 weeks ago  595.4 MB
perf-build-minimal-debian-experimental-x-mipsel    latest  1247b61110bf  11 weeks ago  589.4 MB
perf-build-minimal-ubuntu-x-arm                    latest  cb739975a1f0  11 weeks ago  380.5 MB
perf-build-minimal-ubuntu-x-arm64                  latest  83fa1b24c6b6  11 weeks ago  357.2 MB
perf-build-minimal-ubuntu-x-ppc64                  latest  b759a1866191  11 weeks ago  384.3 MB
perf-build-minimal-ubuntu-x-ppc64el                latest  a3f1e718196a  11 weeks ago  372.3 MB
[root@jouet ~]# 

But those are minimal builds, without that many devel packages, have
to go back looking for multiarch libs in debian, anyway, it works
a bit better than what you have experienced:

[root@jouet ubuntu-x-arm64]# cat Dockerfile 
FROM docker.io/ubuntu
MAINTAINER Arnaldo Carvalho de Melo <acme@kernel.org>
#ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -y
RUN apt-get upgrade -y
RUN apt-get install -y make gcc-aarch64-linux-gnu flex bison
# buildable!
# ubuntu doesn't have the other devel packages for arm64, so build just the basic tool
RUN mkdir -p /tmp/build/perf
ENTRYPOINT make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C /git/linux/tools/perf O=/tmp/build/perf
[root@jouet ubuntu-x-arm64]#
[root@jouet ubuntu-x-arm64]# docker run -v /home/acme/git:/git:Z --rm=true -t -i perf-build-minimal-ubuntu-x-arm64
make: Entering directory `/git/linux/tools/perf'
  BUILD:   Doing 'make -j4' parallel build
sh: 1: command: Illegal option -c

Auto-detecting system features:
...                         dwarf: [ OFF ]
...            dwarf_getlocations: [ OFF ]
...                         glibc: [ on  ]
...                          gtk2: [ OFF ]
...                      libaudit: [ OFF ]
...                        libbfd: [ OFF ]
...                        libelf: [ OFF ]
...                       libnuma: [ OFF ]
...        numa_num_possible_cpus: [ OFF ]
...                       libperl: [ OFF ]
...                     libpython: [ OFF ]
...                      libslang: [ OFF ]
...                     libcrypto: [ OFF ]
...                     libunwind: [ OFF ]
...            libdw-dwarf-unwind: [ OFF ]
...                          zlib: [ OFF ]
...                          lzma: [ OFF ]
...                     get_cpuid: [ OFF ]
...                           bpf: [ on  ]

config/Makefile:260: No libelf found, disables 'probe' tool and BPF support in 'perf record', please install elfutils-libelf-devel/libelf-dev
config/Makefile:413: Disabling post unwind, no support found.
config/Makefile:459: No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev
config/Makefile:470: No libcrypto.h found, disables jitted code injection, please install libssl-devel or libssl-dev
config/Makefile:485: slang not found, disables TUI support. Please install slang-devel or libslang-dev
config/Makefile:499: GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev
config/Makefile:527: Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev
config/Makefile:553: No python interpreter was found: disables Python support - please install python-devel/python-dev
config/Makefile:660: No liblzma found, disables xz kernel module decompression, please install xz-devel/liblzma-dev
config/Makefile:673: No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev
config/Makefile:730: Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc
  GEN      /tmp/build/perf/common-cmds.h
  MKDIR    /tmp/build/perf/fd/
  CC       /tmp/build/perf/fd/array.o
  CC       /tmp/build/perf/event-parse.o
  CC       /tmp/build/perf/exec-cmd.o
  MKDIR    /tmp/build/perf/fd/
  LD       /tmp/build/perf/fd/libapi-in.o
  MKDIR    /tmp/build/perf/fs/
  CC       /tmp/build/perf/fs/fs.o
  CC       /tmp/build/perf/help.o
  PERF_VERSION = 4.7.0-rc3
  CC       /tmp/build/perf/plugin_jbd2.o
  CC       /tmp/build/perf/event-plugin.o
  LD       /tmp/build/perf/plugin_jbd2-in.o
  CC       /tmp/build/perf/plugin_hrtimer.o
  CC       /tmp/build/perf/trace-seq.o
  LD       /tmp/build/perf/plugin_hrtimer-in.o
  CC       /tmp/build/perf/plugin_kmem.o
  MKDIR    /tmp/build/perf/fs/
  CC       /tmp/build/perf/fs/tracing_path.o
  CC       /tmp/build/perf/parse-filter.o
  LD       /tmp/build/perf/plugin_kmem-in.o
  CC       /tmp/build/perf/plugin_kvm.o
  LD       /tmp/build/perf/plugin_kvm-in.o
  CC       /tmp/build/perf/plugin_mac80211.o
  MKDIR    /tmp/build/perf/fs/
  LD       /tmp/build/perf/fs/libapi-in.o
  CC       /tmp/build/perf/cpu.o
  CC       /tmp/build/perf/pager.o
  LD       /tmp/build/perf/plugin_mac80211-in.o
  CC       /tmp/build/perf/plugin_sched_switch.o
  CC       /tmp/build/perf/debug.o
  CC       /tmp/build/perf/parse-utils.o
  LD       /tmp/build/perf/libapi-in.o
  CC       /tmp/build/perf/kbuffer-parse.o
  AR       /tmp/build/perf/libapi.a
  GEN      perf-archive
  GEN      perf-with-kcore
  CC       /tmp/build/perf/parse-options.o
  LD       /tmp/build/perf/plugin_sched_switch-in.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/plugin_function.o
  CC       /tmp/build/perf/util/alias.o
  LD       /tmp/build/perf/libtraceevent-in.o
  LINK     /tmp/build/perf/libtraceevent.a
  CC       /tmp/build/perf/builtin-bench.o
  LD       /tmp/build/perf/plugin_function-in.o
  CC       /tmp/build/perf/plugin_xen.o
  LD       /tmp/build/perf/plugin_xen-in.o
  CC       /tmp/build/perf/plugin_scsi.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/annotate.o
  LD       /tmp/build/perf/plugin_scsi-in.o
  CC       /tmp/build/perf/plugin_cfg80211.o
  LD       /tmp/build/perf/plugin_cfg80211-in.o
  LINK     /tmp/build/perf/plugin_jbd2.so
  CC       /tmp/build/perf/builtin-annotate.o
  LINK     /tmp/build/perf/plugin_hrtimer.so
  LINK     /tmp/build/perf/plugin_kmem.so
  LINK     /tmp/build/perf/plugin_kvm.so
  LINK     /tmp/build/perf/plugin_mac80211.so
  LINK     /tmp/build/perf/plugin_sched_switch.so
  LINK     /tmp/build/perf/plugin_function.so
  LINK     /tmp/build/perf/plugin_xen.so
  LINK     /tmp/build/perf/plugin_scsi.so
  LINK     /tmp/build/perf/plugin_cfg80211.so
  GEN      /tmp/build/perf/libtraceevent-dynamic-list
  MKDIR    /tmp/build/perf/arch/
  CC       /tmp/build/perf/arch/common.o
  CC       /tmp/build/perf/run-command.o
  CC       /tmp/build/perf/builtin-config.o
  CC       /tmp/build/perf/sigchain.o
  CC       /tmp/build/perf/builtin-diff.o
  MKDIR    /tmp/build/perf/arch/arm64/util/
  LD       /tmp/build/perf/arch/arm64/util/libperf-in.o
  MKDIR    /tmp/build/perf/arch/arm64/
  LD       /tmp/build/perf/arch/arm64/libperf-in.o
  MKDIR    /tmp/build/perf/arch/
  LD       /tmp/build/perf/arch/libperf-in.o
  MKDIR    /tmp/build/perf/ui/
  CC       /tmp/build/perf/ui/setup.o
  CC       /tmp/build/perf/subcmd-config.o
  LD       /tmp/build/perf/libsubcmd-in.o
  AR       /tmp/build/perf/libsubcmd.a
  MKDIR    /tmp/build/perf/ui/
  CC       /tmp/build/perf/ui/helpline.o
  MKDIR    /tmp/build/perf/ui/
  CC       /tmp/build/perf/ui/progress.o
  MKDIR    /tmp/build/perf/ui/
  CC       /tmp/build/perf/ui/util.o
  MKDIR    /tmp/build/perf/ui/
  CC       /tmp/build/perf/ui/hist.o
  MKDIR    /tmp/build/perf/ui/stdio/
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/build-id.o
  CC       /tmp/build/perf/ui/stdio/hist.o
  CC       /tmp/build/perf/builtin-evlist.o
  CC       /tmp/build/perf/builtin-help.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/config.o
  CC       /tmp/build/perf/builtin-sched.o
  CC       /tmp/build/perf/builtin-buildid-list.o
  CC       /tmp/build/perf/builtin-buildid-cache.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/ctype.o
  MKDIR    /tmp/build/perf/ui/
  LD       /tmp/build/perf/ui/libperf-in.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/db-export.o
  MKDIR    /tmp/build/perf/scripts/
  LD       /tmp/build/perf/scripts/libperf-in.o
  CC       /tmp/build/perf/builtin-list.o
  CC       /tmp/build/perf/builtin-record.o
  CC       /tmp/build/perf/builtin-report.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/env.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/event.o
  CC       /tmp/build/perf/builtin-stat.o
  CC       /tmp/build/perf/builtin-timechart.o
  CC       /tmp/build/perf/builtin-top.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/evlist.o
  CC       /tmp/build/perf/builtin-script.o
  CC       /tmp/build/perf/builtin-kmem.o
  CC       /tmp/build/perf/builtin-lock.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/evsel.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/evsel_fprintf.o
  CC       /tmp/build/perf/builtin-kvm.o
  CC       /tmp/build/perf/builtin-inject.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/find_bit.o
  MKDIR    /tmp/build/perf/util/
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/kallsyms.o
  CC       /tmp/build/perf/util/levenshtein.o
  CC       /tmp/build/perf/builtin-mem.o
  CC       /tmp/build/perf/builtin-data.o
  CC       /tmp/build/perf/builtin-version.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/llvm-utils.o
  MKDIR    /tmp/build/perf/util/
  BISON    /tmp/build/perf/util/parse-events-bison.c
  MKDIR    /tmp/build/perf/bench/
  CC       /tmp/build/perf/bench/sched-messaging.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/builtin-test.o
  CC       /tmp/build/perf/perf.o
  MKDIR    /tmp/build/perf/bench/
  CC       /tmp/build/perf/bench/sched-pipe.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/perf_regs.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/parse-events.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/path.o
  MKDIR    /tmp/build/perf/bench/
  CC       /tmp/build/perf/bench/mem-functions.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/rbtree.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/libstring.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/bitmap.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/hweight.o
  MKDIR    /tmp/build/perf/bench/
  CC       /tmp/build/perf/bench/futex-hash.o
  MKDIR    /tmp/build/perf/bench/
  CC       /tmp/build/perf/bench/futex-wake.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/quote.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/strbuf.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/string.o
  MKDIR    /tmp/build/perf/bench/
  CC       /tmp/build/perf/bench/futex-wake-parallel.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/strlist.o
  MKDIR    /tmp/build/perf/bench/
  CC       /tmp/build/perf/bench/futex-requeue.o
  MKDIR    /tmp/build/perf/bench/
  CC       /tmp/build/perf/bench/futex-lock-pi.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/strfilter.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/top.o
  MKDIR    /tmp/build/perf/bench/
  LD       /tmp/build/perf/bench/perf-in.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/usage.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/dso.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/symbol.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/symbol_fprintf.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/color.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/dso-data.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/header.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/callchain.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/attr.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/values.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/vmlinux-kallsyms.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/debug.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/openat-syscall.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/machine.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/openat-syscall-all-cpus.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/openat-syscall-tp-fields.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/mmap-basic.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/perf-record.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/evsel-roundtrip-name.o
  MKDIR    /tmp/build/perf/tests/
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/map.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/pstack.o
  CC       /tmp/build/perf/tests/evsel-tp-sched.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/session.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/fdarray.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/ordered-events.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/pmu.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/hists_common.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/comm.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/thread.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/hists_link.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/thread_map.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/trace-event-parse.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/hists_filter.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/parse-events-bison.o
  MKDIR    /tmp/build/perf/util/
  BISON    /tmp/build/perf/util/pmu-bison.c
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/trace-event-read.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/hists_output.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/trace-event-info.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/trace-event-scripting.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/trace-event.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/svghelper.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/sort.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/hists_cumulate.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/hist.o
  MKDIR    /tmp/build/perf/tests/
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/tests/python-use.o
  CC       /tmp/build/perf/util/util.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/bp_signal.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/bp_signal_overflow.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/task-exit.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/sw-clock.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/mmap-thread-lookup.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/thread-mg-share.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/switch-tracking.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/keep-tracking.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/xyarray.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/cpumap.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/code-reading.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/cgroup.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/sample-parsing.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/target.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/rblist.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/intlist.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/vdso.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/parse-no-sample-id-all.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/kmod-path.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/counts.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/thread-map.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/stat.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/stat-shadow.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/llvm.o
  MKDIR    /tmp/build/perf/tests/
  MKDIR    /tmp/build/perf/tests/
  MKDIR    /tmp/build/perf/tests/
  MKDIR    /tmp/build/perf/tests/
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/bpf.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/record.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/topology.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/cpumap.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/stat.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/event_update.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/srcline.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/event-times.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/backward-ring-buffer.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/data.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/llvm-src-base.o
  MKDIR    /tmp/build/perf/util/
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/util/tsc.o
  CC       /tmp/build/perf/tests/llvm-src-kbuild.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/llvm-src-prologue.o
  MKDIR    /tmp/build/perf/tests/
  CC       /tmp/build/perf/tests/llvm-src-relocation.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/cloexec.o
  MKDIR    /tmp/build/perf/tests/
  LD       /tmp/build/perf/tests/perf-in.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/call-path.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/thread-stack.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/parse-branch-options.o
  LD       /tmp/build/perf/perf-in.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/parse-regs-options.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/term.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/help-unknown-cmd.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/mem-events.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/symbol-minimal.o
  MKDIR    /tmp/build/perf/util/scripting-engines/
  LD       /tmp/build/perf/util/scripting-engines/libperf-in.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/demangle-java.o
  MKDIR    /tmp/build/perf/util/
  FLEX     /tmp/build/perf/util/parse-events-flex.c
  MKDIR    /tmp/build/perf/util/
  FLEX     /tmp/build/perf/util/pmu-flex.c
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/pmu-bison.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/parse-events.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/parse-events-flex.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/pmu.o
  MKDIR    /tmp/build/perf/util/
  CC       /tmp/build/perf/util/pmu-flex.o
  MKDIR    /tmp/build/perf/util/
  LD       /tmp/build/perf/util/libperf-in.o
  LD       /tmp/build/perf/libperf-in.o
  AR       /tmp/build/perf/libperf.a
  LINK     /tmp/build/perf/perf
make: Leaving directory `/git/linux/tools/perf'
[root@jouet ubuntu-x-arm64]#

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

* Re: cross compiling perf
  2016-06-16 16:11 ` Arnaldo Carvalho de Melo
@ 2016-06-17  9:49   ` Milian Wolff
  2016-06-17 11:00     ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 15+ messages in thread
From: Milian Wolff @ 2016-06-17  9:49 UTC (permalink / raw)
  To: acme; +Cc: linux-perf-users

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

On Donnerstag, 16. Juni 2016 13:11:11 CEST Arnaldo Carvalho de Melo wrote:
> Em Wed, Jun 15, 2016 at 04:24:52PM +0200, Milian Wolff escreveu:
> > I'm trying to compile a more modern version of the user-space perf tools
> > for an arm64 embedded target. So far, no cigar.
> > 
> > Neither tools/build/Documentation nor tools/perf/Documentation/Build.txt
> > explain how this should be done. Right now, I'm trying the following from
> > an SDK with an environment that already sets up CC, CFLAGS etc. pp.
> > 
> > [SDK] ~/milian/linux/tools/perf$ make ARCH=arm64 CROSS_COMPILE=/home/sdk/
> > sysroots/x86_64-oesdk-linux/usr/bin/aarch64-gnu-linux/aarch64-gnu-linux-
> > CFLAGS="--sysroot=/home/sdk/sysroots/aarch64-gnu-linux
> > -I/home/milian/target- prefix/include -L/home/milian/target-prefix/lib
> > $CFLAGS"
> > 
> >   BUILD:   Doing 'make -j8' parallel build
> > 
> > Auto-detecting system features:
> > ...                         dwarf: [ OFF ]
> > ...            dwarf_getlocations: [ OFF ]
> > ...                         glibc: [ OFF ]
> > ...                          gtk2: [ OFF ]
> > ...                      libaudit: [ OFF ]
> > ...                        libbfd: [ OFF ]
> > ...                        libelf: [ OFF ]
> > ...                       libnuma: [ OFF ]
> > ...        numa_num_possible_cpus: [ OFF ]
> > ...                       libperl: [ OFF ]
> > ...                     libpython: [ OFF ]
> > ...                      libslang: [ OFF ]
> > ...                     libcrypto: [ OFF ]
> > ...                     libunwind: [ OFF ]
> > ...            libdw-dwarf-unwind: [ OFF ]
> > ...                          zlib: [ OFF ]
> > ...                          lzma: [ OFF ]
> > ...                     get_cpuid: [ OFF ]
> > ...                           bpf: [ OFF ]
> > 
> > config/Makefile:272: *** No gnu/libc-version.h found, please install
> > glibc-
> > dev[el].  Stop
> > 
> > How can I figure out where perf's buildsystem is looking for the
> > dependencies? How can I configure it to look into both, my sysroot as
> > well as a secondary path that contains some additional software I
> > compiled manually?
> 
> So, I have these cross build images here:
> 
> [root@jouet ~]# docker images | grep -- -x-
> perf-build-minimal-debian-experimental-x-mips64    latest  53b5bb082ace  11
> weeks ago  595.3 MB perf-build-minimal-debian-experimental-x-mips64el 
> latest  427fa4c1ad0a  11 weeks ago  595.4 MB
> perf-build-minimal-debian-experimental-x-mipsel    latest  1247b61110bf  11
> weeks ago  589.4 MB perf-build-minimal-ubuntu-x-arm                   
> latest  cb739975a1f0  11 weeks ago  380.5 MB
> perf-build-minimal-ubuntu-x-arm64                  latest  83fa1b24c6b6  11
> weeks ago  357.2 MB perf-build-minimal-ubuntu-x-ppc64                 
> latest  b759a1866191  11 weeks ago  384.3 MB
> perf-build-minimal-ubuntu-x-ppc64el                latest  a3f1e718196a  11
> weeks ago  372.3 MB [root@jouet ~]#
> 
> But those are minimal builds, without that many devel packages, have
> to go back looking for multiarch libs in debian, anyway, it works
> a bit better than what you have experienced:
> 
> [root@jouet ubuntu-x-arm64]# cat Dockerfile
> FROM docker.io/ubuntu
> MAINTAINER Arnaldo Carvalho de Melo <acme@kernel.org>
> #ENV DEBIAN_FRONTEND noninteractive
> RUN apt-get update -y
> RUN apt-get upgrade -y
> RUN apt-get install -y make gcc-aarch64-linux-gnu flex bison
> # buildable!
> # ubuntu doesn't have the other devel packages for arm64, so build just the
> basic tool RUN mkdir -p /tmp/build/perf
> ENTRYPOINT make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C
> /git/linux/tools/perf O=/tmp/build/perf [root@jouet ubuntu-x-arm64]#
> [root@jouet ubuntu-x-arm64]# docker run -v /home/acme/git:/git:Z --rm=true
> -t -i perf-build-minimal-ubuntu-x-arm64 make: Entering directory
> `/git/linux/tools/perf'
>   BUILD:   Doing 'make -j4' parallel build
> sh: 1: command: Illegal option -c
> 
> Auto-detecting system features:
> ...                         dwarf: [ OFF ]
> ...            dwarf_getlocations: [ OFF ]
> ...                         glibc: [ on  ]
> ...                          gtk2: [ OFF ]
> ...                      libaudit: [ OFF ]
> ...                        libbfd: [ OFF ]
> ...                        libelf: [ OFF ]
> ...                       libnuma: [ OFF ]
> ...        numa_num_possible_cpus: [ OFF ]
> ...                       libperl: [ OFF ]
> ...                     libpython: [ OFF ]
> ...                      libslang: [ OFF ]
> ...                     libcrypto: [ OFF ]
> ...                     libunwind: [ OFF ]
> ...            libdw-dwarf-unwind: [ OFF ]
> ...                          zlib: [ OFF ]
> ...                          lzma: [ OFF ]
> ...                     get_cpuid: [ OFF ]
> ...                           bpf: [ on  ]
> 
> config/Makefile:260: No libelf found, disables 'probe' tool and BPF support
> in 'perf record', please install elfutils-libelf-devel/libelf-dev
> config/Makefile:413: Disabling post unwind, no support found.
> config/Makefile:459: No libaudit.h found, disables 'trace' tool, please
> install audit-libs-devel or libaudit-dev config/Makefile:470: No
> libcrypto.h found, disables jitted code injection, please install
> libssl-devel or libssl-dev config/Makefile:485: slang not found, disables
> TUI support. Please install slang-devel or libslang-dev
> config/Makefile:499: GTK2 not found, disables GTK2 support. Please install
> gtk2-devel or libgtk2.0-dev config/Makefile:527: Missing perl devel files.
> Disabling perl scripting support, please install
> perl-ExtUtils-Embed/libperl-dev config/Makefile:553: No python interpreter
> was found: disables Python support - please install python-devel/python-dev
> config/Makefile:660: No liblzma found, disables xz kernel module
> decompression, please install xz-devel/liblzma-dev config/Makefile:673: No
> numa.h found, disables 'perf bench numa mem' benchmark, please install
> numactl-devel/libnuma-devel/libnuma-dev config/Makefile:730: Your gcc lacks
> the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please

<snip>

Thanks Arnaldo. Could you document how to specify the sysroot path and 
secondary include and library paths?

Also, how can I get more input to debug what is going wrong? So far I tried to 
strace make and edit the makefile to add debug output, but with very limited 
success. I'm used to CMake, which has both verbose error messages and keeps a 
log file around with even more information on what went wrong. Furthermore, 
for these kinds of compile checks, I can easily manually reproduce what CMake 
did to figure out what is going wrong. With perf's make files, none of this 
seems to be easily done :(

Bye

-- 
Milian Wolff | milian.wolff@kdab.com | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5903 bytes --]

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

* Re: cross compiling perf
  2016-06-17  9:49   ` Milian Wolff
@ 2016-06-17 11:00     ` Arnaldo Carvalho de Melo
  2016-06-20  1:56       ` Wangnan (F)
  0 siblings, 1 reply; 15+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-06-17 11:00 UTC (permalink / raw)
  To: Milian Wolff, jiri, Wang Nan, He Kuang; +Cc: linux-perf-users

Adding some folks to the CC list, that either worked on the make
infrastructure or that I know works with cross compiling environments,
maybe they can help.

More below.

Em Fri, Jun 17, 2016 at 11:49:28AM +0200, Milian Wolff escreveu:
> On Donnerstag, 16. Juni 2016 13:11:11 CEST Arnaldo Carvalho de Melo wrote:
> > Em Wed, Jun 15, 2016 at 04:24:52PM +0200, Milian Wolff escreveu:
> > > I'm trying to compile a more modern version of the user-space perf tools
> > > for an arm64 embedded target. So far, no cigar.
> > > 
> > > Neither tools/build/Documentation nor tools/perf/Documentation/Build.txt
> > > explain how this should be done. Right now, I'm trying the following from
> > > an SDK with an environment that already sets up CC, CFLAGS etc. pp.
> > > 
> > > [SDK] ~/milian/linux/tools/perf$ make ARCH=arm64 CROSS_COMPILE=/home/sdk/
> > > sysroots/x86_64-oesdk-linux/usr/bin/aarch64-gnu-linux/aarch64-gnu-linux-
> > > CFLAGS="--sysroot=/home/sdk/sysroots/aarch64-gnu-linux
> > > -I/home/milian/target- prefix/include -L/home/milian/target-prefix/lib
> > > $CFLAGS"
> > > 
> > >   BUILD:   Doing 'make -j8' parallel build
> > > 
> > > Auto-detecting system features:
> > > ...                         dwarf: [ OFF ]
> > > ...            dwarf_getlocations: [ OFF ]
> > > ...                         glibc: [ OFF ]
> > > ...                          gtk2: [ OFF ]
> > > ...                      libaudit: [ OFF ]
> > > ...                        libbfd: [ OFF ]
> > > ...                        libelf: [ OFF ]
> > > ...                       libnuma: [ OFF ]
> > > ...        numa_num_possible_cpus: [ OFF ]
> > > ...                       libperl: [ OFF ]
> > > ...                     libpython: [ OFF ]
> > > ...                      libslang: [ OFF ]
> > > ...                     libcrypto: [ OFF ]
> > > ...                     libunwind: [ OFF ]
> > > ...            libdw-dwarf-unwind: [ OFF ]
> > > ...                          zlib: [ OFF ]
> > > ...                          lzma: [ OFF ]
> > > ...                     get_cpuid: [ OFF ]
> > > ...                           bpf: [ OFF ]
> > > 
> > > config/Makefile:272: *** No gnu/libc-version.h found, please install
> > > glibc-
> > > dev[el].  Stop
> > > 
> > > How can I figure out where perf's buildsystem is looking for the
> > > dependencies? How can I configure it to look into both, my sysroot as
> > > well as a secondary path that contains some additional software I
> > > compiled manually?
> > 
> > So, I have these cross build images here:
> > 
> > [root@jouet ~]# docker images | grep -- -x-
> > perf-build-minimal-debian-experimental-x-mips64    latest  53b5bb082ace  11
> > weeks ago  595.3 MB perf-build-minimal-debian-experimental-x-mips64el 
> > latest  427fa4c1ad0a  11 weeks ago  595.4 MB
> > perf-build-minimal-debian-experimental-x-mipsel    latest  1247b61110bf  11
> > weeks ago  589.4 MB perf-build-minimal-ubuntu-x-arm                   
> > latest  cb739975a1f0  11 weeks ago  380.5 MB
> > perf-build-minimal-ubuntu-x-arm64                  latest  83fa1b24c6b6  11
> > weeks ago  357.2 MB perf-build-minimal-ubuntu-x-ppc64                 
> > latest  b759a1866191  11 weeks ago  384.3 MB
> > perf-build-minimal-ubuntu-x-ppc64el                latest  a3f1e718196a  11
> > weeks ago  372.3 MB [root@jouet ~]#
> > 
> > But those are minimal builds, without that many devel packages, have
> > to go back looking for multiarch libs in debian, anyway, it works
> > a bit better than what you have experienced:
> > 
> > [root@jouet ubuntu-x-arm64]# cat Dockerfile
> > FROM docker.io/ubuntu
> > MAINTAINER Arnaldo Carvalho de Melo <acme@kernel.org>
> > #ENV DEBIAN_FRONTEND noninteractive
> > RUN apt-get update -y
> > RUN apt-get upgrade -y
> > RUN apt-get install -y make gcc-aarch64-linux-gnu flex bison
> > # buildable!
> > # ubuntu doesn't have the other devel packages for arm64, so build just the
> > basic tool RUN mkdir -p /tmp/build/perf
> > ENTRYPOINT make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C
> > /git/linux/tools/perf O=/tmp/build/perf [root@jouet ubuntu-x-arm64]#
> > [root@jouet ubuntu-x-arm64]# docker run -v /home/acme/git:/git:Z --rm=true
> > -t -i perf-build-minimal-ubuntu-x-arm64 make: Entering directory
> > `/git/linux/tools/perf'
> >   BUILD:   Doing 'make -j4' parallel build
> > sh: 1: command: Illegal option -c
> > 
> > Auto-detecting system features:
> > ...                         dwarf: [ OFF ]
> > ...            dwarf_getlocations: [ OFF ]
> > ...                         glibc: [ on  ]
> > ...                          gtk2: [ OFF ]
> > ...                      libaudit: [ OFF ]
> > ...                        libbfd: [ OFF ]
> > ...                        libelf: [ OFF ]
> > ...                       libnuma: [ OFF ]
> > ...        numa_num_possible_cpus: [ OFF ]
> > ...                       libperl: [ OFF ]
> > ...                     libpython: [ OFF ]
> > ...                      libslang: [ OFF ]
> > ...                     libcrypto: [ OFF ]
> > ...                     libunwind: [ OFF ]
> > ...            libdw-dwarf-unwind: [ OFF ]
> > ...                          zlib: [ OFF ]
> > ...                          lzma: [ OFF ]
> > ...                     get_cpuid: [ OFF ]
> > ...                           bpf: [ on  ]
> > 
> > config/Makefile:260: No libelf found, disables 'probe' tool and BPF support
> > in 'perf record', please install elfutils-libelf-devel/libelf-dev
> > config/Makefile:413: Disabling post unwind, no support found.
> > config/Makefile:459: No libaudit.h found, disables 'trace' tool, please
> > install audit-libs-devel or libaudit-dev config/Makefile:470: No
> > libcrypto.h found, disables jitted code injection, please install
> > libssl-devel or libssl-dev config/Makefile:485: slang not found, disables
> > TUI support. Please install slang-devel or libslang-dev
> > config/Makefile:499: GTK2 not found, disables GTK2 support. Please install
> > gtk2-devel or libgtk2.0-dev config/Makefile:527: Missing perl devel files.
> > Disabling perl scripting support, please install
> > perl-ExtUtils-Embed/libperl-dev config/Makefile:553: No python interpreter
> > was found: disables Python support - please install python-devel/python-dev
> > config/Makefile:660: No liblzma found, disables xz kernel module
> > decompression, please install xz-devel/liblzma-dev config/Makefile:673: No
> > numa.h found, disables 'perf bench numa mem' benchmark, please install
> > numactl-devel/libnuma-devel/libnuma-dev config/Makefile:730: Your gcc lacks
> > the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please
> 
> <snip>
> 
> Thanks Arnaldo. Could you document how to specify the sysroot path and 
> secondary include and library paths?
> 
> Also, how can I get more input to debug what is going wrong? So far I tried to 
> strace make and edit the makefile to add debug output, but with very limited 
> success. I'm used to CMake, which has both verbose error messages and keeps a 
> log file around with even more information on what went wrong. Furthermore, 
> for these kinds of compile checks, I can easily manually reproduce what CMake 
> did to figure out what is going wrong. With perf's make files, none of this 
> seems to be easily done :(

Yeah, we're really bad at documenting things, lemme try finding what can
help here:

tools/build/Documentation/Build.txt
tools/perf/Documentation/Build.txt

And in your output dir (O= or in place, in tools/perf/)

[acme@jouet linux]$ ls -la /tmp/build/perf/feature/*.output | tail
-rw-rw-r--. 1 acme acme   0 Jun 16 18:36 /tmp/build/perf/feature/test-libunwind.make.output
-rw-rw-r--. 1 acme acme   0 Jun 16 18:36 /tmp/build/perf/feature/test-libunwind-x86_64.make.output
-rw-rw-r--. 1 acme acme 107 Jun 16 18:41 /tmp/build/perf/feature/test-libunwind-x86.make.output
-rw-rw-r--. 1 acme acme   0 Jun 16 18:36 /tmp/build/perf/feature/test-lzma.make.output
-rw-rw-r--. 1 acme acme   0 Jun 16 18:36 /tmp/build/perf/feature/test-numa_num_possible_cpus.make.output
-rw-rw-r--. 1 acme acme   0 Jun 16 18:36 /tmp/build/perf/feature/test-pthread-attr-setaffinity-np.make.output
-rw-rw-r--. 1 acme acme   0 Jun 16 18:36 /tmp/build/perf/feature/test-stackprotector-all.make.output
-rw-rw-r--. 1 acme acme   0 Jun 16 18:36 /tmp/build/perf/feature/test-sync-compare-and-swap.make.output
-rw-rw-r--. 1 acme acme   0 Jun 16 18:36 /tmp/build/perf/feature/test-timerfd.make.output
-rw-rw-r--. 1 acme acme   0 Jun 16 18:36 /tmp/build/perf/feature/test-zlib.make.output
[acme@jouet linux]$ 

So, a zero sized file means that feature was detected without a problem, lets
see one that has content:

[acme@jouet linux]$ cat /tmp/build/perf/feature/test-libunwind-x86.make.output
test-libunwind-x86.c:1:27: fatal error: libunwind-x86.h: No such file or directory
compilation terminated.
[acme@jouet linux]$ 

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

* Re: cross compiling perf
  2016-06-17 11:00     ` Arnaldo Carvalho de Melo
@ 2016-06-20  1:56       ` Wangnan (F)
  2016-06-27 11:56         ` Milian Wolff
  0 siblings, 1 reply; 15+ messages in thread
From: Wangnan (F) @ 2016-06-20  1:56 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Milian Wolff, jiri, He Kuang; +Cc: linux-perf-users



On 2016/6/17 19:00, Arnaldo Carvalho de Melo wrote:
> Adding some folks to the CC list, that either worked on the make
> infrastructure or that I know works with cross compiling environments,
> maybe they can help.
>
> More below.
>
> Em Fri, Jun 17, 2016 at 11:49:28AM +0200, Milian Wolff escreveu:
>> On Donnerstag, 16. Juni 2016 13:11:11 CEST Arnaldo Carvalho de Melo wrote:
>>> Em Wed, Jun 15, 2016 at 04:24:52PM +0200, Milian Wolff escreveu:
>>>> I'm trying to compile a more modern version of the user-space perf tools
>>>> for an arm64 embedded target. So far, no cigar.
>>>>
>>>> Neither tools/build/Documentation nor tools/perf/Documentation/Build.txt
>>>> explain how this should be done. Right now, I'm trying the following from
>>>> an SDK with an environment that already sets up CC, CFLAGS etc. pp.
>>>>
>>>> [SDK] ~/milian/linux/tools/perf$ make ARCH=arm64 CROSS_COMPILE=/home/sdk/
>>>> sysroots/x86_64-oesdk-linux/usr/bin/aarch64-gnu-linux/aarch64-gnu-linux-
>>>> CFLAGS="--sysroot=/home/sdk/sysroots/aarch64-gnu-linux
>>>> -I/home/milian/target- prefix/include -L/home/milian/target-prefix/lib
>>>> $CFLAGS"
>>>>
>>>>    BUILD:   Doing 'make -j8' parallel build
>>>>
>>>> Auto-detecting system features:
>>>> ...                         dwarf: [ OFF ]
>>>> ...            dwarf_getlocations: [ OFF ]
>>>> ...                         glibc: [ OFF ]
>>>> ...                          gtk2: [ OFF ]
>>>> ...                      libaudit: [ OFF ]
>>>> ...                        libbfd: [ OFF ]
>>>> ...                        libelf: [ OFF ]
>>>> ...                       libnuma: [ OFF ]
>>>> ...        numa_num_possible_cpus: [ OFF ]
>>>> ...                       libperl: [ OFF ]
>>>> ...                     libpython: [ OFF ]
>>>> ...                      libslang: [ OFF ]
>>>> ...                     libcrypto: [ OFF ]
>>>> ...                     libunwind: [ OFF ]
>>>> ...            libdw-dwarf-unwind: [ OFF ]
>>>> ...                          zlib: [ OFF ]
>>>> ...                          lzma: [ OFF ]
>>>> ...                     get_cpuid: [ OFF ]
>>>> ...                           bpf: [ OFF ]
>>>>
>>>> config/Makefile:272: *** No gnu/libc-version.h found, please install
>>>> glibc-
>>>> dev[el].  Stop

I think this error message is missleading. Let's see source code:

ifdef NO_LIBELF
   ...
else
   ifeq ($(feature-libelf), 0)
     ifeq ($(feature-glibc), 1)
       LIBC_SUPPORT := 1
     endif
     ifeq ($(BIONIC),1)
       LIBC_SUPPORT := 1
     endif
     ifeq ($(LIBC_SUPPORT),1)
       ...
     else
       ifneq ($(filter s% -static%,$(LDFLAGS),),)
         msg := $(error No static glibc found, please install glibc-static);
       else
         msg := $(error No gnu/libc-version.h found, please install 
glibc-dev[el]);
       endif
     endif
   else
     ...
   endif # libelf support
endif # NO_LIBELF

So the 'libc-version.h' error message really means the failure of 
feature-glibc detector.
There's many reasons cause libc detector fail. 'libc-version.h' in error 
message provides
wrong clue, lead user to check this file instead of checking feature 
check result.

Thank you.

>>>> How can I figure out where perf's buildsystem is looking for the
>>>> dependencies? How can I configure it to look into both, my sysroot as
>>>> well as a secondary path that contains some additional software I
>>>> compiled manually?
>>>
[SNIP]

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

* Re: cross compiling perf
  2016-06-20  1:56       ` Wangnan (F)
@ 2016-06-27 11:56         ` Milian Wolff
  2016-08-03 20:56           ` Milian Wolff
  0 siblings, 1 reply; 15+ messages in thread
From: Milian Wolff @ 2016-06-27 11:56 UTC (permalink / raw)
  To: wangnan0; +Cc: acme, jiri, hekuang, linux-perf-users

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

On Monday, June 20, 2016 9:56:09 AM CEST Wangnan (F) wrote:
> On 2016/6/17 19:00, Arnaldo Carvalho de Melo wrote:
> > Adding some folks to the CC list, that either worked on the make
> > infrastructure or that I know works with cross compiling environments,
> > maybe they can help.
> > 
> > More below.
> > 
> > Em Fri, Jun 17, 2016 at 11:49:28AM +0200, Milian Wolff escreveu:
> >> On Donnerstag, 16. Juni 2016 13:11:11 CEST Arnaldo Carvalho de Melo 
wrote:
> >>> Em Wed, Jun 15, 2016 at 04:24:52PM +0200, Milian Wolff escreveu:
> >>>> I'm trying to compile a more modern version of the user-space perf
> >>>> tools
> >>>> for an arm64 embedded target. So far, no cigar.
> >>>> 
> >>>> Neither tools/build/Documentation nor
> >>>> tools/perf/Documentation/Build.txt
> >>>> explain how this should be done. Right now, I'm trying the following
> >>>> from
> >>>> an SDK with an environment that already sets up CC, CFLAGS etc. pp.
> >>>> 
> >>>> [SDK] ~/milian/linux/tools/perf$ make ARCH=arm64
> >>>> CROSS_COMPILE=/home/sdk/
> >>>> sysroots/x86_64-oesdk-linux/usr/bin/aarch64-gnu-linux/aarch64-gnu-linux
> >>>> -
> >>>> CFLAGS="--sysroot=/home/sdk/sysroots/aarch64-gnu-linux
> >>>> -I/home/milian/target- prefix/include -L/home/milian/target-prefix/lib
> >>>> $CFLAGS"
> >>>> 
> >>>>    BUILD:   Doing 'make -j8' parallel build
> >>>> 
> >>>> Auto-detecting system features:
> >>>> ...                         dwarf: [ OFF ]
> >>>> ...            dwarf_getlocations: [ OFF ]
> >>>> ...                         glibc: [ OFF ]
> >>>> ...                          gtk2: [ OFF ]
> >>>> ...                      libaudit: [ OFF ]
> >>>> ...                        libbfd: [ OFF ]
> >>>> ...                        libelf: [ OFF ]
> >>>> ...                       libnuma: [ OFF ]
> >>>> ...        numa_num_possible_cpus: [ OFF ]
> >>>> ...                       libperl: [ OFF ]
> >>>> ...                     libpython: [ OFF ]
> >>>> ...                      libslang: [ OFF ]
> >>>> ...                     libcrypto: [ OFF ]
> >>>> ...                     libunwind: [ OFF ]
> >>>> ...            libdw-dwarf-unwind: [ OFF ]
> >>>> ...                          zlib: [ OFF ]
> >>>> ...                          lzma: [ OFF ]
> >>>> ...                     get_cpuid: [ OFF ]
> >>>> ...                           bpf: [ OFF ]
> >>>> 
> >>>> config/Makefile:272: *** No gnu/libc-version.h found, please install
> >>>> glibc-
> >>>> dev[el].  Stop
> 
> I think this error message is missleading. Let's see source code:
> 
> ifdef NO_LIBELF
>    ...
> else
>    ifeq ($(feature-libelf), 0)
>      ifeq ($(feature-glibc), 1)
>        LIBC_SUPPORT := 1
>      endif
>      ifeq ($(BIONIC),1)
>        LIBC_SUPPORT := 1
>      endif
>      ifeq ($(LIBC_SUPPORT),1)
>        ...
>      else
>        ifneq ($(filter s% -static%,$(LDFLAGS),),)
>          msg := $(error No static glibc found, please install glibc-static);
> else
>          msg := $(error No gnu/libc-version.h found, please install
> glibc-dev[el]);
>        endif
>      endif
>    else
>      ...
>    endif # libelf support
> endif # NO_LIBELF
> 
> So the 'libc-version.h' error message really means the failure of
> feature-glibc detector.
> There's many reasons cause libc detector fail. 'libc-version.h' in error
> message provides
> wrong clue, lead user to check this file instead of checking feature
> check result.

OK, so if it's the wrong clue, can you tell me what else to look at then?

I'm seeing

$ echo $CC
aarch64-gnu-linux-gcc --sysroot=/home/yocto/SDK/E013/sdk/sysroots/aarch64-gnu-
linux
$ echo $PWD
path/to/linux/tools/build/feature
$ $CC test-glib.c
$ echo $?
0

The above looks good, but from a make run I get:

$ cat test-glibc.make.output 
test-glibc.c:1:20: fatal error: stdlib.h: No such file or directory
 #include <stdlib.h>
                    ^
compilation terminated.

Can I somehow figure out how it tries to compile the test-glib.c file? I.e. 
can I invoke "make" in a verbose mode that outputs all commands?

Thanks
-- 
Milian Wolff | milian.wolff@kdab.com | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5903 bytes --]

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

* Re: cross compiling perf
  2016-06-15 15:47 ` Kim Phillips
@ 2016-06-27 11:56   ` Milian Wolff
  0 siblings, 0 replies; 15+ messages in thread
From: Milian Wolff @ 2016-06-27 11:56 UTC (permalink / raw)
  To: kim.phillips; +Cc: linux-perf-users

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

On Wednesday, June 15, 2016 10:47:06 AM CEST Kim Phillips wrote:
> On Wed, 15 Jun 2016 16:24:52 +0200
> 
> Milian Wolff <milian.wolff@kdab.com> wrote:
> > I'm trying to compile a more modern version of the user-space perf tools
> > for an arm64 embedded target. So far, no cigar.
> 
> ...
> 
> > config/Makefile:272: *** No gnu/libc-version.h found, please install
> > glibc-
> > dev[el].  Stop
> 
> fwiw, I've had marginally greater success in the past by perfoming an
> arm64-cross 'make defconfig; make -C tools/perf clean perf' before
> switching to building fully-featured perfs natively.

Doing these steps lead me to the same erroneous output as before.

Thanks
-- 
Milian Wolff | milian.wolff@kdab.com | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5903 bytes --]

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

* Re: cross compiling perf
  2016-06-27 11:56         ` Milian Wolff
@ 2016-08-03 20:56           ` Milian Wolff
  2016-08-04 13:22             ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 15+ messages in thread
From: Milian Wolff @ 2016-08-03 20:56 UTC (permalink / raw)
  To: wangnan0; +Cc: acme, jiri, hekuang, linux-perf-users

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

On Montag, 27. Juni 2016 13:56:23 CEST Milian Wolff wrote:
> On Monday, June 20, 2016 9:56:09 AM CEST Wangnan (F) wrote:
> > On 2016/6/17 19:00, Arnaldo Carvalho de Melo wrote:
> > > Adding some folks to the CC list, that either worked on the make
> > > infrastructure or that I know works with cross compiling environments,
> > > maybe they can help.
> > > 
> > > More below.
> > > 
> > > Em Fri, Jun 17, 2016 at 11:49:28AM +0200, Milian Wolff escreveu:
> > >> On Donnerstag, 16. Juni 2016 13:11:11 CEST Arnaldo Carvalho de Melo
> 
> wrote:
> > >>> Em Wed, Jun 15, 2016 at 04:24:52PM +0200, Milian Wolff escreveu:
> > >>>> I'm trying to compile a more modern version of the user-space perf
> > >>>> tools
> > >>>> for an arm64 embedded target. So far, no cigar.
> > >>>> 
> > >>>> Neither tools/build/Documentation nor
> > >>>> tools/perf/Documentation/Build.txt
> > >>>> explain how this should be done. Right now, I'm trying the following
> > >>>> from
> > >>>> an SDK with an environment that already sets up CC, CFLAGS etc. pp.
> > >>>> 
> > >>>> [SDK] ~/milian/linux/tools/perf$ make ARCH=arm64
> > >>>> CROSS_COMPILE=/home/sdk/
> > >>>> sysroots/x86_64-oesdk-linux/usr/bin/aarch64-gnu-linux/aarch64-gnu-lin
> > >>>> ux
> > >>>> -
> > >>>> CFLAGS="--sysroot=/home/sdk/sysroots/aarch64-gnu-linux
> > >>>> -I/home/milian/target- prefix/include
> > >>>> -L/home/milian/target-prefix/lib
> > >>>> $CFLAGS"
> > >>>> 
> > >>>>    BUILD:   Doing 'make -j8' parallel build
> > >>>> 
> > >>>> Auto-detecting system features:
> > >>>> ...                         dwarf: [ OFF ]
> > >>>> ...            dwarf_getlocations: [ OFF ]
> > >>>> ...                         glibc: [ OFF ]
> > >>>> ...                          gtk2: [ OFF ]
> > >>>> ...                      libaudit: [ OFF ]
> > >>>> ...                        libbfd: [ OFF ]
> > >>>> ...                        libelf: [ OFF ]
> > >>>> ...                       libnuma: [ OFF ]
> > >>>> ...        numa_num_possible_cpus: [ OFF ]
> > >>>> ...                       libperl: [ OFF ]
> > >>>> ...                     libpython: [ OFF ]
> > >>>> ...                      libslang: [ OFF ]
> > >>>> ...                     libcrypto: [ OFF ]
> > >>>> ...                     libunwind: [ OFF ]
> > >>>> ...            libdw-dwarf-unwind: [ OFF ]
> > >>>> ...                          zlib: [ OFF ]
> > >>>> ...                          lzma: [ OFF ]
> > >>>> ...                     get_cpuid: [ OFF ]
> > >>>> ...                           bpf: [ OFF ]
> > >>>> 
> > >>>> config/Makefile:272: *** No gnu/libc-version.h found, please install
> > >>>> glibc-
> > >>>> dev[el].  Stop
> > 
> > I think this error message is missleading. Let's see source code:
> > 
> > ifdef NO_LIBELF
> > 
> >    ...
> > 
> > else
> > 
> >    ifeq ($(feature-libelf), 0)
> >    
> >      ifeq ($(feature-glibc), 1)
> >      
> >        LIBC_SUPPORT := 1
> >      
> >      endif
> >      ifeq ($(BIONIC),1)
> >      
> >        LIBC_SUPPORT := 1
> >      
> >      endif
> >      ifeq ($(LIBC_SUPPORT),1)
> >      
> >        ...
> >      
> >      else
> >      
> >        ifneq ($(filter s% -static%,$(LDFLAGS),),)
> >        
> >          msg := $(error No static glibc found, please install
> >          glibc-static);
> > 
> > else
> > 
> >          msg := $(error No gnu/libc-version.h found, please install
> > 
> > glibc-dev[el]);
> > 
> >        endif
> >      
> >      endif
> >    
> >    else
> >    
> >      ...
> >    
> >    endif # libelf support
> > 
> > endif # NO_LIBELF
> > 
> > So the 'libc-version.h' error message really means the failure of
> > feature-glibc detector.
> > There's many reasons cause libc detector fail. 'libc-version.h' in error
> > message provides
> > wrong clue, lead user to check this file instead of checking feature
> > check result.
> 
> OK, so if it's the wrong clue, can you tell me what else to look at then?
> 
> I'm seeing
> 
> $ echo $CC
> aarch64-gnu-linux-gcc
> --sysroot=/home/yocto/SDK/E013/sdk/sysroots/aarch64-gnu- linux
> $ echo $PWD
> path/to/linux/tools/build/feature
> $ $CC test-glib.c
> $ echo $?
> 0
> 
> The above looks good, but from a make run I get:
> 
> $ cat test-glibc.make.output
> test-glibc.c:1:20: fatal error: stdlib.h: No such file or directory
>  #include <stdlib.h>
>                     ^
> compilation terminated.
> 
> Can I somehow figure out how it tries to compile the test-glib.c file? I.e.
> can I invoke "make" in a verbose mode that outputs all commands?

I have finally found the time to dig into these issues and now found a way to 
cross compile perf for my target platform. Here are the issues I needed to 
overcome:

a) CC can only point to the executable
For some reason, the toolchain I have to work with defines

CC=aarch64-gnu-linux-gcc --sysroot=/home/yocto/SDK/E013/sdk/sysroots/aarch64-
gnu-linux
CFLAGS=-O2 -pipe -g -feliminate-unused-debug-types -fno-omit-frame-pointer -
march=armv8-a -funwind-tables

This works everywhere else (qmake, configure, cmake), but the kernel 
buildsystem is more picky and will silently ignore the sysroot parameter set 
in CC. To fix this, one has to move the sysroot parameter into CFLAGS. This 
was the reason for the "test-glib.c" feature failure

b) Manually enable/disable features

Once the above is fixed, the feature detection is still completely broken for 
me. It seems to blindly enable all features for some reason:

~~~~~~~~~~~~~
export CC="aarch64-gnu-linux-gcc"
export CFLAGS="--sysroot=/home/yocto/SDK/E013/sdk/sysroots/aarch64-gnu-linux -
O2 -pipe -g -feliminate-unused-debug-types -fno-omit-frame-pointer -
march=armv8-a -funwind-tables"
export ARCH=arm64
export CROSS_COMPILE=aarch64-gnu-linux-
make V=1 VF=1 EXTRA_CFLAGS="$CFLAGS"
  BUILD:   Doing 'make -j8' parallel build

Auto-detecting system features:
...                         dwarf: [ on  ]
...            dwarf_getlocations: [ on  ]
...                         glibc: [ on  ]
...                          gtk2: [ on  ]
...                      libaudit: [ on  ]
...                        libbfd: [ on  ]
...                        libelf: [ on  ]
...                       libnuma: [ on  ]
...        numa_num_possible_cpus: [ on  ]
...                       libperl: [ on  ]
...                     libpython: [ on  ]
...                      libslang: [ on  ]
...                     libcrypto: [ on  ]
...                     libunwind: [ on  ]
...            libdw-dwarf-unwind: [ on  ]
...                          zlib: [ on  ]
...                          lzma: [ on  ]
...                     get_cpuid: [ on  ]
...                           bpf: [ on  ]
...                     backtrace: [ on  ]
...                fortify-source: [ on  ]
...         sync-compare-and-swap: [ on  ]
...                  gtk2-infobar: [ on  ]
...             libelf-getphdrnum: [ on  ]
...           libelf-gelf_getnote: [ on  ]
...          libelf-getshdrstrndx: [ on  ]
...                   libelf-mmap: [ on  ]
...             libpython-version: [ on  ]
...                 libunwind-x86: [ on  ]
...              libunwind-x86_64: [ on  ]
...                 libunwind-arm: [ on  ]
...             libunwind-aarch64: [ on  ]
...   pthread-attr-setaffinity-np: [ on  ]
...            stackprotector-all: [ on  ]
...                       timerfd: [ on  ]
...                           sdt: [ on  ]

<snip>

In file included from /home/yocto/milian/linux/tools/perf/util/include/../../
ui/keysyms.h:4:0,
                 from /home/yocto/milian/linux/tools/perf/util/include/../
hist.h:409,
                 from /home/yocto/milian/linux/tools/perf/util/include/../
sort.h:23,
                 from ui/gtk/browser.c:4:
/home/yocto/milian/linux/tools/perf/util/include/../../ui/libslang.h:12:19: 
fatal error: slang.h: No such file or directory
 #include <slang.h>

... and many more errors
~~~~~~~~~~~~~

Looking at the faulty FEATURE-DUMP file in tools/build, I noticed not only 
features being enabled that I have on my host but not on the target (which 
would be bad enough), but also the following, which can only mean it blindly 
enabled everything:

~~~~~~~~~~~~~~
feature-libunwind=1
feature-libunwind-x86=1
feature-libunwind-x86_64=1
feature-libunwind-arm=1
feature-libunwind-aarch64=1
~~~~~~~~~~~~~~

I work-arounded this for now by copying the faulty FEATURE-DUMP file from 
tools/build/ to some other location, then hand-editing it to disable the 
features that I know are not available for my platform (slang, sdt, numa, gtk, 
x86 libunwind, ...). Then, I pass FEATURES_DUMP=path/to/my/FEATURE-DUMP to 
make.

c) Picking up dependencies from custom prefix

I've build libelf and other dependencies manually into a custom prefix outside 
of my sysroot. To pick those up, it's not enough to pass `prefix=path/to/
prefix` to make. You need to manually add `-Ipath/to/prefix/include` to 
EXTRA_CFLAGS and `-Lpath/to/prefix/lib` to LDFLAGS...

d) My final make invocation looks like this now:

export CC=aarch64-gnu-linux-gcc
export CFLAGS="--sysroot=/home/yocto/SDK/E013/sdk/sysroots/aarch64-gnu-linux 
-O2 -pipe -g -feliminate-unused-debug-types -fno-omit-frame-pointer -
march=armv8-a -funwind-tables"

make \
    FEATURES_DUMP=/home/yocto/milian/perf-FEATURE-DUMP \
    CROSS_COMPILE="aarch64-gnu-linux-" \
    EXTRA_CFLAGS="$CFLAGS -I/home/yocto/milian/target-prefix/include" \
    LDFLAGS="-L/home/yocto/milian/target-prefix/lib $LDFLAGS" \
    prefix=/home/yocto/milian/target-prefix

The features dump contains the following:

feature-backtrace=1
feature-dwarf=1
feature-dwarf_getlocations=1
feature-fortify-source=1
feature-sync-compare-and-swap=1
feature-glibc=1
feature-gtk2=0
feature-gtk2-infobar=0
feature-libaudit=0
feature-libbfd=0
feature-libelf=1
feature-libelf-getphdrnum=1
feature-libelf-gelf_getnote=1
feature-libelf-getshdrstrndx=1
feature-libelf-mmap=1
feature-libnuma=0
feature-numa_num_possible_cpus=0
feature-libperl=0
feature-libpython=0
feature-libpython-version=0
feature-libslang=0
feature-libcrypto=1
feature-libunwind=1
feature-libunwind-x86=0
feature-libunwind-x86_64=0
feature-libunwind-arm=1
feature-libunwind-aarch64=1
feature-pthread-attr-setaffinity-np=1
feature-stackprotector-all=1
feature-timerfd=1
feature-libdw-dwarf-unwind=1
feature-zlib=1
feature-lzma=1
feature-get_cpuid=1
feature-bpf=0
feature-sdt=0

I hope this helps others. I finally have a working up2date perf on my aarch64 
platform and it seems to work form my simple 5min tests so far.

Cheers

-- 
Milian Wolff | milian.wolff@kdab.com | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5903 bytes --]

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

* Re: cross compiling perf
  2016-08-03 20:56           ` Milian Wolff
@ 2016-08-04 13:22             ` Arnaldo Carvalho de Melo
  2016-08-04 15:02               ` Milian Wolff
  0 siblings, 1 reply; 15+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-08-04 13:22 UTC (permalink / raw)
  To: Milian Wolff; +Cc: wangnan0, jiri, hekuang, linux-perf-users

Em Wed, Aug 03, 2016 at 10:56:20PM +0200, Milian Wolff escreveu:
> I hope this helps others. I finally have a working up2date perf on my aarch64 
> platform and it seems to work form my simple 5min tests so far.

Ok, that should help people, but it is way convoluted :-\

How did you obtained your cross compiler environment? Some ready made
tarball or set of distro packages? I have an ever growing set of perf
build cointainers that includes a few cross compilers:

[root@jouet tmp]# time dm
1: alpine:3.4: Ok
2: android-ndk:r12b: Ok
3: archlinux:latest: Ok
4: centos:5: Ok
5: centos:6: Ok
6: centos:7: Ok
7: debian:7: Ok
8: debian:8: Ok
9: debian:experimental: Ok
10: fedora:20: Ok
11: fedora:21: Ok
12: fedora:22: Ok
13: fedora:23: Ok
14: fedora:24: Ok
15: fedora:rawhide: Ok
16: mageia:5: Ok
17: opensuse:13.2: Ok
18: opensuse:42.1: Ok
19: ubuntu:14.04.4: Ok
20: ubuntu:15.10: Ok
21: ubuntu:16.04: Ok
22: ubuntu:16.04-x-arm64: Ok
23: ubuntu:16.04-x-armhf: Ok
24: ubuntu:16.04-x-powerpc64: Ok
25: ubuntu:16.04-x-powerpc64el: Ok
26: ubuntu:16.04-x-s390: Ok
real	15m53.494s
user	0m1.258s
sys	0m0.928s
[root@jouet tmp]# 

The android-ndk:r12b and the ubuntu:16.04-x-* ones are all cross compiler
environments, some need first cross building zlib and libelf, since those are
not pre-packaged, just the base libc, etc ones are, for instance, the one that
generates an aarch64 perf is:

[root@jouet x-arm64]# cat /root/perf/ubuntu/16.04/x-arm64/Dockerfile 
# docker.io/acmel/linux-perf-tools-build-ubuntu:16.04-x-arm64
FROM docker.io/ubuntu:16.04
MAINTAINER Arnaldo Carvalho de Melo <acme@kernel.org>
#ENV DEBIAN_FRONTEND noninteractive
# ubuntu doesn't have the other devel packages for arm64, so build just the basic tool
# libelf-dev is needed to build objtool, which is a host tool, not being cross compiled.
# It will check the cross compiled kernel objects
# It will not be used tho, as there is no support to check aarch64 binaries yet
RUN apt-get -y update && \
    apt-get install -y make gcc-aarch64-linux-gnu flex bison && \
    apt-get clean && \
    rm -rf /usr/share/doc /usr/share/gtk-doc && \
    mkdir -m 777 -p /tmp/build/perf /tmp/build/objtool && \
    groupadd -r perfbuilder && \
    useradd -r -g perfbuilder perfbuilder
RUN apt-get -y install wget bzip2 && \
    export TARGET=aarch64-linux-gnu && \
    export INSTALLDIR=/usr/${TARGET} && \
    export PATH=$INSTALLDIR/bin:$PATH && \
    export TARGETMACH=${TARGET} && \
    export CROSS=${TARGET}- && \
    export CC=${CROSS}gcc && \
    export LD=${CROSS}ld && \
    export AS=${CROSS}as && \
    wget -q http://zlib.net/zlib-1.2.8.tar.gz && \
    wget -q https://fedorahosted.org/releases/e/l/elfutils/0.166/elfutils-0.166.tar.bz2 && \
    tar xf zlib-1.2.8.tar.gz && \
    cd zlib-1.2.8 && \
    ./configure --prefix=${INSTALLDIR} && \
    make && \
    make install && \
    cd .. && \
    rm -rf zlib-1.2.8 && \
    rm -f zlib-1.2.8.tar.gz && \
    tar xf elfutils-0.166.tar.bz2 && \
    cd elfutils-0.166 && \
    ./configure --host=${TARGET} --prefix=${INSTALLDIR} && \
    make && \
    make install && \
    cd .. && \
    rm -rf elfutils-0.166 && \
    apt-get -y remove wget bzip2 && \
    apt-get clean && \
    unset TARGET INSTALLDIR TARGETMACH CROSS CC LD AS
USER perfbuilder
ENTRYPOINT make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C /git/linux/tools/perf O=/tmp/build/perf
# There is no support yet for checking aarch64 binaries, only x86_64 ones
#          make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C /git/linux/tools/objtool O=/tmp/build/objtool
[root@jouet x-arm64]#

- Arnaldo

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

* Re: cross compiling perf
  2016-08-04 13:22             ` Arnaldo Carvalho de Melo
@ 2016-08-04 15:02               ` Milian Wolff
  2016-08-04 18:36                 ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 15+ messages in thread
From: Milian Wolff @ 2016-08-04 15:02 UTC (permalink / raw)
  To: acme; +Cc: wangnan0, jiri, hekuang, linux-perf-users

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

On Thursday, August 4, 2016 10:22:25 AM CEST Arnaldo Carvalho de Melo wrote:
> Em Wed, Aug 03, 2016 at 10:56:20PM +0200, Milian Wolff escreveu:
> > I hope this helps others. I finally have a working up2date perf on my
> > aarch64 platform and it seems to work form my simple 5min tests so far.
> 
> Ok, that should help people, but it is way convoluted :-\
> 
> How did you obtained your cross compiler environment? Some ready made
> tarball or set of distro packages? I have an ever growing set of perf
> build cointainers that includes a few cross compilers:

The environment was provided to us as a tarball from a customer of ours, who 
probably got that from another subcontractor.

<snip>

    export INSTALLDIR=/usr/${TARGET} && \

^-- is that path potentially special cased in the build file? I mean you don't 
set the sysroot anywhere, nor do you seem to pass special include paths to 
perf. This of course works fine in a docker environment, but for "normal" 
development machines, where you compile and install stuff somewhere in $HOME, 
this won't work at all.

The above wouldn't directly explain the really strange behavior of the feature 
detection though (which enables _everything_ for me).

Bye
-- 
Milian Wolff | milian.wolff@kdab.com | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5903 bytes --]

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

* Re: cross compiling perf
  2016-08-04 15:02               ` Milian Wolff
@ 2016-08-04 18:36                 ` Arnaldo Carvalho de Melo
  2016-08-04 21:58                   ` Milian Wolff
  0 siblings, 1 reply; 15+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-08-04 18:36 UTC (permalink / raw)
  To: Milian Wolff; +Cc: wangnan0, jiri, hekuang, linux-perf-users

Em Thu, Aug 04, 2016 at 05:02:01PM +0200, Milian Wolff escreveu:
> On Thursday, August 4, 2016 10:22:25 AM CEST Arnaldo Carvalho de Melo wrote:
> > Em Wed, Aug 03, 2016 at 10:56:20PM +0200, Milian Wolff escreveu:
> > > I hope this helps others. I finally have a working up2date perf on my
> > > aarch64 platform and it seems to work form my simple 5min tests so far.
> > 
> > Ok, that should help people, but it is way convoluted :-\
> > 
> > How did you obtained your cross compiler environment? Some ready made
> > tarball or set of distro packages? I have an ever growing set of perf
> > build cointainers that includes a few cross compilers:
> 
> The environment was provided to us as a tarball from a customer of ours, who 
> probably got that from another subcontractor.
> 
> <snip>
> 
>     export INSTALLDIR=/usr/${TARGET} && \
> 
> ^-- is that path potentially special cased in the build file? I mean you don't 

Huh? Not that I am aware, no, I just looked at where the existing cross
build packages were located, so that I used the same place for the cross
built versions of libelf and zlib:

[root@jouet x-arm64]# docker run --entrypoint=/bin/bash -v /home/acme/git:/git:Z --rm -ti docker.io/acmel/linux-perf-tools-build-ubuntu:16.04-x-arm64 
perfbuilder@122a2cb948d6:/$
perfbuilder@122a2cb948d6:/$ dpkg -L libc6-dev-arm64-cross | tail
/usr/aarch64-linux-gnu/lib/libnss_nis.so
/usr/aarch64-linux-gnu/lib/libnss_nisplus.so
/usr/aarch64-linux-gnu/lib/libnss_files.so
/usr/aarch64-linux-gnu/lib/libdl.so
/usr/aarch64-linux-gnu/lib/libcidn.so
/usr/aarch64-linux-gnu/lib/libthread_db.so
/usr/aarch64-linux-gnu/lib/librt.so
/usr/aarch64-linux-gnu/lib/libnss_compat.so
/usr/aarch64-linux-gnu/lib/libanl.so
/usr/aarch64-linux-gnu/lib/libnss_dns.so
perfbuilder@122a2cb948d6:/$

That is the same as all the other devel packages with the arm64-cross on ubuntu
16.04:

perfbuilder@122a2cb948d6:/$ dpkg -l | grep arm64-cross
ii  libasan2-arm64-cross          5.4.0-6ubuntu1~16.04.1cross1   all  AddressSanitizer -- a fast memory error detector
ii  libatomic1-arm64-cross        5.4.0-6ubuntu1~16.04.1cross1   all  support library providing __atomic built-in functions
ii  libc6-arm64-cross             2.23-0ubuntu3cross1            all  GNU C Library: Shared libraries (for cross-compiling)
ii  libc6-dev-arm64-cross         2.23-0ubuntu3cross1            all  GNU C Library: Development Libraries and Header Files (for cross-compiling)
ii  libgcc-5-dev-arm64-cross      5.4.0-6ubuntu1~16.04.1cross1   all  GCC support library (development files)
ii  libgcc1-arm64-cross           1:5.4.0-6ubuntu1~16.04.1cross1 all  GCC support library
ii  libgomp1-arm64-cross          5.4.0-6ubuntu1~16.04.1cross1   all  GCC OpenMP (GOMP) support library
ii  libitm1-arm64-cross           5.4.0-6ubuntu1~16.04.1cross1   all  GNU Transactional Memory Library
ii  libstdc++6-arm64-cross        5.4.0-6ubuntu1~16.04.1cross1   all  GNU Standard C++ Library v3
ii  libubsan0-arm64-cross         5.4.0-6ubuntu1~16.04.1cross1   all  UBSan -- undefined behaviour sanitizer (runtime)
ii  linux-libc-dev-arm64-cross    4.4.0-18.34cross1              all  Linux Kernel Headers for development (for cross-compiling)
perfbuilder@122a2cb948d6:/$

perfbuilder@122a2cb948d6:/$ dpkg -L libasan2-arm64-cross | grep \.so\.[0-9]
/usr/aarch64-linux-gnu/lib/libasan.so.2.0.0
/usr/aarch64-linux-gnu/lib/libasan.so.2
perfbuilder@122a2cb948d6:/$

perfbuilder@122a2cb948d6:/$ dpkg -L libstdc++6-arm64-cross | grep \.so\.[0-9]
/usr/share/gdb/auto-load/usr/aarch64-linux-gnu/lib/libstdc++.so.6.0.21-gdb.py
/usr/aarch64-linux-gnu/lib/libstdc++.so.6.0.21
/usr/aarch64-linux-gnu/lib/libstdc++.so.6
perfbuilder@122a2cb948d6:/$ 

etc. So I assumed the best place to install the zlib and libelf devel files was
with that path prefix.

See it running:

# docker run -v /home/acme/git:/git:Z --rm -ti docker.io/acmel/linux-perf-tools-build-ubuntu:16.04-x-arm64
make: Entering directory '/git/linux/tools/perf'
  BUILD:   Doing 'make -j4' parallel build

Auto-detecting system features:
...                         dwarf: [ on  ]
...            dwarf_getlocations: [ on  ]
...                         glibc: [ on  ]
...                          gtk2: [ OFF ]
...                      libaudit: [ OFF ]
...                        libbfd: [ OFF ]
...                        libelf: [ on  ]
...                       libnuma: [ OFF ]
...        numa_num_possible_cpus: [ OFF ]
...                       libperl: [ OFF ]
...                     libpython: [ OFF ]
...                      libslang: [ OFF ]
...                     libcrypto: [ OFF ]
...                     libunwind: [ OFF ]
...            libdw-dwarf-unwind: [ on  ]
...                          zlib: [ on  ]
...                          lzma: [ OFF ]
...                     get_cpuid: [ OFF ]
...                           bpf: [ on  ]

Makefile.config:349: BPF prologue is not supported by architecture arm64, missing regs_query_register_offset()
Makefile.config:360: No sys/sdt.h found, no SDT events are defined, please install systemtap-sdt-devel or systemtap-sdt-dev
Makefile.config:406: No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR
Makefile.config:433: Disabling post unwind, no support found.
Makefile.config:479: No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev
Makefile.config:490: No libcrypto.h found, disables jitted code injection, please install libssl-devel or libssl-dev
Makefile.config:505: slang not found, disables TUI support. Please install slang-devel, libslang-dev or libslang2-dev
Makefile.config:519: GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev
Makefile.config:547: Missing perl devel files. Disabling perl scripting support, please install perl-ExtUtils-Embed/libperl-dev
Makefile.config:573: No python interpreter was found: disables Python support - please install python-devel/python-dev
Makefile.config:651: No bfd.h/libbfd found, please install binutils-dev[el]/zlib-static/libiberty-dev to gain symbol demangling
Makefile.config:680: No liblzma found, disables xz kernel module decompression, please install xz-devel/liblzma-dev
Makefile.config:693: No numa.h found, disables 'perf bench numa mem' benchmark, please install numactl-devel/libnuma-devel/libnuma-dev
Makefile.config:750: Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc
  GEN      /tmp/build/perf/common-cmds.h
  MKDIR    /tmp/build/perf/fd/
  CC       /tmp/build/perf/event-parse.o
  CC       /tmp/build/perf/fd/array.o
<SNIP>

----------------------

See? The features it is finding are just the ones related to having glibc, zlib
and libelf devel packages that can be used in a cross build.

> set the sysroot anywhere, nor do you seem to pass special include paths to 
> perf. This of course works fine in a docker environment, but for "normal" 
> development machines, where you compile and install stuff somewhere in $HOME, 
> this won't work at all.

Hey, a "docker environment" should be no different than a "normal" development
machine, it should work just the same, its just the former will run inside a
container, but the packages are the same I would install in my workstation if I
wanted to pollute it with a cross compiler environment. Since I want to install
tons of cross compiler environments, I better use some sort of container,
docker being the most popular, I picked it.

> The above wouldn't directly explain the really strange behavior of the feature 
> detection though (which enables _everything_ for me).

That is strage, yes, and I haven't even tried to figure out why this
happens in your case, I was just trying to show cross compiler
environments where the cross build of perf works, perhaps that would
help you figure out your specific case.

Further example, here is the Android NDK one, that is on top of Fedora 24
instead of the previous example, that is on top of Ubuntu 16.04, and here you
may have your answer, i.e. use EXTRA_CFLAGS to set --sysroot, I got that from
tools/perf/Documentation/android.txt:

[root@jouet x-arm64]# cat /root/perf/android/r12b/arm/Dockerfile 
# docker.io/acmel/linux-perf-tools-build-android-ndk:r12b
FROM docker.io/fedora:24
MAINTAINER Arnaldo Carvalho de Melo <acme@kernel.org>
ENV SOURCEFILE=android-ndk-r12b-linux-x86_64.zip
RUN dnf -y install make bison flex unzip && \
    dnf -y clean all && \
    mkdir -m 777 -p /tmp/build/perf /tmp/build/objtool && \
    curl -OL http://dl.google.com/android/repository/${SOURCEFILE} && \
    unzip -d /opt ${SOURCEFILE} && \
    rm -f ${SOURCEFILE} && \
    rm -rf /opt/android-ndk-r12b/sources \
	   /opt/android-ndk-r12b/platforms/android-[19]* \
	   /opt/android-ndk-r12b/platforms/android-2[0-3]* \
	   /opt/android-ndk-r12b/platforms/android-24/arch-mips* \
	   /opt/android-ndk-r12b/platforms/android-24/arch-x86* \
	   /opt/android-ndk-r12b/toolchains/x86* \
	   /opt/android-ndk-r12b/toolchains/mips* \
	   /opt/android-ndk-r12b/toolchains/llvm* \
	   /opt/android-ndk-r12b/prebuilt/ \
	   /opt/android-ndk-r12b/python* \
	   /opt/android-ndk-r12b/shader-tools/ &&\
    groupadd -r perfbuilder && \
    useradd -r -g perfbuilder perfbuilder
USER perfbuilder
ENV NDK=/opt/android-ndk-r12b/
ENV NDK_TOOLCHAIN=${NDK}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
ENV NDK_SYSROOT=${NDK}/platforms/android-24/arch-arm
ENTRYPOINT make -C /git/linux/tools/perf O=/tmp/build/perf WERROR=0 ARCH=arm CROSS_COMPILE=${NDK_TOOLCHAIN} EXTRA_CFLAGS="-pie --sysroot=${NDK_SYSROOT}" && \
	   make -C /git/linux/tools/objtool O=/tmp/build/objtool WERROR=0 ARCH=arm CROSS_COMPILE=${NDK_TOOLCHAIN} EXTRA_CFLAGS="-pie --sysroot=${NDK_SYSROOT}"
[root@jouet x-arm64]# 

--------------------------------------------------------

This one comes with a bit more pre-built devel packages, so did not have to
cross build zlib (I'll copy the cross build of libelf to get a bit more code
tested...) instead I threw away lots of toolchains for arches I didn't want,
leaving just the ones for "arm-linux-androideabi-", running it we get:

[root@jouet ~]# docker run -v /home/acme/git:/git:Z --rm -ti docker.io/acmel/linux-perf-tools-build-android-ndk:r12b 
make: Entering directory '/git/linux/tools/perf'
  BUILD:   Doing 'make -j4' parallel build

Auto-detecting system features:
...                         dwarf: [ OFF ]
...            dwarf_getlocations: [ OFF ]
...                         glibc: [ OFF ]
...                          gtk2: [ OFF ]
...                      libaudit: [ OFF ]
...                        libbfd: [ OFF ]
...                        libelf: [ OFF ]
...                       libnuma: [ OFF ]
...        numa_num_possible_cpus: [ OFF ]
...                       libperl: [ OFF ]
...                     libpython: [ OFF ]
...                      libslang: [ OFF ]
...                     libcrypto: [ OFF ]
...                     libunwind: [ OFF ]
...            libdw-dwarf-unwind: [ OFF ]
...                          zlib: [ on  ]
...                          lzma: [ OFF ]
...                     get_cpuid: [ OFF ]
...                           bpf: [ OFF ]

Makefile.config:260: No libelf found, disables 'probe' tool and BPF support in 'perf record', please install libelf-dev, libelf-devel or elfutils-libelf-devel
Makefile.config:360: No sys/sdt.h found, no SDT events are defined, please install systemtap-sdt-devel or systemtap-sdt-dev
Makefile.config:433: Disabling post unwind, no support found.
Makefile.config:479: No libaudit.h found, disables 'trace' tool, please install audit-libs-devel or libaudit-dev
Makefile.config:490: No libcrypto.h found, disables jitted code injection, please install libssl-devel or libssl-dev
Makefile.config:505: slang not found, disables TUI support. Please install slang-devel, libslang-dev or libslang2-dev
Makefile.config:519: GTK2 not found, disables GTK2 support. Please install gtk2-devel or libgtk2.0-dev

- Arnaldo

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

* Re: cross compiling perf
  2016-08-04 18:36                 ` Arnaldo Carvalho de Melo
@ 2016-08-04 21:58                   ` Milian Wolff
  2016-08-05  0:13                     ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 15+ messages in thread
From: Milian Wolff @ 2016-08-04 21:58 UTC (permalink / raw)
  To: acme, hekuang; +Cc: wangnan0, linux-perf-users

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

On Donnerstag, 4. August 2016 15:36:05 CEST Arnaldo Carvalho de Melo wrote:
> Em Thu, Aug 04, 2016 at 05:02:01PM +0200, Milian Wolff escreveu:
> > On Thursday, August 4, 2016 10:22:25 AM CEST Arnaldo Carvalho de Melo 
wrote:
> > > Em Wed, Aug 03, 2016 at 10:56:20PM +0200, Milian Wolff escreveu:
> > > > I hope this helps others. I finally have a working up2date perf on my
> > > > aarch64 platform and it seems to work form my simple 5min tests so
> > > > far.
> > > 
> > > Ok, that should help people, but it is way convoluted :-\
> > > 
> > > How did you obtained your cross compiler environment? Some ready made
> > > tarball or set of distro packages? I have an ever growing set of perf
> > 
> > > build cointainers that includes a few cross compilers:
> > The environment was provided to us as a tarball from a customer of ours,
> > who probably got that from another subcontractor.
> > 
> > <snip>
> > 
> >     export INSTALLDIR=/usr/${TARGET} && \
> > 
> > ^-- is that path potentially special cased in the build file? I mean you
> > don't
> Huh? Not that I am aware, no, I just looked at where the existing cross
> build packages were located, so that I used the same place for the cross
> built versions of libelf and zlib:

<snip>

> etc. So I assumed the best place to install the zlib and libelf devel files
> was with that path prefix.

Right, I think my point above was not clear: Since you essentially put your 
custom libelf into the implicit sysroot and also don't specify any prefix to 
install to, it seems to work out of the box. Is this the common way people 
build perf? From my experience working on e.g. KDE, one often has the sysroot 
(e.g. /usr), and then a bunch of custom stuff in a prefix somewhere in $HOME. 
Doing that with perf seems to be "hard", as it's not enough to do

    make prefix=$HOME/path/to/foo

but instead one also needs to pass `-I.../include` and `-L.../lib` to 
EXTRA_CFLAGS & LDFLAGS. I'd be willing to supply a patch to simplify this 
process, if you think that is acceptable.

> See it running:

<snip>

> See? The features it is finding are just the ones related to having glibc,
> zlib and libelf devel packages that can be used in a cross build.

OK, good to know. Then this clearly is something else special to my setup, 
similar to my initial problems with `--sysroot` being defined in `CC` rather 
than `EXTRA_CFLAGS`. I'll try to dig into that eventually.
 
> > set the sysroot anywhere, nor do you seem to pass special include paths to
> > perf. This of course works fine in a docker environment, but for "normal"
> > development machines, where you compile and install stuff somewhere in
> > $HOME, this won't work at all.
> 
> Hey, a "docker environment" should be no different than a "normal"
> development machine, it should work just the same, its just the former will
> run inside a container, but the packages are the same I would install in my
> workstation if I wanted to pollute it with a cross compiler environment.
> Since I want to install tons of cross compiler environments, I better use
> some sort of container, docker being the most popular, I picked it.

My point here is exactly the pollution that happens in my non-containered 
environment. There, I have tons of dev packages installed in e.g. /usr, which 
may potentially get picked up, as well as the "actual" stuff that should be 
used from the sysroot. But, again, at this point this is just speculation.

If you have the time, could you try to install some more x86 dev packages in 
your docker environments? E.g. when you install libunwind(-x86-64) - does it 
then get picked up by your arm cross compile, or does it work as it should? 
That data point would help me figure out what could go wrong.

> > The above wouldn't directly explain the really strange behavior of the
> > feature detection though (which enables _everything_ for me).
> 
> That is strage, yes, and I haven't even tried to figure out why this
> happens in your case, I was just trying to show cross compiler
> environments where the cross build of perf works, perhaps that would
> help you figure out your specific case.

Yep, it does help (see above). Thanks!

> Further example, here is the Android NDK one, that is on top of Fedora 24
> instead of the previous example, that is on top of Ubuntu 16.04, and here
> you may have your answer, i.e. use EXTRA_CFLAGS to set --sysroot, I got
> that from tools/perf/Documentation/android.txt:

I do pass --sysroot to EXTRA_CFLAGS via CFLAGS. From my previous mail:

export CFLAGS="--sysroot=...
#              ^-- CFLAGS contains --sysroot

make ...\
    EXTRA_CFLAGS="$CFLAGS -I/home/yocto/milian/target-prefix/include" \
#                 ^--- and gets passed in here
    LDFLAGS="-L/home/yocto/milian/target-prefix/lib $LDFLAGS" \
    prefix=/home/yocto/milian/target-prefix

> [root@jouet x-arm64]# cat /root/perf/android/r12b/arm/Dockerfile
> # docker.io/acmel/linux-perf-tools-build-android-ndk:r12b
> FROM docker.io/fedora:24
> MAINTAINER Arnaldo Carvalho de Melo <acme@kernel.org>
> ENV SOURCEFILE=android-ndk-r12b-linux-x86_64.zip
> RUN dnf -y install make bison flex unzip && \
>     dnf -y clean all && \
>     mkdir -m 777 -p /tmp/build/perf /tmp/build/objtool && \
>     curl -OL http://dl.google.com/android/repository/${SOURCEFILE} && \
>     unzip -d /opt ${SOURCEFILE} && \
>     rm -f ${SOURCEFILE} && \
>     rm -rf /opt/android-ndk-r12b/sources \
> 	   /opt/android-ndk-r12b/platforms/android-[19]* \
> 	   /opt/android-ndk-r12b/platforms/android-2[0-3]* \
> 	   /opt/android-ndk-r12b/platforms/android-24/arch-mips* \
> 	   /opt/android-ndk-r12b/platforms/android-24/arch-x86* \
> 	   /opt/android-ndk-r12b/toolchains/x86* \
> 	   /opt/android-ndk-r12b/toolchains/mips* \
> 	   /opt/android-ndk-r12b/toolchains/llvm* \
> 	   /opt/android-ndk-r12b/prebuilt/ \
> 	   /opt/android-ndk-r12b/python* \
> 	   /opt/android-ndk-r12b/shader-tools/ &&\
>     groupadd -r perfbuilder && \
>     useradd -r -g perfbuilder perfbuilder
> USER perfbuilder
> ENV NDK=/opt/android-ndk-r12b/
> ENV
> NDK_TOOLCHAIN=${NDK}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x8
> 6_64/bin/arm-linux-androideabi- ENV
> NDK_SYSROOT=${NDK}/platforms/android-24/arch-arm
> ENTRYPOINT make -C /git/linux/tools/perf O=/tmp/build/perf WERROR=0 ARCH=arm
> CROSS_COMPILE=${NDK_TOOLCHAIN} EXTRA_CFLAGS="-pie --sysroot=${NDK_SYSROOT}"
> && \ make -C /git/linux/tools/objtool O=/tmp/build/objtool WERROR=0
> ARCH=arm CROSS_COMPILE=${NDK_TOOLCHAIN} EXTRA_CFLAGS="-pie
> --sysroot=${NDK_SYSROOT}" [root@jouet x-arm64]#
> 
> --------------------------------------------------------
> 
> This one comes with a bit more pre-built devel packages, so did not have to
> cross build zlib (I'll copy the cross build of libelf to get a bit more code
> tested...) instead I threw away lots of toolchains for arches I didn't
> want, leaving just the ones for "arm-linux-androideabi-", running it we
> get:
> 
> [root@jouet ~]# docker run -v /home/acme/git:/git:Z --rm -ti
> docker.io/acmel/linux-perf-tools-build-android-ndk:r12b make: Entering
> directory '/git/linux/tools/perf'
>   BUILD:   Doing 'make -j4' parallel build
> 
> Auto-detecting system features:
> ...                         dwarf: [ OFF ]
> ...            dwarf_getlocations: [ OFF ]
> ...                         glibc: [ OFF ]

glibc fails, but no fatal error is shown. from the make files I seem to 
remember special casing for the bionic libc implementation, which doesn't seem 
to be represented in the feature list.

<snip>

Still, good to see that the feature detection otherwise seems to work just 
fine for your docker setups.

Thanks for the input, I'll get back to you once I know more about the failures 
on my system. Btw.:

- would it be acceptable to add a warning/error to the build system when CC 
contains more than the compiler name? 
- would a patch be accepted to automatically add $prefix/include and $prefix/
lib to -I & -L via CFLAGS/LDFLAGS in the makefile (see above)?

If so, then I'd create some patches for that.

Cheers
-- 
Milian Wolff | milian.wolff@kdab.com | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5903 bytes --]

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

* Re: cross compiling perf
  2016-08-04 21:58                   ` Milian Wolff
@ 2016-08-05  0:13                     ` Arnaldo Carvalho de Melo
  2016-08-12 10:48                       ` Milian Wolff
  0 siblings, 1 reply; 15+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-08-05  0:13 UTC (permalink / raw)
  To: Milian Wolff
  Cc: hekuang, wangnan0, Jiri Olsa, Namhyung Kim, David Ahern,
	Adrian Hunter, linux-perf-users

Em Thu, Aug 04, 2016 at 11:58:32PM +0200, Milian Wolff escreveu:
> On Donnerstag, 4. August 2016 15:36:05 CEST Arnaldo Carvalho de Melo wrote:
> > Em Thu, Aug 04, 2016 at 05:02:01PM +0200, Milian Wolff escreveu:
> > > On Thursday, August 4, 2016 10:22:25 AM CEST Arnaldo Carvalho de Melo 
> wrote:
> > > > Em Wed, Aug 03, 2016 at 10:56:20PM +0200, Milian Wolff escreveu:
> > > > > I hope this helps others. I finally have a working up2date perf on my
> > > > > aarch64 platform and it seems to work form my simple 5min tests so
> > > > > far.
> > > > 
> > > > Ok, that should help people, but it is way convoluted :-\
> > > > 
> > > > How did you obtained your cross compiler environment? Some ready made
> > > > tarball or set of distro packages? I have an ever growing set of perf
> > > 
> > > > build cointainers that includes a few cross compilers:
> > > The environment was provided to us as a tarball from a customer of ours,
> > > who probably got that from another subcontractor.
> > > 
> > > <snip>
> > > 
> > >     export INSTALLDIR=/usr/${TARGET} && \
> > > 
> > > ^-- is that path potentially special cased in the build file? I mean you
> > > don't
> > Huh? Not that I am aware, no, I just looked at where the existing cross
> > build packages were located, so that I used the same place for the cross
> > built versions of libelf and zlib:
> 
 <snip>
> 
> > etc. So I assumed the best place to install the zlib and libelf devel files
> > was with that path prefix.
> 
> Right, I think my point above was not clear: Since you essentially put your 
> custom libelf into the implicit sysroot and also don't specify any prefix to 
> install to, it seems to work out of the box. Is this the common way people 
> build perf?

I have no idea besides what is documented for android in
tools/perf/Documentation/, and that uses a --sysroot

> From my experience working on e.g. KDE, one often has the sysroot 
> (e.g. /usr), and then a bunch of custom stuff in a prefix somewhere in $HOME. 
> Doing that with perf seems to be "hard", as it's not enough to do
 
>     make prefix=$HOME/path/to/foo
> 
> but instead one also needs to pass `-I.../include` and `-L.../lib` to 
> EXTRA_CFLAGS & LDFLAGS. I'd be willing to supply a patch to simplify this 
> process, if you think that is acceptable.
> 
> > See it running:
> 
> <snip>
> 
> > See? The features it is finding are just the ones related to having glibc,
> > zlib and libelf devel packages that can be used in a cross build.
> 
> OK, good to know. Then this clearly is something else special to my setup, 
> similar to my initial problems with `--sysroot` being defined in `CC` rather 
> than `EXTRA_CFLAGS`. I'll try to dig into that eventually.
>  
> > > set the sysroot anywhere, nor do you seem to pass special include paths to
> > > perf. This of course works fine in a docker environment, but for "normal"
> > > development machines, where you compile and install stuff somewhere in
> > > $HOME, this won't work at all.
> > 
> > Hey, a "docker environment" should be no different than a "normal"
> > development machine, it should work just the same, its just the former will
> > run inside a container, but the packages are the same I would install in my
> > workstation if I wanted to pollute it with a cross compiler environment.
> > Since I want to install tons of cross compiler environments, I better use
> > some sort of container, docker being the most popular, I picked it.
> 
> My point here is exactly the pollution that happens in my non-containered 
> environment. There, I have tons of dev packages installed in e.g. /usr, which 
> may potentially get picked up, as well as the "actual" stuff that should be 
> used from the sysroot. But, again, at this point this is just speculation.

Sure, this is a valid concern and one that should grand creating a few
more containers, taking advantage of its layers stuff to reduce the
space needed, i.e. share the base stuff I have and then have another set
with the native devel packages, to test that there is no pollution and
the results are the expected ones in a cross compile env.
 
> If you have the time, could you try to install some more x86 dev packages in 
> your docker environments? E.g. when you install libunwind(-x86-64) - does it 

I'll try what I described above, which is in line with your suggestion.

> then get picked up by your arm cross compile, or does it work as it should? 
> That data point would help me figure out what could go wrong.

Will try tomorrow, if time allows, and will do it in the container
fashion, i.e. it should be a few more containers, testing this
possibility.
 
> > > The above wouldn't directly explain the really strange behavior of the
> > > feature detection though (which enables _everything_ for me).
> > 
> > That is strage, yes, and I haven't even tried to figure out why this
> > happens in your case, I was just trying to show cross compiler
> > environments where the cross build of perf works, perhaps that would
> > help you figure out your specific case.
> 
> Yep, it does help (see above). Thanks!
> 
> > Further example, here is the Android NDK one, that is on top of Fedora 24
> > instead of the previous example, that is on top of Ubuntu 16.04, and here
> > you may have your answer, i.e. use EXTRA_CFLAGS to set --sysroot, I got
> > that from tools/perf/Documentation/android.txt:
> 
> I do pass --sysroot to EXTRA_CFLAGS via CFLAGS. From my previous mail:
> 
> export CFLAGS="--sysroot=...
> #              ^-- CFLAGS contains --sysroot
> 
> make ...\
>     EXTRA_CFLAGS="$CFLAGS -I/home/yocto/milian/target-prefix/include" \
> #                 ^--- and gets passed in here
>     LDFLAGS="-L/home/yocto/milian/target-prefix/lib $LDFLAGS" \
>     prefix=/home/yocto/milian/target-prefix
> 
> > [root@jouet x-arm64]# cat /root/perf/android/r12b/arm/Dockerfile
> > # docker.io/acmel/linux-perf-tools-build-android-ndk:r12b
> > FROM docker.io/fedora:24
> > MAINTAINER Arnaldo Carvalho de Melo <acme@kernel.org>
> > ENV SOURCEFILE=android-ndk-r12b-linux-x86_64.zip
> > RUN dnf -y install make bison flex unzip && \
> >     dnf -y clean all && \
> >     mkdir -m 777 -p /tmp/build/perf /tmp/build/objtool && \
> >     curl -OL http://dl.google.com/android/repository/${SOURCEFILE} && \
> >     unzip -d /opt ${SOURCEFILE} && \
> >     rm -f ${SOURCEFILE} && \
> >     rm -rf /opt/android-ndk-r12b/sources \
> > 	   /opt/android-ndk-r12b/platforms/android-[19]* \
> > 	   /opt/android-ndk-r12b/platforms/android-2[0-3]* \
> > 	   /opt/android-ndk-r12b/platforms/android-24/arch-mips* \
> > 	   /opt/android-ndk-r12b/platforms/android-24/arch-x86* \
> > 	   /opt/android-ndk-r12b/toolchains/x86* \
> > 	   /opt/android-ndk-r12b/toolchains/mips* \
> > 	   /opt/android-ndk-r12b/toolchains/llvm* \
> > 	   /opt/android-ndk-r12b/prebuilt/ \
> > 	   /opt/android-ndk-r12b/python* \
> > 	   /opt/android-ndk-r12b/shader-tools/ &&\
> >     groupadd -r perfbuilder && \
> >     useradd -r -g perfbuilder perfbuilder
> > USER perfbuilder
> > ENV NDK=/opt/android-ndk-r12b/
> > ENV
> > NDK_TOOLCHAIN=${NDK}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x8
> > 6_64/bin/arm-linux-androideabi- ENV
> > NDK_SYSROOT=${NDK}/platforms/android-24/arch-arm
> > ENTRYPOINT make -C /git/linux/tools/perf O=/tmp/build/perf WERROR=0 ARCH=arm
> > CROSS_COMPILE=${NDK_TOOLCHAIN} EXTRA_CFLAGS="-pie --sysroot=${NDK_SYSROOT}"
> > && \ make -C /git/linux/tools/objtool O=/tmp/build/objtool WERROR=0
> > ARCH=arm CROSS_COMPILE=${NDK_TOOLCHAIN} EXTRA_CFLAGS="-pie
> > --sysroot=${NDK_SYSROOT}" [root@jouet x-arm64]#
> > 
> > --------------------------------------------------------
> > 
> > This one comes with a bit more pre-built devel packages, so did not have to
> > cross build zlib (I'll copy the cross build of libelf to get a bit more code
> > tested...) instead I threw away lots of toolchains for arches I didn't
> > want, leaving just the ones for "arm-linux-androideabi-", running it we
> > get:
> > 
> > [root@jouet ~]# docker run -v /home/acme/git:/git:Z --rm -ti
> > docker.io/acmel/linux-perf-tools-build-android-ndk:r12b make: Entering
> > directory '/git/linux/tools/perf'
> >   BUILD:   Doing 'make -j4' parallel build
> > 
> > Auto-detecting system features:
> > ...                         dwarf: [ OFF ]
> > ...            dwarf_getlocations: [ OFF ]
> > ...                         glibc: [ OFF ]
> 
> glibc fails, but no fatal error is shown. from the make files I seem to 
> remember special casing for the bionic libc implementation, which doesn't seem 
> to be represented in the feature list.

Right, in this case we _expect_ glibc to fail, IIRC, because it is not
present in this environment.
 
> <snip>
> 
> Still, good to see that the feature detection otherwise seems to work just 
> fine for your docker setups.
> 
> Thanks for the input, I'll get back to you once I know more about the failures 
> on my system. Btw.:
> 
> - would it be acceptable to add a warning/error to the build system when CC 
> contains more than the compiler name? 
> - would a patch be accepted to automatically add $prefix/include and $prefix/
> lib to -I & -L via CFLAGS/LDFLAGS in the makefile (see above)?
> 
> If so, then I'd create some patches for that.

Send patches for each of these cases, make sure to CC Jiri Olsa,
Namhyung Kim, Wang Nan, they all worked at the makefiles and hopefully
will chime in, some in cross environments, like Wang and He.

- Arnaldo

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

* Re: cross compiling perf
  2016-08-05  0:13                     ` Arnaldo Carvalho de Melo
@ 2016-08-12 10:48                       ` Milian Wolff
  0 siblings, 0 replies; 15+ messages in thread
From: Milian Wolff @ 2016-08-12 10:48 UTC (permalink / raw)
  To: acme
  Cc: hekuang, wangnan0, jolsa, namhyung, dsahern, adrian.hunter,
	linux-perf-users

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

On Thursday, August 4, 2016 9:13:27 PM CEST Arnaldo Carvalho de Melo wrote:
> Em Thu, Aug 04, 2016 at 11:58:32PM +0200, Milian Wolff escreveu:
> > On Donnerstag, 4. August 2016 15:36:05 CEST Arnaldo Carvalho de Melo 
wrote:
> > > Em Thu, Aug 04, 2016 at 05:02:01PM +0200, Milian Wolff escreveu:
> > > > On Thursday, August 4, 2016 10:22:25 AM CEST Arnaldo Carvalho de Melo
> > 
> > wrote:
> > > > > Em Wed, Aug 03, 2016 at 10:56:20PM +0200, Milian Wolff escreveu:
> > > > > > I hope this helps others. I finally have a working up2date perf on
> > > > > > my
> > > > > > aarch64 platform and it seems to work form my simple 5min tests so
> > > > > > far.
> > > > > 
> > > > > Ok, that should help people, but it is way convoluted :-\
> > > > > 
> > > > > How did you obtained your cross compiler environment? Some ready
> > > > > made
> > > > > tarball or set of distro packages? I have an ever growing set of
> > > > > perf
> > > > 
> > > > > build cointainers that includes a few cross compilers:
> > > > The environment was provided to us as a tarball from a customer of
> > > > ours,
> > > > who probably got that from another subcontractor.
> > > > 
> > > > <snip>
> > > > 
> > > >     export INSTALLDIR=/usr/${TARGET} && \
> > > > 
> > > > ^-- is that path potentially special cased in the build file? I mean
> > > > you
> > > > don't
> > > 
> > > Huh? Not that I am aware, no, I just looked at where the existing cross
> > > build packages were located, so that I used the same place for the cross
> 
> > > built versions of libelf and zlib:
>  <snip>
> 
> > > etc. So I assumed the best place to install the zlib and libelf devel
> > > files
> > > was with that path prefix.
> > 
> > Right, I think my point above was not clear: Since you essentially put
> > your
> > custom libelf into the implicit sysroot and also don't specify any prefix
> > to install to, it seems to work out of the box. Is this the common way
> > people build perf?
> 
> I have no idea besides what is documented for android in
> tools/perf/Documentation/, and that uses a --sysroot
> 
> > From my experience working on e.g. KDE, one often has the sysroot
> > (e.g. /usr), and then a bunch of custom stuff in a prefix somewhere in
> > $HOME. Doing that with perf seems to be "hard", as it's not enough to do
> > 
> >     make prefix=$HOME/path/to/foo
> > 
> > but instead one also needs to pass `-I.../include` and `-L.../lib` to
> > EXTRA_CFLAGS & LDFLAGS. I'd be willing to supply a patch to simplify this
> > process, if you think that is acceptable.
> > 
> > > See it running:
> > <snip>
> > 
> > > See? The features it is finding are just the ones related to having
> > > glibc,
> > > zlib and libelf devel packages that can be used in a cross build.
> > 
> > OK, good to know. Then this clearly is something else special to my setup,
> > similar to my initial problems with `--sysroot` being defined in `CC`
> > rather than `EXTRA_CFLAGS`. I'll try to dig into that eventually.
> > 
> > > > set the sysroot anywhere, nor do you seem to pass special include
> > > > paths to
> > > > perf. This of course works fine in a docker environment, but for
> > > > "normal"
> > > > development machines, where you compile and install stuff somewhere in
> > > > $HOME, this won't work at all.
> > > 
> > > Hey, a "docker environment" should be no different than a "normal"
> > > development machine, it should work just the same, its just the former
> > > will
> > > run inside a container, but the packages are the same I would install in
> > > my
> > > workstation if I wanted to pollute it with a cross compiler environment.
> > > Since I want to install tons of cross compiler environments, I better
> > > use
> > > some sort of container, docker being the most popular, I picked it.
> > 
> > My point here is exactly the pollution that happens in my non-containered
> > environment. There, I have tons of dev packages installed in e.g. /usr,
> > which may potentially get picked up, as well as the "actual" stuff that
> > should be used from the sysroot. But, again, at this point this is just
> > speculation.
> Sure, this is a valid concern and one that should grand creating a few
> more containers, taking advantage of its layers stuff to reduce the
> space needed, i.e. share the base stuff I have and then have another set
> with the native devel packages, to test that there is no pollution and
> the results are the expected ones in a cross compile env.
> 
> > If you have the time, could you try to install some more x86 dev packages
> > in your docker environments? E.g. when you install libunwind(-x86-64) -
> > does it
> I'll try what I described above, which is in line with your suggestion.
> 
> > then get picked up by your arm cross compile, or does it work as it
> > should?
> > That data point would help me figure out what could go wrong.
> 
> Will try tomorrow, if time allows, and will do it in the container
> fashion, i.e. it should be a few more containers, testing this
> possibility.

Update: It seems to me that the above mess-up was due to some left-over build 
artifact. I just tried to reproduce this with an up2date git checkout after 
doing a hearty `git clean -xfd` in my linux tree. The issue is gone. I thought 
to have done that before, but apparently that is not the case...

Sorry for the noise. I hope it may help someone out there who might run into 
that issue again in the future. I'll remember to use `git clean -xfd` before I 
report any other build related issues.

Cheers

-- 
Milian Wolff | milian.wolff@kdab.com | Software Engineer
KDAB (Deutschland) GmbH&Co KG, a KDAB Group company
Tel: +49-30-521325470
KDAB - The Qt Experts

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 5903 bytes --]

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

end of thread, other threads:[~2016-08-12 10:49 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-15 14:24 cross compiling perf Milian Wolff
2016-06-15 15:47 ` Kim Phillips
2016-06-27 11:56   ` Milian Wolff
2016-06-16 16:11 ` Arnaldo Carvalho de Melo
2016-06-17  9:49   ` Milian Wolff
2016-06-17 11:00     ` Arnaldo Carvalho de Melo
2016-06-20  1:56       ` Wangnan (F)
2016-06-27 11:56         ` Milian Wolff
2016-08-03 20:56           ` Milian Wolff
2016-08-04 13:22             ` Arnaldo Carvalho de Melo
2016-08-04 15:02               ` Milian Wolff
2016-08-04 18:36                 ` Arnaldo Carvalho de Melo
2016-08-04 21:58                   ` Milian Wolff
2016-08-05  0:13                     ` Arnaldo Carvalho de Melo
2016-08-12 10:48                       ` Milian Wolff

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).