git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rewrite the lunabuild toolchain with enhanced feature (#60)
[lunaix-os.git]
/
lunaix-os
/
usr
/
makefile
diff --git
a/lunaix-os/usr/makefile
b/lunaix-os/usr/makefile
index e49d7d05ee68ffb5ef40046a86fa8a35c7112511..8fa1c316e75ba6d076e9e4ab4546f594849d4322 100644
(file)
--- a/
lunaix-os/usr/makefile
+++ b/
lunaix-os/usr/makefile
@@
-1,6
+1,17
@@
include utils.mkinc
include toolchain.mkinc
include utils.mkinc
include toolchain.mkinc
+include lunabuild.mkinc
+
+include $(lbuild_mkinc)
+
+ifndef ARCH
+$(error ARCH is not set)
+endif
+
+CFLAGS += $(BUILD_CFLAGS)
+LDFLAGS += $(BUILD_LDFLAGS)
+
task := all
sys_include := $(CURDIR)/includes
task := all
sys_include := $(CURDIR)/includes
@@
-8,60
+19,74
@@
build_dir := $(CURDIR)/build
libc_name := liblunac
libc_files := $(libc_name).a
libc := $(addprefix $(build_dir)/lib/,$(libc_files))
libc_name := liblunac
libc_files := $(libc_name).a
libc := $(addprefix $(build_dir)/lib/,$(libc_files))
-ldscript := $(CURDIR)/link-usr.ld
-common_param := CC AR INCLUDES BUILD_DIR BUILD_NAME CFLAGS LDFLAGS
+common_param := CC AR INCLUDES BUILD_DIR BUILD_NAME\
+ CFLAGS LDFLAGS ARCH LBUILD LIBC_INCLUDE
INCLUDES := $(sys_include)
BUILD_DIR := $(build_dir)
BUILD_NAME := $(libc_name).a
INCLUDES := $(sys_include)
BUILD_DIR := $(build_dir)
BUILD_NAME := $(libc_name).a
+LIBC_INCLUDE := $(build_dir)/usr/includes
+
+mkapp-list := $(addprefix app-, $(shell cat apps.list))
+mkexec-list := $(addprefix $(build_dir)/bin/, $(BUILD_SRCS))
+
+uexec_ld := $(CURDIR)/uexec.ld
+
+# Directory structure prerequisites
$(build_dir)/bin:
@mkdir -p $(build_dir)/bin
$(build_dir)/lib:
@mkdir -p $(build_dir)/lib
$(build_dir)/bin:
@mkdir -p $(build_dir)/bin
$(build_dir)/lib:
@mkdir -p $(build_dir)/lib
-$(
build_dir)/includes
:
- @mkdir -p $(
build_dir)/includes
+$(
LIBC_INCLUDE)
:
+ @mkdir -p $(
LIBC_INCLUDE)
+# LibC
export $(common_param)
export $(common_param)
-$(build_dir)/$(libc_name).a: $(build_dir)/bin $(build_dir)/lib $(build_dir)/includes
+$(build_dir)/$(libc_name).a: $(build_dir)/bin \
+ $(build_dir)/lib $(LIBC_INCLUDE)
$(call status,TASK,$(BUILD_NAME))
@$(MAKE) $(MKFLAGS) -C libc/ $(task)
$(call status,TASK,$(BUILD_NAME))
@$(MAKE) $(MKFLAGS) -C libc/ $(task)
-app-list = $(shell cat apps.list)
-exec-list = $(shell cat execs.list)
+$(uexec_ld): $(uexec_ld)x
+ @$(CC) $(CFLAGS) -x c -P -E $< -o $@
-mkapp-list := $(addprefix app-, $(app-list))
-mkexec-list := $(addprefix $(build_dir)/bin/, $(exec-list))
-
-export LD_SCRIPT := $(ldscript)
+# Application (with standalone makefile)
+export LD_SCRIPT := $(uexec_ld)
export LIBC := $(libc)
export LIBC := $(libc)
-app-%:
+export $(common_param)
+app-%: $(uexec_ld)
$(call status,TASK,$*)
@$(MAKE) $(MKFLAGS) -C $* $(task) BUILD_NAME="$*"
$(call status,TASK,$*)
@$(MAKE) $(MKFLAGS) -C $* $(task) BUILD_NAME="$*"
+app: task := all
+app: INCLUDES += $(LIBC_INCLUDE)
+app: $(mkapp-list)
+
+
+# Programs (single file)
exec_%.o: %.c
$(call status,CC,$<)
@$(CC) $(CFLAGS) $(addprefix -I,$(INCLUDES)) -c $< -o $@
exec_%.o: %.c
$(call status,CC,$<)
@$(CC) $(CFLAGS) $(addprefix -I,$(INCLUDES)) -c $< -o $@
-$(build_dir)/bin/%: exec_%.o
+$(build_dir)/bin/%: exec_%.o
$(uexec_ld)
$(call status,LD,$(@F))
$(call status,LD,$(@F))
- @$(CC) -T $(ldscript) -o $@ $< $(libc) $(LDFLAGS)
-
-app: task := all
-app: INCLUDES += $(build_dir)/includes
-app: $(mkapp-list)
+ @$(CC) -T $(uexec_ld) -o $@ $< $(libc) $(LDFLAGS)
exec: task := all
exec: task := all
-exec: INCLUDES += $(
build_dir)/includes
+exec: INCLUDES += $(
LIBC_INCLUDE)
exec: $(mkexec-list)
exec: $(mkexec-list)
+
+# General recipes
clean: task := clean
clean: $(mkapp-list)
clean: task := clean
clean: $(mkapp-list)
- @rm -rf $(build_dir)
+ @rm -rf $(build_dir)
$(lbuild_dir) $(uexec_ld)
@$(MAKE) $(MKFLAGS) -C libc/ $(task)
@$(MAKE) $(MKFLAGS) -C libc/ $(task)
+.NOTPARALLEL:
all: task := all
all: $(build_dir)/$(libc_name).a exec app
\ No newline at end of file
all: task := all
all: $(build_dir)/$(libc_name).a exec app
\ No newline at end of file