Introducing LunaBuild to the build flow (#36)
[lunaix-os.git] / lunaix-os / usr / makefile
index e2a98d021d39aa23b9dc612e806599fc986a0fb9..e49d7d05ee68ffb5ef40046a86fa8a35c7112511 100644 (file)
@@ -7,6 +7,8 @@ sys_include := $(CURDIR)/includes
 build_dir := $(CURDIR)/build
 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
 
@@ -28,30 +30,38 @@ $(build_dir)/$(libc_name).a: $(build_dir)/bin $(build_dir)/lib $(build_dir)/incl
        $(call status,TASK,$(BUILD_NAME))
        @$(MAKE) $(MKFLAGS) -C libc/ $(task)
 
-app-list := ls
-app-list += init
-app-list += signal_demo
-app-list += sh
-app-list += cat
-app-list += testp
-app-list += stat
+app-list = $(shell cat apps.list)
+exec-list = $(shell cat execs.list)
 
 mkapp-list := $(addprefix app-, $(app-list))
+mkexec-list := $(addprefix $(build_dir)/bin/, $(exec-list))
 
-export LD_SCRIPT := $(CURDIR)/link-usr.ld
-export LIBC := $(addprefix $(build_dir)/lib/,$(libc_files))
+export LD_SCRIPT := $(ldscript)
+export LIBC := $(libc)
 app-%:
        $(call status,TASK,$*)
        @$(MAKE) $(MKFLAGS) -C $* $(task) BUILD_NAME="$*"
 
+exec_%.o: %.c
+       $(call status,CC,$<)
+       @$(CC) $(CFLAGS) $(addprefix -I,$(INCLUDES)) -c $< -o $@
+
+$(build_dir)/bin/%: exec_%.o
+       $(call status,LD,$(@F))
+       @$(CC) -T $(ldscript) -o $@ $< $(libc) $(LDFLAGS)
+
 app: task := all
 app: INCLUDES += $(build_dir)/includes
 app: $(mkapp-list)
 
+exec: task := all
+exec: INCLUDES += $(build_dir)/includes
+exec: $(mkexec-list)
+
 clean: task := clean
 clean: $(mkapp-list)
        @rm -rf $(build_dir)
        @$(MAKE) $(MKFLAGS) -C libc/ $(task)
 
 all: task := all
-all: $(build_dir)/$(libc_name).a app
\ No newline at end of file
+all: $(build_dir)/$(libc_name).a exec app
\ No newline at end of file