Bug 2124479 - Review Request: llvm-bolt - a post-link optimizer developed to speed up large applications
Summary: Review Request: llvm-bolt - a post-link optimizer developed to speed up large...
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: Package Review
Version: rawhide
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Benson Muite
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2022-09-06 09:51 UTC by serge_sans_paille
Modified: 2022-11-03 14:14 UTC (History)
4 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2022-11-03 14:14:11 UTC
Type: ---
Embargoed:
benson_muite: fedora-review+


Attachments (Terms of Use)

Description serge_sans_paille 2022-09-06 09:51:09 UTC
Spec URL: https://sergesanspaille.fedorapeople.org/llvm-bolt.spec
SRPM URL: https://sergesanspaille.fedorapeople.org/llvm-bolt-14.0.5-1.src.rpm
Description: a post-link optimizer developed to speed up large applications
Fedora Account System Username: sergesanspaille

Comment 1 serge_sans_paille 2022-09-06 09:51:56 UTC
bolt has been part of LLVM since LLVM 14, it's packaging is made a bit difficult by its dependency on private headers...

Comment 2 Benson Muite 2022-09-06 10:05:08 UTC
Could you add a build on Copr or Koji?

Comment 4 Benson Muite 2022-09-08 06:26:02 UTC
Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed



===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: If your application is a C or C++ application you must list a
     BuildRequires against gcc, gcc-c++ or clang.
[x]: Header files in -devel subpackage, if present.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.

Generic:
[?]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "Unknown or generated", "*No copyright* Apache License 2.0".
     259 files have unknown license. Detailed output of licensecheck in
     /home/FedoraPackaging/llvm-bolt/2124479-llvm-bolt/licensecheck.txt
[?]: License file installed when any subpackage combination is installed.
[?]: %build honors applicable compiler flags or justifies otherwise.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[?]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[?]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[?]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[?]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[?]: Package is not known to require an ExcludeArch tag.
[?]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package must not depend on deprecated() packages.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: Static libraries in -static or -devel subpackage, providing -devel if
     present.
     Note: Package has .a files: llvm-bolt-static.
[x]: File names are valid UTF-8.
[x]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 0 bytes in 0 files.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[?]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in llvm-
     bolt-devel
[?]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
[|]: %check is present and all tests pass.
[?]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Sources are verified with gpgverify first in %prep if upstream
     publishes signatures.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: There are rpmlint messages (see attachment).
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Cannot parse rpmlint output:


Rpmlint (debuginfo)
-------------------
Cannot parse rpmlint output:



Rpmlint (installed packages)
----------------------------
Cannot parse rpmlint output:


Source checksums
----------------
https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.5/llvm-project-14.0.5.src.tar.xz.sig :
  CHECKSUM(SHA256) this package     : 522dc6790ddf2206e6504eff7e80e739c8e2c0a25010d4b19cf2b73e00f66726
  CHECKSUM(SHA256) upstream package : 522dc6790ddf2206e6504eff7e80e739c8e2c0a25010d4b19cf2b73e00f66726
https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.5/llvm-project-14.0.5.src.tar.xz :
  CHECKSUM(SHA256) this package     : c9d27903ba3883c476a83cd515e36e1e07b0585db55692835de11385d9e3c8fa
  CHECKSUM(SHA256) upstream package : c9d27903ba3883c476a83cd515e36e1e07b0585db55692835de11385d9e3c8fa


Requires
--------
llvm-bolt (rpmlib, GLIBC filtered):
    ld-linux-x86-64.so.2()(64bit)
    libLLVM-14.so()(64bit)
    libLLVM-14.so(LLVM_14)(64bit)
    libc.so.6()(64bit)
    libgcc_s.so.1()(64bit)
    libm.so.6()(64bit)
    libstdc++.so.6()(64bit)
    libstdc++.so.6(CXXABI_1.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.11)(64bit)
    libstdc++.so.6(CXXABI_1.3.13)(64bit)
    libstdc++.so.6(CXXABI_1.3.5)(64bit)
    libstdc++.so.6(CXXABI_1.3.9)(64bit)
    rtld(GNU_HASH)

llvm-bolt-static (rpmlib, GLIBC filtered):
    llvm-bolt(x86-64)

llvm-bolt-devel (rpmlib, GLIBC filtered):
    llvm-bolt-static(x86-64)

llvm-bolt-debuginfo (rpmlib, GLIBC filtered):

llvm-bolt-debugsource (rpmlib, GLIBC filtered):



Provides
--------
llvm-bolt:
    llvm-bolt
    llvm-bolt(x86-64)

llvm-bolt-static:
    llvm-bolt-static
    llvm-bolt-static(x86-64)

Comments:
a) There is documentation and a README available at https://gihub.com/llvm/llvm-project/tree/main/bolt it would be good to package it as well
b) Check section does not run any tests, please ass "ninja check-bolt" to add these
c) Why only build static libraries? Dynamically linked libraries are preferred
d) Clang and ldb are provided as subpackages of llvm https://packages.fedoraproject.org/pkgs/llvm/ . Can bolt be provided as a subpackage of llvm?
e) Licensing may also require some checks https://src.fedoraproject.org/rpms/llvm/pull-request/149

Comment 5 Benson Muite 2022-09-08 14:14:46 UTC
Sorry, Clang and lld are in their own repositories:
https://src.fedoraproject.org/rpms/clang/blob/rawhide/f/clang.spec
https://src.fedoraproject.org/rpms/lld/blob/rawhide/f/lld.spec

So a separate repository seems fine.

Comment 6 Benson Muite 2022-09-08 14:33:46 UTC
Also note that LLVM 15 and 14.06 have been released https://github.com/llvm/llvm-project/releases/

Comment 7 serge_sans_paille 2022-09-21 14:43:48 UTC
Thanks for the feedback!
New spec file, srpm and associated build:

https://sergesanspaille.fedorapeople.org/llvm-bolt.spec
https://sergesanspaille.fedorapeople.org/llvm-bolt-15.0.0-1.src.rpm
https://koji.fedoraproject.org/koji/taskinfo?taskID=92245183

Concerning the required changes:

a) done
b) done, that unveiled a lot of issues
c) unfortunately it's not possible tobuilt bolt that way upstream yet, due to lack of support for dylib, which implies static linking (see https://github.com/llvm/llvm-project/issues/57551)
d) yeah, own repo
e) done
f) update to LLVM 15 done too

The packaging is not as clean as I wish it could be, but I still think it's good

Comment 8 Benson Muite 2022-10-01 07:24:44 UTC
Running fedora-review on x86_64, the following failed for me:
********************
Failed Tests (3):
  BOLT :: X86/asm-dump.c
  BOLT :: X86/internal-call-instrument-so.s
  BOLT :: X86/internal-call-instrument.s
Testing Time: 41.43s

These tests do pass on your build as well as in copr https://copr.fedorainfracloud.org/coprs/fed500/llvm-bolt/build/4881816/

Bolt documentation suggests using jemalloc-devel or tcmalloc in gperftools-devel. Is it worth adding dependencies to one of these libraries?

Comment 9 Benson Muite 2022-10-02 17:51:26 UTC
Built Bolt 15.0.0, and those tests did not fail. Maybe the section:

%ifarch x86_64
# Bolt makes incorrect assumptions on the location of libbolt_rt_*.a.
mkdir -p %{_builddir}/%{_libdir}
for rt in libbolt_rt_instr libbolt_rt_hugify libbolt_rt_instr_osx
do
    ln -s %{buildroot}/%{_libdir}/${rt}.a %{_builddir}/%{bolt_srcdir}/bolt/lib/
done
%endif

needs updating?

Build log for failing tests:

FAIL: BOLT :: X86/internal-call-instrument-so.s (82 of 198)
******************** TEST 'BOLT :: X86/internal-call-instrument-so.s' FAILED ********************
Script:
--
: 'RUN: at line 5';   /usr/bin/llvm-mc -filetype=obj -triple x86_64-unknown-unknown /builddir/build
/BUILD/llvm-project-15.0.0.src/bolt/test/X86/internal-call-instrument-so.s -o /builddir/build/BUILD
/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/Output/internal-call-instrument-so.s.tmp.
o
: 'RUN: at line 7';   /usr/bin/llvm-strip --strip-unneeded /builddir/build/BUILD/llvm-project-15.0.
0.src/bolt/redhat-linux-build/test/X86/Output/internal-call-instrument-so.s.tmp.o
: 'RUN: at line 8';   /usr/bin/ld.lld /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-lin
ux-build/test/X86/Output/internal-call-instrument-so.s.tmp.o -o /builddir/build/BUILD/llvm-project-
15.0.0.src/bolt/redhat-linux-build/test/X86/Output/internal-call-instrument-so.s.tmp.exe -q -shared
 -fini=_fini
: 'RUN: at line 9';   /usr/bin/llvm-bolt --instrument /builddir/build/BUILD/llvm-project-15.0.0.src
/bolt/redhat-linux-build/test/X86/Output/internal-call-instrument-so.s.tmp.exe --relocs -o /builddi
r/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/Output/internal-call-instrum
ent-so.s.tmp.out
--
Exit Code: 1
Command Output (stdout):
--
BOLT-INFO: shared object or position-independent executable detected
BOLT-INFO: Target architecture: x86_64
BOLT-INFO: BOLT version: <unknown>
BOLT-INFO: first alloc address is 0x0
BOLT-INFO: creating new program header table at address 0x200000, offset 0x200000
BOLT-INFO: enabling relocation mode
BOLT-INFO: forcing -jump-tables=move for instrumentation
BOLT-INFO: enabling -align-macro-fusion=all since no profile was specified
BOLT-INFO: enabling lite mode
BOLT-INSTRUMENTER: Number of indirect call site descriptors: 0
BOLT-INSTRUMENTER: Number of indirect call target descriptors: 2
BOLT-INSTRUMENTER: Number of function descriptors: 2
BOLT-INSTRUMENTER: Number of branch counters: 2
BOLT-INSTRUMENTER: Number of ST leaf node counters: 4
BOLT-INSTRUMENTER: Number of direct call counters: 0
BOLT-INSTRUMENTER: Total number of counters: 6
BOLT-INSTRUMENTER: Total size of counters: 48 bytes (static alloc memory)
BOLT-INSTRUMENTER: Total size of string table emitted: 13 bytes in file
BOLT-INSTRUMENTER: Total size of descriptors: 296 bytes in file
BOLT-INSTRUMENTER: Profile will be saved to file /tmp/prof.fdata
BOLT-INFO: 0 out of 2 functions in the binary (0.0%) have non-empty execution profile
BOLT-INFO: 0 instructions were shortened
BOLT-INFO: UCE removed 0 blocks and 0 bytes of code.
BOLT-INFO: SCTC: patched 0 tail calls (0 forward) tail calls (0 backward) from a total of 0 while r
emoving 0 double jumps and removing 0 basic blocks totalling 0 bytes of code. CTCs total execution 
count is 0 and the number of times CTCs are taken is 0.
--
Command Output (stderr):
--
BOLT-WARNING: will skip the following function(s) as unsupported internal calls were detected:
              _start
BOLT-ERROR: library not found: /usr/lib/libbolt_rt_instr.a
--
********************
FAIL: BOLT :: X86/internal-call-instrument.s (83 of 198)
******************** TEST 'BOLT :: X86/internal-call-instrument.s' FAILED ********************
Script:
--
: 'RUN: at line 5';   /usr/bin/llvm-mc -filetype=obj -triple x86_64-unknown-unknown /builddir/build
/BUILD/llvm-project-15.0.0.src/bolt/test/X86/internal-call-instrument.s -o /builddir/build/BUILD/ll
vm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/Output/internal-call-instrument.s.tmp.o
: 'RUN: at line 7';   /usr/bin/llvm-strip --strip-unneeded /builddir/build/BUILD/llvm-project-15.0.
0.src/bolt/redhat-linux-build/test/X86/Output/internal-call-instrument.s.tmp.o
: 'RUN: at line 8';   /usr/bin/clang /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linu
x-build/test/X86/Output/internal-call-instrument.s.tmp.o -o /builddir/build/BUILD/llvm-project-15.0
.0.src/bolt/redhat-linux-build/test/X86/Output/internal-call-instrument.s.tmp.exe -Wl,-q
: 'RUN: at line 10';   /usr/bin/llvm-bolt --instrument /builddir/build/BUILD/llvm-project-15.0.0.sr
c/bolt/redhat-linux-build/test/X86/Output/internal-call-instrument.s.tmp.exe --relocs -o /builddir/
build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/Output/internal-call-instrumen
t.s.tmp.out
--
Exit Code: 1
Command Output (stdout):
--
BOLT-INFO: shared object or position-independent executable detected
BOLT-INFO: Target architecture: x86_64
BOLT-INFO: BOLT version: <unknown>
BOLT-INFO: first alloc address is 0x0
BOLT-INFO: creating new program header table at address 0x200000, offset 0x200000
BOLT-INFO: enabling relocation mode
BOLT-INFO: forcing -jump-tables=move for instrumentation
BOLT-INFO: enabling -align-macro-fusion=all since no profile was specified
BOLT-INFO: enabling lite mode
BOLT-INSTRUMENTER: Number of indirect call site descriptors: 2
BOLT-INSTRUMENTER: Number of indirect call target descriptors: 7
BOLT-INSTRUMENTER: Number of function descriptors: 7
BOLT-INSTRUMENTER: Number of branch counters: 5
BOLT-INSTRUMENTER: Number of ST leaf node counters: 13
BOLT-INSTRUMENTER: Number of direct call counters: 0
BOLT-INSTRUMENTER: Total number of counters: 18
BOLT-INSTRUMENTER: Total size of counters: 144 bytes (static alloc memory)
BOLT-INSTRUMENTER: Total size of string table emitted: 147 bytes in file
BOLT-INSTRUMENTER: Total size of descriptors: 972 bytes in file
BOLT-INSTRUMENTER: Profile will be saved to file /tmp/prof.fdata
BOLT-INFO: 0 out of 10 functions in the binary (0.0%) have non-empty execution profile
BOLT-INFO: 0 instructions were shortened
BOLT-INFO: UCE removed 3 blocks and 120 bytes of code.
BOLT-INFO: SCTC: patched 0 tail calls (0 forward) tail calls (0 backward) from a total of 0 while r
emoving 0 double jumps and removing 0 basic blocks totalling 0 bytes of code. CTCs total execution 
count is 0 and the number of times CTCs are taken is 0.
--
Command Output (stderr):
--
/usr/bin/ld: warning: /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X8
6/Output/internal-call-instrument.s.tmp.o: missing .note.GNU-stack section implies executable stack
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the link
er
BOLT-WARNING: will skip the following function(s) as unsupported internal calls were detected:
              main
BOLT-ERROR: library not found: /usr/lib/libbolt_rt_instr.a
--
********************


******************** TEST 'BOLT :: X86/asm-dump.c' FAILED ********************
Script:
--
: 'RUN: at line 7';   /usr/bin/clang -fPIC /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/test/
X86/asm-dump.c -o /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/Ou
tput/asm-dump.c.tmp.exe -Wl,-q
: 'RUN: at line 10';   /usr/bin/llvm-bolt /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat
-linux-build/test/X86/Output/asm-dump.c.tmp.exe --instrument --instrumentation-file=/builddir/build
/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/Output/asm-dump.c.tmp.fdata -o /bui
lddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/Output/asm-dump.c.tmp.in
str
: 'RUN: at line 13';   /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X
86/Output/asm-dump.c.tmp.instr > /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-bu
ild/test/X86/Output/asm-dump.c.tmp.result
: 'RUN: at line 16';   /usr/bin/llvm-bolt /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat
-linux-build/test/X86/Output/asm-dump.c.tmp.exe -p /builddir/build/BUILD/llvm-project-15.0.0.src/bo
lt/redhat-linux-build/test/X86/Output/asm-dump.c.tmp.fdata --funcs=main --asm-dump=/builddir/build/
BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/Output/asm-dump.c.tmp -o /dev/null  
  | /usr/bin/FileCheck /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/test/X86/asm-dump.c --che
ck-prefix=CHECK-BOLT
: 'RUN: at line 20';   cat /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/te
st/X86/Output/asm-dump.c.tmp/main.s | /usr/bin/FileCheck /builddir/build/BUILD/llvm-project-15.0.0.
src/bolt/test/X86/asm-dump.c --check-prefix=CHECK-FILE
: 'RUN: at line 24';   sed -i 's/\.L/L/g' /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat
-linux-build/test/X86/Output/asm-dump.c.tmp/main.s
: 'RUN: at line 27';   /usr/bin/llvm-mc -filetype=obj -triple x86_64-unknown-unknown /builddir/buil
d/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/Output/asm-dump.c.tmp/main.s -o /b
uilddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/Output/asm-dump.c.tmp.
o
: 'RUN: at line 30';   /usr/bin/python3 /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/test/lin
k_fdata.py /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/Output/as
m-dump.c.tmp/main.s /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/X86/
Output/asm-dump.c.tmp.o /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat-linux-build/test/
X86/Output/asm-dump.c.tmp.fdata.reconst
: 'RUN: at line 38';   /usr/bin/llvm-strip --strip-unneeded /builddir/build/BUILD/llvm-project-15.0
.0.src/bolt/redhat-linux-build/test/X86/Output/asm-dump.c.tmp.o
: 'RUN: at line 41';   /usr/bin/clang -fPIC /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redh
at-linux-build/test/X86/Output/asm-dump.c.tmp.o -o /builddir/build/BUILD/llvm-project-15.0.0.src/bo
lt/redhat-linux-build/test/X86/Output/asm-dump.c.tmp.exe.reopt -Wl,-q
: 'RUN: at line 44';   /usr/bin/llvm-bolt /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/redhat
-linux-build/test/X86/Output/asm-dump.c.tmp.exe.reopt -p /builddir/build/BUILD/llvm-project-15.0.0.
src/bolt/redhat-linux-build/test/X86/Output/asm-dump.c.tmp.fdata.reconst -o /dev/null    | /usr/bin
/FileCheck /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/test/X86/asm-dump.c --check-prefix=CH
ECK-REOPT
--
Exit Code: 1
Command Output (stdout):
--
BOLT-INFO: shared object or position-independent executable detected
BOLT-INFO: Target architecture: x86_64
BOLT-INFO: BOLT version: <unknown>
BOLT-INFO: first alloc address is 0x0
BOLT-INFO: creating new program header table at address 0x200000, offset 0x200000
BOLT-INFO: enabling relocation mode
BOLT-INFO: forcing -jump-tables=move for instrumentation
BOLT-INFO: enabling -align-macro-fusion=all since no profile was specified
BOLT-INFO: enabling lite mode
BOLT-INSTRUMENTER: Number of indirect call site descriptors: 2
BOLT-INSTRUMENTER: Number of indirect call target descriptors: 7
BOLT-INSTRUMENTER: Number of function descriptors: 7
BOLT-INSTRUMENTER: Number of branch counters: 7
BOLT-INSTRUMENTER: Number of ST leaf node counters: 14
BOLT-INSTRUMENTER: Number of direct call counters: 0
BOLT-INSTRUMENTER: Total number of counters: 21
BOLT-INSTRUMENTER: Total size of counters: 168 bytes (static alloc memory)
BOLT-INSTRUMENTER: Total size of string table emitted: 168 bytes in file
BOLT-INSTRUMENTER: Total size of descriptors: 1272 bytes in file
BOLT-INSTRUMENTER: Profile will be saved to file /builddir/build/BUILD/llvm-project-15.0.0.src/bolt
/redhat-linux-build/test/X86/Output/asm-dump.c.tmp.fdata
BOLT-INFO: 0 out of 10 functions in the binary (0.0%) have non-empty execution profile
BOLT-INFO: 8 instructions were shortened
BOLT-INFO: UCE removed 3 blocks and 120 bytes of code.
BOLT-INFO: SCTC: patched 0 tail calls (0 forward) tail calls (0 backward) from a total of 0 while r
emoving 0 double jumps and removing 0 basic blocks totalling 0 bytes of code. CTCs total execution 
count is 0 and the number of times CTCs are taken is 0.
--
Command Output (stderr):
--
BOLT-ERROR: library not found: /usr/lib/libbolt_rt_instr.a
--
********************



Is it possible to update to 15.0.1 or 15.0.2 assuming this will be released soon?

Comment 10 serge_sans_paille 2022-10-04 13:20:47 UTC
Thanks a lot for the review!
I've uploaded an updated spec file & the associated srpm to the same location:

https://sergesanspaille.fedorapeople.org/llvm-bolt-15.0.0-1.src.rpm
https://sergesanspaille.fedorapeople.org/llvm-bolt.spec

Considering your advice:

- 15.0.1 is probably not gping to be packaged in rawhide, we'll be waiting for 15.0.6 to be out.
- sample koji run with new sources: https://koji.fedoraproject.org/koji/taskinfo?taskID=92611534
- I've added gperftools-devel as a Recommends

Comment 11 serge-sans-paille 2022-10-17 17:38:05 UTC
@benson_muite any update on that review?

Comment 12 Benson Muite 2022-10-18 04:33:13 UTC
Sorry, takes a while to build this. Thank for the reminder.

Comment 13 Benson Muite 2022-10-18 17:33:53 UTC
Builds seem ok:
https://copr.fedorainfracloud.org/coprs/fed500/llvm-bolt/build/4954933/

Minor typo in spec file:
# As hinted bu bolt documentation
should perhaps be
# As hinted by bolt documentation

Any idea why test cases fail for aarch64? Has this been reported upstream?

Why the commented out section:
#%ifarch x86_64
#for rt in libbolt_rt_instr libbolt_rt_hugify libbolt_rt_instr_osx
#do
#    rm %{buildroot}/usr/lib/${rt}.a
#done
#%endif

rpmlint error
llvm-bolt.spec:196: E: rpm-buildroot-usage %build export DESTDIR=%{buildroot}

Comment 14 serge-sans-paille 2022-10-18 21:12:27 UTC
@benson_muite Thanks for the feedback! I've uploaded an updated specfile and the associated srpm

koji build: https://koji.fedoraproject.org/koji/taskinfo?taskID=93191542

Concerning your advice, I've fixed the typo, removed the commented section and added comment to explain why we use DESTDIR=%{buildroot} during build (and test) step

No idea about the aarch64 tests failures. they do pass in main branch upstream according to upstream buildbolt (see https://lab.llvm.org/buildbot/#/builders/221) I haven't tried to reproduce that in main branch (reproducing there requires more setup than I am willing to do :-/)

Comment 15 Benson Muite 2022-10-19 05:19:29 UTC
Ok. Checking this.

Comment 16 Benson Muite 2022-10-20 17:34:48 UTC
Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed



===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: If your application is a C or C++ application you must list a
     BuildRequires against gcc, gcc-c++ or clang.
[x]: Header files in -devel subpackage, if present.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "Unknown or generated", "*No copyright* Apache License 2.0".
     390 files have unknown license. Detailed output of licensecheck in
     /home/benson/Projects/FedoraPackaging/reviews/llvm-bolt/2124479-llvm-
     bolt/licensecheck.txt
[x]: License file installed when any subpackage combination is installed.
[x]: %build honors applicable compiler flags or justifies otherwise.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[x]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[!]: Package is not known to require an ExcludeArch tag.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package must not depend on deprecated() packages.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: Static libraries in -static or -devel subpackage, providing -devel if
     present.
     Note: Package has .a files: llvm-bolt-static.
[x]: File names are valid UTF-8.
[x]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 0 bytes in 0 files.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[-]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in llvm-
     bolt-devel
[?]: Package functions as described.
[!]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[!]: Package should compile and build into binary rpms on all supported
     architectures.
[!]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Sources are verified with gpgverify first in %prep if upstream
     publishes signatures.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[!]: Spec file according to URL is the same as in SRPM.
     Note: Spec file as given by url is not the same as in SRPM (see
     attached diff).
     See: (this test has no URL)
[x]: Rpmlint is run on debuginfo package(s).
     Note: There are rpmlint messages (see attachment).
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.


Rpmlint
-------
Cannot parse rpmlint output:


Rpmlint (debuginfo)
-------------------
Cannot parse rpmlint output:



Rpmlint (installed packages)
----------------------------
============================ rpmlint session starts ============================
rpmlint: 2.4.0
configuration:
    /usr/lib/python3.11/site-packages/rpmlint/configdefaults.toml
    /etc/xdg/rpmlint/fedora-legacy-licenses.toml
    /etc/xdg/rpmlint/fedora-spdx-licenses.toml
    /etc/xdg/rpmlint/fedora.toml
    /etc/xdg/rpmlint/scoring.toml
    /etc/xdg/rpmlint/users-groups.toml
    /etc/xdg/rpmlint/warn-on-functions.toml
checks: 31, packages: 6

llvm-bolt-static.x86_64: E: static-library-without-debuginfo /usr/lib64/libLLVMBOLTCore.a
llvm-bolt-static.x86_64: E: static-library-without-debuginfo /usr/lib64/libLLVMBOLTPasses.a
llvm-bolt-static.x86_64: E: static-library-without-debuginfo /usr/lib64/libLLVMBOLTProfile.a
llvm-bolt-static.x86_64: E: static-library-without-debuginfo /usr/lib64/libLLVMBOLTRewrite.a
llvm-bolt-static.x86_64: E: static-library-without-debuginfo /usr/lib64/libLLVMBOLTRuntimeLibs.a
llvm-bolt-static.x86_64: E: static-library-without-debuginfo /usr/lib64/libLLVMBOLTTargetAArch64.a
llvm-bolt-static.x86_64: E: static-library-without-debuginfo /usr/lib64/libLLVMBOLTTargetX86.a
llvm-bolt-static.x86_64: E: static-library-without-debuginfo /usr/lib64/libLLVMBOLTUtils.a
llvm-bolt-static.x86_64: E: readelf-failed /usr/lib64/libbolt_rt_instr_osx.a Error: Not an ELF file - it has the wrong magic bytes at the start
llvm-bolt.x86_64: W: no-manual-page-for-binary llvm-bolt
llvm-bolt.x86_64: W: no-manual-page-for-binary llvm-boltdiff
llvm-bolt.x86_64: W: no-manual-page-for-binary perf2bolt
llvm-bolt.x86_64: W: no-documentation
llvm-bolt-devel.x86_64: W: no-documentation
llvm-bolt-static.x86_64: W: no-documentation
llvm-bolt-debugsource.x86_64: W: invalid-license Apache-2.0-WITH-LLVM-exception
llvm-bolt.x86_64: W: invalid-license Apache-2.0-WITH-LLVM-exception
llvm-bolt-devel.x86_64: W: invalid-license Apache-2.0-WITH-LLVM-exception
llvm-bolt-debuginfo.x86_64: W: invalid-license Apache-2.0-WITH-LLVM-exception
llvm-bolt-static.x86_64: W: invalid-license Apache-2.0-WITH-LLVM-exception
llvm-bolt-doc.noarch: W: invalid-license Apache-2.0-WITH-LLVM-exception
 6 packages and 0 specfiles checked; 9 errors, 12 warnings, 9 badness; has taken 6.9 s 



Source checksums
----------------
https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.0/llvm-project-15.0.0.src.tar.xz.sig :
  CHECKSUM(SHA256) this package     : 593ee43238f847f66a6c9e3d2440868d194af8292c99a7e906e59a32691d2048
  CHECKSUM(SHA256) upstream package : 593ee43238f847f66a6c9e3d2440868d194af8292c99a7e906e59a32691d2048
https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.0/llvm-project-15.0.0.src.tar.xz :
  CHECKSUM(SHA256) this package     : caaf8100365b6ebafc39fea803e902ca3ff38b4d5327b9927097808d32964db7
  CHECKSUM(SHA256) upstream package : caaf8100365b6ebafc39fea803e902ca3ff38b4d5327b9927097808d32964db7


Requires
--------
llvm-bolt (rpmlib, GLIBC filtered):
    ld-linux-x86-64.so.2()(64bit)
    libc.so.6()(64bit)
    libgcc_s.so.1()(64bit)
    libgcc_s.so.1(GCC_3.0)(64bit)
    libgcc_s.so.1(GCC_3.3)(64bit)
    libm.so.6()(64bit)
    libstdc++.so.6()(64bit)
    libstdc++.so.6(CXXABI_1.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.11)(64bit)
    libstdc++.so.6(CXXABI_1.3.13)(64bit)
    libstdc++.so.6(CXXABI_1.3.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.5)(64bit)
    libtinfo.so.6()(64bit)
    libz.so.1()(64bit)
    libz.so.1(ZLIB_1.2.0)(64bit)
    rtld(GNU_HASH)

llvm-bolt-static (rpmlib, GLIBC filtered):
    llvm-bolt(x86-64)

llvm-bolt-devel (rpmlib, GLIBC filtered):
    llvm-bolt-static(x86-64)

llvm-bolt-doc (rpmlib, GLIBC filtered):
    llvm-bolt

llvm-bolt-debuginfo (rpmlib, GLIBC filtered):

llvm-bolt-debugsource (rpmlib, GLIBC filtered):



Provides
--------
llvm-bolt:
    llvm-bolt
    llvm-bolt(x86-64)

llvm-bolt-static:
    llvm-bolt-static
    llvm-bolt-static(x86-64)

llvm-bolt-devel:
    llvm-bolt-devel
    llvm-bolt-devel(x86-64)

llvm-bolt-doc:
    llvm-bolt-doc

llvm-bolt-debuginfo:
    debuginfo(build-id)
    llvm-bolt-debuginfo
    llvm-bolt-debuginfo(x86-64)

llvm-bolt-debugsource:
    llvm-bolt-debugsource
    llvm-bolt-debugsource(x86-64)



Diff spec file in url and in SRPM
---------------------------------
--- /home/benson/Projects/FedoraPackaging/reviews/llvm-bolt/2124479-llvm-bolt/srpm/llvm-bolt.spec	2022-10-19 20:46:09.775954089 +0300
+++ /home/benson/Projects/FedoraPackaging/reviews/llvm-bolt/2124479-llvm-bolt/srpm-unpacked/llvm-bolt.spec2022-10-04 12:40:02.000000000 +0300
@@ -46,5 +46,5 @@
 ExcludeArch:    s390x ppc64le i686
 
-# As hinted by bolt documentation
+# As hinted bu bolt documentation
 Recommends:     gperftools-devel
 
@@ -182,9 +182,9 @@
         -DLLVM_INCLUDE_TESTS:BOOL=ON \
         -DBUILD_SHARED_LIBS:BOOL=OFF \
-        -DLLVM_LINK_LLVM_DYLIB:BOOL=OFF \
+	-DLLVM_LINK_LLVM_DYLIB:BOOL=OFF \
 %if 0%{?__isa_bits} == 64
-        -DLLVM_LIBDIR_SUFFIX=64 \
+	-DLLVM_LIBDIR_SUFFIX=64 \
 %else
-        -DLLVM_LIBDIR_SUFFIX= \
+	-DLLVM_LIBDIR_SUFFIX= \
 %endif
         -DBOLT_INCLUDE_TESTS:BOOL=ON \
@@ -193,11 +193,9 @@
         -DLLVM_EXTERNAL_LIT=%{_bindir}/lit
 
-# Set LD_LIBRARY_PATH now because we skip rpath generation and the build uses
-# some just built libraries.
 export LD_LIBRARY_PATH=%{_builddir}/%{bolt_srcdir}/bolt/%{_vpath_builddir}/%{_lib}
-# Set DESTDIR now because bolt sneaks in an install step in its build step.
 export DESTDIR=%{buildroot}
 %cmake_build
 
+
 %install
 %cmake_install
@@ -234,4 +232,11 @@
 %cmake_build --target check-bolt
 
+#%ifarch x86_64
+#for rt in libbolt_rt_instr libbolt_rt_hugify libbolt_rt_instr_osx
+#do
+#    rm %{buildroot}/usr/lib/${rt}.a
+#done
+#%endif
+
 %files
 %license LICENSE.TXT


Generated by fedora-review 0.9.0 (6761b6c) last change: 2022-08-23
Command line :/usr/bin/fedora-review -b 2124479
Buildroot used: fedora-rawhide-x86_64
Active plugins: Generic, Shell-api, C/C++
Disabled plugins: Haskell, Perl, Python, Ocaml, SugarActivity, fonts, PHP, Java, Ruby, R
Disabled flags: EPEL6, EPEL7, DISTTAG, BATCH, EXARCH

Comments:
a) One disabled test fails, but expect this is minor, maybe this is fixed in 15.0.3 if it is not difficult to use that?
b) Can you add python3-psutil to BuildRequires, it seems to be needed for some tests. Build log output:
lit: /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/test/lit.cfg.py:50: warning: Setting a timeout per 
test not supported. Requires the Python psutil module but it could not be found. Try installing it via pip 
or via your operating system's package manager. Some tests will be skipped.
c) Assume it functions ok, because all but one test fail. Still need to check on an example.
d) Should any header files be included in the devel package?

Comment 17 serge-sans-paille 2022-10-22 07:43:00 UTC
Thanks @benson_muite ! I've removed the devel package as they are not meant to be used as such upstream. We now only have a end user application.

specfile and srpm uploaded at the same adress as above, associated build: https://koji.fedoraproject.org/koji/taskinfo?taskID=93253838

Considering comments:

a) 15.03 is not in rawhide yet, but as soon as it's updated, I'll update either the proposal or the package, depending on where we are in the process. I don't think it should be blocking
b) done. I've also added it as a Recommends: in python-lit package
c) yeah, it's my approach too
d) I've removed the devel package :-)

Comment 18 Benson Muite 2022-10-23 17:29:56 UTC
Ok. Thanks. Checking. Ok on 15.03, as all LLVM packages needed to be updated together.

Comment 19 Benson Muite 2022-10-24 16:32:04 UTC
Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed



===== MUST items =====

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: If your application is a C or C++ application you must list a
     BuildRequires against gcc, gcc-c++ or clang.
[x]: Header files in -devel subpackage, if present.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "Unknown or generated", "*No copyright* Apache License 2.0".
     390 files have unknown license. Detailed output of licensecheck in
     /home/FedoraPackaging/reviews/llvm-bolt/2124479-llvm-bolt/licensecheck.txt
[x]: License file installed when any subpackage combination is installed.
[x]: %build honors applicable compiler flags or justifies otherwise.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[x]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[?]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[-]: Package is not known to require an ExcludeArch tag.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the
     license(s) in its own file, then that file, containing the text of the
     license(s) for the package is included in %license.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package must not depend on deprecated() packages.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as
     provided in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 0 bytes in 0 files.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate
     file from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[?]: Package functions as described.
[-]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[?]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[-]: Package should compile and build into binary rpms on all supported
     architectures.
[x]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed
     files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Fully versioned dependency in subpackages if applicable.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Sources are verified with gpgverify first in %prep if upstream
     publishes signatures.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[!]: Spec file according to URL is the same as in SRPM.
     Note: Spec file as given by url is not the same as in SRPM (see
     attached diff).
     See: (this test has no URL)
[x]: Rpmlint is run on debuginfo package(s).
     Note: There are rpmlint messages (see attachment).
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.


Rpmlint
-------
Cannot parse rpmlint output:


Rpmlint (debuginfo)
-------------------
Cannot parse rpmlint output:



Rpmlint (installed packages)
----------------------------
============================ rpmlint session starts ============================
rpmlint: 2.4.0
configuration:
    /usr/lib/python3.11/site-packages/rpmlint/configdefaults.toml
    /etc/xdg/rpmlint/fedora-legacy-licenses.toml
    /etc/xdg/rpmlint/fedora-spdx-licenses.toml
    /etc/xdg/rpmlint/fedora.toml
    /etc/xdg/rpmlint/scoring.toml
    /etc/xdg/rpmlint/users-groups.toml
    /etc/xdg/rpmlint/warn-on-functions.toml
checks: 31, packages: 4

llvm-bolt.x86_64: W: position-independent-executable-suggested /usr/bin/llvm-bolt
llvm-bolt.x86_64: W: no-manual-page-for-binary llvm-bolt
llvm-bolt.x86_64: W: no-manual-page-for-binary llvm-boltdiff
llvm-bolt.x86_64: W: no-manual-page-for-binary perf2bolt
llvm-bolt.x86_64: W: no-documentation
llvm-bolt-debuginfo.x86_64: W: invalid-license Apache-2.0-WITH-LLVM-exception
llvm-bolt-debugsource.x86_64: W: invalid-license Apache-2.0-WITH-LLVM-exception
llvm-bolt.x86_64: W: invalid-license Apache-2.0-WITH-LLVM-exception
llvm-bolt-doc.noarch: W: invalid-license Apache-2.0-WITH-LLVM-exception
 4 packages and 0 specfiles checked; 0 errors, 9 warnings, 0 badness; has taken 4.5 s 



Source checksums
----------------
https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.0/llvm-project-15.0.0.src.tar.xz.sig :
  CHECKSUM(SHA256) this package     : 593ee43238f847f66a6c9e3d2440868d194af8292c99a7e906e59a32691d2048
  CHECKSUM(SHA256) upstream package : 593ee43238f847f66a6c9e3d2440868d194af8292c99a7e906e59a32691d2048
https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.0/llvm-project-15.0.0.src.tar.xz :
  CHECKSUM(SHA256) this package     : caaf8100365b6ebafc39fea803e902ca3ff38b4d5327b9927097808d32964db7
  CHECKSUM(SHA256) upstream package : caaf8100365b6ebafc39fea803e902ca3ff38b4d5327b9927097808d32964db7


Requires
--------
llvm-bolt (rpmlib, GLIBC filtered):
    ld-linux-x86-64.so.2()(64bit)
    libc.so.6()(64bit)
    libgcc_s.so.1()(64bit)
    libgcc_s.so.1(GCC_3.0)(64bit)
    libgcc_s.so.1(GCC_3.3)(64bit)
    libm.so.6()(64bit)
    libstdc++.so.6()(64bit)
    libstdc++.so.6(CXXABI_1.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.11)(64bit)
    libstdc++.so.6(CXXABI_1.3.13)(64bit)
    libstdc++.so.6(CXXABI_1.3.3)(64bit)
    libstdc++.so.6(CXXABI_1.3.5)(64bit)
    libtinfo.so.6()(64bit)
    libz.so.1()(64bit)
    libz.so.1(ZLIB_1.2.0)(64bit)
    rtld(GNU_HASH)

llvm-bolt-doc (rpmlib, GLIBC filtered):
    llvm-bolt

llvm-bolt-debuginfo (rpmlib, GLIBC filtered):

llvm-bolt-debugsource (rpmlib, GLIBC filtered):



Provides
--------
llvm-bolt:
    llvm-bolt
    llvm-bolt(x86-64)

llvm-bolt-doc:
    llvm-bolt-doc

llvm-bolt-debuginfo:
    debuginfo(build-id)
    llvm-bolt-debuginfo
    llvm-bolt-debuginfo(x86-64)

llvm-bolt-debugsource:
    llvm-bolt-debugsource
    llvm-bolt-debugsource(x86-64)



Diff spec file in url and in SRPM
---------------------------------
--- /home/benson/Projects/FedoraPackaging/reviews/llvm-bolt/2124479-llvm-bolt/srpm/llvm-bolt.spec	2022-10-24 06:22:33.920460480 +0300
+++ /home/benson/Projects/FedoraPackaging/reviews/llvm-bolt/2124479-llvm-bolt/srpm-unpacked/llvm-bolt.spec	2022-10-04 12:40:02.000000000 +0300
@@ -37,5 +37,4 @@
 BuildRequires: llvm-test = %{version}
 BuildRequires: python3-lit
-BuildRequires: python3-psutil
 BuildRequires: clang
 BuildRequires: lld
@@ -47,5 +46,5 @@
 ExcludeArch:    s390x ppc64le i686
 
-# As hinted by bolt documentation
+# As hinted bu bolt documentation
 Recommends:     gperftools-devel
 
@@ -56,4 +55,18 @@
 execution profile gathered by sampling profiler, such as Linux `perf` tool.
 
+%package static
+Summary: BOLT static files
+Requires: %{name}%{?_isa} = %{version}-%{release}
+
+%description static
+BOLT static files.
+
+%package devel
+Summary: BOLT development files
+Requires: %{name}-static%{?_isa} = %{version}-%{release}
+
+%description devel
+BOLT development files.
+
 %package doc
 Summary: Documentation for BOLT
@@ -169,9 +182,9 @@
         -DLLVM_INCLUDE_TESTS:BOOL=ON \
         -DBUILD_SHARED_LIBS:BOOL=OFF \
-        -DLLVM_LINK_LLVM_DYLIB:BOOL=OFF \
+	-DLLVM_LINK_LLVM_DYLIB:BOOL=OFF \
 %if 0%{?__isa_bits} == 64
-        -DLLVM_LIBDIR_SUFFIX=64 \
+	-DLLVM_LIBDIR_SUFFIX=64 \
 %else
-        -DLLVM_LIBDIR_SUFFIX= \
+	-DLLVM_LIBDIR_SUFFIX= \
 %endif
         -DBOLT_INCLUDE_TESTS:BOOL=ON \
@@ -180,17 +193,12 @@
         -DLLVM_EXTERNAL_LIT=%{_bindir}/lit
 
-# Set LD_LIBRARY_PATH now because we skip rpath generation and the build uses
-# some just built libraries.
 export LD_LIBRARY_PATH=%{_builddir}/%{bolt_srcdir}/bolt/%{_vpath_builddir}/%{_lib}
-# Set DESTDIR now because bolt sneaks in an install step in its build step.
 export DESTDIR=%{buildroot}
 %cmake_build
 
+
 %install
 %cmake_install
 
-# We don't ship libLLVMBOLT*.a
-rm -f %{buildroot}%{_libdir}/libLLVMBOLT*.a
-
 # There currently is not support upstream for building html doc from BOLT
 install -d %{buildroot}%{_pkgdocdir}
@@ -224,4 +232,11 @@
 %cmake_build --target check-bolt
 
+#%ifarch x86_64
+#for rt in libbolt_rt_instr libbolt_rt_hugify libbolt_rt_instr_osx
+#do
+#    rm %{buildroot}/usr/lib/${rt}.a
+#done
+#%endif
+
 %files
 %license LICENSE.TXT
@@ -230,4 +245,5 @@
 %{_bindir}/perf2bolt
 
+%files static
 %ifarch x86_64
 %{_libdir}/libbolt_rt_hugify.a
@@ -235,5 +251,14 @@
 %{_libdir}/libbolt_rt_instr_osx.a
 %endif
+%{_libdir}/libLLVMBOLTCore.a
+%{_libdir}/libLLVMBOLTPasses.a
+%{_libdir}/libLLVMBOLTProfile.a
+%{_libdir}/libLLVMBOLTRewrite.a
+%{_libdir}/libLLVMBOLTRuntimeLibs.a
+%{_libdir}/libLLVMBOLTTargetAArch64.a
+%{_libdir}/libLLVMBOLTTargetX86.a
+%{_libdir}/libLLVMBOLTUtils.a
 
+%files devel
 
 %files doc


Generated by fedora-review 0.9.0 (6761b6c) last change: 2022-08-23
Command line :/usr/bin/fedora-review -b 2124479
Buildroot used: fedora-rawhide-x86_64
Active plugins: Generic, Shell-api, C/C++
Disabled plugins: PHP, Ruby, Haskell, Perl, Java, R, SugarActivity, fonts, Python, Ocaml
Disabled flags: EPEL6, EPEL7, DISTTAG, BATCH, EXARCH

Comments:
a) Please ensure the spec file that is uploaded is the same as the one in the SRPM which seems ok
b) May wish to comment in the spec file what the patches standalone, test and lib64 do, the names are not very descriptive, but this is not essential
c) The build log has the warning:
lit: /builddir/build/BUILD/llvm-project-15.0.0.src/bolt/test/lit.cfg.py:50: warning: Setting a timeout per test not supported. Requires the Python psutil module but it could not be found. Try installing it via pip or via your operating system's package manager. Some tests will be skipped.
The spec file does not contain:
BuildRequires: python3-psutil
d) Still testing, but with the above expect it should be ok.

Comment 20 serge-sans-paille 2022-10-29 21:25:43 UTC
@benson_muite:  Update submitted at: https://sergesanspaille.fedorapeople.org/llvm-bolt.spec and https://sergesanspaille.fedorapeople.org/llvm-bolt-15.0.0-1.fc36.src.rpm

Associated build: https://koji.fedoraproject.org/koji/taskinfo?taskID=93570551

a) done, sorry for the noise
b) done, that's indeed better like this, even for my future self
c) done

Comment 21 Benson Muite 2022-10-30 13:59:47 UTC
Thanks. Approved.

Comment 22 Tomas Hrcka 2022-11-02 14:25:08 UTC
(fedscm-admin):  The Pagure repository was created at https://src.fedoraproject.org/rpms/llvm-bolt

Comment 23 serge-sans-paille 2022-11-03 14:10:49 UTC
Package built for rawhide, thanks a lot Benson Muite for the reviews o/


Note You need to log in before you can comment on or make changes to this bug.