Makefile 4.7 KB

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