Makefile 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  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. objs = \
  21. shim_async.o \
  22. shim_checkpoint.o \
  23. shim_debug.o \
  24. shim_init.o \
  25. shim_malloc.o \
  26. shim_object.o \
  27. shim_parser.o \
  28. shim_syscalls.o \
  29. shim_table.o \
  30. start.o \
  31. syscallas.o \
  32. bookkeep/shim_handle.o \
  33. bookkeep/shim_signal.o \
  34. bookkeep/shim_thread.o \
  35. bookkeep/shim_vma.o \
  36. elf/shim_rtld.o \
  37. fs/shim_dcache.o \
  38. fs/shim_fs.o \
  39. fs/shim_fs_hash.o \
  40. fs/shim_namei.o \
  41. fs/chroot/fs.o \
  42. fs/dev/fs.o \
  43. fs/eventfd/fs.o \
  44. fs/pipe/fs.o \
  45. fs/proc/fs.o \
  46. fs/proc/info.o \
  47. fs/proc/ipc-thread.o \
  48. fs/proc/thread.o \
  49. fs/socket/fs.o \
  50. fs/str/fs.o \
  51. ipc/shim_ipc.o \
  52. ipc/shim_ipc_child.o \
  53. ipc/shim_ipc_helper.o \
  54. ipc/shim_ipc_pid.o \
  55. ipc/shim_ipc_sysv.o \
  56. sys/shim_access.o \
  57. sys/shim_alarm.o \
  58. sys/shim_benchmark.o \
  59. sys/shim_brk.o \
  60. sys/shim_clone.o \
  61. sys/shim_dup.o \
  62. sys/shim_epoll.o \
  63. sys/shim_eventfd.o \
  64. sys/shim_exec.o \
  65. sys/shim_exit.o \
  66. sys/shim_fcntl.o \
  67. sys/shim_fork.o \
  68. sys/shim_fs.o \
  69. sys/shim_futex.o \
  70. sys/shim_getcwd.o \
  71. sys/shim_getpid.o \
  72. sys/shim_getrlimit.o \
  73. sys/shim_ioctl.o \
  74. sys/shim_migrate.o \
  75. sys/shim_mmap.o \
  76. sys/shim_msgget.o \
  77. sys/shim_open.o \
  78. sys/shim_pipe.o \
  79. sys/shim_poll.o \
  80. sys/shim_sched.o \
  81. sys/shim_semget.o \
  82. sys/shim_sigaction.o \
  83. sys/shim_sleep.o \
  84. sys/shim_socket.o \
  85. sys/shim_stat.o \
  86. sys/shim_time.o \
  87. sys/shim_uname.o \
  88. sys/shim_vfork.o \
  89. sys/shim_wait.o \
  90. sys/shim_wrappers.o \
  91. utils/md5.o \
  92. utils/printf.o \
  93. utils/strobjs.o \
  94. vdso/vdso-data.o
  95. all_objs = \
  96. $(objs) \
  97. vdso/vdso-note.o \
  98. vdso/vdso.o
  99. graphene_lib = .lib/graphene-lib.a
  100. pal_lib = $(RUNTIME_DIR)/libpal-$(PAL_HOST).so
  101. ifeq ($(findstring x86_64,$(SYS))$(findstring linux,$(SYS)),x86_64linux)
  102. all: $(files_to_build) $(files_to_install)
  103. else
  104. all:
  105. endif
  106. $(files_to_install): $(RUNTIME_DIR)/%: %
  107. $(call cmd,ln_sf)
  108. LDFLAGS-libsysdb.so += --version-script shim.map -T shim.lds
  109. libsysdb.so: $(objs) $(filter %.map %.lds,$(LDFLAGS-$@)) \
  110. $(graphene_lib) $(pal_lib)
  111. $(call cmd,ld_so_o)
  112. LDFLAGS-libsysdb_debug.so += --version-script shim-debug.map -T shim.lds
  113. libsysdb_debug.so: $(filter-out syscallas.o,$(objs)) \
  114. $(filter %.map %.lds,$(LDFLAGS-$@)) \
  115. $(graphene_lib) $(pal_lib)
  116. $(call cmd,ld_so_o)
  117. .PHONY: graphene_lib_recurse
  118. graphene_lib_recurse:
  119. $(MAKE) -C ../../../Pal/lib target=$(abspath .lib)/
  120. $(graphene_lib): graphene_lib_recurse
  121. @true
  122. libsysdb.a: $(objs)
  123. $(call cmd,ar_a_o)
  124. %.o: %.c
  125. $(call cmd,cc_o_c)
  126. %.i: %.c
  127. $(call cmd,cpp_i_c)
  128. %.s: %.c
  129. $(call cmd,cc_s_c)
  130. %.o: %.S
  131. $(call cmd,as_o_S)
  132. %.s: %.S
  133. $(call cmd,cpp_s_S)
  134. syscallas.S shim_checkpoint.c: asm-offsets.h
  135. include ../../../Scripts/Makefile.rules
  136. LDFLAGS-vdso/vdso.so.dbg = -nostdlib -shared \
  137. --hash-style=both --build-id -Bsymbolic \
  138. -m elf_x86_64 --no-undefined \
  139. -z max-page-size=4096 -z common-page-size=4096 \
  140. -T vdso/vdso.lds -soname linux-vdso.so.1
  141. vdso/vdso.so.dbg: LDFLAGS =
  142. vdso/vdso.so.dbg: vdso/vdso.lds vdso/vdso.o vdso/vdso-note.o | vdso/.vdso-no-reloc-checked
  143. $(call cmd,ld)
  144. # vdso.so is required to have no relocations. This rule checks it.
  145. # Use default linker script to retain relocations if exist.
  146. LDFLAGS-vdso/.vdso-linked-for-reloc-check.so = -nostdlib -shared -Bsymbolic
  147. vdso/.vdso-linked-for-reloc-check.so: LDFLAGS =
  148. vdso/.vdso-linked-for-reloc-check.so: vdso/vdso.o
  149. $(call cmd,ld)
  150. vdso/.vdso-no-reloc-checked: vdso/.vdso-linked-for-reloc-check.so
  151. $(call cmd,check_no_reloc)
  152. $Q touch $@
  153. OBJCOPYFLAGS-vdso/vdso.so = -S
  154. vdso/vdso.so: vdso/vdso.so.dbg
  155. $(call cmd,objcopy)
  156. vdso/vdso-data.o: vdso/vdso.so
  157. CLEAN_FILES += vdso/vdso.so.dbg vdso/vdso.so vdso/.vdso-linked-for-reloc-check.so vdso/.vdso-no-reloc-checked
  158. .PHONY: clean
  159. clean:
  160. $(RM) -r $(all_objs) $(patsubst %.o,%.d,$(all_objs)) \
  161. $(patsubst %.o,%.i.d,$(all_objs)) $(patsubst %.o,%.s.d,$(all_objs)) \
  162. $(shim_target) $(files_to_build) .lib $(CLEAN_FILES)
  163. ifeq ($(filter %clean,$(MAKECMDGOALS)),)
  164. -include $(patsubst %.o,%.d,$(all_objs)) $(patsubst %.o,%.i.d,$(all_objs)) $(patsubst %.o,%.s.d,$(all_objs))
  165. endif
  166. .PHONY: distclean
  167. distclean: clean