Makefile 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. RUNTIME_DIR = $(CURDIR)/../../../Runtime
  2. include ../../../Scripts/Makefile.configs
  3. OMIT_FRAME_POINTER = no
  4. CFLAGS += -fPIC -Winline -Wwrite-strings \
  5. -fmerge-all-constants -Wstrict-prototypes -Wtrampolines \
  6. -Werror=implicit-function-declaration \
  7. $(cc-option, -Wnull-dereference) \
  8. -fno-stack-protector -fno-builtin -Wno-inline \
  9. -I../include -I../../../Pal/lib -I../../../Pal/include/pal \
  10. -I../../../Pal/include/elf
  11. CFLAGS += -Wextra
  12. ifeq ($(OMIT_FRAME_POINTER),yes)
  13. CFLAGS += -DOMIT_FRAME_POINTER=1
  14. else
  15. CFLAGS += -fno-omit-frame-pointer -DOMIT_FRAME_POINTER=0
  16. endif
  17. ASFLAGS += -Wa,--noexecstack -x assembler-with-cpp -I../include
  18. LDFLAGS += -shared -nostdlib -z combreloc -z relro -z now -z defs \
  19. -dynamic-link=libpal.so \
  20. -rpath-link=$(abspath $(RUNTIME_DIR))
  21. files_to_build = libsysdb.a libsysdb.so libsysdb_debug.so
  22. files_to_install = $(addprefix $(RUNTIME_DIR)/,$(files_to_build))
  23. defs = -DIN_SHIM
  24. CFLAGS += $(defs)
  25. ASFLAGS += $(defs)
  26. fs = chroot str pipe socket proc dev eventfd
  27. ipcns = pid sysv
  28. objs = $(addprefix bookkeep/shim_,handle vma thread signal) \
  29. $(addprefix utils/,md5 printf strobjs) \
  30. $(addprefix fs/shim_,dcache namei fs_hash fs) \
  31. $(foreach f,$(fs),fs/$(f)/fs) \
  32. $(addprefix fs/proc/,info ipc-thread thread) \
  33. $(addprefix ipc/shim_,ipc ipc_helper ipc_child) \
  34. $(addprefix ipc/shim_ipc_,$(ipcns)) \
  35. elf/shim_rtld \
  36. $(addprefix shim_,init table syscalls checkpoint malloc \
  37. async parser debug object) syscallas start \
  38. $(addprefix sys/shim_,access alarm benchmark brk clone dup epoll eventfd exec exit fcntl fork fs futex getcwd getpid getrlimit ioctl migrate mmap msgget open pipe poll sched semget sigaction sleep socket stat time uname vfork wait wrappers) \
  39. vdso/vdso-data
  40. all_objs = $(objs) vdso/vdso-note vdso/vdso
  41. graphene_lib = .lib/graphene-lib.a
  42. pal_lib = $(RUNTIME_DIR)/libpal-$(PAL_HOST).so
  43. all: $(files_to_build) $(files_to_install)
  44. $(files_to_install): $(RUNTIME_DIR)/%: %
  45. $(call cmd,ln_sf)
  46. ifeq ($(findstring x86_64,$(SYS))$(findstring linux,$(SYS)),x86_64linux)
  47. LDFLAGS-libsysdb.so += --version-script shim.map -T shim.lds
  48. libsysdb.so: $(addsuffix .o,$(objs)) $(filter %.map %.lds,$(LDFLAGS-$@)) \
  49. $(graphene_lib) $(pal_lib)
  50. $(call cmd,ld_so_o)
  51. LDFLAGS-libsysdb_debug.so += --version-script shim-debug.map -T shim.lds
  52. libsysdb_debug.so: $(addsuffix .o,$(filter-out syscallas,$(objs))) \
  53. $(filter %.map %.lds,$(LDFLAGS-$@)) \
  54. $(graphene_lib) $(pal_lib)
  55. $(call cmd,ld_so_o)
  56. .lib/host_endian.h: ../../../Pal/src/host/$(PAL_HOST)/host_endian.h
  57. @mkdir -p .lib
  58. $(call cmd,ln_sf)
  59. .PHONY: graphene_lib_recurse
  60. graphene_lib_recurse: .lib/host_endian.h
  61. $(MAKE) -C ../../../Pal/lib target=$(abspath .lib)/
  62. $(graphene_lib): graphene_lib_recurse
  63. @true
  64. libsysdb.a: $(addsuffix .o,$(objs))
  65. $(call cmd,ar_a_o)
  66. else
  67. .IGNORE: $(shim_target)
  68. $(shim_target):
  69. endif
  70. %.o: %.c
  71. $(call cmd,cc_o_c)
  72. %.i: %.c
  73. $(call cmd,cpp_i_c)
  74. %.s: %.c
  75. $(call cmd,cc_s_c)
  76. %.o: %.S
  77. $(call cmd,as_o_S)
  78. %.s: %.S
  79. $(call cmd,cpp_s_S)
  80. syscallas.S shim_checkpoint.c: asm-offsets.h
  81. include ../../../Scripts/Makefile.rules
  82. LDFLAGS-vdso/vdso.so.dbg = -nostdlib -shared \
  83. --hash-style=both --build-id -Bsymbolic \
  84. -m elf_x86_64 --no-undefined \
  85. -z max-page-size=4096 -z common-page-size=4096 \
  86. -T vdso/vdso.lds -soname linux-vdso.so.1
  87. vdso/vdso.so.dbg: LDFLAGS =
  88. vdso/vdso.so.dbg: vdso/vdso.lds vdso/vdso.o vdso/vdso-note.o | vdso/.vdso-no-reloc-checked
  89. $(call cmd,ld)
  90. # vdso.so is required to have no relocations. This rule checks it.
  91. # Use default linker script to retain relocations if exist.
  92. LDFLAGS-vdso/.vdso-linked-for-reloc-check.so = -nostdlib -shared -Bsymbolic
  93. vdso/.vdso-linked-for-reloc-check.so: LDFLAGS =
  94. vdso/.vdso-linked-for-reloc-check.so: vdso/vdso.o
  95. $(call cmd,ld)
  96. vdso/.vdso-no-reloc-checked: vdso/.vdso-linked-for-reloc-check.so
  97. $(call cmd,check_no_reloc)
  98. $Q touch $@
  99. OBJCOPYFLAGS-vdso/vdso.so = -S
  100. vdso/vdso.so: vdso/vdso.so.dbg
  101. $(call cmd,objcopy)
  102. vdso/vdso-data.o: vdso/vdso.so
  103. CLEAN_FILES += vdso/vdso.so.dbg vdso/vdso.so vdso/.vdso-linked-for-reloc-check.so vdso/.vdso-no-reloc-checked
  104. .PHONY: clean
  105. clean:
  106. rm -rf $(addsuffix .o,$(all_objs)) $(addsuffix .d,$(all_objs)) \
  107. $(addsuffix .i.d,$(all_objs)) $(addsuffix .s.d,$(all_objs)) \
  108. $(shim_target) $(files_to_build) .lib $(CLEAN_FILES)
  109. ifeq ($(filter %clean,$(MAKECMDGOALS)),)
  110. -include $(addsuffix .d,$(all_objs)) $(addsuffix .i.d,$(all_objs)) $(addsuffix .s.d,$(all_objs))
  111. endif
  112. .PHONY: distclean
  113. distclean: clean