Make treat copy-kernel.o as intermediate and delete it when it's no
longer needed. This can fail when the same submake was triggered
multiple times for different devices.
arm-openwrt-linux-muslgnueabi-as -k -o copy-kernel.o copy-kernel.S
export MAKEFLAGS= ;make -w -C copy-kernel
CROSS_COMPILE=arm-openwrt-linux-muslgnueabi-
arm-openwrt-linux-muslgnueabi-objcopy -O binary -S copy-kernel.o
copy-kernel.bin
make[5]: Entering directory
'/builder/shared-workdir/build/target/linux/gemini/image/copy-kernel'
arm-openwrt-linux-muslgnueabi-objcopy -O binary -S copy-kernel.o
copy-kernel.bin
rm copy-kernel.o
make[5]: Leaving directory
'/builder/shared-workdir/build/target/linux/gemini/image/copy-kernel'
# "App" partition is the rootfs
arm-openwrt-linux-muslgnueabi-objcopy: 'copy-kernel.o': No such file
Makefile:27: recipe for target 'copy-kernel.bin' failed
make[5]: Leaving directory
'/builder/shared-workdir/build/target/linux/gemini/image/copy-kernel'
make[5]: *** [copy-kernel.bin] Error 1
Makefile:244: recipe for target
'/builder/shared-workdir/build/build_dir/target-arm_fa526_musl_eabi/linux-gemini/tmp/openwrt-gemini-storlink_sl93512r-ext4-factory.bin'
failed
make[4]: ***
[/builder/shared-workdir/build/build_dir/target-arm_fa526_musl_eabi/linux-gemini/tmp/openwrt-gemini-storlink_sl93512r-ext4-factory.bin]
Error 2
With this change, output files are directed to $(KDIR)
Signed-off-by: Yousong Zhou <[email protected]>
---
target/linux/gemini/image/Makefile | 9 +++++----
target/linux/gemini/image/copy-kernel/Makefile | 14 ++++++++++----
2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/target/linux/gemini/image/Makefile
b/target/linux/gemini/image/Makefile
index 24402f6a9b..b4daa92670 100644
--- a/target/linux/gemini/image/Makefile
+++ b/target/linux/gemini/image/Makefile
@@ -7,8 +7,8 @@
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
-define Build/copy-kernel
- $(MAKE) -C copy-kernel CROSS_COMPILE=$(TARGET_CROSS)
+define Build/copy-kernel.bin
+ $(call locked,$(MAKE) -C copy-kernel CROSS_COMPILE=$(TARGET_CROSS)
O=$(KDIR),gemini-copy-kernel.bin)
endef
# Cook a "WRGG" image, this board is apparently one in the D-Link
@@ -93,11 +93,10 @@ endef
define Build/storlink-default-images
mkdir -p [email protected]
- $(call Build/copy-kernel)
# "App" partition is the rootfs
mv $@ [email protected]/hddapp.tgz
# 256 bytes copy routine
- dd if=copy-kernel/copy-kernel.bin [email protected]/zImage
+ dd if=$(KDIR)/copy-kernel.bin [email protected]/zImage
$(call Image/pad-to,[email protected]/zImage,512)
# Copy first part of the kernel into zImage
dd if=$(IMAGE_KERNEL) [email protected]/zImage bs=1 seek=512 count=2096640
@@ -182,6 +181,8 @@ TARGET_DEVICES += dlink_dns-313
# Default images setup used by the StorLink reference designs
define Device/storlink-reference
+ COMPILE := copy-kernel-$(1).bin
+ COMPILE/copy-kernel-$(1).bin := copy-kernel.bin
IMAGES := factory.bin
IMAGE/factory.bin := append-rootfs | pad-rootfs | pad-to 6144k | \
storlink-default-images $(1)
diff --git a/target/linux/gemini/image/copy-kernel/Makefile
b/target/linux/gemini/image/copy-kernel/Makefile
index 155c35968c..9ba283bb01 100644
--- a/target/linux/gemini/image/copy-kernel/Makefile
+++ b/target/linux/gemini/image/copy-kernel/Makefile
@@ -13,20 +13,26 @@ OBJCOPY := $(CROSS_COMPILE)objcopy
BIN_FLAGS := -O binary -S
-all: copy-kernel.bin
+SRC_DIR := $(CURDIR)/
+OUT_DIR := $(if $(O),$(if $(patsubst
%/,,$(O)),$(O)/,$(O)),$(SRC_DIR))
+
+all: $(OUT_DIR)copy-kernel.bin
# Don't build dependencies, this may die if $(CC) isn't gcc
dep:
install:
-%.o : %.S
+$(OUT_DIR):
+ mkdir -p $(OUT_DIR)
+
+$(OUT_DIR)%.o : $(SRC_DIR)%.S | $(OUT_DIR)
$(AS) $(ASFLAGS) -k -o $@ $<
-%.bin: %.o
+$(OUT_DIR)%.bin: $(OUT_DIR)%.o
$(OBJCOPY) $(BIN_FLAGS) $< $@
mrproper: clean
clean:
- rm -f copy-kernel.bin copy-kernel.o
+ rm -f $(OUT_DIR)copy-kernel.bin $(OUT_DIR)copy-kernel.o
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel