Makefile 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. include Makefile.Host
  2. -include Makefile.Status
  3. CC = gcc
  4. AR = ar rcs
  5. LD = ld
  6. CFLAGS = -Wall -fPIC -O2 -std=gnu99 -fgnu89-inline -U_FORTIFY_SOURCE \
  7. -fno-omit-frame-pointer \
  8. -fno-stack-protector -fno-builtin
  9. LDFLAGS = -shared -nostdlib -z combreloc -z defs
  10. ARFLAGS =
  11. export PAL_DIR = $(shell pwd)
  12. pal_loader = libpal.so
  13. pal_sec =
  14. pal_lib = libpal.so
  15. pal_lib_deps =
  16. pal_lib_post =
  17. pal_static = libpal.a
  18. include host/$(OS)/Makefile.am
  19. CFLAGS += -I. -I../include -Ihost/$(OS) -I../lib
  20. ifeq ($(PROFILING),1)
  21. CFLAGS += -DPROFILING=1
  22. endif
  23. pal_target = $(pal_lib) $(pal_lib_post) $(pal_static) $(pal_loader) $(pal_sec) pal
  24. defs = -DIN_PAL -D$(OS_MACRO) -DPAL_DIR="$(PAL_DIR)"
  25. objs = $(addprefix db_,streams memory threading semaphore events process \
  26. object main misc ipc exception rtld) slab printf
  27. graphene_lib = .lib/graphene-lib.a
  28. host_lib = host/$(OS)/libpal-$(OS).a
  29. headers = $(wildcard *.h) $(wildcard ../lib/*.h) host/$(OS)/pal_host.h
  30. ifneq ($(pal_sec),)
  31. pal_target += pal_sec
  32. endif
  33. ifeq ($(SYS),x86_64-linux-gnu)
  34. pal_target += user_start.o user_shared_start.o
  35. endif
  36. all: | check_target $(pal_target)
  37. ifeq ($(DEBUG),1)
  38. CC += -gdwarf-2 -g3
  39. CFLAGS += -DDEBUG
  40. endif
  41. export DEBUG
  42. ifeq ($(DEBUG),1)
  43. BUILD_TARGET = $(OS)-debug
  44. else
  45. BUILD_TARGET = $(OS)
  46. endif
  47. ifndef SAVED_TARGET
  48. SAVED_TARGET = $(BUILD_TARGET)
  49. endif
  50. SAVED_OS = $(patsubst %-debug,%,$(SAVED_TARGET))
  51. .PHONY: check_target
  52. check_target:
  53. @echo "Building target: $(BUILD_TARGET)"
  54. ifneq ($(SAVED_TARGET),$(BUILD_TARGET))
  55. $(error "A different target is built earlier. Prune the directory first.")
  56. endif
  57. @echo "SAVED_TARGET = $(BUILD_TARGET)" > Makefile.Status
  58. .PHONY: $(host_lib) $(graphene_lib) $(pal_lib) $(pal_sec)
  59. $(graphene_lib): host_endian.h
  60. $(MAKE) -C ../lib target=$(shell pwd)/.lib/
  61. host_endian.h: host/$(OS)/host_endian.h
  62. ln -sf $< $@
  63. $(host_lib): $(graphene_lib)
  64. @[ ! -d host/$(OS) ] || $(MAKE) -C host/$(OS)
  65. ifneq ($(pal_sec),)
  66. $(pal_sec): $(graphene_lib)
  67. @[ ! -d security/$(OS) ] || $(MAKE) -C security/$(OS)
  68. pal_sec: $(pal_sec)
  69. ln -sf $(pal_sec) pal_sec
  70. endif
  71. $(pal_lib): $(addsuffix .o,$(objs)) $(host_lib) $(graphene_lib) $(pal_lib_deps)
  72. @echo [ $@ ]
  73. $(LD) $(LDFLAGS) -o $@ $(filter-out %.map %.lds,$^) $(LDFLAGS-suffix)
  74. pal: $(pal_loader)
  75. ln -sf $(pal_loader) pal
  76. ifneq ($(pal_lib_post),)
  77. $(pal_lib_post): $(pal_lib)
  78. $(MAKE) -C host/$(OS) ../../$@
  79. endif
  80. $(pal_static): $(addsuffix .o,$(objs)) $(host_lib) $(graphene_lib)
  81. @echo [ $@ ]
  82. $(AR) $(ARFLAGS) $@ $^ $(ARFLAGS-suffix)
  83. %.asm: %.c $(headers)
  84. $(CC) $(CFLAGS) $(defs) -c $< -o $<.o
  85. @objdump -S $<.o > $@
  86. @rm $<.o
  87. user_start.o: user_start.S
  88. @echo [ $@ ]
  89. @$(CC) -c $< -o $@
  90. user_shared_start.o: user_start.S
  91. @echo [ $@ ]
  92. @$(CC) -DSHARED -fPIC -c $< -o $@
  93. %.o: %.c $(headers)
  94. @echo [ $@ ]
  95. @$(CC) $(CFLAGS) $(defs) -c $< -o $@ $(CFLAGS-suffix)
  96. %.e: %.c $(headers)
  97. @echo [ $@ ]
  98. @$(CC) $(CFLAGS) $(defs) -E $< -o $@ $(CFLAGS-suffix)
  99. clean:
  100. ifneq ($(SAVED_OS),$(OS))
  101. $(MAKE) clean OS=$(SAVED_OS)
  102. endif
  103. rm -rf $(addsuffix .o,$(objs)) $(pal_target) host_endian.h .lib Makefile.Status
  104. @[ ! -d host/$(OS) ] || $(MAKE) -C host/$(OS) clean
  105. @[ ! -d security/$(OS) ] || $(MAKE) -C security/$(OS) clean