
-include ../../arch.mk
-include ../../path.mk
include $(TOPDIR)/.config
#### Package Info ###############################
current_dir := $(shell pwd)
PKG := ubus
PKG_SOURCE_DATE:=2021-06-30
PKG_VERSION := 4fc532c8
MYNAME      := $(PKG)-$(PKG_SOURCE_DATE)-$(PKG_VERSION)
BUILD_DIR	:= $(current_dir)/$(MYNAME)
APPLET		:= libubus.so
TOOLCHAIN_P	:= $(CC_PATH)
MUSL_PREFIX_P	:=$(TOOLCHAIN_P)/bin/aarch64-openwrt-linux-musl
#####################################################################
PREFIX		:= /usr/lib/lua
ifeq ($(strip $(ELBOX_PROGS_GPL_LIB_JSONC_0_15)),y)
LIBJSON_P :=$(TOPDIR)/progs.gpl/libjson-c-0.15/build
else
LIBJSON_P :=
endif

ifeq ($(strip $(ELBOX_PROGS_GPL_LIB_LUA)),y)
LIBLUA_P  := $(TOPDIR)/progs.gpl/liblua/lua-5.1.5/src
else
LIBLUA_P  :=
endif

ifeq ($(strip $(ELBOX_PROGS_GPL_LIB_UBOX)),y)
LIBUBOX_P :=  $(TOPDIR)/progs.gpl/libubox/libubox-2021-05-16-b14c4688
else
LIBUBOX_P :=
endif

#####################################################################
CFLAGS		:= -I$(LIBUBOX_P) -I$(LIBJSON_P) -I$(LIBLUA_P) -Os -pipe -mcpu=cortex-a53 -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result \
	-fmacro-prefix-map=$(BUILD_DIR)=$(MYNAME) -Wformat -Werror=format-security -DPIC -fPIC -fstack-protector -D_FORTIFY_SOURCE=1 \
	-Wl,-z,now -Wl,-z,relro -flto
LDFLAGS		:= -L$(LIBUBOX_P) -L$(LIBJSON_P) -L$(LIBLUA_P) -L$(TOOLCHAIN_P)/usr/lib -L$(TOOLCHAIN_P)/lib -DPIC -fPIC -znow -zrelro -flto
CMAKE_OPT	:= -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS_RELEASE="-DNDEBUG"  \
	-DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" -DCMAKE_C_COMPILER_LAUNCHER="" -DCMAKE_C_COMPILER="$(MUSL_PREFIX_P)-gcc" -DCMAKE_CXX_COMPILER_LAUNCHER=""  -DCMAKE_CXX_COMPILER="$(MUSL_PREFIX_P)-g++" \
	-DCMAKE_ASM_COMPILER_LAUNCHER="" -DCMAKE_ASM_COMPILER="$(MUSL_PREFIX_P)-gcc" \
	-DCMAKE_EXE_LINKER_FLAGS:STRING="-L$(TOOLCHAIN_P)/usr/lib -L$(TOOLCHAIN_P)/lib -L$(LIBUBOX_P) -L$(LIBJSON_P) -L$(LIBLUA_P) -DPIC -fPIC -znow -zrelro -flto" \
	-DCMAKE_MODULE_LINKER_FLAGS:STRING="-L$(TOOLCHAIN_P)/usr/lib -L$(TOOLCHAIN_P)/lib -L$(LIBUBOX_P) -L$(LIBJSON_P) -L$(LIBLUA_P) -DPIC -fPIC -znow -zrelro -flto -Wl,-Bsymbolic-functions" \
	-DCMAKE_SHARED_LINKER_FLAGS:STRING="-L$(TOOLCHAIN_P)/usr/lib -L$(TOOLCHAIN_P)/lib -L$(LIBUBOX_P) -L$(LIBJSON_P) -L$(LIBLUA_P) -DPIC -fPIC -znow -zrelro -flto -Wl,-Bsymbolic-functions" \
	-DCMAKE_AR="$(MUSL_PREFIX_P)-gcc-ar" -DCMAKE_NM="$(MUSL_PREFIX_P)-gcc-nm" -DCMAKE_RANLIB="$(MUSL_PREFIX_P)-gcc-ranlib" \
	-DCMAKE_FIND_ROOT_PATH="$(TOOLCHAIN_P);$(LIBUBOX_P);$(LIBJSON_P);$(LIBLUA_P)" -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_STRIP=: \
	-DCMAKE_INSTALL_PREFIX=/usr -DDL_LIBRARY="" -DCMAKE_PREFIX_PATH="" -DCMAKE_SKIP_RPATH=TRUE -DCMAKE_EXPORT_PACKAGE_REGISTRY=FALSE -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE -DCMAKE_FIND_USE_PACKAGE_REGISTRY=FALSE \
	-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=FALSE -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=TRUE -DLUAPATH=/usr/lib/lua -DABIVERSION="20210630"

MAKE_AS	:= $(CROSS_COMPILE)gcc -c -Os -pipe -mcpu=cortex-a53 -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable \
	-Wno-error=unused-result -fmacro-prefix-map=$(BUILD_DIR)=$(MYNAME)  -Wformat -Werror=format-security -DPIC -fPIC -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro \
	-I$(LIBUBOX_P) -I$(LIBJSON_P) -flto

MAKE_CFLAG := -Os -pipe -mcpu=cortex-a53 -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable \
	-Wno-error=unused-result -fmacro-prefix-map=$(BUILD_DIR)=$(MYNAME) -Wformat -Werror=format-security -DPIC -fPIC -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro \
	-I$(LIBUBOX_P) -I$(LIBJSON_P) -flto  -I$(TOOLCHAIN_P)/usr/include -I$(TOOLCHAIN_P)/include/fortify -I$(TOOLCHAIN_P)/include 

MAKE_OPT := AR="$(AR)" AS="$(MAKE_AS)" LD=$(LD) NM="$(CROSS_COMPILE)gcc-nm" CC="$(CC)" GCC="$(CC)" CXX="$(CXX)" \
	RANLIB="$(CROSS_COMPILE)gcc-ranlib" STRIP=$(STRIP) OBJCOPY=$(OBJCOPY) OBJDUMP=$(CROSS_COMPILE)objdump SIZE=$(CROSS_COMPILE)size \
	CROSS="$(CROSS_COMPILE)" ARCH="aarch64" CMAKE_DISABLE_cmake_check_build_system=1
#####################################################################

all: prepare
	@echo -e "\033[32mBuilding $(MYNAME) ...\033[0m"
	$(Q)cd $(BUILD_DIR);CFLAGS="$(CFLAGS)" CXXFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake $(CMAKE_OPT) $(BUILD_DIR)
	$(Q)cd $(BUILD_DIR);CFLAGS="$(MAKE_CFLAG)" CXXFLAGS="$(MAKE_CFLAG)" LDFLAGS="$(LDFLAGS)" make -j1 -C $(BUILD_DIR)/. $(MAKE_OPT)

install:
	@echo -e "\033[32mInstalling $(MYNAME) ...\033[0m"
	$(Q)[ -d $(TARGET)$(PREFIX) ] || mkdir -p $(TARGET)$(PREFIX)
	$(Q)$(STRIP) $(BUILD_DIR)/lua/ubus.so
	$(Q)install $(BUILD_DIR)/lua/ubus.so $(TARGET)$(PREFIX)
	$(Q)chmod +x $(TARGET)$(PREFIX)/ubus.so
	$(Q)$(STRIP) $(BUILD_DIR)/libubus.so.20210630
	$(Q)install $(BUILD_DIR)/libubus.so.20210630 $(TARGET)/lib
	$(Q)chmod +x $(TARGET)/lib/libubus.so.20210630
	$(Q)$(STRIP) $(BUILD_DIR)/ubusd
	$(Q)install $(BUILD_DIR)/ubusd $(TARGET)/sbin
	$(Q)chmod +x $(TARGET)/sbin/ubusd

clean:
	@echo -e "\033[32mCleaning $(MYNAME) ...\033[0m"
	$(Q)rm -rf $(BUILD_DIR)
	$(Q)rm -f $(TARGET)$(PREFIX)/ubus.so
	$(Q)rm -f $(TARGET)/lib/libubus.so.20210630

prepare:
	@echo -e "\033[32mPrepare $(MYNAME) ...\033[0m"
	if [ ! -d "$(BUILD_DIR)" ]; then \
		xzcat $(PKG)-$(PKG_SOURCE_DATE)-$(PKG_VERSION).tar.xz | tar -xf - ;\
	fi	
	if [ ! -d "$(LIBUBOX_P)/include" ]; then \
		make -C $(TOPDIR)/progs.gpl/libubox all; \
	fi
	if [ ! -d "$(LIBLUA_P)" ]; then \
		make -C $(TOPDIR)/progs.gpl/liblua all; \
	fi

.PHONY: all install clean  prepare
