Makefile 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #
  2. # Copyright (C) 1999-2001 Hewlett-Packard Co.
  3. # Contributed by David Mosberger <[email protected]>
  4. # Contributed by Stephane Eranian <[email protected]>
  5. #
  6. # All rights reserved.
  7. #
  8. # Redistribution and use in source and binary forms, with or without
  9. # modification, are permitted provided that the following conditions
  10. # are met:
  11. #
  12. # * Redistributions of source code must retain the above copyright
  13. # notice, this list of conditions and the following disclaimer.
  14. # * Redistributions in binary form must reproduce the above
  15. # copyright notice, this list of conditions and the following
  16. # disclaimer in the documentation and/or other materials
  17. # provided with the distribution.
  18. # * Neither the name of Hewlett-Packard Co. nor the names of its
  19. # contributors may be used to endorse or promote products derived
  20. # from this software without specific prior written permission.
  21. #
  22. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
  23. # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
  24. # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  25. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  26. # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  27. # BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
  28. # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  29. # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  30. # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  31. # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
  32. # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
  33. # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  34. # SUCH DAMAGE.
  35. #
  36. SRCDIR = .
  37. VPATH = $(SRCDIR)
  38. include $(SRCDIR)/../Make.defaults
  39. TOPDIR = $(SRCDIR)/..
  40. CDIR=$(TOPDIR)/..
  41. LINUX_HEADERS = /usr/src/sys/build
  42. APPSDIR = $(LIBDIR)/gnuefi/apps
  43. CPPFLAGS += -D__KERNEL__ -I$(LINUX_HEADERS)/include
  44. CRTOBJS = ../gnuefi/crt0-efi-$(ARCH).o
  45. LDSCRIPT = $(TOPDIR)/gnuefi/elf_$(ARCH)_efi.lds
  46. ifneq (,$(findstring FreeBSD,$(OS)))
  47. LDSCRIPT = $(TOPDIR)/gnuefi/elf_$(ARCH)_fbsd_efi.lds
  48. endif
  49. LDFLAGS += -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS)
  50. LOADLIBES += -lefi -lgnuefi
  51. LOADLIBES += $(LIBGCC)
  52. LOADLIBES += -T $(LDSCRIPT)
  53. TARGET_BSDRIVERS = drv0.efi
  54. TARGET_RTDRIVERS =
  55. ifneq ($(HAVE_EFI_OBJCOPY),)
  56. FORMAT := --target efi-app-$(ARCH)
  57. $(TARGET_BSDRIVERS): FORMAT=--target efi-bsdrv-$(ARCH)
  58. $(TARGET_RTDRIVERS): FORMAT=--target efi-rtdrv-$(ARCH)
  59. else
  60. SUBSYSTEM := 0xa
  61. $(TARGET_BSDRIVERS): SUBSYSTEM = 0xb
  62. $(TARGET_RTDRIVERS): SUBSYSTEM = 0xc
  63. FORMAT := -O binary
  64. LDFLAGS += --defsym=EFI_SUBSYSTEM=$(SUBSYSTEM)
  65. endif
  66. DRAGON_STUB_FILES:= dragon_stub-main.c stub.c helper.c fdt.c secureboot.c elf.c mem.c alignedmem.c random.c
  67. DRAGON_STUB_FILES += lib/vsprintf.c lib/hexdump.c lib/ctype.c lib/cmdline.c lib/string.c
  68. __LIBFDT_DIR=lib/libfdt
  69. DRAGON_STUB_FILES += $(__LIBFDT_DIR)/fdt_addresses.c $(__LIBFDT_DIR)/fdt_empty_tree.c $(__LIBFDT_DIR)/fdt_overlay.c $(__LIBFDT_DIR)/fdt_ro.c \
  70. $(__LIBFDT_DIR)/fdt_rw.c $(__LIBFDT_DIR)/fdt_strerror.c $(__LIBFDT_DIR)/fdt_sw.c $(__LIBFDT_DIR)/fdt_wip.c \
  71. $(__LIBFDT_DIR)/fdt.c
  72. INCDIR += -I$(TOPDIR)/apps/lib/libfdt
  73. ifeq ($(ARCH), riscv64)
  74. DRAGON_STUB_FILES += riscv-stub.c
  75. INCDIR += -I$(TOPDIR)/inc/dragonstub/linux/arch/riscv
  76. endif
  77. # 把*.c的列表转换为*.o的列表
  78. DRAGON_STUB_OBJS := $(patsubst %.c,%.o,$(DRAGON_STUB_FILES))
  79. PAYLOAD_ELF_OBJ=
  80. # 将'/', '.', '-'替换为'_'
  81. PAYLOAD_PATH_REPLACEMENT=_binary_$(shell echo "$(PAYLOAD_ELF)" | sed 's/\//_/g' | sed 's/\./_/g' | sed 's/\-/_/g')
  82. dragon_stub: $(DRAGON_STUB_OBJS)
  83. @echo "Building dragon_stub..."
  84. ifeq ($(PAYLOAD_ELF),)
  85. @echo "PAYLOAD_ELF is not set, not merging..."
  86. $(LD) $(LDFLAGS) $^ -o dragon_stub.so $(LOADLIBES)
  87. else
  88. # 把DragonStub和目标ELF合并
  89. @echo "Merging DragonStub and $(PAYLOAD_ELF)..."
  90. $(LD) -r -b binary $(PAYLOAD_ELF) -o payload.o.stage1 --no-relax
  91. $(OBJCOPY) --redefine-sym $(PAYLOAD_PATH_REPLACEMENT)_start=_binary_payload_start \
  92. --redefine-sym $(PAYLOAD_PATH_REPLACEMENT)_end=_binary_payload_end \
  93. --redefine-sym $(PAYLOAD_PATH_REPLACEMENT)_size=_binary_payload_size \
  94. payload.o.stage1 payload.o
  95. $(LD) $(LDFLAGS) --no-relax $^ payload.o -o dragon_stub.so $(LOADLIBES)
  96. endif
  97. $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .rodata -j .rel \
  98. -j .rela -j .rel.* -j .rela.* -j .rel* -j .rela* \
  99. -j .areloc -j .reloc $(FORMAT) dragon_stub.so dragon_stub.efi
  100. TARGETS = $(TARGET_BSDRIVERS) $(TARGET_RTDRIVERS) dragon_stub
  101. all: $(TARGETS)
  102. ctors_test.so : ctors_fns.o ctors_test.o
  103. clean:
  104. rm -f $(TARGETS) *~ *.o *.so
  105. install:
  106. mkdir -p $(INSTALLROOT)$(APPSDIR)
  107. $(INSTALL) -m 644 $(TARGETS) $(INSTALLROOT)$(APPSDIR)
  108. .PHONY: install
  109. include $(SRCDIR)/../Make.rules