Makefile 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. export PAL_DIR = $(CURDIR)
  2. export RUNTIME_DIR = $(CURDIR)/../../Runtime
  3. include ../../Scripts/Makefile.configs
  4. include ../../Scripts/Makefile.rules
  5. # Customizable PAL Targets
  6. # (specify in Makefile.am in host-specific directories)
  7. # For concurrent builds, all PAL targets must be in host-specific directories
  8. pal_loader =
  9. pal_lib =
  10. pal_lib_deps =
  11. pal_lib_post =
  12. pal_static =
  13. pal_gdb =
  14. HOST_DIR = host/$(PAL_HOST)
  15. LIB_DIR = $(HOST_DIR)/.lib
  16. OBJ_DIR = $(HOST_DIR)/.obj
  17. include host/$(PAL_HOST)/Makefile.am
  18. CFLAGS += -I. -I../include -I../include/pal -I../include/$(HOST_DIR) \
  19. -I$(HOST_DIR) -I../include/lib
  20. PAL_HOST_MACRO = $(shell echo $(PAL_HOST) | tr '[:lower:]' '[:upper:]' | tr '-' '_')
  21. # Build Targets:
  22. # (1) Host-specific targets are in "host/{Host Name}".
  23. # (2) Generic targets are in "host/{Host Name}/.obj".
  24. # (3) API library targets are in "host/{Host Name}/.lib".
  25. files_to_build = $(pal_lib) $(pal_lib_post) $(pal_static) \
  26. $(pal_loader)
  27. defs = -DIN_PAL -DHOST_TYPE="$(PAL_HOST)" -D$(PAL_HOST_MACRO) -DPAL_DIR=$(PAL_DIR) \
  28. -DRUNTIME_DIR=$(RUNTIME_DIR)
  29. CFLAGS += $(defs)
  30. objs = \
  31. db_events.o \
  32. db_exception.o \
  33. db_main.o \
  34. db_memory.o \
  35. db_misc.o \
  36. db_mutex.o \
  37. db_object.o \
  38. db_process.o \
  39. db_rtld.o \
  40. db_streams.o \
  41. db_threading.o \
  42. pal_error.o \
  43. printf.o \
  44. slab.o
  45. graphene_lib = $(LIB_DIR)/graphene-lib.a
  46. host_lib = $(HOST_DIR)/libpal-$(PAL_HOST).a
  47. # Install Targets (all in RUNTIME_DIR):
  48. # pal-{Host Name}: loader for PAL (as an executable)
  49. # libpal-{Host Name}.so: dynamic-linking library
  50. # pal_gdb-{Host Name}: debugger for PAL (as an executable)
  51. ifneq ($(pal_loader),)
  52. runtime_loader += $(RUNTIME_DIR)/pal-$(PAL_HOST)
  53. endif
  54. ifneq ($(pal_lib),)
  55. runtime_lib += $(RUNTIME_DIR)/libpal-$(PAL_HOST)$(suffix $(pal_lib))
  56. endif
  57. ifneq ($(pal_gdb),)
  58. runtime_gdb += $(RUNTIME_DIR)/pal_gdb-$(PAL_HOST)
  59. endif
  60. files_to_install = $(runtime_loader) $(runtime_lib) $(runtime_sec) $(runtime_gdb)
  61. ###########################
  62. ## Generic Build Rules ##
  63. ###########################
  64. .PHONY: all
  65. all: $(files_to_build) $(files_to_install)
  66. .PHONY: host_lib_recurse graphene_lib_recurse
  67. graphene_lib_recurse:
  68. $(MAKE) -C ../lib target=$(abspath $(LIB_DIR))/
  69. $(graphene_lib): graphene_lib_recurse
  70. @true
  71. host_lib_recurse: $(graphene_lib)
  72. @[ ! -d host/$(PAL_HOST) ] || $(MAKE) -C host/$(PAL_HOST)
  73. $(host_lib): host_lib_recurse
  74. @true
  75. $(pal_loader): $(host_lib)
  76. ifneq ($(pal_loader),)
  77. $(runtime_loader): $(pal_loader)
  78. $(call cmd,ln_sf)
  79. endif
  80. ifneq ($(pal_lib),)
  81. $(pal_lib): $(addprefix $(OBJ_DIR)/,$(objs)) \
  82. $(host_lib) $(graphene_lib) $(pal_lib_deps)
  83. $(call cmd,ld_so_o)
  84. $(runtime_lib): $(pal_lib)
  85. $(call cmd,ln_sf)
  86. endif
  87. ifneq ($(pal_gdb),)
  88. $(runtime_gdb): $(pal_gdb)
  89. $(call cmd,ln_sf)
  90. endif
  91. ifneq ($(pal_lib_post),)
  92. $(pal_lib_post): $(pal_lib)
  93. @$(MAKE) -C $(HOST_DIR) $@
  94. endif
  95. $(pal_static): $(addprefix $(OBJ_DIR)/,$(objs)) \
  96. $(host_lib) $(graphene_lib)
  97. $(call cmd,ar_a_o)
  98. $(OBJ_DIR)/%.o: %.c
  99. @mkdir -p $(OBJ_DIR)
  100. $(call cmd,cc_o_c)
  101. $(OBJ_DIR)/%.i: %.c
  102. @mkdir -p $(OBJ_DIR)
  103. $(call cmd,cpp_i_c)
  104. $(OBJ_DIR)/%.s: %.c
  105. @mkdir -p $(OBJ_DIR)
  106. $(call cmd,cc_s_c)
  107. ifeq ($(filter %clean,$(MAKECMDGOALS)),)
  108. include $(wildcard *.d)
  109. -include $(patsubst %.o,$(OBJ_DIR)/%.d,$(objs))
  110. endif
  111. clean_targets = clean distclean
  112. .PHONY: $(clean_targets) clean_
  113. $(clean_targets): clean_
  114. @[ ! -d $(HOST_DIR) ] || $(MAKE) -C $(HOST_DIR) $@
  115. clean_:
  116. $(RM) -r $(LIB_DIR) $(OBJ_DIR) $(files_to_build) *.d
  117. .PHONY: test
  118. test:
  119. $(MAKE) -C $(HOST_DIR) test
  120. .PHONY: sgx-tokens
  121. sgx-tokens:
  122. $(MAKE) -C $(HOST_DIR) sgx-tokens