Re: [Mesa-dev] [PATCH] intel: tools: fix build on old systems
On 5 July 2018 at 16:33, Matt Turner wrote: > On Thu, Jul 5, 2018 at 7:42 AM Lionel Landwerlin > wrote: >> >> Older system might not have support for memfd_create at the kernel >> level. There we won't be able to use aubinator. >> >> We also initially tried to workaround some libc having the >> memfd_create syscall number defined, but not the memfd_create() >> function. >> >> This change fixes the broken build on the travis CI by only compiling >> aubinator if memfd_create() is available as part of the libc. > > memfd_create() was added in glibc-2.27. I think that's too new to rely > on. I know aubinator is a developer tool, but I don't think most > developers have glibc 2.27 yet. > > I'd suggest we rename our "memfd_create" functions to avoid the clash > with glibc-2.27+ and just use them regardless. > I'm a fan on this. Less code and build system magic is always great. I'd imagine the man page meant to say "linux/memfd.h" instead of "sys/memfd.h" -Emil ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] intel: tools: fix build on old systems
On Thu, Jul 5, 2018 at 7:42 AM Lionel Landwerlin wrote: > > Older system might not have support for memfd_create at the kernel > level. There we won't be able to use aubinator. > > We also initially tried to workaround some libc having the > memfd_create syscall number defined, but not the memfd_create() > function. > > This change fixes the broken build on the travis CI by only compiling > aubinator if memfd_create() is available as part of the libc. memfd_create() was added in glibc-2.27. I think that's too new to rely on. I know aubinator is a developer tool, but I don't think most developers have glibc 2.27 yet. I'd suggest we rename our "memfd_create" functions to avoid the clash with glibc-2.27+ and just use them regardless. > Annoyingly the man page says which should include but It doesn't exist in upstream glibc either. I think the man page is simply wrong. ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] intel: tools: fix build on old systems
On Thursday, 2018-07-05 15:40:52 +0100, Lionel Landwerlin wrote: > Older system might not have support for memfd_create at the kernel > level. There we won't be able to use aubinator. > > We also initially tried to workaround some libc having the > memfd_create syscall number defined, but not the memfd_create() > function. > > This change fixes the broken build on the travis CI by only compiling > aubinator if memfd_create() is available as part of the libc. > Annoyingly the man page says which should include but > that header doesn't exist on my system and memfd_create() is instead > defined in bits/mman-shared.h. Hence the new checks... > > Signed-off-by: Lionel Landwerlin > --- > configure.ac| 8 +++- > meson.build | 2 +- > src/intel/Makefile.tools.am | 6 +- > src/intel/tools/aubinator.c | 13 +++-- > src/intel/tools/meson.build | 33 +++-- > 5 files changed, 39 insertions(+), 23 deletions(-) > > diff --git a/configure.ac b/configure.ac > index f135d057365..939585411f9 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -872,10 +872,16 @@ AC_HEADER_MAJOR > AC_CHECK_HEADER([xlocale.h], [DEFINES="$DEFINES -DHAVE_XLOCALE_H"]) > AC_CHECK_HEADER([sys/sysctl.h], [DEFINES="$DEFINES -DHAVE_SYS_SYSCTL_H"]) > AC_CHECK_HEADERS([endian.h]) > +AC_CHECK_HEADERS([sys/memfd.h], [DEFINES="$DEFINES -DHAVE_SYS_MEMFD_H") > AC_CHECK_FUNC([strtof], [DEFINES="$DEFINES -DHAVE_STRTOF"]) > AC_CHECK_FUNC([mkostemp], [DEFINES="$DEFINES -DHAVE_MKOSTEMP"]) > AC_CHECK_FUNC([timespec_get], [DEFINES="$DEFINES -DHAVE_TIMESPEC_GET"]) > -AC_CHECK_FUNC([memfd_create], [DEFINES="$DEFINES -DHAVE_MEMFD_CREATE"]) > +AC_CHECK_FUNC([memfd_create], [MEMFD_CREATE=yes], [MEMFD_CREATE=no]) > + > +AM_CONDITIONAL(HAVE_MEMFD_CREATE, test "x$MEMFD_CREATE" = xyes) > +if test "x$MEMFD_CREATE" = xyes; then > + DEFINES="$DEFINES -DHAVE_MEMFD_CREATE" > +fi > > AC_MSG_CHECKING([whether strtod has locale support]) > AC_LINK_IFELSE([AC_LANG_SOURCE([[ > diff --git a/meson.build b/meson.build > index b2722c71e5b..89f17128c03 100644 > --- a/meson.build > +++ b/meson.build > @@ -956,7 +956,7 @@ elif cc.has_header_symbol('sys/mkdev.h', 'major') >pre_args += '-DMAJOR_IN_MKDEV' > endif > > -foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h', 'endian.h'] > +foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h', 'endian.h', > 'sys/memfd.h'] >if cc.compiles('#include <@0@>'.format(h), name : '@0@'.format(h)) > pre_args += '-DHAVE_@0@'.format(h.to_upper().underscorify()) >endif > diff --git a/src/intel/Makefile.tools.am b/src/intel/Makefile.tools.am > index b00cc8cc2cb..16cc1095f62 100644 > --- a/src/intel/Makefile.tools.am > +++ b/src/intel/Makefile.tools.am > @@ -19,8 +19,12 @@ > # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER > DEALINGS > # IN THE SOFTWARE. > > +if HAVE_MEMFD_CREATE > +noinst_PROGRAMS += \ > + tools/aubinator > +endif > + > noinst_PROGRAMS += \ > - tools/aubinator \ > tools/aubinator_error_decode > > tools_aubinator_SOURCES = \ > diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c > index 8989d558b66..24ec1a276d9 100644 > --- a/src/intel/tools/aubinator.c > +++ b/src/intel/tools/aubinator.c > @@ -36,6 +36,9 @@ > #include > #include > #include > +#ifdef HAVE_SYS_MEMFD_H > +#include > +#endif > > #include "util/list.h" > #include "util/macros.h" > @@ -46,16 +49,6 @@ > #include "common/gen_gem.h" > #include "intel_aub.h" > > -#ifndef HAVE_MEMFD_CREATE > -#include > - > -static inline int > -memfd_create(const char *name, unsigned int flags) > -{ > - return syscall(SYS_memfd_create, name, flags); > -} > -#endif > - > /* Below is the only command missing from intel_aub.h in libdrm > * So, reuse intel_aub.h from libdrm and #define the > * AUB_MI_BATCH_BUFFER_END as below > diff --git a/src/intel/tools/meson.build b/src/intel/tools/meson.build > index 705a353f26a..717f03c9002 100644 > --- a/src/intel/tools/meson.build > +++ b/src/intel/tools/meson.build > @@ -18,16 +18,29 @@ > # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN > THE > # SOFTWARE. > > -aubinator = executable( > - 'aubinator', > - files('aubinator.c', 'intel_aub.h'), > - dependencies : [dep_expat, dep_zlib, dep_dl, dep_thread, dep_m], > - include_directories : [inc_common, inc_intel], > - link_with : [libintel_common, libintel_compiler, libintel_dev, > libmesa_util], > - c_args : [c_vis_args, no_override_init_args], > - build_by_default : with_tools.contains('intel'), > - install : with_tools.contains('intel'), > -) > +has_memfd_create = cc.compiles('''#include > + int main() { > + return memfd_create("", 0); > + }''', > + name : 'memfd create') or > + cc.compiles('''#include > +
[Mesa-dev] [PATCH] intel: tools: fix build on old systems
Older system might not have support for memfd_create at the kernel level. There we won't be able to use aubinator. We also initially tried to workaround some libc having the memfd_create syscall number defined, but not the memfd_create() function. This change fixes the broken build on the travis CI by only compiling aubinator if memfd_create() is available as part of the libc. Annoyingly the man page says which should include but that header doesn't exist on my system and memfd_create() is instead defined in bits/mman-shared.h. Hence the new checks... Signed-off-by: Lionel Landwerlin --- configure.ac| 8 +++- meson.build | 2 +- src/intel/Makefile.tools.am | 6 +- src/intel/tools/aubinator.c | 13 +++-- src/intel/tools/meson.build | 33 +++-- 5 files changed, 39 insertions(+), 23 deletions(-) diff --git a/configure.ac b/configure.ac index f135d057365..939585411f9 100644 --- a/configure.ac +++ b/configure.ac @@ -872,10 +872,16 @@ AC_HEADER_MAJOR AC_CHECK_HEADER([xlocale.h], [DEFINES="$DEFINES -DHAVE_XLOCALE_H"]) AC_CHECK_HEADER([sys/sysctl.h], [DEFINES="$DEFINES -DHAVE_SYS_SYSCTL_H"]) AC_CHECK_HEADERS([endian.h]) +AC_CHECK_HEADERS([sys/memfd.h], [DEFINES="$DEFINES -DHAVE_SYS_MEMFD_H") AC_CHECK_FUNC([strtof], [DEFINES="$DEFINES -DHAVE_STRTOF"]) AC_CHECK_FUNC([mkostemp], [DEFINES="$DEFINES -DHAVE_MKOSTEMP"]) AC_CHECK_FUNC([timespec_get], [DEFINES="$DEFINES -DHAVE_TIMESPEC_GET"]) -AC_CHECK_FUNC([memfd_create], [DEFINES="$DEFINES -DHAVE_MEMFD_CREATE"]) +AC_CHECK_FUNC([memfd_create], [MEMFD_CREATE=yes], [MEMFD_CREATE=no]) + +AM_CONDITIONAL(HAVE_MEMFD_CREATE, test "x$MEMFD_CREATE" = xyes) +if test "x$MEMFD_CREATE" = xyes; then + DEFINES="$DEFINES -DHAVE_MEMFD_CREATE" +fi AC_MSG_CHECKING([whether strtod has locale support]) AC_LINK_IFELSE([AC_LANG_SOURCE([[ diff --git a/meson.build b/meson.build index b2722c71e5b..89f17128c03 100644 --- a/meson.build +++ b/meson.build @@ -956,7 +956,7 @@ elif cc.has_header_symbol('sys/mkdev.h', 'major') pre_args += '-DMAJOR_IN_MKDEV' endif -foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h', 'endian.h'] +foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h', 'endian.h', 'sys/memfd.h'] if cc.compiles('#include <@0@>'.format(h), name : '@0@'.format(h)) pre_args += '-DHAVE_@0@'.format(h.to_upper().underscorify()) endif diff --git a/src/intel/Makefile.tools.am b/src/intel/Makefile.tools.am index b00cc8cc2cb..16cc1095f62 100644 --- a/src/intel/Makefile.tools.am +++ b/src/intel/Makefile.tools.am @@ -19,8 +19,12 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. +if HAVE_MEMFD_CREATE +noinst_PROGRAMS += \ + tools/aubinator +endif + noinst_PROGRAMS += \ - tools/aubinator \ tools/aubinator_error_decode tools_aubinator_SOURCES = \ diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c index 8989d558b66..24ec1a276d9 100644 --- a/src/intel/tools/aubinator.c +++ b/src/intel/tools/aubinator.c @@ -36,6 +36,9 @@ #include #include #include +#ifdef HAVE_SYS_MEMFD_H +#include +#endif #include "util/list.h" #include "util/macros.h" @@ -46,16 +49,6 @@ #include "common/gen_gem.h" #include "intel_aub.h" -#ifndef HAVE_MEMFD_CREATE -#include - -static inline int -memfd_create(const char *name, unsigned int flags) -{ - return syscall(SYS_memfd_create, name, flags); -} -#endif - /* Below is the only command missing from intel_aub.h in libdrm * So, reuse intel_aub.h from libdrm and #define the * AUB_MI_BATCH_BUFFER_END as below diff --git a/src/intel/tools/meson.build b/src/intel/tools/meson.build index 705a353f26a..717f03c9002 100644 --- a/src/intel/tools/meson.build +++ b/src/intel/tools/meson.build @@ -18,16 +18,29 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -aubinator = executable( - 'aubinator', - files('aubinator.c', 'intel_aub.h'), - dependencies : [dep_expat, dep_zlib, dep_dl, dep_thread, dep_m], - include_directories : [inc_common, inc_intel], - link_with : [libintel_common, libintel_compiler, libintel_dev, libmesa_util], - c_args : [c_vis_args, no_override_init_args], - build_by_default : with_tools.contains('intel'), - install : with_tools.contains('intel'), -) +has_memfd_create = cc.compiles('''#include + int main() { + return memfd_create("", 0); + }''', + name : 'memfd create') or + cc.compiles('''#include + int main() { + return memfd_create("", 0); + }''', + name : 'memfd create') + +if has_memfd_create + aubinator = executable( +'aubinator', +files('aubinator.c', 'intel_aub.h'), +dependencies :