Bug 1906980 (highway) - Review Request: highway - Efficient and performance-portable SIMD
Summary: Review Request: highway - Efficient and performance-portable SIMD
Keywords:
Status: CLOSED ERRATA
Alias: highway
Product: Fedora
Classification: Fedora
Component: Package Review
Version: rawhide
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Ben Beasley
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: jpegxl
TreeView+ depends on / blocked
 
Reported: 2020-12-12 03:59 UTC by Robert-André Mauchin 🐧
Modified: 2021-06-29 00:34 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2021-06-01 01:03:39 UTC
Type: ---
Embargoed:
code: fedora-review+


Attachments (Terms of Use)
Spec file as reviewed (2.02 KB, text/plain)
2021-04-21 13:13 UTC, Ben Beasley
no flags Details
Spec file as reviewed (2.02 KB, text/plain)
2021-04-21 13:18 UTC, Ben Beasley
no flags Details

Description Robert-André Mauchin 🐧 2020-12-12 03:59:32 UTC
Spec URL: https://eclipseo.fedorapeople.org/for-review/highway.spec
SRPM URL: https://eclipseo.fedorapeople.org/for-review/highway-0-0.1.20201212git8205c2c.fc34.src.rpm

Description:
 Highway is a C++ library for SIMD (Single Instruction, Multiple Data), i.e. applying the same operation to 'lanes'.

Fedora Account System Username: eclipseo

Comment 1 Egor Artemov 2020-12-12 22:14:41 UTC
I'm not in the packagers group however has some recommendations:

1) Build fails on aarch64, s390x, and ppc64le.
   It looks like you should list these architectures using the `ExcludeArch:`
   tag, as per packaging guidelines.

   Koji build: https://koji.fedoraproject.org/koji/taskinfo?taskID=57335109
   Guideline: https://docs.fedoraproject.org/en-US/packaging-guidelines/#_architecture_build_failures

2) Since the package provides only a static library, it will be better to
   package it as a `highway-devel` package with virtual '-static' provide as per
   packaging guidelines.
   See: https://docs.fedoraproject.org/en-US/packaging-guidelines/#packaging-static-libraries

3) It seems documentation includes large PDF files like slides from the presentation,
   examples, and project skeleton
   might be it is better to move them into the separate `-doc` package?

4) It seems you shouldn't install all headers, that upstream installs.
   As per https://github.com/google/highway/blob/master/g3doc/quick_reference.md
   The only public headers that should be installed are (with dependencies):
      hwy/highway.h
      hwy/base.h
      hwy/foreach_target.h
      hwy/aligned_allocator.h
      hwy/cache_control.h
      hwy/targets.h
      hwy/ops/x86_128-inl.h
      hwy/ops/x86_256-inl.h
      hwy/ops/x86_512-inl.h
      hwy/ops/arm_neon-inl.h
      hwy/ops/wasm_128-inl.h
      hwy/ops/scalar-inl.h
      hwy/ops/shared-inl.h
      hwy/set_macros-inl.h

   But looks like it is better to fire an issue upstream to fix CMakeFiles.txt

5) It seems it is better to move commands for tests running into `%check` section.

Comment 2 Robert-André Mauchin 🐧 2020-12-12 23:57:35 UTC
I'll ask upstream why building on aarch64 and ppc64le don't work.
This is not a very high priority package for me right now.

Comment 3 Troy Curtis 2020-12-16 01:24:36 UTC
Adding NotReady for now since it looks like Egor has some good suggestions and it sounds like there is some discussion with upstream needed.

Comment 5 Robert-André Mauchin 🐧 2021-04-08 23:14:32 UTC
(In reply to Egor Artemov from comment #1)
> I'm not in the packagers group however has some recommendations:
>
Thanks for your informative review.
 
> 1) Build fails on aarch64, s390x, and ppc64le.
>    It looks like you should list these architectures using the `ExcludeArch:`
>    tag, as per packaging guidelines.
> 
>    Koji build: https://koji.fedoraproject.org/koji/taskinfo?taskID=57335109
>    Guideline:
> https://docs.fedoraproject.org/en-US/packaging-guidelines/
> #_architecture_build_failures
> 
I added a ExclusiveArch since ppc and s390 are not supposed to be supported.

> 2) Since the package provides only a static library, it will be better to
>    package it as a `highway-devel` package with virtual '-static' provide as
> per
>    packaging guidelines.
>    See:
> https://docs.fedoraproject.org/en-US/packaging-guidelines/#packaging-static-
> libraries

Indeed, fixed.

> 3) It seems documentation includes large PDF files like slides from the
> presentation,
>    examples, and project skeleton
>    might be it is better to move them into the separate `-doc` package?
> 
Done.

> 4) It seems you shouldn't install all headers, that upstream installs.
>    As per
> https://github.com/google/highway/blob/master/g3doc/quick_reference.md
>    The only public headers that should be installed are (with dependencies):
>       hwy/highway.h
>       hwy/base.h
>       hwy/foreach_target.h
>       hwy/aligned_allocator.h
>       hwy/cache_control.h
>       hwy/targets.h
>       hwy/ops/x86_128-inl.h
>       hwy/ops/x86_256-inl.h
>       hwy/ops/x86_512-inl.h
>       hwy/ops/arm_neon-inl.h
>       hwy/ops/wasm_128-inl.h
>       hwy/ops/scalar-inl.h
>       hwy/ops/shared-inl.h
>       hwy/set_macros-inl.h
> 
>    But looks like it is better to fire an issue upstream to fix
> CMakeFiles.txt
>
I removed the non useful headers and filed a bug upstream.
 
> 5) It seems it is better to move commands for tests running into `%check`
> section.

Done.

Comment 6 Robert-André Mauchin 🐧 2021-04-08 23:17:24 UTC
Koji scratch build: https://koji.fedoraproject.org/koji/taskinfo?taskID=65535439

Comment 7 Ben Beasley 2021-04-12 19:06:44 UTC
Because my workstation is an antique, this fails to build in mock for me.

> /usr/bin/cmake -D TEST_TARGET=hwy_test -D TEST_EXECUTABLE=/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu/tests/hwy_test -D TEST_EXECUTOR= -D TEST_WORKING_DIR=/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=hwy_test_TESTS -D CTEST_FILE=/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu/hwy_test[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=60 -D TEST_XML_OUTPUT_DIR= -P /usr/share/cmake/Modules/GoogleTestAddTests.cmake
> CMake Error at /usr/share/cmake/Modules/GoogleTestAddTests.cmake:77 (message):
>   Error running test executable.
>     Path: '/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu/tests/hwy_test'
>     Result: Illegal instruction
>     Output:
> 
> Call Stack (most recent call first):
>   /usr/share/cmake/Modules/GoogleTestAddTests.cmake:173 (gtest_discover_tests_impl)

You will need to make sure that tests using SIMD extensions that are not in the baseline for the architecture are not executed.

SSE2 is inherently part of x86_64, and we can assume it in Fedora for i686 (https://fedoraproject.org/wiki/Changes/Update_i686_architectural_baseline_to_include_SSE2). Everything later needs to be checked by grepping /proc/cpuinfo, using the CLI tool from https://src.fedoraproject.org/rpms/google-cpu_features, or something similar.

-----

It’s probably worth justifying shipping static libraries in a spec file comment. In this case it looks like there is simply no upstream support for building as a shared library.

Comment 8 Robert-André Mauchin 🐧 2021-04-13 19:15:25 UTC
The minimum supported instruction set is SSE4. Since it's providing SIMD instructions and it builds on Koji, it doesn't make sense to test if it's lower than SSE4.

Comment 9 Ben Beasley 2021-04-16 12:56:46 UTC
So, if I may paraphrase, your argument is that a package can require extensions to the architectural baseline in order to build, as long as the Koji builders have these extensions in practice. (It’s established that library packages—but not applications—can require such extensions at runtime, https://pagure.io/packaging-committee/issue/1044.)

That might be a reasonable claim, actually. I’d rather see a package that builds everywhere, but I’m willing to go with it.

I commented out the %ctest, but the hwy_test executable gets started anyway partway through the build and explodes as in my previous comment, so I’m going to have to skip reviewing this one.

Comment 10 Robert-André Mauchin 🐧 2021-04-16 13:50:16 UTC
Ok, thanks for taking a look!

Comment 11 Robert-André Mauchin 🐧 2021-04-17 15:48:13 UTC
Spec URL: https://eclipseo.fedorapeople.org/for-review/highway.spec
SRPM URL: https://eclipseo.fedorapeople.org/for-review/highway-0-0.1.20201212git8205c2c.fc34.src.rpm


Koji scratch build: https://koji.fedoraproject.org/koji/taskinfo?taskID=65535439

Hi,

Could you take a look again with your old machine? I added -DCMAKE_CXX_FLAGS="%build_cxxflags -DHWY_COMPILE_ALL_ATTAINABLE" which should enable HWY_SCALAR for non-SIMD.

Comment 12 Ben Beasley 2021-04-19 12:58:25 UTC
I’ve never seen this before: fedora-review spends a while building, then spits this out:

> WARNING: Package highway-devel-0.11.1-1.fc35 not built
> WARNING: Package highway-doc-0.11.1-1.fc35 not built
> ERROR: 'No srpm found for highway' (logs in /home/reviewer/.cache/fedora-review.log)

Eventually I figured out that this was just a consequence of the SRPM in your last comment not matching the spec file.

Once I got the correct SRPM from the Koji scratch-build, I got a similar error to before, although it was later in the build this time:

> [ 92%] Built target arithmetic_test
> [ 95%] Linking CXX executable tests/hwy_test
> /usr/bin/cmake -E cmake_link_script CMakeFiles/hwy_test.dir/link.txt --verbose=1
> /usr/bin/g++ -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -O2 -g -DNDEBUG -Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -fPIE -pie CMakeFiles/hwy_test.dir/hwy/tests/hwy_test.cc.o -o tests/hwy_test  libhwy.a /usr/lib64/libgtest.so /usr/lib64/libgtest_main.so /usr/lib64/libgtest.so -lpthread
> /usr/bin/cmake -D TEST_TARGET=hwy_test -D TEST_EXECUTABLE=/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu/tests/hwy_test -D TEST_EXECUTOR= -D TEST_WORKING_DIR=/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=hwy_test_TESTS -D CTEST_FILE=/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu/hwy_test[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=60 -D TEST_XML_OUTPUT_DIR= -P /usr/share/cmake/Modules/GoogleTestAddTests.cmake
> CMake Error at /usr/share/cmake/Modules/GoogleTestAddTests.cmake:77 (message):
>   Error running test executable.
>     Path: '/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu/tests/hwy_test'
>     Result: Illegal instruction
>     Output:
> 
> Call Stack (most recent call first):
>   /usr/share/cmake/Modules/GoogleTestAddTests.cmake:173 (gtest_discover_tests_impl)
> gmake[2]: Leaving directory '/builddir/build/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu'
> gmake[2]: *** [CMakeFiles/hwy_test.dir/build.make:111: tests/hwy_test] Error 1
> gmake[2]: *** Deleting file 'tests/hwy_test'
> gmake[1]: *** [CMakeFiles/Makefile2:239: CMakeFiles/hwy_test.dir/all] Error 2
> gmake[1]: *** Waiting for unfinished jobs....

It looks like this is the offending section in GoogleTestAddTests.cmake:

>   # Run test executable to get list of available tests
>   if(NOT EXISTS "${_TEST_EXECUTABLE}")
>     message(FATAL_ERROR
>       "Specified test executable does not exist.\n"
>       "  Path: '${_TEST_EXECUTABLE}'"
>     )
>   endif()
>   execute_process(
>     COMMAND ${_TEST_EXECUTOR} "${_TEST_EXECUTABLE}" --gtest_list_tests
>     WORKING_DIRECTORY "${_TEST_WORKING_DIR}"
>     TIMEOUT ${_TEST_DISCOVERY_TIMEOUT}
>     OUTPUT_VARIABLE output
>     RESULT_VARIABLE result
>   )
>   if(NOT ${result} EQUAL 0)
>     string(REPLACE "\n" "\n    " output "${output}")
>     message(FATAL_ERROR
>       "Error running test executable.\n"
>       "  Path: '${_TEST_EXECUTABLE}'\n"
>       "  Result: ${result}\n"
>       "  Output:\n"
>       "    ${output}\n"
>     )
>   endif()

So the test executables are getting run with --gtest_list_tests to discover the tests they implement, and the code that sets up the test suites has been compiled such that even this requires–well, here I haven’t waded through all of the macro soup, but something I don’t have, anyway. I think if it required all supported ISA extensions to run it would not be working on Koji.

Note that the baseline target is scalar:

> ./hwy_list_targets || ( exit 0 )
> Compiled HWY_TARGETS: AVX3 AVX2 SSE4 Scalar
> HWY_BASELINE_TARGETS: Scalar

…but that this was also the case in your older Koji scratch build, https://koji.fedoraproject.org/koji/taskinfo?taskID=65535443.

So I’m pretty sure that adding -DHWY_COMPILE_ALL_ATTAINABLE is not doing anything at all here on x86_64, since scalar is the only baseline target. (This makes sense as baseline targets are supposed to be only those enabled in the compilation environment, and you are not adding anything beyond the default Fedora flags.) is causing it to additionally compile targets below the best baseline for testing, but it does not keep the test executable from requiring extensions.

When I have a chance, I’m going to read the CMake and C sources a little more, and perhaps try a couple of experiments, to try to understand better what’s really happening here.

Comment 13 Ben Beasley 2021-04-19 13:17:52 UTC
It doesn’t make much sense. The code that sets up the test suites, at the bottom of hwy/tests/hwy_test.cc, is outside the HWY_BEFORE_NAMESPACE(); / HWY_AFTER_NAMESPACE();, and is guarded by #if HWY_ONCE / #endif, so it really should be compiled only for the static target (scalar in this case) based on my reading of hwy/foreach_target.h.

Comment 14 Robert-André Mauchin 🐧 2021-04-19 14:30:31 UTC
Okay, thanks a lot for your time!

Comment 15 Ben Beasley 2021-04-19 19:00:14 UTC
Looks like it’s the benchmarking/timer code, which gets called even with --gtest_list_tests:

> [reviewer@musicbox x86_64-redhat-linux-gnu]$ valgrind ./tests/hwy_test --gtest_list_tests
> ==147381== Memcheck, a memory error detector 
> ==147381== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
> ==147381== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
> ==147381== Command: ./tests/hwy_test --gtest_list_tests
> ==147381==
> vex amd64->IR: unhandled instruction bytes: 0xF 0x1 0xF9 0xF 0xAE 0xE8 0x29 0xF8 0x48 0x83
> vex amd64->IR:   REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
> vex amd64->IR:   VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=0F
> vex amd64->IR:   PFX.66=0 PFX.F2=0 PFX.F3=0
> ==147381== valgrind: Unrecognised instruction at address 0x10eb5a.
> ==147381==    at 0x10EB5A: Stop32 (nanobenchmark.cc:310)
> ==147381==    by 0x10EB5A: hwy::(anonymous namespace)::TimerResolution() (nanobenchmark.cc:457)
> ==147381==    by 0x10EBEC: __static_initialization_and_destruction_0 (nanobenchmark.cc:465)
> ==147381==    by 0x10EBEC: _GLOBAL__sub_I_nanobenchmark.cc (nanobenchmark.cc:721)
> ==147381==    by 0x1865BC: __libc_csu_init (in /home/reviewer/rpmbuild/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu/tests/hwy_test)
> ==147381==    by 0x4C6616D: (below main) (in /usr/lib64/libc-2.32.so)
> ==147381== Your program just tried to execute an instruction that Valgrind
> ==147381== did not recognise.  There are two possible reasons for this.
> ==147381== 1. Your program has a bug and erroneously jumped to a non-code
> ==147381==    location.  If you are running Memcheck and you just saw a
> ==147381==    warning about a bad jump, it's probably your program's fault.
> ==147381== 2. The instruction is legitimate but Valgrind doesn't handle it,
> ==147381==    i.e. it's Valgrind's fault.  If you think this is the case or
> ==147381==    you are not sure, please let us know and we'll try to fix it.
> ==147381== Either way, Valgrind will now raise a SIGILL signal which will
> ==147381== probably kill your program.
> ==147381==
> ==147381== Process terminating with default action of signal 4 (SIGILL): dumping core
> ==147381==  Illegal opcode at address 0x10EB5A
> ==147381==    at 0x10EB5A: Stop32 (nanobenchmark.cc:310)
> ==147381==    by 0x10EB5A: hwy::(anonymous namespace)::TimerResolution() (nanobenchmark.cc:457)
> ==147381==    by 0x10EBEC: __static_initialization_and_destruction_0 (nanobenchmark.cc:465)
> ==147381==    by 0x10EBEC: _GLOBAL__sub_I_nanobenchmark.cc (nanobenchmark.cc:721)
> ==147381==    by 0x1865BC: __libc_csu_init (in /home/reviewer/rpmbuild/BUILD/highway-0.11.1/x86_64-redhat-linux-gnu/tests/hwy_test)
> ==147381==    by 0x4C6616D: (below main) (in /usr/lib64/libc-2.32.so)
> ==147381==
> ==147381== HEAP SUMMARY:
> […]

So it’s actually the RDTSCP instruction that’s the issue here, not any of the SIMD in the library.

I don’t love adjusting the build settings based on the build host, but this is a %build section that works on my machine:

> %ifarch x86_64 %{ix86}
> # Even listing tests invokes the “nanobenchmark” code; on x86, this uses
> # RDTSCP, which may not be available, and the build process runs the test
> # executables to list the tests. We must therefore skip building the tests on
> # hosts without RDTSCP.”
> if ! grep -E '\brdtscp\b' /proc/cpuinfo >/dev/null
> then
>   build_testing='OFF'
> fi
> %endif
> %cmake -DHWY_SYSTEM_GTEST:BOOL=ON -DBUILD_TESTING:BOOL="${build_testing-ON}"
> %cmake_build

On the other hand, while it is difficult to find documentation on exactly which CPU models have supported RDTSCP, I think 64-bit CPUs without it are rather rare. This is mine: https://ark.intel.com/content/www/us/en/ark/products/29765/intel-core-2-quad-processor-q6600-8m-cache-2-40-ghz-1066-mhz-fsb.html. So it really may not be worth working around this case.

-----

If you post the spec and SRPM as you want them reviewed, I am prepared to do the review by:

  1. Running fedora-review on a copy where I have disabled building the tests.
  2. Doing a Koji scratch-build with your unmodified submission, then doing rpmlint and some manual queries on the resulting RPMs.

I won’t ask for a workaround for the build-time RDTSCP requirement, as the one I posted above has disadvantages and, considering which particular instruction is the issue, it’s unlikely to be a problem on Koji or on any but a very select few workstations.

I expect I will be able to approve this without any further quibbles.

Comment 16 Robert-André Mauchin 🐧 2021-04-20 13:29:43 UTC
(In reply to Ben Beasley from comment #15)
> 
> If you post the spec and SRPM as you want them reviewed, I am prepared to do
> the review by:
> 
>   1. Running fedora-review on a copy where I have disabled building the
> tests.
>   2. Doing a Koji scratch-build with your unmodified submission, then doing
> rpmlint and some manual queries on the resulting RPMs.
> 
> I won’t ask for a workaround for the build-time RDTSCP requirement, as the
> one I posted above has disadvantages and, considering which particular
> instruction is the issue, it’s unlikely to be a problem on Koji or on any
> but a very select few workstations.
> 
> I expect I will be able to approve this without any further quibbles.

Thanks a lot for the debugging.
Could you use the RPMS with https://koji.fedoraproject.org/koji/taskinfo?taskID=65535443
Paste them in the same directory as the SPEC and SRPM then launch fedora-review with the -p option:

fedora-review --mock-config fedora-rawhide-x86_64 -n highway -p

(-p, --prebuilt        When using -n <name>, use prebuilt rpms in current directory.)

Comment 17 Ben Beasley 2021-04-21 12:22:00 UTC
Thanks, I didn’t know about the --prebuilt flag. Reviewing now.

Comment 18 Ben Beasley 2021-04-21 13:13:29 UTC
Created attachment 1774089 [details]
Spec file as reviewed

Comment 19 Ben Beasley 2021-04-21 13:18:19 UTC
Created attachment 1774091 [details]
Spec file as reviewed

Comment 20 Ben Beasley 2021-04-21 13:19:14 UTC
I found only one issue, regarding the placement of the static library.

Package Review
==============

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

Issues:
=======
- Header files in -devel subpackage, if present.
  Note: highway-doc : /usr/share/doc/highway-doc/examples/skeleton-inl.h
  highway-doc : /usr/share/doc/highway-doc/examples/skeleton.h highway-doc
  : /usr/share/doc/highway-doc/examples/skeleton_shared.h
  See: https://docs.fedoraproject.org/en-US/packaging-
  guidelines/#_devel_packages

  This is a false positive, as these are part of an example project. No change
  required.

- Static libraries in -static or -devel subpackage, providing -devel if
  present.
  Note: Package has .a files: highway-libs. Illegal package name: highway-
  libs.
  See: https://docs.fedoraproject.org/en-US/packaging-
  guidelines/#packaging-static-libraries

  From the guidelines:

    > When a package only provides static libraries you MAY place all the
    > static library files in the *-devel subpackage. When doing this you also
    > MUST have a virtual Provide for the *-static package

  You have correctly added the virtual Provide, but it seems the guidelines
  require you to put the static library and virtual Provide in the -devel
  subpackage and drop the now-empty -libs subpackage.

- After the package is approved, you will need to file Bugzilla bugs blocking
  the tracker bugs for unsupported primary architectures, per
  https://docs.fedoraproject.org/en-US/packaging-guidelines/#_architecture_build_failures.

===== 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]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.

Generic:
[x]: Package successfully compiles and builds into binary rpms on at least
     one supported primary architecture.
     Note: Using prebuilt packages

     Builds in Koji.

[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: "Apache License 2.0", "Unknown or generated", "*No copyright*
     Apache License 2.0". 16 files have unknown license. Detailed output of
     licensecheck in /home/reviewer/review-highway/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.

     ExclusiveArch present and correctly justified. File Bugzilla bugs blocking
     tracker bugs for unsupported primary architectures after the package is
     approved
     (https://docs.fedoraproject.org/en-US/packaging-guidelines/#_architecture_build_failures).

[x]: Package complies to the Packaging Guidelines

     (except as otherwise noted)

[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:
[x]: Reviewer should test that the package builds in mock.
[-]: 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).
[x]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in highway-
     libs , highway-devel
[x]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[-]: Sources are verified with gpgverify first in %prep if upstream
     publishes signatures.
     Note: gpgverify is not used.
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[-]: Package should compile and build into binary rpms on all supported
     architectures.

     ExclusiveArch present and properly documented.

[x]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed
     files.
[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]: The placement of pkgconfig(.pc) files are correct.
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

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

Generic:
[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
-------
Checking: highway-libs-0.11.1-1.fc35.x86_64.rpm
          highway-devel-0.11.1-1.fc35.x86_64.rpm
          highway-doc-0.11.1-1.fc35.noarch.rpm
          highway-0.11.1-1.fc35.src.rpm
highway-libs.x86_64: W: no-documentation
highway-libs.x86_64: W: devel-file-in-non-devel-package /usr/lib64/libhwy.a
highway-devel.x86_64: W: no-documentation
4 packages and 0 specfiles checked; 0 errors, 3 warnings.




Rpmlint (installed packages)
----------------------------
highway-devel.x86_64: W: no-documentation
highway-libs.x86_64: W: no-documentation
highway-libs.x86_64: W: devel-file-in-non-devel-package /usr/lib64/libhwy.a
3 packages and 0 specfiles checked; 0 errors, 3 warnings.



Source checksums
----------------
https://github.com/google/highway/archive/0.11.1/highway-0.11.1.tar.gz :
  CHECKSUM(SHA256) this package     : 4c4bb9501c02b27a0944afde8923aaab554384690d37e5b2a7f97553426ea641
  CHECKSUM(SHA256) upstream package : 4c4bb9501c02b27a0944afde8923aaab554384690d37e5b2a7f97553426ea641


Requires
--------
highway-libs (rpmlib, GLIBC filtered):

highway-devel (rpmlib, GLIBC filtered):
    /usr/bin/pkg-config
    highway-libs(x86-64)
    pkgconfig(gtest)

highway-doc (rpmlib, GLIBC filtered):



Provides
--------
highway-libs:
    highway-libs
    highway-libs(x86-64)
    highway-static

highway-devel:
    highway-devel
    highway-devel(x86-64)
    pkgconfig(libhwy)
    pkgconfig(libhwy-test)

highway-doc:
    highway-doc



Generated by fedora-review 0.7.6 (b083f91) last change: 2020-11-10
Command line :/usr/bin/fedora-review --mock-config fedora-rawhide-x86_64 -n highway -p
Buildroot used: fedora-rawhide-x86_64
Active plugins: C/C++, Generic, Shell-api
Disabled plugins: Java, Ocaml, SugarActivity, PHP, Perl, Ruby, R, Python, Haskell, fonts
Disabled flags: EPEL6, EPEL7, DISTTAG, BATCH, EXARCH

Comment 21 Robert-André Mauchin 🐧 2021-04-21 13:42:52 UTC
If you check the latest SPEC I posted above, I had already fixed tihs:

https://eclipseo.fedorapeople.org/for-review/highway.spec

%package        devel
Summary:        Development files for Highway
Provides:       highway-static = %{version}-%{release}

%description devel
%{common_description}

Development files for Highway.

[…]

%files devel
%license LICENSE
%{_includedir}/hwy/
%{_libdir}/libhwy.a
%{_libdir}/pkgconfig/libhwy.pc
%{_libdir}/pkgconfig/libhwy-test.pc


Thanks for the review.

Comment 22 Ben Beasley 2021-04-21 14:27:14 UTC
Indeed. There were a lot of versions floating around. This one looks good.

I would suggest removing “-DCMAKE_CXX_FLAGS="%build_cxxflags -DHWY_COMPILE_ALL_ATTAINABLE"”, since:

  - Compiling worse-than-the-best-guaranteed-available implementations doesn’t do anything useful except allow the upstream developers to test more exhaustively. Specifically, it doesn’t affect the runtime requirements for the tests, which was the goal in adding it.
  - This does nothing at all on x86_64, according to my study in previous comments.
  - This might be bloating the installed library with unused implementations on other architectures.

Package approved.

Comment 23 Ben Beasley 2021-05-15 11:23:44 UTC
(This is just a ping in case you missed the ”package approved“ notifications).

Comment 24 Robert-André Mauchin 🐧 2021-05-15 13:39:58 UTC
Thanks, I'm just really busy these days.

Comment 25 Gwyn Ciesla 2021-05-16 22:02:54 UTC
(fedscm-admin):  The Pagure repository was created at https://src.fedoraproject.org/rpms/highway

Comment 26 Fedora Update System 2021-05-18 17:36:33 UTC
FEDORA-2021-62ef6cf16e has been submitted as an update to Fedora 34. https://bodhi.fedoraproject.org/updates/FEDORA-2021-62ef6cf16e

Comment 27 Fedora Update System 2021-05-18 17:37:31 UTC
FEDORA-2021-ef700ec6c4 has been submitted as an update to Fedora 33. https://bodhi.fedoraproject.org/updates/FEDORA-2021-ef700ec6c4

Comment 28 Fedora Update System 2021-05-18 17:53:00 UTC
FEDORA-EPEL-2021-acd6b0882a has been submitted as an update to Fedora EPEL 8. https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2021-acd6b0882a

Comment 29 Fedora Update System 2021-05-18 19:14:56 UTC
FEDORA-EPEL-2021-fb5cae13e6 has been submitted as an update to Fedora EPEL 7. https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2021-fb5cae13e6

Comment 30 Fedora Update System 2021-05-19 01:48:00 UTC
FEDORA-EPEL-2021-acd6b0882a has been pushed to the Fedora EPEL 8 testing repository.

You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2021-acd6b0882a

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 31 Fedora Update System 2021-05-19 02:20:46 UTC
FEDORA-2021-62ef6cf16e has been pushed to the Fedora 34 testing repository.
Soon you'll be able to install the update with the following command:
`sudo dnf install --enablerepo=updates-testing --advisory=FEDORA-2021-62ef6cf16e \*`
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2021-62ef6cf16e

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 32 Fedora Update System 2021-05-19 02:26:49 UTC
FEDORA-EPEL-2021-fb5cae13e6 has been pushed to the Fedora EPEL 7 testing repository.

You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2021-fb5cae13e6

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 33 Fedora Update System 2021-05-19 02:29:41 UTC
FEDORA-2021-ef700ec6c4 has been pushed to the Fedora 33 testing repository.
Soon you'll be able to install the update with the following command:
`sudo dnf install --enablerepo=updates-testing --advisory=FEDORA-2021-ef700ec6c4 \*`
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2021-ef700ec6c4

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 34 Fedora Update System 2021-05-24 01:05:31 UTC
FEDORA-2021-c78a938531 has been pushed to the Fedora 33 testing repository.
Soon you'll be able to install the update with the following command:
`sudo dnf upgrade --enablerepo=updates-testing --advisory=FEDORA-2021-c78a938531`
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2021-c78a938531

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 35 Fedora Update System 2021-05-24 01:24:59 UTC
FEDORA-EPEL-2021-153a84b92a has been pushed to the Fedora EPEL 7 testing repository.

You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2021-153a84b92a

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 36 Fedora Update System 2021-05-24 01:47:47 UTC
FEDORA-2021-5c7f1612ac has been pushed to the Fedora 34 testing repository.
Soon you'll be able to install the update with the following command:
`sudo dnf upgrade --enablerepo=updates-testing --advisory=FEDORA-2021-5c7f1612ac`
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2021-5c7f1612ac

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 37 Fedora Update System 2021-05-24 01:57:59 UTC
FEDORA-EPEL-2021-450e400eba has been pushed to the Fedora EPEL 8 testing repository.

You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2021-450e400eba

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 38 Fedora Update System 2021-06-01 01:03:39 UTC
FEDORA-2021-5c7f1612ac has been pushed to the Fedora 34 stable repository.
If problem still persists, please make note of it in this bug report.

Comment 39 Fedora Update System 2021-06-01 01:05:25 UTC
FEDORA-2021-c78a938531 has been pushed to the Fedora 33 stable repository.
If problem still persists, please make note of it in this bug report.

Comment 40 Fedora Update System 2021-06-01 01:15:59 UTC
FEDORA-EPEL-2021-ce450116fd has been pushed to the Fedora EPEL 8 testing repository.

You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2021-ce450116fd

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 41 Fedora Update System 2021-06-01 01:17:08 UTC
FEDORA-EPEL-2021-1c7e291c32 has been pushed to the Fedora EPEL 7 testing repository.

You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2021-1c7e291c32

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 42 Fedora Update System 2021-06-14 01:24:24 UTC
FEDORA-EPEL-2021-334f95447d has been pushed to the Fedora EPEL 8 testing repository.

You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2021-334f95447d

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 43 Fedora Update System 2021-06-14 01:31:38 UTC
FEDORA-EPEL-2021-eac30f8da6 has been pushed to the Fedora EPEL 7 testing repository.

You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2021-eac30f8da6

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 44 Fedora Update System 2021-06-29 00:32:23 UTC
FEDORA-EPEL-2021-334f95447d has been pushed to the Fedora EPEL 8 stable repository.
If problem still persists, please make note of it in this bug report.

Comment 45 Fedora Update System 2021-06-29 00:34:12 UTC
FEDORA-EPEL-2021-eac30f8da6 has been pushed to the Fedora EPEL 7 stable repository.
If problem still persists, please make note of it in this bug report.


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