blob: 406a4f3cffb188473ca77486b668cd63a92b26cc [file] [log] [blame]
Patrick Williamsb48b7b42016-08-17 15:04:38 -05001require netmap.inc
2
3DEPENDS = "virtual/kernel"
4do_configure[depends] += "virtual/kernel:do_shared_workdir"
5
6inherit module
7
8CLEANBROKEN = "1"
9
10export INSTALL_MOD_DIR="kernel/netmap-modules"
11
12EXTRA_OECONF = "--kernel-dir=${STAGING_KERNEL_BUILDDIR} \
13 --kernel-sources=${STAGING_KERNEL_DIR} \
14 --install-mod-path=${D} \
15 --driver-suffix="-netmap" \
16 "
17
18# The driver builds are optional, but for deterministic builds,
19# we should be able to explicitly enable/disable the builds
20# for them in a proper place (maybe in BSP).
21# But we can't use PACKAGECONFIG since there is no option for
22# each driver, and the options are:
23# --no-drivers do not compile any driver
24# --no-drivers= do not compile the given drivers (comma sep.)
25# --drivers= only compile the given drivers (comma sep.)
26#
27# So use NETMAP_DRIVERS and the following python code to add proper
28# configs to EXTRA_OECONF.
29#
30# The default is no-drivers, and all supported drivers are listed
31# in NETMAP_ALL_DRIVERS.
32NETMAP_DRIVERS ??= ""
33NETMAP_ALL_DRIVERS = "ixgbe igb e1000e e1000 veth.c forcedeth.c virtio_net.c r8169.c"
34
35python __anonymous () {
36 drivers_list = d.getVar("NETMAP_DRIVERS", True).split()
37 all_drivers_list = d.getVar("NETMAP_ALL_DRIVERS", True).split()
38 config_drivers = "--drivers=" + ",".join(drivers_list)
39
40 extra_oeconf_drivers = bb.utils.contains_any('NETMAP_DRIVERS', all_drivers_list, config_drivers, '--no-drivers', d)
41 d.appendVar("EXTRA_OECONF", extra_oeconf_drivers)
42}
43
44LDFLAGS := "${@'${LDFLAGS}'.replace('-Wl,-O1', '')}"
45LDFLAGS := "${@'${LDFLAGS}'.replace('-Wl,--as-needed', '')}"
46
47do_configure () {
48 cd ${S}/LINUX
49 ./configure ${EXTRA_OECONF}
50}
51
52do_configure_append () {
53 cat >> ${S}/LINUX/netmap_linux_config.h <<EOF
54#define NETMAP_LINUX_HAVE_HRTIMER_MODE_REL
55#define NETMAP_LINUX_HAVE_HRTIMER_FORWARD_NOW
56#define NETMAP_LINUX_HAVE_PHYS_ADDR_T
57#define NETMAP_LINUX_HAVE_ACCESS_ONCE
58#define NETMAP_LINUX_HAVE_NETDEV_OPS
59#define NETMAP_LINUX_HAVE_INIT_NET
60#define NETMAP_LINUX_HAVE_LIVE_ADDR_CHANGE
61#define NETMAP_LINUX_HAVE_TX_SKB_SHARING
62#define NETMAP_LINUX_HAVE_UNLOCKED_IOCTL
63#define NETMAP_LINUX_HAVE_PERNET_OPS_ID
64#define NETMAP_LINUX_VIRTIO_FUNCTIONS
65#define NETMAP_LINUX_VIRTIO_FREE_PAGES
66#define NETMAP_LINUX_VIRTIO_GET_VRSIZE
67#define NETMAP_LINUX_TIMER_RTYPE enum hrtimer_restart
68#define NETMAP_LINUX_VIRTIO_MULTI_QUEUE
69#define NETMAP_LINUX_HAVE_E1000E_EXT_RXDESC
70#define NETMAP_LINUX_HAVE_E1000E_DOWN2
71EOF
72
73if ${@ 'false' if (bb.utils.vercmp_string(d.getVar('KERNEL_VERSION', True), '3.17') < 0) else 'true' } ; then
74 echo OK
75 cat >> ${S}/LINUX/netmap_linux_config.h <<EOF
76#define NETMAP_LINUX_ALLOC_NETDEV_4ARGS
77EOF
78fi
79}
80
81do_compile () {
82 cd ${S}/LINUX
83 oe_runmake
84}
85
86do_install () {
87 cd ${S}/LINUX
88 oe_runmake install
89}