Makefile 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. RUNTIME_DIR = $(CURDIR)/../../../Runtime
  2. include ../../../Scripts/Makefile.configs
  3. OMIT_FRAME_POINTER = no
  4. CFLAGS = -Wall -fPIC -std=c11 -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. EXTRAFLAGS = -Wextra
  12. CFLAGS += $(EXTRAFLAGS)
  13. ifeq ($(OMIT_FRAME_POINTER),yes)
  14. CFLAGS += -DOMIT_FRAME_POINTER=1
  15. else
  16. CFLAGS += -fno-omit-frame-pointer -DOMIT_FRAME_POINTER=0
  17. endif
  18. ASFLAGS = -Wa,--noexecstack -x assembler-with-cpp -I../include
  19. LDFLAGS = -shared -nostdlib -z combreloc -z relro -z now -z defs \
  20. -dynamic-link=libpal.so \
  21. -rpath-link=$(abspath $(RUNTIME_DIR))
  22. ifeq ($(WERROR),1)
  23. CFLAGS += -Werror
  24. endif
  25. files_to_build = libsysdb.a libsysdb.so libsysdb_debug.so
  26. files_to_install = $(addprefix $(RUNTIME_DIR)/,$(files_to_build))
  27. defs = -DIN_SHIM
  28. CFLAGS += $(defs)
  29. ASFLAGS += $(defs)
  30. fs = chroot str pipe socket proc dev eventfd
  31. ipcns = pid sysv
  32. objs = $(addprefix bookkeep/shim_,handle vma thread signal) \
  33. $(addprefix utils/,md5 printf strobjs) \
  34. $(addprefix fs/shim_,dcache namei fs_hash fs) \
  35. $(foreach f,$(fs),fs/$(f)/fs) \
  36. $(addprefix fs/proc/,info ipc-thread thread) \
  37. $(addprefix ipc/shim_,ipc ipc_helper ipc_child) \
  38. $(addprefix ipc/shim_ipc_,$(ipcns)) \
  39. elf/shim_rtld \
  40. $(addprefix shim_,init table syscalls checkpoint malloc \
  41. async parser debug object) syscallas start \
  42. $(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) \
  43. vdso/vdso-data
  44. all_objs = $(objs) vdso/vdso-note vdso/vdso
  45. graphene_lib = .lib/graphene-lib.a
  46. pal_lib = $(RUNTIME_DIR)/libpal-$(PAL_HOST).so
  47. all: $(files_to_build) $(files_to_install)
  48. ifeq ($(DEBUG),1)
  49. CC += -gdwarf-2 -g3
  50. CFLAGS += -DDEBUG
  51. ASFLAGS += -DDEBUG
  52. else
  53. CFLAGS += -O2
  54. endif
  55. ifeq ($(PROFILING), 1)
  56. CFLAGS += -DPROFILE
  57. endif
  58. $(files_to_install): $(RUNTIME_DIR)/%: %
  59. $(call cmd,ln_sf)
  60. ifeq ($(findstring x86_64,$(SYS))$(findstring linux,$(SYS)),x86_64linux)
  61. LDFLAGS-libsysdb.so += --version-script shim.map -T shim.lds
  62. libsysdb.so: $(addsuffix .o,$(objs)) $(filter %.map %.lds,$(LDFLAGS-$@)) \
  63. $(graphene_lib) $(pal_lib)
  64. $(call cmd,ld_so_o)
  65. LDFLAGS-libsysdb_debug.so += --version-script shim-debug.map -T shim.lds
  66. libsysdb_debug.so: $(addsuffix .o,$(filter-out syscallas,$(objs))) \
  67. $(filter %.map %.lds,$(LDFLAGS-$@)) \
  68. $(graphene_lib) $(pal_lib)
  69. $(call cmd,ld_so_o)
  70. .lib/host_endian.h: ../../../Pal/src/host/$(PAL_HOST)/host_endian.h
  71. @mkdir -p .lib
  72. $(call cmd,ln_sf)
  73. .PHONY: graphene_lib_recurse
  74. graphene_lib_recurse: .lib/host_endian.h
  75. $(MAKE) -C ../../../Pal/lib target=$(abspath .lib)/
  76. $(graphene_lib): graphene_lib_recurse
  77. @true
  78. libsysdb.a: $(addsuffix .o,$(objs))
  79. $(call cmd,ar_a_o)
  80. else
  81. .IGNORE: $(shim_target)
  82. $(shim_target):
  83. endif
  84. %.o: %.c
  85. $(call cmd,cc_o_c)
  86. %.i: %.c
  87. $(call cmd,cpp_i_c)
  88. %.s: %.c
  89. $(call cmd,cc_s_c)
  90. %.o: %.S
  91. $(call cmd,as_o_S)
  92. %.s: %.S
  93. $(call cmd,cpp_s_S)
  94. syscallas.S shim_checkpoint.c: asm-offsets.h
  95. include ../../../Scripts/Makefile.rules
  96. LDFLAGS-vdso/vdso.so.dbg = -nostdlib -shared \
  97. --hash-style=both --build-id -Bsymbolic \
  98. -m elf_x86_64 --no-undefined \
  99. -z max-page-size=4096 -z common-page-size=4096 \
  100. -T vdso/vdso.lds -soname linux-vdso.so.1
  101. vdso/vdso.so.dbg: LDFLAGS =
  102. vdso/vdso.so.dbg: vdso/vdso.lds vdso/vdso.o vdso/vdso-note.o | vdso/.vdso-no-reloc-checked
  103. $(call cmd,ld)
  104. # vdso.so is required to have no relocations. This rule checks it.
  105. # Use default linker script to retain relocations if exist.
  106. LDFLAGS-vdso/.vdso-linked-for-reloc-check.so = -nostdlib -shared -Bsymbolic
  107. vdso/.vdso-linked-for-reloc-check.so: LDFLAGS =
  108. vdso/.vdso-linked-for-reloc-check.so: vdso/vdso.o
  109. $(call cmd,ld)
  110. vdso/.vdso-no-reloc-checked: vdso/.vdso-linked-for-reloc-check.so
  111. $(call cmd,check_no_reloc)
  112. $Q touch $@
  113. OBJCOPYFLAGS-vdso/vdso.so = -S
  114. vdso/vdso.so: vdso/vdso.so.dbg
  115. $(call cmd,objcopy)
  116. vdso/vdso-data.o: vdso/vdso.so
  117. CLEAN_FILES += vdso/vdso.so.dbg vdso/vdso.so vdso/.vdso-linked-for-reloc-check.so vdso/.vdso-no-reloc-checked
  118. .PHONY: clean
  119. clean:
  120. rm -rf $(addsuffix .o,$(all_objs)) $(addsuffix .d,$(all_objs)) \
  121. $(addsuffix .i.d,$(all_objs)) $(addsuffix .s.d,$(all_objs)) \
  122. $(shim_target) $(files_to_build) .lib $(CLEAN_FILES)
  123. ifeq ($(filter %clean,$(MAKECMDGOALS)),)
  124. -include $(addsuffix .d,$(all_objs)) $(addsuffix .i.d,$(all_objs)) $(addsuffix .s.d,$(all_objs))
  125. endif
  126. .PHONY: distclean
  127. distclean: clean