1*4882a593Smuzhiyun################################################################################ 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# swupdate 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun################################################################################ 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunSWUPDATE_VERSION = 2021.04 8*4882a593SmuzhiyunSWUPDATE_SITE = $(call github,sbabic,swupdate,$(SWUPDATE_VERSION)) 9*4882a593SmuzhiyunSWUPDATE_LICENSE = GPL-2.0, GPL-2.0+ with OpenSSL exception, LGPL-2.1+, MIT, ISC, BSD-1-Clause, BSD-2-Clause, BSD-3-Clause, CC0-1.0, CC-BY-ND-4.0 10*4882a593SmuzhiyunSWUPDATE_LICENSE_FILES = LICENSES/BSD-1-Clause.txt \ 11*4882a593Smuzhiyun LICENSES/BSD-2-Clause.txt \ 12*4882a593Smuzhiyun LICENSES/BSD-3-Clause.txt \ 13*4882a593Smuzhiyun LICENSES/CC0-1.0.txt \ 14*4882a593Smuzhiyun LICENSES/CC-BY-ND-4.0.txt \ 15*4882a593Smuzhiyun LICENSES/GPL-2.0-only.txt \ 16*4882a593Smuzhiyun LICENSES/GPL-2.0-or-later.txt \ 17*4882a593Smuzhiyun LICENSES/ISC.txt \ 18*4882a593Smuzhiyun LICENSES/LGPL-2.1-or-later.txt \ 19*4882a593Smuzhiyun LICENSES/LicenseRef-OpenSSL-Exception.txt \ 20*4882a593Smuzhiyun LICENSES/MIT.txt 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun# swupdate uses $CROSS-cc instead of $CROSS-gcc, which is not 23*4882a593Smuzhiyun# available in all external toolchains, and use CC for linking. Ensure 24*4882a593Smuzhiyun# TARGET_CC is used for both. 25*4882a593SmuzhiyunSWUPDATE_MAKE_ENV = CC="$(TARGET_CC)" LD="$(TARGET_CC)" SKIP_STRIP=y 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun# swupdate bundles its own version of mongoose (version 6.16) 28*4882a593Smuzhiyun 29*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_E2FSPROGS),y) 30*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += e2fsprogs 31*4882a593Smuzhiyunendif 32*4882a593Smuzhiyun 33*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_EFIBOOTMGR),y) 34*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += efibootmgr 35*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBEBGENV=y 36*4882a593Smuzhiyunelse 37*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBEBGENV=n 38*4882a593Smuzhiyunendif 39*4882a593Smuzhiyun 40*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_JSON_C),y) 41*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += json-c 42*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_JSON_C=y 43*4882a593Smuzhiyunelse 44*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_JSON_C=n 45*4882a593Smuzhiyunendif 46*4882a593Smuzhiyun 47*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBARCHIVE),y) 48*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += libarchive 49*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBARCHIVE=y 50*4882a593Smuzhiyunelse 51*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBARCHIVE=n 52*4882a593Smuzhiyunendif 53*4882a593Smuzhiyun 54*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBBLKID),y) 55*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += util-linux 56*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBBLKID=y 57*4882a593Smuzhiyunelse 58*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBBLKID=n 59*4882a593Smuzhiyunendif 60*4882a593Smuzhiyun 61*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBCONFIG),y) 62*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += libconfig 63*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBCONFIG=y 64*4882a593Smuzhiyunelse 65*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBCONFIG=n 66*4882a593Smuzhiyunendif 67*4882a593Smuzhiyun 68*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBCURL),y) 69*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += libcurl 70*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBCURL=y 71*4882a593Smuzhiyunelse 72*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBCURL=n 73*4882a593Smuzhiyunendif 74*4882a593Smuzhiyun 75*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBGPIOD),y) 76*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += libgpiod 77*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBGPIOD=y 78*4882a593Smuzhiyunelse 79*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBGPIOD=n 80*4882a593Smuzhiyunendif 81*4882a593Smuzhiyun 82*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBURIPARSER),y) 83*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += liburiparser 84*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_URIPARSER=y 85*4882a593Smuzhiyunelse 86*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_URIPARSER=n 87*4882a593Smuzhiyunendif 88*4882a593Smuzhiyun 89*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBWEBSOCKETS),y) 90*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += libwebsockets 91*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBWEBSOCKETS=y 92*4882a593Smuzhiyunelse 93*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBWEBSOCKETS=n 94*4882a593Smuzhiyunendif 95*4882a593Smuzhiyun 96*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_HAS_LUAINTERPRETER),y) 97*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += luainterpreter host-pkgconf 98*4882a593Smuzhiyun# defines the base name for the pkg-config file ("lua" or "luajit") 99*4882a593Smuzhiyundefine SWUPDATE_SET_LUA_VERSION 100*4882a593Smuzhiyun $(call KCONFIG_SET_OPT,CONFIG_LUAPKG,$(BR2_PACKAGE_PROVIDES_LUAINTERPRETER)) 101*4882a593Smuzhiyunendef 102*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LUA=y 103*4882a593Smuzhiyunelse 104*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LUA=n 105*4882a593Smuzhiyunendif 106*4882a593Smuzhiyun 107*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_MTD),y) 108*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += mtd 109*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBMTD=y 110*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBUBI=y 111*4882a593Smuzhiyunelse 112*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBMTD=n 113*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBUBI=n 114*4882a593Smuzhiyunendif 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun# OpenSSL or mbedTLS 117*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPENSSL),y) 118*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += openssl 119*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBSSL=y 120*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBCRYPTO=y 121*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_MBEDTLS=n 122*4882a593Smuzhiyunelse 123*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBSSL=n 124*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBCRYPTO=n 125*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_MBEDTLS),y) 126*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += mbedtls 127*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_MBEDTLS=y 128*4882a593Smuzhiyunelse 129*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_MBEDTLS=n 130*4882a593Smuzhiyunendif 131*4882a593Smuzhiyunendif 132*4882a593Smuzhiyun 133*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_P11_KIT),y) 134*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += p11-kit 135*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_P11KIT=y 136*4882a593Smuzhiyunelse 137*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_P11KIT=n 138*4882a593Smuzhiyunendif 139*4882a593Smuzhiyun 140*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_SYSTEMD),y) 141*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += systemd 142*4882a593Smuzhiyundefine SWUPDATE_SET_SYSTEMD 143*4882a593Smuzhiyun $(call KCONFIG_ENABLE_OPT,CONFIG_SYSTEMD) 144*4882a593Smuzhiyunendef 145*4882a593Smuzhiyunelse 146*4882a593Smuzhiyundefine SWUPDATE_SET_SYSTEMD 147*4882a593Smuzhiyun $(call KCONFIG_DISABLE_OPT,CONFIG_SYSTEMD) 148*4882a593Smuzhiyunendef 149*4882a593Smuzhiyunendif 150*4882a593Smuzhiyun 151*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBUBOOTENV),y) 152*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += libubootenv 153*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBUBOOTENV=y 154*4882a593Smuzhiyunelse 155*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBUBOOTENV=n 156*4882a593Smuzhiyunendif 157*4882a593Smuzhiyun 158*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_WOLFSSL),y) 159*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += wolfssl 160*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_WOLFSSL=y 161*4882a593Smuzhiyunelse 162*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_WOLFSSL=n 163*4882a593Smuzhiyunendif 164*4882a593Smuzhiyun 165*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_ZEROMQ),y) 166*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += zeromq 167*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBZEROMQ=y 168*4882a593Smuzhiyunelse 169*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_LIBZEROMQ=n 170*4882a593Smuzhiyunendif 171*4882a593Smuzhiyun 172*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_ZLIB),y) 173*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += zlib 174*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_ZLIB=y 175*4882a593Smuzhiyunelse 176*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_ZLIB=n 177*4882a593Smuzhiyunendif 178*4882a593Smuzhiyun 179*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_ZSTD),y) 180*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += zstd 181*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_ZSTD=y 182*4882a593Smuzhiyunelse 183*4882a593SmuzhiyunSWUPDATE_MAKE_ENV += HAVE_ZSTD=n 184*4882a593Smuzhiyunendif 185*4882a593Smuzhiyun 186*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_LIBRSYNC),y) 187*4882a593SmuzhiyunSWUPDATE_DEPENDENCIES += librsync 188*4882a593Smuzhiyunendif 189*4882a593Smuzhiyun 190*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_SWUPDATE_WEBSERVER),y) 191*4882a593Smuzhiyundefine SWUPDATE_SET_WEBSERVER 192*4882a593Smuzhiyun $(call KCONFIG_ENABLE_OPT,CONFIG_WEBSERVER) 193*4882a593Smuzhiyunendef 194*4882a593Smuzhiyunelse 195*4882a593Smuzhiyundefine SWUPDATE_SET_WEBSERVER 196*4882a593Smuzhiyun $(call KCONFIG_DISABLE_OPT,CONFIG_WEBSERVER) 197*4882a593Smuzhiyunendef 198*4882a593Smuzhiyunendif 199*4882a593Smuzhiyun 200*4882a593SmuzhiyunSWUPDATE_BUILD_CONFIG = $(@D)/.config 201*4882a593Smuzhiyun 202*4882a593SmuzhiyunSWUPDATE_KCONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_SWUPDATE_CONFIG)) 203*4882a593SmuzhiyunSWUPDATE_KCONFIG_EDITORS = menuconfig xconfig gconfig nconfig 204*4882a593Smuzhiyun 205*4882a593SmuzhiyunSWUPDATE_MAKE_OPTS = \ 206*4882a593Smuzhiyun CROSS_COMPILE="$(TARGET_CROSS)" \ 207*4882a593Smuzhiyun CONFIG_EXTRA_CFLAGS="$(TARGET_CFLAGS)" \ 208*4882a593Smuzhiyun CONFIG_EXTRA_LDFLAGS="$(TARGET_LDFLAGS)" 209*4882a593Smuzhiyun 210*4882a593Smuzhiyundefine SWUPDATE_KCONFIG_FIXUP_CMDS 211*4882a593Smuzhiyun $(SWUPDATE_SET_LUA_VERSION) 212*4882a593Smuzhiyun $(SWUPDATE_SET_SYSTEMD) 213*4882a593Smuzhiyun $(SWUPDATE_SET_WEBSERVER) 214*4882a593Smuzhiyunendef 215*4882a593Smuzhiyun 216*4882a593Smuzhiyundefine SWUPDATE_BUILD_CMDS 217*4882a593Smuzhiyun $(TARGET_MAKE_ENV) $(SWUPDATE_MAKE_ENV) $(MAKE) -C $(@D) $(SWUPDATE_MAKE_OPTS) 218*4882a593Smuzhiyunendef 219*4882a593Smuzhiyun 220*4882a593Smuzhiyundefine SWUPDATE_INSTALL_TARGET_CMDS 221*4882a593Smuzhiyun $(TARGET_MAKE_ENV) $(SWUPDATE_MAKE_ENV) $(MAKE) -C $(@D) \ 222*4882a593Smuzhiyun $(SWUPDATE_MAKE_OPTS) DESTDIR=$(TARGET_DIR) install 223*4882a593Smuzhiyun $(if $(BR2_PACKAGE_SWUPDATE_INSTALL_WEBSITE), \ 224*4882a593Smuzhiyun mkdir -p $(TARGET_DIR)/var/www/swupdate; \ 225*4882a593Smuzhiyun cp -dpfr $(@D)/examples/www/v2/* $(TARGET_DIR)/var/www/swupdate) 226*4882a593Smuzhiyunendef 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun# Checks to give errors that the user can understand 229*4882a593Smuzhiyun# Must be before we call to kconfig-package 230*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_SWUPDATE)$(BR_BUILDING),yy) 231*4882a593Smuzhiyunifeq ($(call qstrip,$(BR2_PACKAGE_SWUPDATE_CONFIG)),) 232*4882a593Smuzhiyun$(error No Swupdate configuration file specified, check your BR2_PACKAGE_SWUPDATE_CONFIG setting) 233*4882a593Smuzhiyunendif 234*4882a593Smuzhiyunendif 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun# Services and configs derived from meta-swupdate(MIT license) 237*4882a593Smuzhiyun# https://github.com/sbabic/meta-swupdate/tree/master/recipes-support/swupdate/swupdate 238*4882a593Smuzhiyundefine SWUPDATE_INSTALL_COMMON 239*4882a593Smuzhiyun mkdir -p $(TARGET_DIR)/etc/swupdate/conf.d \ 240*4882a593Smuzhiyun $(TARGET_DIR)/usr/lib/swupdate/conf.d 241*4882a593Smuzhiyun $(INSTALL) -D -m 755 $(SWUPDATE_PKGDIR)/swupdate.sh \ 242*4882a593Smuzhiyun $(TARGET_DIR)/usr/lib/swupdate/swupdate.sh 243*4882a593Smuzhiyun $(if $(BR2_PACKAGE_SWUPDATE_WEBSERVER), \ 244*4882a593Smuzhiyun $(INSTALL) -D -m 644 $(SWUPDATE_PKGDIR)/10-mongoose-args \ 245*4882a593Smuzhiyun $(TARGET_DIR)/usr/lib/swupdate/conf.d/10-mongoose-args) 246*4882a593Smuzhiyunendef 247*4882a593Smuzhiyundefine SWUPDATE_INSTALL_INIT_SYSTEMD 248*4882a593Smuzhiyun $(SWUPDATE_INSTALL_COMMON) 249*4882a593Smuzhiyun $(INSTALL) -D -m 644 $(SWUPDATE_PKGDIR)/swupdate.service \ 250*4882a593Smuzhiyun $(TARGET_DIR)/usr/lib/systemd/system/swupdate.service 251*4882a593Smuzhiyun $(INSTALL) -D -m 644 $(SWUPDATE_PKGDIR)/swupdate.socket \ 252*4882a593Smuzhiyun $(TARGET_DIR)/usr/lib/systemd/system/swupdate.socket 253*4882a593Smuzhiyun $(INSTALL) -D -m 644 $(SWUPDATE_PKGDIR)/swupdate-usb@.service \ 254*4882a593Smuzhiyun $(TARGET_DIR)/usr/lib/systemd/system/swupdate-usb@.service 255*4882a593Smuzhiyun $(if $(BR2_PACKAGE_SWUPDATE_USB), \ 256*4882a593Smuzhiyun $(INSTALL) -D -m 644 $(SWUPDATE_PKGDIR)/swupdate-usb.rules \ 257*4882a593Smuzhiyun $(TARGET_DIR)/lib/udev/rules.d/swupdate-usb.rules) 258*4882a593Smuzhiyun $(INSTALL) -D -m 644 $(SWUPDATE_PKGDIR)/swupdate-progress.service \ 259*4882a593Smuzhiyun $(TARGET_DIR)/usr/lib/systemd/system/swupdate-progress.service 260*4882a593Smuzhiyun $(INSTALL) -D -m 644 $(SWUPDATE_PKGDIR)/tmpfiles-swupdate.conf \ 261*4882a593Smuzhiyun $(TARGET_DIR)/usr/lib/tmpfiles.d/tmpfiles-swupdate.conf 262*4882a593Smuzhiyunendef 263*4882a593Smuzhiyundefine SWUPDATE_INSTALL_INIT_SYSV 264*4882a593Smuzhiyun $(SWUPDATE_INSTALL_COMMON) 265*4882a593Smuzhiyun $(INSTALL) -D -m 755 $(SWUPDATE_PKGDIR)/S80swupdate \ 266*4882a593Smuzhiyun $(TARGET_DIR)/etc/init.d/S80swupdate 267*4882a593Smuzhiyun $(INSTALL) -D -m 644 $(SWUPDATE_PKGDIR)/90-start-progress \ 268*4882a593Smuzhiyun $(TARGET_DIR)/usr/lib/swupdate/conf.d/90-start-progress 269*4882a593Smuzhiyunendef 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun$(eval $(kconfig-package)) 272