Makefile 4.1 KB

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