Mellanox/mstflint

Compiling on musl system

FallingSnow opened this issue · 6 comments

Running into an issue on alpine linux. Can't seem to find sys/pci.h while compiling. Cloned from master branch.

See https://bugs.gentoo.org/713610 for additional info.

$ uname -a
Linux master1.node.universalis.dev 5.15.37-0-lts #1-Alpine SMP Tue, 03 May 2022 11:42:03 +0000 x86_64 Linux
$ git rev-parse origin/master
5b34f7a86d0b5862b0e6d5cfaf06869a85b466cb
mtcr_ul_com.c:80:10: fatal error: sys/pci.h: No such file or directory
   80 | #include <sys/pci.h>
      |          ^~~~~~~~~~~
compilation terminated.
make[2]: *** [Makefile:617: libmtcr_ul_a-mtcr_ul_com.o] Error 1
make[2]: *** Waiting for unfinished jobs....
mv -f .deps/libmtcr_ul_a-mtcr_mem_ops.Tpo .deps/libmtcr_ul_a-mtcr_mem_ops.Po
mv -f .deps/libmtcr_ul_a-mtcr_ib_res_mgt.Tpo .deps/libmtcr_ul_a-mtcr_ib_res_mgt.Po
mv -f .deps/libmtcr_ul_a-packets_layout.Tpo .deps/libmtcr_ul_a-packets_layout.Po
mv -f .deps/libmtcr_ul_a-packets_common.Tpo .deps/libmtcr_ul_a-packets_common.Po
mv -f .deps/libmtcr_ul_a-mtcr_ul.Tpo .deps/libmtcr_ul_a-mtcr_ul.Po
mv -f .deps/libmtcr_ul_a-mtcr_tools_cif.Tpo .deps/libmtcr_ul_a-mtcr_tools_cif.Po
mv -f .deps/libmtcr_ul_a-mtcr_ul_icmd_cif.Tpo .deps/libmtcr_ul_a-mtcr_ul_icmd_cif.Po
make[2]: Leaving directory '/root/mstflint/mtcr_ul'
make[1]: *** [Makefile:551: all-recursive] Error 1
make[1]: Leaving directory '/root/mstflint'
make: *** [Makefile:438: all] Error 2

Dear FallingSnow
mstflint does not support alpine linux release.
your missing file sys/pci.h is a mandatory system file require for the tools to work.

to get the missing file you can try to install a 3rd party package that contains it, like:
https://alpine.pkgs.org/3.15/alpine-main-x86_64/syslinux-dev-6.04_pre1-r9.apk.html

I know, but it's the system I have :(
I've tried installing syslinux-dev but the error persists.

$ apk list --installed | grep syslinux
syslinux-dev-6.04_pre1-r9 x86_64 {syslinux} (GPL-2.0-or-later) [installed]

$ ls /usr/share/syslinux/com32/include/sys/pci.h -l
-rw-r--r--    1 root     root          4299 Apr 13  2021 /usr/share/syslinux/com32/include/sys/pci.h

I tried that earlier when I found it via https://pkgs.alpinelinux.org/contents?file=pci.h&path=*%2Fsys&name=&branch=v3.15&arch=x86_64. Maybe my includes are wrong?

did you add the installation path to your $PATH variables so the compiler #include can see it?

I tried adding it to PATH

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/share/syslinux
$ git clone --depth=1 https://github.com/Mellanox/mstflint.git
...
$ cd mstflint
$ ./autogen.sh
...
$ ./configure --disable-inband
...
$ make -j24
...
mtcr_ul_com.c:80:10: fatal error: sys/pci.h: No such file or directory
   80 | #include <sys/pci.h>
      |          ^~~~~~~~~~~
compilation terminated.

Same error.

acaos commented

These were the only changes I needed to make to compile on musl (after installing linux-headers and openssl-dev and compiling with --disable-inband):

diff -ur mstflint-4.20.0-orig/mtcr_ul/mtcr_ul_com.c mstflint-4.20.0/mtcr_ul/mtcr_ul_com.c
--- mstflint-4.20.0-orig/mtcr_ul/mtcr_ul_com.c  2022-04-28 11:50:04.000000000 +0000
+++ mstflint-4.20.0/mtcr_ul/mtcr_ul_com.c       2022-05-19 14:06:49.479797274 +0000
@@ -67,7 +67,13 @@
 #include <endian.h>
 #include <byteswap.h>
 #include <errno.h>
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
 #include <sys/types.h>
+#undef _GNU_SOURCE
+#else
+#include <sys/types.h>
+#endif
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <string.h>
@@ -77,7 +83,7 @@

 #if CONFIG_ENABLE_MMAP
 #include <sys/mman.h>
-#include <sys/pci.h>
+#include <linux/pci.h>
 #include <sys/ioctl.h>
 #endif

@acaos That worked perfectly. Thank you!