meson: add LXC driver build option

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Neal Gompa <ngompa13@gmail.com>
This commit is contained in:
Pavel Hrdina 2020-04-30 11:30:32 +02:00
parent 79fde1c101
commit 510665daef
4 changed files with 35 additions and 82 deletions

View File

@ -74,10 +74,6 @@ case $host in
esac esac
if test $with_linux = no; then if test $with_linux = no; then
if test "x$with_lxc" != xyes
then
with_lxc=no
fi
with_dtrace=no with_dtrace=no
with_storage_scsi=no with_storage_scsi=no
fi fi
@ -90,7 +86,6 @@ AM_CONDITIONAL([WITH_MACOS], [test "$with_macos" = "yes"])
# Stateful drivers are useful only when building the daemon. # Stateful drivers are useful only when building the daemon.
if test "$with_libvirtd" = "no" ; then if test "$with_libvirtd" = "no" ; then
with_qemu=no with_qemu=no
with_lxc=no
with_vbox=no with_vbox=no
fi fi
@ -112,7 +107,6 @@ LIBVIRT_DRIVER_ARG_QEMU
LIBVIRT_DRIVER_ARG_OPENVZ LIBVIRT_DRIVER_ARG_OPENVZ
LIBVIRT_DRIVER_ARG_VMWARE LIBVIRT_DRIVER_ARG_VMWARE
LIBVIRT_DRIVER_ARG_VBOX LIBVIRT_DRIVER_ARG_VBOX
LIBVIRT_DRIVER_ARG_LXC
LIBVIRT_DRIVER_ARG_VZ LIBVIRT_DRIVER_ARG_VZ
LIBVIRT_DRIVER_ARG_TEST LIBVIRT_DRIVER_ARG_TEST
LIBVIRT_DRIVER_ARG_NETWORK LIBVIRT_DRIVER_ARG_NETWORK
@ -122,7 +116,6 @@ LIBVIRT_DRIVER_CHECK_QEMU
LIBVIRT_DRIVER_CHECK_OPENVZ LIBVIRT_DRIVER_CHECK_OPENVZ
LIBVIRT_DRIVER_CHECK_VMWARE LIBVIRT_DRIVER_CHECK_VMWARE
LIBVIRT_DRIVER_CHECK_VBOX LIBVIRT_DRIVER_CHECK_VBOX
LIBVIRT_DRIVER_CHECK_LXC
LIBVIRT_DRIVER_CHECK_VZ LIBVIRT_DRIVER_CHECK_VZ
LIBVIRT_DRIVER_CHECK_TEST LIBVIRT_DRIVER_CHECK_TEST
LIBVIRT_DRIVER_CHECK_NETWORK LIBVIRT_DRIVER_CHECK_NETWORK
@ -322,7 +315,6 @@ LIBVIRT_DRIVER_RESULT_QEMU
LIBVIRT_DRIVER_RESULT_OPENVZ LIBVIRT_DRIVER_RESULT_OPENVZ
LIBVIRT_DRIVER_RESULT_VMWARE LIBVIRT_DRIVER_RESULT_VMWARE
LIBVIRT_DRIVER_RESULT_VBOX LIBVIRT_DRIVER_RESULT_VBOX
LIBVIRT_DRIVER_RESULT_LXC
LIBVIRT_DRIVER_RESULT_VZ LIBVIRT_DRIVER_RESULT_VZ
LIBVIRT_DRIVER_RESULT_TEST LIBVIRT_DRIVER_RESULT_TEST
LIBVIRT_DRIVER_RESULT_NETWORK LIBVIRT_DRIVER_RESULT_NETWORK

View File

@ -1,74 +0,0 @@
dnl The LXC driver
dnl
dnl Copyright (C) 2016 Red Hat, Inc.
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Lesser General Public
dnl License as published by the Free Software Foundation; either
dnl version 2.1 of the License, or (at your option) any later version.
dnl
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Lesser General Public License for more details.
dnl
dnl You should have received a copy of the GNU Lesser General Public
dnl License along with this library. If not, see
dnl <http://www.gnu.org/licenses/>.
dnl
AC_DEFUN([LIBVIRT_DRIVER_ARG_LXC], [
LIBVIRT_ARG_WITH_FEATURE([LXC], [Linux Container], [check])
])
AC_DEFUN([LIBVIRT_DRIVER_CHECK_LXC], [
if test "$with_libvirtd" = "no" ; then
with_lxc=no
fi
if test "$with_lxc" = "yes" || test "$with_lxc" = "check"; then
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
#include <sched.h>
#include <linux/loop.h>
#include <sys/epoll.h>
]], [[
unshare(!(LO_FLAGS_AUTOCLEAR + EPOLL_CLOEXEC));
]])
], [
with_lxc=yes
AC_DEFINE([HAVE_DECL_LO_FLAGS_AUTOCLEAR], [1],
[Define to 1 if you have the declaration of `LO_FLAGS_AUTOCLEAR',
and to 0 if you don't.])
], [
if test "$with_lxc" = "check"; then
with_lxc=no
AC_MSG_NOTICE([Required kernel features were not found, disabling LXC])
else
AC_MSG_ERROR([Required kernel features for LXC were not found])
fi
])
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[
#include <sched.h>
#include <linux/loop.h>
#include <sys/epoll.h>
]], [[
unshare(!(LOOP_CTL_GET_FREE));
]])
], [
AC_DEFINE([HAVE_DECL_LOOP_CTL_GET_FREE], [1],
[Define to 1 if you have the declaration of `LOOP_CTL_GET_FREE',
and to 0 if you don't.])
])
fi
if test "$with_lxc" = "yes" ; then
AC_DEFINE_UNQUOTED([WITH_LXC], 1, [whether LXC driver is enabled])
fi
AM_CONDITIONAL([WITH_LXC], [test "$with_lxc" = "yes"])
])
AC_DEFUN([LIBVIRT_DRIVER_RESULT_LXC], [
LIBVIRT_RESULT([LXC], [$with_lxc])
])

View File

@ -1668,6 +1668,39 @@ elif get_option('driver_libxl').enabled()
error('libvirtd is required for libxenlight') error('libvirtd is required for libxenlight')
endif endif
if not get_option('driver_lxc').disabled() and host_machine.system() == 'linux' and conf.has('WITH_LIBVIRTD')
lxc_support_code = '''
#include <sched.h>
#include <linux/loop.h>
#include <sys/epoll.h>
void main(void) {
unshare(!(LO_FLAGS_AUTOCLEAR + EPOLL_CLOEXEC));
}
'''
if cc.compiles(lxc_support_code, name: 'lxc support', args: '-D_GNU_SOURCE')
conf.set('WITH_LXC', 1)
conf.set('HAVE_DECL_LO_FLAGS_AUTOCLEAR', 1)
elif get_option('driver_lxc').enabled()
error('Required kernel features for LXC were not found')
endif
lxc_get_free_code = '''
#include <sched.h>
#include <linux/loop.h>
#include <sys/epoll.h>
void main(void) {
unshare(!(LOOP_CTL_GET_FREE));
}
'''
if cc.compiles(lxc_get_free_code)
conf.set('HAVE_DECL_LOOP_CTL_GET_FREE', 1)
endif
elif get_option('driver_lxc').enabled()
error('linux and remote_driver are required for LXC')
endif
# define top include directory # define top include directory
@ -1689,6 +1722,7 @@ configure_file(output: 'meson-config.h', configuration: conf)
driver_summary = { driver_summary = {
'libxl': conf.has('WITH_LIBXL'), 'libxl': conf.has('WITH_LIBXL'),
'LXC': conf.has('WITH_LXC'),
'ESX': conf.has('WITH_ESX'), 'ESX': conf.has('WITH_ESX'),
'Hyper-V': conf.has('WITH_HYPERV'), 'Hyper-V': conf.has('WITH_HYPERV'),
'Bhyve': conf.has('WITH_BHYVE'), 'Bhyve': conf.has('WITH_BHYVE'),

View File

@ -53,5 +53,6 @@ option('driver_esx', type: 'feature', value: 'enabled', description: 'esx driver
option('driver_hyperv', type: 'feature', value: 'auto', description: 'Hyper-V driver') option('driver_hyperv', type: 'feature', value: 'auto', description: 'Hyper-V driver')
option('driver_libvirtd', type: 'feature', value: 'auto', description: 'libvirtd driver') option('driver_libvirtd', type: 'feature', value: 'auto', description: 'libvirtd driver')
option('driver_libxl', type: 'feature', value: 'auto', description: 'libxenlight driver') option('driver_libxl', type: 'feature', value: 'auto', description: 'libxenlight driver')
option('driver_lxc', type: 'feature', value: 'auto', description: 'Linux Container driver')
option('driver_remote', type: 'feature', value: 'enabled', description: 'remote driver') option('driver_remote', type: 'feature', value: 'enabled', description: 'remote driver')
option('remote_default_mode', type: 'combo', choices: ['legacy', 'direct'], value: 'legacy', description: 'remote driver default mode') option('remote_default_mode', type: 'combo', choices: ['legacy', 'direct'], value: 'legacy', description: 'remote driver default mode')