# rules for rt # -- rt1 initialization -- RT1 := $(OBJ_DIR)/rt/rt1.a RTI := $(OBJ_DIR)/rt/rti.o # -- rt2 = user program -- RTN := $(OBJ_DIR)/rt/rtn.o RT3 := $(OBJ_DIR)/rt/rt3.a # -- rt3 finalization -- RUNTIME := $(RT1) $(RTI) $(RTN) $(RT3) RT1_SRC := \ $(SYS_DIR)/rt/env.c\ $(SYS_DIR)/rt/context.c\ $(SYS_DIR)/rt/boot.c\ $(SYS_DIR)/rt/thunk.c RT1_OBJ := $(filter %.o, $(RT1_SRC:.c=.o)) RT1_OBJ := $(patsubst $(SYS_DIR)/rt/%, $(OBJ_DIR)/rt/%, $(RT1_OBJ)) RT3_SRC := \ $(SYS_DIR)/rt/stack.c\ $(SYS_DIR)/rt/dummy.c\ $(SYS_DIR)/rt/atexit.c\ $(SYS_DIR)/rt/exit.c RT3_OBJ := $(filter %.o, $(RT3_SRC:.c=.o)) RT3_OBJ := $(patsubst $(SYS_DIR)/rt/%, $(OBJ_DIR)/rt/%, $(RT3_OBJ)) $(RT1_OBJ): TCFLAGS=-fno-builtin -fno-stack-protector $(RT1): $(SYS_DIR)/rt/$(ARCH)/rt1.s $(RT1_OBJ) @echo "AS rt1.a" @$(AS) $(AFLAGS) -o $(OBJ_DIR)/rt/rt1.o -c $< @$(AR) crs $@ $(OBJ_DIR)/rt/rt1.o $(RT1_OBJ) $(RTI): $(SYS_DIR)/rt/$(ARCH)/rti.s $(ASSEMBLE) $(RTN): $(SYS_DIR)/rt/$(ARCH)/rtn.s $(ASSEMBLE) $(OBJ_DIR)/rt/%.o: $(SYS_DIR)/rt/%.c $(COMPILE) $(RT3): $(RT3_OBJ) $(ARCHIVE) # rules for system layer SYS := $(OBJ_DIR)/sys/sys.a SYS_SRCS := $(sort $(wildcard $(SYS_DIR)/$(OS)/src/*.c)) SYS_OBJS := $(filter %.o, $(SYS_SRCS:.c=.o)) SYS_OBJS := $(patsubst $(SYS_DIR)/$(OS)/src/%, $(OBJ_DIR)/$(SYS_DIR)/%, $(SYS_OBJS)) # rules for kernel interface $(OBJ_DIR)/sys/%.o: TINCS = -I $(SYS_DIR)/$(OS)/$(ARCH) $(OBJ_DIR)/sys/%.o: $(SYS_DIR)/$(OS)/src/%.c $(COMPILE) $(SYS): $(SYS_OBJS) $(ARCHIVE)