This patch fixes a couple of issues introduced in commits
c7c1eac070 and
9f53572915:
- Dropped `dataonly: true` from `pkgconfig.generate()`, since it
generates a .pc file unsuitable for libraries. Instead, I've just set
`install_dir` to `$datadir/pkgconfig`, which generates the following:
$ cat /usr/share/pkgconfig/xbyak.pc
prefix=/usr
includedir=${prefix}/include
Name: xbyak
Description: JIT assembler for x86(IA32), x64(AMD64, x86-64)
URL: https://github.com/herumi/xbyak
Version: 7.06
Cflags: -I${includedir}
- Changed `share/cmake/xbyak` to
`get_option('datadir')/'cmake'/meson.project_name()` to avoid
hardcoding "share" as the datadir.
- Added `arch_independent: true` to the
`cmake.write_basic_package_version_file()` call so that the generated
CMake version file doesn't contain arch-specific checks unsuitable for
a file located in /usr/share/cmake.
I was investigating an issue with the Fedora package build:
builds on i686 would yield a package with /usr/lib/pkgconfig/xbyak.pc,
while builds on amd64 would yield a package with /usr/lib64/pkgconfig/xbyak.pc.
xbyak is arch-indepdent, in the sense of the installed payload being identical
on all architectures and located in a non-arch-specific directory (/usr/inlude).
The .pc file should be arch-independent too. Right now, if we install the
package from a different architecture, we would find the files in /usr/include,
but not the .pc file. (E.g. on amd64 the pkg-config search path is
/usr/lib64/pkgconfig:/usr/share/pkgconfig, so /usr/lib/pkgconfig/xbyak.pc will
not be found.) So install the file to $prefix/pkgconfig (usually
/usr/share/pkgconfig) so it will be found properly.
We need to specify 'includedir' in the variable list for pkgconfig.generate(),
because by default meson does not include this variable when dataonly:true
is used. The $prefix/include pattern is evaluated in meson, to handle the
case where the user specified an include_dir as absolute path.
FIX: setCacheHierarchy() threw a div-by-zero exception on legacy AMD CPUs.
Improved detection of cores/threads for legacy AMD CPUs in setNumCores().
Improved cache hierarchy detection for AMD and Intel CPUs in setCacheHierarchy().
FIX: Typo "coresSharignDataCache_" -> "coresSharingDataCache_".
Compare the full manufacturer ID strings to detect CPU manufacturers (AMD or Intel).
getCpuid() now calls getCpuidEx() internally.
setFamily() now utilizes extractBit().
FIX: If CPU family == 6 then only add extModel to model on Intel CPUs.
Renamed IntelCpuTopologyLevel to CpuTopologyLevel as both Intel and modern AMD CPUs support the feature.
Removed no longer used functions: mask() and get32bitAsBE().
Removed no longer used x2APIC_supported_ private field.
ARM64EC is a custom ABI designed to allow ARM64 code to directly call into x64 code and vice-versa. In order to facilitate this, __x86_64__ (in llvm) and _M_X64 (in msvc) are both defined, but most x64 intrinsics aren't supported, so don't attempt to use them.