Makefile 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # rt-loader make file
  2. # (c) 2025 Markus Stockhausen
  3. #
  4. # This is the make file for the rt-loader (aka runtime or realtek loader). It tries to
  5. # avoid copying files around where possible. Therefore it is controlled by the following
  6. # input parameters
  7. #
  8. # KERNEL_IMG_IN: The filename of an LZMA compressed kernel image. This is required
  9. # KERNEL_IMG_OUT: The filename of the kernel image with the rt-loader prepended.
  10. # If not given it will be created as image.bin into the BUILD_DIR.
  11. # BUILD_DIR: The temporary build dir. If not given it will be set to "build".
  12. #
  13. # To add it into the OpenWrt toolchain just create two new build commands
  14. #
  15. # define Build/rt-loader
  16. # $(MAKE) all clean -C rt-loader CROSS_COMPILE="$(TARGET_CROSS)" \
  17. # KERNEL_IMG_IN="$@" KERNEL_IMG_OUT="[email protected]" BUILD_DIR="[email protected]"
  18. # mv "[email protected]" "$@"
  19. # endef
  20. #
  21. # define Build/rt-compress
  22. # $(STAGING_DIR_HOST)/bin/xz --format=lzma -9 --stdout "$@" > "[email protected]"
  23. # mv "[email protected]" "$@"
  24. # endef
  25. #
  26. # Use them in a new kernel build recipe
  27. #
  28. # define Device/uimage-rt-loader
  29. # KERNEL/rt-loader := kernel-bin | append-dtb | rt-compress | rt-loader
  30. # KERNEL := $$(KERNEL/rt-loader) | uImage none
  31. # KERNEL_INITRAMFS := $$(KERNEL/rt-loader) | uImage none
  32. # endef
  33. #
  34. # And finally add it to the target device. E.g.
  35. #
  36. # define Device/linksys_lgs310c
  37. # $(Device/uimage-rt-loader)
  38. # ...
  39. # endef
  40. CC := $(CROSS_COMPILE)gcc
  41. LD := $(CROSS_COMPILE)ld
  42. OBJCOPY := $(CROSS_COMPILE)objcopy
  43. OBJDUMP := $(CROSS_COMPILE)objdump
  44. CFLAGS = -fpic -mabicalls -O2 -fno-builtin-printf -Iinclude
  45. ASFLAGS = -fpic -msoft-float -Iinclude
  46. LDFLAGS = -static -nostdlib -T linker/linker.ld --no-warn-mismatch
  47. O_FORMAT = $(shell $(OBJDUMP) -i | head -2 | grep elf32)
  48. SOURCES = src/startup.S src/main.c src/board.c src/memory.c src/unlzma.c
  49. BUILD_DIR ?= build
  50. IMAGE_OBJ := $(BUILD_DIR)/image.o
  51. IMAGE_ELF := $(BUILD_DIR)/image.elf
  52. KERNEL_IMG_OUT ?= $(BUILD_DIR)/image.bin
  53. OBJECTS_C = $(filter %.c,$(SOURCES))
  54. OBJECTS_S = $(filter %.S,$(SOURCES))
  55. OBJECTS := $(OBJECTS_S:.S=.o) $(OBJECTS_C:.c=.o)
  56. OBJECTS := $(patsubst %.o, $(BUILD_DIR)/%.o, $(OBJECTS)) $(IMAGE_OBJ)
  57. ifneq ($(MAKECMDGOALS),clean)
  58. ifndef KERNEL_IMG_IN
  59. $(error Compressed kernel image not given via KERNEL_IMG_IN)
  60. endif
  61. endif
  62. all: $(KERNEL_IMG_OUT)
  63. install:
  64. $(BUILD_DIR)/%.o : %.c
  65. @mkdir -p $(dir $@)
  66. $(CC) $(CFLAGS) -c -o $@ $<
  67. $(BUILD_DIR)/%.o : %.S
  68. @mkdir -p $(dir $@)
  69. $(CC) $(ASFLAGS) -c -o $@ $<
  70. $(IMAGE_OBJ): $(KERNEL_IMG_IN)
  71. $(OBJCOPY) -I binary -O $(O_FORMAT) --rename-section .data=.kernel $< $@
  72. $(IMAGE_ELF): $(OBJECTS)
  73. $(LD) $(LDFLAGS) -o $@ $(OBJECTS)
  74. $(KERNEL_IMG_OUT): $(IMAGE_ELF)
  75. $(OBJCOPY) -O binary $< $@
  76. clean:
  77. rm -rf $(BUILD_DIR)/