Makefile 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. export PAL_DIR = $(CURDIR)
  2. export RUNTIME_DIR = $(CURDIR)/../../Runtime
  3. include ../../Makefile.configs
  4. include ../../Makefile.rules
  5. include Makefile.Host
  6. # Customizable PAL Targets
  7. # (specify in Makefile.am in host-specific directories)
  8. # For concurrent builds, all PAL targets must be in host-specific directories
  9. pal_loader =
  10. pal_lib =
  11. pal_lib_deps =
  12. pal_lib_post =
  13. pal_static =
  14. pal_gdb =
  15. include host/$(PAL_HOST)/Makefile.am
  16. HOST_DIR = host/$(PAL_HOST)
  17. LIB_DIR = $(HOST_DIR)/.lib
  18. OBJ_DIR = $(HOST_DIR)/.obj
  19. CFLAGS += -I. -I../include -I$(HOST_DIR) -I../lib
  20. ifeq ($(PROFILING),1)
  21. CFLAGS += -DPROFILING=1
  22. endif
  23. # Build Targets:
  24. # (1) Host-specific targets are in "host/{Host Name}".
  25. # (2) Generic targets are in "host/{Host Name}/.obj".
  26. # (3) API library targets are in "host/{Host Name}/.lib".
  27. files_to_build = $(pal_lib) $(pal_lib_post) $(pal_static) \
  28. $(pal_loader)
  29. defs = -DIN_PAL -DHOST_TYPE="$(PAL_HOST)" -D$(PAL_HOST_MACRO) -DPAL_DIR=$(PAL_DIR) \
  30. -DRUNTIME_DIR=$(RUNTIME_DIR)
  31. CFLAGS += $(defs)
  32. objs = $(addprefix db_,streams memory threading mutex events process \
  33. object main misc ipc exception rtld) slab printf
  34. graphene_lib = $(LIB_DIR)/graphene-lib.a
  35. host_lib = $(HOST_DIR)/libpal-$(PAL_HOST).a
  36. headers = $(wildcard *.h) $(wildcard ../lib/*.h) $(HOST_DIR)/pal_host.h
  37. ifeq ($(findstring x86_64,$(SYS))$(findstring linux,$(SYS)),x86_64linux)
  38. files_to_build += user_start.o user_shared_start.o
  39. endif
  40. ifeq ($(DEBUG),1)
  41. CC += -gdwarf-2 -g3
  42. CFLAGS += -DDEBUG
  43. endif
  44. export DEBUG
  45. # Install Targets (all in RUNTIME_DIR):
  46. # pal-{Host Name}: loader for PAL (as an executable)
  47. # libpal-{Host Name}.so: dynamic-linking library
  48. # pal_gdb-{Host Name}: debugger for PAL (as an executable)
  49. runtime_loader = $(RUNTIME_DIR)/pal-$(PAL_HOST)
  50. ifneq ($(pal_lib),)
  51. runtime_lib += $(RUNTIME_DIR)/libpal-$(PAL_HOST)$(suffix $(pal_lib))
  52. endif
  53. ifneq ($(pal_gdb),)
  54. runtime_gdb += $(RUNTIME_DIR)/pal_gdb-$(PAL_HOST)
  55. endif
  56. files_to_install = $(runtime_loader) $(runtime_lib) $(runtime_sec) $(runtime_gdb)
  57. ###########################
  58. ## Generic Build Rules ##
  59. ###########################
  60. .PHONY: all
  61. all: $(files_to_build) $(files_to_install)
  62. $(LIB_DIR)/host_endian.h: $(HOST_DIR)/host_endian.h
  63. @mkdir -p $(LIB_DIR)
  64. $(call cmd,ln_sf)
  65. .PHONY: $(host_lib) $(graphene_lib) $(pal_lib)
  66. $(graphene_lib): $(LIB_DIR)/host_endian.h
  67. $(MAKE) -C ../lib target=$(abspath $(LIB_DIR))/
  68. $(host_lib): $(graphene_lib)
  69. @[ ! -d host/$(PAL_HOST) ] || $(MAKE) -C host/$(PAL_HOST)
  70. $(pal_loader): $(host_lib)
  71. $(runtime_loader): $(pal_loader)
  72. $(call cmd,ln_sf)
  73. ifneq ($(pal_lib),)
  74. $(pal_lib): $(addprefix $(OBJ_DIR)/,$(addsuffix .o,$(objs))) \
  75. $(host_lib) $(graphene_lib) $(pal_lib_deps)
  76. $(call cmd,ld_so_o)
  77. $(runtime_lib): $(pal_lib)
  78. $(call cmd,ln_sf)
  79. endif
  80. ifneq ($(pal_gdb),)
  81. $(runtime_gdb): $(pal_gdb)
  82. $(call cmd,ln_sf)
  83. endif
  84. ifneq ($(pal_lib_post),)
  85. $(pal_lib_post): $(pal_lib)
  86. @$(MAKE) -C $(HOST_DIR) $@
  87. endif
  88. $(pal_static): $(addprefix $(OBJ_DIR)/,$(addsuffix .o,$(objs))) \
  89. $(host_lib) $(graphene_lib)
  90. $(call cmd,ar_a_o)
  91. user_start.o: ASFLAGS =
  92. user_start.o: user_start.S
  93. $(call cmd,as_o_S)
  94. user_shared_start.o: ASFLAGS = -DSHARED -fPIC
  95. user_shared_start.o: user_start.S
  96. $(call cmd,as_o_S)
  97. $(OBJ_DIR)/%.o: %.c $(headers)
  98. @mkdir -p $(OBJ_DIR)
  99. $(call cmd,cc_o_c)
  100. $(OBJ_DIR)/%.i: %.c $(headers)
  101. @mkdir -p $(OBJ_DIR)
  102. $(call cmd,cpp_i_c)
  103. $(OBJ_DIR)/%.s: %.c $(headers)
  104. @mkdir -p $(OBJ_DIR)
  105. $(call cmd,cc_s_c)
  106. .PHONY: clean
  107. clean:
  108. rm -rf $(LIB_DIR) $(OBJ_DIR) $(files_to_build)
  109. @[ ! -d $(HOST_DIR) ] || $(MAKE) -C $(HOST_DIR) clean