Makefile 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. MAKEFLAGS += --check-symlink-times
  2. CC = gcc
  3. AS = gcc
  4. AR = ar rcs
  5. LD = ld
  6. OMIT_FRAME_POINTER = no
  7. CFLAGS = -Wall -fPIC -std=gnu99 -fgnu89-inline -Winline -Wwrite-strings \
  8. -fmerge-all-constants -Wstrict-prototypes \
  9. -Werror=implicit-function-declaration \
  10. -fno-stack-protector -fno-builtin -Wno-inline \
  11. -I../include -I../../../Pal/lib -I../../../Pal/include/pal
  12. ifeq ($(OMIT_FRAME_POINTER),yes)
  13. CFLAGS += -DOMIT_FRAME_POINTER=1
  14. else
  15. CFLAGS += -fno-omit-frame-pointer -DOMIT_FRAME_POINTER=0
  16. endif
  17. ASFLAGS = -Wa,--noexecstack -x assembler-with-cpp -I../include
  18. LDFLAGS = -shared -nostdlib --version-script shim.map -T shim.lds \
  19. -z combreloc -z relro -z defs \
  20. -dynamic-link=libpal.so -rpath-link=$(PWD)
  21. LDFLAGS-debug = $(patsubst shim.map,shim-debug.map,$(LDFLAGS))
  22. ARFLAGS =
  23. shim_target = libsysdb.a libsysdb.so libsysdb_debug.so
  24. defs = -DIN_SHIM
  25. fs = chroot str pipe socket proc dev
  26. ipcns = pid sysv
  27. objs = $(addprefix bookkeep/shim_,handle vma thread signal) \
  28. $(patsubst %.c,%,$(wildcard utils/*.c)) \
  29. $(addprefix fs/shim_,dcache namei fs_hash fs) \
  30. $(patsubst %.c,%,$(foreach f,$(fs),$(wildcard fs/$(f)/*.c))) \
  31. $(addprefix ipc/shim_,ipc ipc_helper ipc_child) \
  32. $(addprefix ipc/shim_ipc_,$(ipcns)) \
  33. elf/shim_rtld \
  34. $(addprefix shim_,init table syscalls checkpoint random malloc \
  35. async parser debug) syscallas start \
  36. $(patsubst %.c,%,$(wildcard sys/*.c))
  37. graphene_lib = ../../../Pal/lib/graphene-lib.a
  38. pal_lib = ../../../Pal/src/libpal.so
  39. headers = ../include/*.h ../../../Pal/lib/*.h ../../../Pal/include/pal/*.h
  40. all: $(shim_target)
  41. debug: debug = debug
  42. debug: CC = gcc -gdwarf-2 -g3
  43. debug: CFLAGS += -DDEBUG
  44. debug: $(shim_target)
  45. profile: CC = gcc
  46. profile: CFLAGS += -DPROFILE
  47. profile: $(shim_target)
  48. $(graphene_lib):
  49. make -C ../../../Pal/lib $(debug)
  50. libsysdb.so: $(addsuffix .o,$(objs)) $(filter %.map %.lds,$(LDFLAGS)) \
  51. $(graphene_lib) $(pal_lib)
  52. @echo [ $@ ]
  53. $(LD) $(LDFLAGS) -o $@ $(filter-out %.map %.lds,$^) -soname $@ \
  54. -e shim_start
  55. libsysdb_debug.so: $(addsuffix .o,$(objs)) \
  56. $(filter %.map %.lds,$($LDFLAGS-debug)) \
  57. $(graphene_lib) $(pal_lib)
  58. @echo [ $@ ]
  59. $(LD) $(LDFLAGS-debug) -o $@ $(filter-out %.map %.lds,$^) -soname $@ \
  60. -e shim_start
  61. libsysdb.a: $(addsuffix .o,$(objs))
  62. @echo [ $@ ]
  63. @mv -f $@ $@.backup || true
  64. @$(AR) $(ARFLAGS) $@ $^
  65. %.asm: %.c $(headers)
  66. @echo [ $@ ]
  67. @$(CC) $(CFLAGS) $(defs) -c $< -o $<.o
  68. @objdump -S $<.o > $@
  69. @rm $<.o
  70. $(addsuffix .o,$(addprefix ipc/shim_ipc_,$(ipcns))): ipc/*.h
  71. %.o: %.c $(headers)
  72. @echo [ $@ ]
  73. @$(CC) $(CFLAGS) $(defs) -c $< -o $@
  74. %.e: %.c $(headers)
  75. @echo [ $@ ]
  76. @$(CC) $(CFLAGS) $(defs) -E $< -o $@
  77. %.o: %.S $(headers)
  78. @echo [ $@ ]
  79. @$(AS) $(ASFLAGS) $(defs) -c $< -o $@
  80. %.e: %.S $(headers)
  81. @echo [ $@ ]
  82. @$(AS) $(ASFLAGS) $(defs) -E $< -o $@
  83. clean:
  84. rm -f $(addsuffix .o,$(objs)) $(shim_target)