xref: /openbmc/openbmc/meta-openembedded/meta-networking/recipes-protocols/frr/frr_10.3.bb (revision eaae0b339f806200d8722cb09e5e3b83c15a5956)
1*eaae0b33SPatrick WilliamsSUMMARY = "BGP/OSPF/RIP routing daemon"
2*eaae0b33SPatrick WilliamsDESCRIPTION = "FRRouting is a free and open source Internet routing protocol suite for Linux \
3*eaae0b33SPatrick Williamsand Unix platforms. It implements BGP, OSPF, RIP, IS-IS, PIM, LDP, BFD, Babel, PBR, OpenFabric \
4*eaae0b33SPatrick Williamsand VRRP, with alpha support for EIGRP and NHRP."
5*eaae0b33SPatrick WilliamsHOMEPAGE = "https://frrouting.org/"
6*eaae0b33SPatrick WilliamsSECTION = "net"
7*eaae0b33SPatrick Williams
8*eaae0b33SPatrick WilliamsLICENSE = "GPL-2.0-only & LGPL-2.1-only"
9*eaae0b33SPatrick WilliamsLIC_FILES_CHKSUM = "file://doc/licenses/GPL-2.0;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
10*eaae0b33SPatrick Williams                    file://doc/licenses/LGPL-2.1;md5=4fbd65380cdd255951079008b364516c"
11*eaae0b33SPatrick Williams
12*eaae0b33SPatrick Williams
13*eaae0b33SPatrick WilliamsSRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/10.3 \
14*eaae0b33SPatrick Williams           file://frr.pam \
15*eaae0b33SPatrick Williams           "
16*eaae0b33SPatrick Williams
17*eaae0b33SPatrick WilliamsSRCREV = "85cf1ed576deed121751e16a64970f8a652a9e1e"
18*eaae0b33SPatrick Williams
19*eaae0b33SPatrick WilliamsUPSTREAM_CHECK_GITTAGREGEX = "frr-(?P<pver>\d+(\.\d+)+)$"
20*eaae0b33SPatrick Williams
21*eaae0b33SPatrick WilliamsCVE_PRODUCT = "frrouting"
22*eaae0b33SPatrick Williams
23*eaae0b33SPatrick WilliamsS = "${WORKDIR}/git"
24*eaae0b33SPatrick Williams
25*eaae0b33SPatrick Williamsinherit autotools-brokensep python3native pkgconfig useradd systemd
26*eaae0b33SPatrick Williams
27*eaae0b33SPatrick WilliamsDEPENDS:class-native = "bison-native elfutils-native"
28*eaae0b33SPatrick WilliamsDEPENDS:class-target = "bison-native json-c readline c-ares libyang frr-native protobuf-c-native protobuf-c"
29*eaae0b33SPatrick Williams
30*eaae0b33SPatrick WilliamsRDEPENDS:${PN}:class-target = "iproute2 python3-core bash"
31*eaae0b33SPatrick Williams
32*eaae0b33SPatrick WilliamsPACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
33*eaae0b33SPatrick WilliamsPACKAGECONFIG:class-native = ""
34*eaae0b33SPatrick Williams
35*eaae0b33SPatrick WilliamsPACKAGECONFIG[fpm] = "--enable-fpm,--disable-fpm"
36*eaae0b33SPatrick WilliamsPACKAGECONFIG[pam] = "--with-libpam,--without-libpam,libpam"
37*eaae0b33SPatrick WilliamsPACKAGECONFIG[grpc] = "--enable-grpc,--disable-grpc,grpc-native grpc"
38*eaae0b33SPatrick WilliamsPACKAGECONFIG[snmp] = "--enable-snmp,--disable-snmp,net-snmp"
39*eaae0b33SPatrick WilliamsPACKAGECONFIG[zeromq] = "--enable-zeromq,--disable-zeromq,zeromq"
40*eaae0b33SPatrick WilliamsPACKAGECONFIG[protobuf] = "--enable-protobuf,--disable-protobuf,protobuf-c-native protobuf-c"
41*eaae0b33SPatrick WilliamsPACKAGECONFIG[capabilities] = "--enable-capabilities,--disable-capabilities,libcap"
42*eaae0b33SPatrick WilliamsPACKAGECONFIG[cumulus] = "--enable-cumulus,--disable-cumulus"
43*eaae0b33SPatrick WilliamsPACKAGECONFIG[datacenter] = "--enable-datacenter,--disable-datacenter"
44*eaae0b33SPatrick WilliamsPACKAGECONFIG[ospfclient] = "--enable-ospfapi --enable-ospfclient,--disable-ospfapi --disable-ospfclient"
45*eaae0b33SPatrick Williams
46*eaae0b33SPatrick WilliamsEXTRA_OECONF:class-native = "--enable-clippy-only"
47*eaae0b33SPatrick Williams
48*eaae0b33SPatrick WilliamsEXTRA_OECONF:class-target = "--sbindir=${libexecdir}/frr \
49*eaae0b33SPatrick Williams                             --sysconfdir=${sysconfdir}/frr \
50*eaae0b33SPatrick Williams                             --localstatedir=${localstatedir}/run/frr \
51*eaae0b33SPatrick Williams                             --enable-vtysh \
52*eaae0b33SPatrick Williams                             --enable-multipath=64 \
53*eaae0b33SPatrick Williams                             --enable-user=frr \
54*eaae0b33SPatrick Williams                             --enable-group=frr \
55*eaae0b33SPatrick Williams                             --enable-vty-group=frrvty \
56*eaae0b33SPatrick Williams                             --enable-configfile-mask=0640 \
57*eaae0b33SPatrick Williams                             --enable-logfile-mask=0640 \
58*eaae0b33SPatrick Williams                             --disable-doc \
59*eaae0b33SPatrick Williams                             --with-clippy=${RECIPE_SYSROOT_NATIVE}/usr/lib/clippy \
60*eaae0b33SPatrick Williams                            "
61*eaae0b33SPatrick Williams
62*eaae0b33SPatrick WilliamsCACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
63*eaae0b33SPatrick Williams
64*eaae0b33SPatrick Williams# https://github.com/FRRouting/frr/issues/14469
65*eaae0b33SPatrick WilliamsDEBUG_PREFIX_MAP:remove = "-fcanon-prefix-map"
66*eaae0b33SPatrick Williams
67*eaae0b33SPatrick WilliamsLDFLAGS:append:mips = " -latomic"
68*eaae0b33SPatrick WilliamsLDFLAGS:append:mipsel = " -latomic"
69*eaae0b33SPatrick WilliamsLDFLAGS:append:powerpc = " -latomic"
70*eaae0b33SPatrick WilliamsLDFLAGS:append:riscv32 = " -latomic"
71*eaae0b33SPatrick Williams
72*eaae0b33SPatrick WilliamsSYSTEMD_PACKAGES = "${PN}"
73*eaae0b33SPatrick WilliamsSYSTEMD_SERVICE:${PN} = "frr.service"
74*eaae0b33SPatrick WilliamsSYSTEMD_AUTO_ENABLE = "disable"
75*eaae0b33SPatrick Williams
76*eaae0b33SPatrick Williamsinherit update-alternatives multilib_script multilib_header
77*eaae0b33SPatrick Williams
78*eaae0b33SPatrick WilliamsALTERNATIVE_PRIORITY = "100"
79*eaae0b33SPatrick WilliamsALTERNATIVE:${PN} = " ietf-interfaces ietf-netconf-acm ietf-netconf-with-defaults ietf-netconf"
80*eaae0b33SPatrick WilliamsALTERNATIVE_LINK_NAME[ietf-interfaces] = "${datadir}/yang/ietf-interfaces.yang"
81*eaae0b33SPatrick WilliamsALTERNATIVE_LINK_NAME[ietf-netconf-acm] = "${datadir}/yang/ietf-netconf-acm.yang"
82*eaae0b33SPatrick WilliamsALTERNATIVE_LINK_NAME[ietf-netconf-with-defaults] = "${datadir}/yang/ietf-netconf-with-defaults.yang"
83*eaae0b33SPatrick WilliamsALTERNATIVE_LINK_NAME[ietf-netconf] = "${datadir}/yang/ietf-netconf.yang"
84*eaae0b33SPatrick Williamsdo_compile:prepend () {
85*eaae0b33SPatrick Williams   sed -i -e 's#${RECIPE_SYSROOT_NATIVE}##g' \
86*eaae0b33SPatrick Williams          -e 's#${RECIPE_SYSROOT}##g' ${S}/lib/version.h
87*eaae0b33SPatrick Williams}
88*eaae0b33SPatrick Williams
89*eaae0b33SPatrick Williamsdo_compile:class-native () {
90*eaae0b33SPatrick Williams    oe_runmake clippy-only
91*eaae0b33SPatrick Williams}
92*eaae0b33SPatrick Williams
93*eaae0b33SPatrick Williamsdo_install:class-native () {
94*eaae0b33SPatrick Williams    install -d ${D}${libdir}
95*eaae0b33SPatrick Williams    install -m 755 ${S}/lib/clippy ${D}${libdir}/clippy
96*eaae0b33SPatrick Williams}
97*eaae0b33SPatrick Williams
98*eaae0b33SPatrick Williamsdo_install:append:class-target () {
99*eaae0b33SPatrick Williams    install -m 0755 -d ${D}${sysconfdir}/frr
100*eaae0b33SPatrick Williams    install -m 0755 -d ${D}${libexecdir}/frr
101*eaae0b33SPatrick Williams    install -m 0640 ${S}/tools/etc/frr/* ${D}${sysconfdir}/frr/
102*eaae0b33SPatrick Williams    chown frr:frrvty ${D}${sysconfdir}/frr
103*eaae0b33SPatrick Williams    chown frr:frr ${D}${sysconfdir}/frr/*
104*eaae0b33SPatrick Williams    chown frr:frrvty ${D}${sysconfdir}/frr/vtysh.conf
105*eaae0b33SPatrick Williams    chmod 640 ${D}${sysconfdir}/frr/*
106*eaae0b33SPatrick Williams
107*eaae0b33SPatrick Williams    if ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'true', 'false', d)}; then
108*eaae0b33SPatrick Williams        install -d ${D}/${sysconfdir}/pam.d
109*eaae0b33SPatrick Williams        install -m 644 ${UNPACKDIR}/frr.pam ${D}/${sysconfdir}/pam.d/frr
110*eaae0b33SPatrick Williams    fi
111*eaae0b33SPatrick Williams
112*eaae0b33SPatrick Williams    if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
113*eaae0b33SPatrick Williams        install -d ${D}${sysconfdir}/init.d
114*eaae0b33SPatrick Williams        install -m 0755 ${B}/tools/frrinit.sh ${D}${sysconfdir}/init.d/frr
115*eaae0b33SPatrick Williams
116*eaae0b33SPatrick Williams        install -d ${D}${sysconfdir}/default/volatiles
117*eaae0b33SPatrick Williams        echo "d frr frr 0755 ${localstatedir}/run/frr none" \
118*eaae0b33SPatrick Williams            > ${D}${sysconfdir}/default/volatiles/99_frr
119*eaae0b33SPatrick Williams    fi
120*eaae0b33SPatrick Williams
121*eaae0b33SPatrick Williams    if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
122*eaae0b33SPatrick Williams        install -d ${D}${systemd_system_unitdir}
123*eaae0b33SPatrick Williams        install -m 0644 ${B}/tools/frr*.service ${D}${systemd_system_unitdir}
124*eaae0b33SPatrick Williams
125*eaae0b33SPatrick Williams        install -d ${D}${sysconfdir}/tmpfiles.d
126*eaae0b33SPatrick Williams        echo "d /run/frr 0755 frr frr -" \
127*eaae0b33SPatrick Williams            > ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
128*eaae0b33SPatrick Williams    fi
129*eaae0b33SPatrick Williams    oe_multilib_header frr/version.h
130*eaae0b33SPatrick Williams}
131*eaae0b33SPatrick Williams
132*eaae0b33SPatrick WilliamsUSERADD_PACKAGES = "${PN}"
133*eaae0b33SPatrick WilliamsGROUPADD_PARAM:${PN} = "--system frr ; --system frrvty"
134*eaae0b33SPatrick WilliamsUSERADD_PARAM:${PN} = "--system --home ${localstatedir}/run/frr/ -M -g frr -G frrvty --shell /bin/false frr"
135*eaae0b33SPatrick Williams
136*eaae0b33SPatrick WilliamsFILES:${PN} += "${datadir}/yang"
137*eaae0b33SPatrick Williams
138*eaae0b33SPatrick WilliamsBBCLASSEXTEND = "native"
139