|
@@ -2,16 +2,10 @@ export PAL_DIR = $(CURDIR)
|
|
|
export RUNTIME_DIR = $(CURDIR)/../../Runtime
|
|
|
|
|
|
include Makefile.Host
|
|
|
--include Makefile.Status
|
|
|
-
|
|
|
-ifeq ($(DEBUG),1)
|
|
|
-BUILD_TARGET = $(PAL_HOST)-debug
|
|
|
-else
|
|
|
-BUILD_TARGET = $(PAL_HOST)
|
|
|
-endif
|
|
|
|
|
|
# Customizable PAL Targets
|
|
|
# (specify in Makefile.am in host-specific directories)
|
|
|
+# For concurrent builds, all PAL targets must be in host-specific directories
|
|
|
pal_loader =
|
|
|
pal_sec =
|
|
|
pal_lib =
|
|
@@ -22,12 +16,21 @@ pal_gdb =
|
|
|
|
|
|
include host/$(PAL_HOST)/Makefile.am
|
|
|
|
|
|
-CFLAGS += -I. -I../include -Ihost/$(PAL_HOST) -I../lib
|
|
|
+HOST_DIR = host/$(PAL_HOST)
|
|
|
+LIB_DIR = $(HOST_DIR)/.lib
|
|
|
+OBJ_DIR = $(HOST_DIR)/.obj
|
|
|
+
|
|
|
+CFLAGS += -I. -I../include -I$(HOST_DIR) -I../lib
|
|
|
|
|
|
ifeq ($(PROFILING),1)
|
|
|
CFLAGS += -DPROFILING=1
|
|
|
endif
|
|
|
|
|
|
+# Build Targets:
|
|
|
+# (1) Host-specific targets are in "host/{Host Name}".
|
|
|
+# (2) Generic targets are in "host/{Host Name}/.obj".
|
|
|
+# (3) API library targets are in "host/{Host Name}/.lib".
|
|
|
+
|
|
|
files_to_build = $(pal_lib) $(pal_lib_post) $(pal_static) \
|
|
|
$(pal_loader) $(pal_sec)
|
|
|
|
|
@@ -35,9 +38,10 @@ defs = -DIN_PAL -DHOST_TYPE="$(PAL_HOST)" -D$(PAL_HOST_MACRO) -DPAL_DIR=$(PAL_DI
|
|
|
-DRUNTIME_DIR=$(RUNTIME_DIR)
|
|
|
objs = $(addprefix db_,streams memory threading mutex events process \
|
|
|
object main misc ipc exception rtld) slab printf
|
|
|
-graphene_lib = .lib/graphene-lib.a
|
|
|
-host_lib = host/$(PAL_HOST)/libpal-$(PAL_HOST).a
|
|
|
-headers = $(wildcard *.h) $(wildcard ../lib/*.h) host/$(PAL_HOST)/pal_host.h
|
|
|
+
|
|
|
+graphene_lib = $(LIB_DIR)/graphene-lib.a
|
|
|
+host_lib = $(HOST_DIR)/libpal-$(PAL_HOST).a
|
|
|
+headers = $(wildcard *.h) $(wildcard ../lib/*.h) $(HOST_DIR)/pal_host.h
|
|
|
|
|
|
ifeq ($(findstring x86_64,$(SYS))$(findstring linux,$(SYS)),x86_64linux)
|
|
|
files_to_build += user_start.o user_shared_start.o
|
|
@@ -49,6 +53,12 @@ CFLAGS += -DDEBUG
|
|
|
endif
|
|
|
export DEBUG
|
|
|
|
|
|
+# Install Targets (all in RUNTIME_DIR):
|
|
|
+# pal-{Host Name}: loader for PAL (as an executable)
|
|
|
+# libpal-{Host Name}.so: dynamic-linking library
|
|
|
+# pal_sec-{Host Name}: secure loader for PAL (as an executable)
|
|
|
+# pal_gdb-{Host Name}: debugger for PAL (as an executable)
|
|
|
+
|
|
|
runtime_loader = $(RUNTIME_DIR)/pal-$(PAL_HOST)
|
|
|
|
|
|
ifneq ($(pal_lib),)
|
|
@@ -65,30 +75,22 @@ endif
|
|
|
|
|
|
files_to_install = $(runtime_loader) $(runtime_lib) $(runtime_sec) $(runtime_gdb)
|
|
|
|
|
|
-.PHONY: all
|
|
|
-all: | check_target $(files_to_build) $(files_to_install)
|
|
|
|
|
|
-ifndef SAVED_TARGET
|
|
|
-SAVED_TARGET = $(BUILD_TARGET)
|
|
|
-endif
|
|
|
+###########################
|
|
|
+## Generic Build Rules ##
|
|
|
+###########################
|
|
|
|
|
|
-SAVED_OS = $(patsubst %-debug,%,$(SAVED_TARGET))
|
|
|
+.PHONY: all
|
|
|
+all: $(files_to_build) $(files_to_install)
|
|
|
|
|
|
-.PHONY: check_target
|
|
|
-check_target:
|
|
|
- @echo "Building target: $(BUILD_TARGET)"
|
|
|
-ifneq ($(SAVED_TARGET),$(BUILD_TARGET))
|
|
|
- $(error "A different target is built earlier. Prune the directory first.")
|
|
|
-endif
|
|
|
- @echo "SAVED_TARGET = $(BUILD_TARGET)" > Makefile.Status
|
|
|
+$(LIB_DIR)/host_endian.h: $(HOST_DIR)/host_endian.h
|
|
|
+ @mkdir -p $(LIB_DIR)
|
|
|
+ cp -f $< $@
|
|
|
|
|
|
.PHONY: $(host_lib) $(graphene_lib) $(pal_lib) $(pal_sec)
|
|
|
|
|
|
-$(graphene_lib): host_endian.h
|
|
|
- $(MAKE) -C ../lib target=$(shell pwd)/.lib/
|
|
|
-
|
|
|
-host_endian.h: host/$(PAL_HOST)/host_endian.h
|
|
|
- ln -sf $< $@
|
|
|
+$(graphene_lib): $(LIB_DIR)/host_endian.h
|
|
|
+ $(MAKE) -C ../lib target=$(abspath $(LIB_DIR))/
|
|
|
|
|
|
$(host_lib): $(graphene_lib)
|
|
|
@[ ! -d host/$(PAL_HOST) ] || $(MAKE) -C host/$(PAL_HOST)
|
|
@@ -99,7 +101,8 @@ $(runtime_loader): $(pal_loader)
|
|
|
cp -f $< $@
|
|
|
|
|
|
ifneq ($(pal_lib),)
|
|
|
-$(pal_lib): $(addsuffix .o,$(objs)) $(host_lib) $(graphene_lib) $(pal_lib_deps)
|
|
|
+$(pal_lib): $(addprefix $(OBJ_DIR)/,$(addsuffix .o,$(objs))) \
|
|
|
+ $(host_lib) $(graphene_lib) $(pal_lib_deps)
|
|
|
@echo [ $@ ]
|
|
|
$(LD) $(LDFLAGS) -o $@ $(filter-out %.map %.lds,$^) $(LDFLAGS-suffix)
|
|
|
|
|
@@ -126,15 +129,18 @@ endif
|
|
|
|
|
|
ifneq ($(pal_lib_post),)
|
|
|
$(pal_lib_post): $(pal_lib)
|
|
|
- $(MAKE) -C host/$(PAL_HOST) ../../$@
|
|
|
+ @$(MAKE) -C $(HOST_DIR) $@
|
|
|
endif
|
|
|
|
|
|
-$(pal_static): $(addsuffix .o,$(objs)) $(host_lib) $(graphene_lib)
|
|
|
+$(pal_static): $(addprefix $(OBJ_DIR)/,$(addsuffix .o,$(objs))) \
|
|
|
+ $(host_lib) $(graphene_lib)
|
|
|
@echo [ $@ ]
|
|
|
- $(AR) $(ARFLAGS) $@ $^ $(ARFLAGS-suffix)
|
|
|
+ @$(AR) $(ARFLAGS) $@ $^ $(ARFLAGS-suffix)
|
|
|
|
|
|
-%.asm: %.c $(headers)
|
|
|
- $(CC) $(CFLAGS) $(defs) -c $< -o $<.o
|
|
|
+$(OBJ_DIR)/%.asm: %.c $(headers)
|
|
|
+ @mkdir -p $(OBJ_DIR)
|
|
|
+ @echo [ $@ ]
|
|
|
+ @$(CC) $(CFLAGS) $(defs) -c $< -o $<.o
|
|
|
@objdump -S $<.o > $@
|
|
|
@rm $<.o
|
|
|
|
|
@@ -146,19 +152,18 @@ user_shared_start.o: user_start.S
|
|
|
@echo [ $@ ]
|
|
|
@$(CC) -DSHARED -fPIC -c $< -o $@
|
|
|
|
|
|
-%.o: %.c $(headers)
|
|
|
+$(OBJ_DIR)/%.o: %.c $(headers)
|
|
|
+ @mkdir -p $(OBJ_DIR)
|
|
|
@echo [ $@ ]
|
|
|
@$(CC) $(CFLAGS) $(defs) -c $< -o $@ $(CFLAGS-suffix)
|
|
|
|
|
|
-%.e: %.c $(headers)
|
|
|
+$(OBJ_DIR)/%.e: %.c $(headers)
|
|
|
+ @mkdir -p $(OBJ_DIR)
|
|
|
@echo [ $@ ]
|
|
|
@$(CC) $(CFLAGS) $(defs) -E $< -o $@ $(CFLAGS-suffix)
|
|
|
|
|
|
.PHONY: clean
|
|
|
clean:
|
|
|
-ifneq ($(SAVED_OS),$(PAL_HOST))
|
|
|
- $(MAKE) clean PAL_HOST=$(SAVED_OS)
|
|
|
-endif
|
|
|
- rm -rf $(addsuffix .o,$(objs)) $(files_to_build) host_endian.h .lib Makefile.Status
|
|
|
- @[ ! -d host/$(PAL_HOST) ] || $(MAKE) -C host/$(PAL_HOST) clean
|
|
|
+ rm -rf $(LIB_DIR) $(OBJ_DIR)
|
|
|
+ @[ ! -d $(HOST_DIR) ] || $(MAKE) -C $(HOST_DIR) clean
|
|
|
@[ ! -d security/$(PAL_HOST) ] || $(MAKE) -C security/$(PAL_HOST) clean
|