Makefile 4.8 KB

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