Blob Blame History Raw
# TODO: reenable once we get a basic build working
# https://fedoraproject.org/wiki/Changes/SetBuildFlagsBuildCheck
# see build and install -- CXXFLAGS and LDFLAGS are enough
# still need to debug
#undefine _auto_set_build_flags

%bcond_without manpages

# requires missing header to be patched in
%bcond_without libbpf

%if 0%{?facebook}
%bcond_with perl
%else
%bcond_without perl
%endif

%global tag_version 6.12
Name:           perf
Version:        %{tag_version}.0
Release:        %autorelease
Summary:        Performance monitoring for the Linux kernel

License:        GPL-2.0-only
URL:            https://perf.wiki.kernel.org/
Source:         https://mirrors.edge.kernel.org/pub/linux/kernel/tools/perf/v%{version}/perf-%{version}.tar.xz 
Source1:        https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/arch/arm64/include/uapi/asm/bpf_perf_event.h?h=v%{tag_version}#/bpf_perf_event_arm64.h
Source2:        https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/arch/s390/include/uapi/asm/bpf_perf_event.h?h=v%{tag_version}#/bpf_perf_event_s390.h

# No java-devel
# No point having a 32-bit perf anyway as even in Fedora the kernel is 64-bit
ExcludeArch:    %{ix86}

BuildRequires:  make
BuildRequires:  bison
BuildRequires:  flex
%if 0%{?facebook}
%if 0%{?el9}
# Temporarily pin to building against the older clang
# so this works against an older Stream snapshot
BuildRequires:  clang = 18.1.8-3.el9
BuildRequires:  llvm-devel = 18.1.8-3.el9
%endif
%else
BuildRequires:  clang
BuildRequires:  llvm-devel
%endif
BuildRequires:  gcc
BuildRequires:  binutils-devel
BuildRequires:  capstone-devel
BuildRequires:  elfutils-devel
BuildRequires:  elfutils-libelf-devel
BuildRequires:  java-devel
BuildRequires:  libbabeltrace-devel
BuildRequires:  libcap-devel
BuildRequires:  libtraceevent-devel
BuildRequires:  libunwind-devel
BuildRequires:  libbabeltrace-devel
BuildRequires:  libpfm-devel
BuildRequires:  libstdc++-devel
BuildRequires:  libunwind-devel
BuildRequires:  numactl-devel
BuildRequires:  python-devel
BuildRequires:  python3dist(setuptools)
%ifarch aarch64
BuildRequires:  opencsd-devel >= 1.0.0
%endif
BuildRequires:  openssl-devel
%if %{with perl}
BuildRequires:  perl-devel
BuildRequires:  perl-interpreter
BuildRequires:  perl-ExtUtils-Embed
%endif
BuildRequires:  systemtap-sdt-devel
BuildRequires:  slang-devel
BuildRequires:  zlib-devel
%if %{with manpages}
BuildRequires:  asciidoc
BuildRequires:  xmlto
%endif

%description
This package contains the perf tool, which enables performance monitoring
of the Linux kernel.


%package -n libperf
Summary:        The perf library from kernel source

%description -n libperf
This package contains the kernel source perf library.


%package -n libperf-devel
Summary:        Development files for the perf library from kernel source
Requires:       libperf%{?_isa} = %{version}-%{release}

%description -n libperf-devel
This package includes libraries and header files needed for development
of applications which use perf library from kernel source.


%package -n python3-perf
Summary:        Python bindings for apps which will manipulate perf events

%description -n python3-perf
The python3-perf package contains a module that permits applications
written in the Python programming language to use the interface
to manipulate perf events.

# technically Makefile.config checks for lib64 but only for x86_64
# ifeq ($(SRCARCH)$(IS_64_BIT), x861)
%global perf_flags VF=1 prefix=%{_prefix} lib=%{_lib}
%ifarch aarch64
%global perf_flags %perf_flags CORESIGHT=1
%endif
%if %{without libbpf}
%global perf_flags %perf_flags NO_LIBBPF=1
%endif
%global perf_make %make_build %{perf_flags}
%global perf_make_install %make_install %{perf_flags}


%prep
%autosetup -p1
%if %{with libbpf}
# copy in missing files
UAPI_ASM_ARM_DIR=arch/arm64/include/uapi/asm
UAPI_ASM_S390_DIR=arch/s390/include/uapi/asm
mkdir -p $UAPI_ASM_ARM_DIR
mkdir -p $UAPI_ASM_S390_DIR
cp -p %{SOURCE1} $UAPI_ASM_ARM_DIR/bpf_perf_event.h
cp -p %{SOURCE2} $UAPI_ASM_S390_DIR/bpf_perf_event.h
%endif


%build
unset CXXFLAGS
unset LDFLAGS

# /usr/bin/ld: perf-in.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIE
#global optflags %{optflags} -fPIE

%perf_make -C tools/perf

%perf_make -C tools/lib/perf


%install
unset CXXFLAGS
unset LDFLAGS

%perf_make_install -C tools/perf
%perf_make_install -C tools/lib/perf

# python-perf extension
%perf_make_install install-python_ext -C tools/perf

# remove the 'trace' symlink.
rm %{buildroot}%{_bindir}/trace

rm -f %{buildroot}%{_libdir}/libperf.a

%if %{without perl}
rm %{buildroot}%{_libexecdir}/perf-core/tests/shell/common/*.pl
%endif

# TODO - make this customizable upstream
mkdir -p %{buildroot}%{bash_completions_dir}
mv %{buildroot}%{_sysconfdir}/bash_completion.d/perf %{buildroot}%{bash_completions_dir}/
rmdir %{buildroot}%{_sysconfdir}/bash_completion.d
rmdir %{buildroot}%{_sysconfdir}/


%files
# license add-license-file-here
%doc tools/perf/CREDITS
%{_bindir}/perf
%{_datadir}/perf-core
# tips.txt is both human readable and used by perf
# and really hard to override
%{_docdir}/perf-tip
%dir %{_includedir}/perf
%{_includedir}/perf/perf_dlfilter.h
%{_libdir}/libperf-jvmti.so
%{_libexecdir}/perf-core
%{bash_completions_dir}/perf
%if %{with manpages}
%{_mandir}/man1/perf*.1*
%endif

%files -n libperf
%{_libdir}/libperf.so.0
%{_libdir}/libperf.so.0.0.1

%files -n libperf-devel
%{_libdir}/libperf.so
%{_libdir}/pkgconfig/libperf.pc
%{_includedir}/internal/*.h
%{_includedir}/perf/bpf_perf.h
%{_includedir}/perf/core.h
%{_includedir}/perf/cpumap.h
%{_includedir}/perf/event.h
%{_includedir}/perf/evlist.h
%{_includedir}/perf/evsel.h
%{_includedir}/perf/mmap.h
%{_includedir}/perf/threadmap.h
%{_mandir}/man3/libperf.3.gz
%{_mandir}/man7/libperf-counting.7.gz
%{_mandir}/man7/libperf-sampling.7.gz
%{_docdir}/libperf/examples/sampling.c
%{_docdir}/libperf/examples/counting.c
%{_docdir}/libperf/html/libperf.html
%{_docdir}/libperf/html/libperf-counting.html
%{_docdir}/libperf/html/libperf-sampling.html

%files -n python3-perf
%{python3_sitearch}/*


%changelog
%autochangelog
-