Makefile 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. RUNTIME_DIR = $(CURDIR)/../../../Runtime
  2. include ../../../Pal/src/Makefile.Host
  3. CC = gcc
  4. AS = gcc
  5. AR = ar rcs
  6. LD = ld
  7. OMIT_FRAME_POINTER = no
  8. CFLAGS = -Wall -fPIC -std=gnu99 -fgnu89-inline -Winline -Wwrite-strings \
  9. -fmerge-all-constants -Wstrict-prototypes \
  10. -Werror=implicit-function-declaration \
  11. -fno-stack-protector -fno-builtin -Wno-inline \
  12. -I../include -I../../../Pal/lib -I../../../Pal/include/pal
  13. EXTRAFLAGS = -Wextra -Wno-unused-parameter -Wno-sign-compare
  14. CFLAGS += $(EXTRAFLAGS)
  15. ifeq ($(OMIT_FRAME_POINTER),yes)
  16. CFLAGS += -DOMIT_FRAME_POINTER=1
  17. else
  18. CFLAGS += -fno-omit-frame-pointer -DOMIT_FRAME_POINTER=0
  19. endif
  20. ASFLAGS = -Wa,--noexecstack -x assembler-with-cpp -I../include
  21. LDFLAGS = -shared -nostdlib --version-script shim.map -T shim.lds \
  22. -z combreloc -z relro -z defs \
  23. -dynamic-link=libpal.so \
  24. -rpath-link=$(abspath $(RUNTIME_DIR))
  25. LDFLAGS-debug = $(patsubst shim.map,shim-debug.map,$(LDFLAGS))
  26. ARFLAGS =
  27. ifeq ($(WERROR),1)
  28. CFLAGS += -Werror
  29. endif
  30. files_to_build = libsysdb.a libsysdb.so libsysdb_debug.so
  31. files_to_install = $(addprefix $(RUNTIME_DIR)/,$(files_to_build))
  32. defs = -DIN_SHIM
  33. fs = chroot str pipe socket proc dev
  34. ipcns = pid sysv
  35. objs = $(addprefix bookkeep/shim_,handle vma thread signal) \
  36. $(patsubst %.c,%,$(wildcard utils/*.c)) \
  37. $(addprefix fs/shim_,dcache namei fs_hash fs) \
  38. $(patsubst %.c,%,$(foreach f,$(fs),$(wildcard fs/$(f)/*.c))) \
  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 random malloc \
  43. async parser debug) syscallas start \
  44. $(patsubst %.c,%,$(wildcard sys/*.c))
  45. graphene_lib = .lib/graphene-lib.a
  46. pal_lib = $(RUNTIME_DIR)/libpal-$(PAL_HOST).so
  47. headers = ../include/*.h ../../../Pal/lib/*.h ../../../Pal/include/pal/*.h
  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. cp -f $< $@
  60. ifeq ($(findstring x86_64,$(SYS))$(findstring linux,$(SYS)),x86_64linux)
  61. libsysdb.so: $(addsuffix .o,$(objs)) $(filter %.map %.lds,$(LDFLAGS)) \
  62. $(graphene_lib) $(pal_lib)
  63. @echo [ $@ ]
  64. $(LD) $(LDFLAGS) -o $@ $(filter-out %.map %.lds,$^) -soname $@ \
  65. -e shim_start
  66. libsysdb_debug.so: $(addsuffix .o,$(filter-out syscallas,$(objs))) \
  67. $(filter %.map %.lds,$($LDFLAGS-debug)) \
  68. $(graphene_lib) $(pal_lib)
  69. @echo [ $@ ]
  70. $(LD) $(LDFLAGS-debug) -o $@ $(filter-out %.map %.lds,$^) -soname $@ \
  71. -e shim_start
  72. .lib/host_endian.h: ../../../Pal/src/host/$(PAL_HOST)/host_endian.h
  73. @mkdir -p .lib
  74. cp -f $< $@
  75. .PHONY: $(graphene_lib)
  76. $(graphene_lib): .lib/host_endian.h
  77. $(MAKE) -C ../../../Pal/lib target=$(abspath .lib)/
  78. libsysdb.a: $(addsuffix .o,$(objs))
  79. @echo [ $@ ]
  80. $(AR) $(ARFLAGS) $@ $^
  81. else
  82. .IGNORE: $(shim_target)
  83. $(shim_target):
  84. endif
  85. %.asm: %.c $(headers)
  86. @echo [ $@ ]
  87. @$(CC) $(CFLAGS) $(defs) -c $< -o $<.o
  88. @objdump -S $<.o > $@
  89. @rm $<.o
  90. $(addsuffix .o,$(addprefix ipc/shim_ipc_,$(ipcns))): $(wildcard ipc/*.h)
  91. elf/shim_rtld.o: $(wildcard elf/*.h)
  92. %.o: %.c $(headers)
  93. @echo [ $@ ]
  94. @$(CC) $(CFLAGS) $(defs) -c $< -o $@
  95. %.e %.i: %.c $(headers)
  96. @echo [ $@ ]
  97. @$(CC) $(CFLAGS) $(defs) -E $< -o $@
  98. %.s: %.c $(headers)
  99. @echo [ $@ ]
  100. @$(CC) $(CFLAGS) $(defs) -S $< -o $@
  101. %.o: %.S $(headers)
  102. @echo [ $@ ]
  103. @$(AS) $(ASFLAGS) $(defs) -c $< -o $@
  104. %.e %.s: %.S $(headers)
  105. @echo [ $@ ]
  106. @$(AS) $(ASFLAGS) $(defs) -E $< -o $@
  107. syscallas.S: asm-offsets.h
  108. include ../../../Makefile.rules
  109. clean:
  110. rm -rf $(addsuffix .o,$(objs)) $(shim_target) $(files_to_build) .lib $(CLEAN_FILES)