Makefile 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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
  33. ipcns = pid sysv
  34. objs = $(addprefix bookkeep/shim_,handle vma thread signal) \
  35. $(patsubst %.c,%,$(wildcard utils/*.c)) \
  36. $(addprefix fs/shim_,dcache namei fs_hash fs) \
  37. $(patsubst %.c,%,$(foreach f,$(fs),$(wildcard fs/$(f)/*.c))) \
  38. $(addprefix ipc/shim_,ipc ipc_helper ipc_child) \
  39. $(addprefix ipc/shim_ipc_,$(ipcns)) \
  40. elf/shim_rtld \
  41. $(addprefix shim_,init table syscalls checkpoint malloc \
  42. async parser debug object) syscallas start \
  43. $(patsubst %.c,%,$(wildcard sys/*.c)) \
  44. vdso/vdso-data
  45. all_objs = $(objs) vdso/vdso-note vdso/vdso
  46. graphene_lib = .lib/graphene-lib.a
  47. pal_lib = $(RUNTIME_DIR)/libpal-$(PAL_HOST).so
  48. all: $(files_to_build) $(files_to_install)
  49. ifeq ($(DEBUG),1)
  50. CC += -gdwarf-2 -g3
  51. CFLAGS += -DDEBUG
  52. ASFLAGS += -DDEBUG
  53. endif
  54. export DEBUG
  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 ../../../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. clean:
  119. rm -rf $(addsuffix .o,$(all_objs)) $(addsuffix .d,$(all_objs)) \
  120. $(addsuffix .i.d,$(all_objs)) $(addsuffix .s.d,$(all_objs)) \
  121. $(shim_target) $(files_to_build) .lib $(CLEAN_FILES)
  122. -include $(addsuffix .d,$(all_objs)) $(addsuffix .i.d,$(all_objs)) $(addsuffix .s.d,$(all_objs))