sdk: fix building external modules when CONFIG_STACK_VALIDATION=y
[openwrt/staging/mkresin.git] / target / sdk / Makefile
index 499c2809dd2c3c1e18367b8a61fde4dfdc1a0abd..3b860db93a28f0a8aa1144443a6d65efda106c61 100644 (file)
@@ -49,6 +49,12 @@ BASE_FEED:=$(if $(BASE_FEED),$(BASE_FEED),$(shell cd $(TOPDIR); LC_ALL=C svn inf
 BASE_FEED:=$(if $(BASE_FEED),$(BASE_FEED),src-git base $(PROJECT_GIT)/openwrt/openwrt.git$(if $(GIT_BRANCH),;$(GIT_BRANCH),$(if $(GIT_TAGNAME),;$(GIT_TAGNAME))))
 
 KDIR_BASE = $(patsubst $(TOPDIR)/%,%,$(LINUX_DIR))
+KDIR_ARCHES = $(LINUX_KARCH)
+
+# arch/arm64/ includes reference files in arch/arm/, so we'll need both
+ifeq ($(LINUX_KARCH),arm64)
+  KDIR_ARCHES += arm
+endif
 
 KERNEL_FILES_ARCH = \
        Makefile* \
@@ -67,7 +73,7 @@ KERNEL_FILES_BASE := \
        include \
        Module.symvers \
        modules.builtin \
-       $(addprefix arch/$(LINUX_KARCH)/,$(KERNEL_FILES_ARCH))
+       $(foreach arch,$(KDIR_ARCHES),$(addprefix arch/$(arch)/,$(KERNEL_FILES_ARCH)))
 
 KERNEL_FILES := $(patsubst $(TOPDIR)/%,%,$(wildcard $(addprefix $(LINUX_DIR)/,$(KERNEL_FILES_BASE))))
 
@@ -77,7 +83,7 @@ $(BIN_DIR)/$(SDK_NAME).tar.xz: clean
        mkdir -p $(SDK_BUILD_DIR)/dl $(SDK_BUILD_DIR)/package
        $(CP) -L $(INCLUDE_DIR) $(SCRIPT_DIR) $(SDK_BUILD_DIR)/
        $(TAR) -cf - -C $(TOPDIR) \
-               `cd $(TOPDIR); find $(KDIR_BASE) -name \*.ko` \
+               `cd $(TOPDIR); find $(KDIR_BASE)/ -name \*.ko` \
                `cd $(TOPDIR); find $(KDIR_BASE)/firmware/ -newer $(KDIR_BASE)/firmware/Makefile \
                        -type f -name '*.bin' -or -name '*.cis' -or -name '*.csp' -or -name '*.dsp' -or -name '*.fw'` \
                $(foreach exclude,$(EXCLUDE_DIRS),--exclude="$(exclude)") \
@@ -88,6 +94,14 @@ $(BIN_DIR)/$(SDK_NAME).tar.xz: clean
        $(TAR) -cf - -C $(TOPDIR) $(KDIR_BASE)/tools/usb/usbip/ | \
                $(TAR) -xf - -C $(SDK_BUILD_DIR)
 
+       # Copy objtool executables.  They are required for building external
+       # modules if "Compile-time stack metadata validation" is enabled.
+       if grep -q '^CONFIG_STACK_VALIDATION=y' $(LINUX_DIR)/.config; then \
+               $(TAR) -cf - -C $(TOPDIR) \
+                               `cd $(TOPDIR); find $(KDIR_BASE)/tools/objtool -type f -executable` | \
+                       $(TAR) -xf - -C $(SDK_BUILD_DIR); \
+       fi
+
        (cd $(SDK_BUILD_DIR); find $(STAGING_SUBDIR_HOST)/bin $(STAGING_SUBDIR_HOST)/usr/bin \
                $(STAGING_SUBDIR_TOOLCHAIN)/bin $(STAGING_SUBDIR_TOOLCHAIN)/*/bin $(STAGING_SUBDIR_TOOLCHAIN)/libexec \
                -type f | $(XARGS) $(SCRIPT_DIR)/bundle-libraries.sh $(SDK_BUILD_DIR)/$(STAGING_SUBDIR_HOST))