X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/29891c3ccec4f1d28e0440d87ea2e2708377d2ee..76175f34b86c84044cd2b944a581575ade056f7b:/lunaix-os/usr/makefile diff --git a/lunaix-os/usr/makefile b/lunaix-os/usr/makefile index 4dc8d0d..49036fc 100644 --- a/lunaix-os/usr/makefile +++ b/lunaix-os/usr/makefile @@ -1,71 +1,91 @@ include utils.mkinc include toolchain.mkinc -task := all +LCONFIG_FLAGS := --quiet + +include lunabuild.mkinc + +include $(lbuild_mkinc) -# TODO make this use LBuild -CFLAGS += -m32 -ffreestanding -fno-pie -LDFLAGS += -m32 -nostdlib -nolibc -z noexecstack -no-pie -Wl,--build-id=none +ifndef ARCH +$(error ARCH is not set) +endif + +task := all 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 +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 +LIBC_INCLUDE := $(build_dir)/usr/includes + +mkapp-list := $(addprefix app-, $(shell cat apps.list)) +mkexec-list := $(addprefix $(build_dir)/bin/, $(_LBUILD_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)/includes: - @mkdir -p $(build_dir)/includes +$(LIBC_INCLUDE): + @mkdir -p $(LIBC_INCLUDE) +# LibC 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) -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)) +$(uexec_ld): $(uexec_ld)x + @$(CC) -include $(lbuild_config_h) -x c -P -E $< -o $@ -export LD_SCRIPT := $(ldscript) +# Application (with standalone makefile) +export LD_SCRIPT := $(uexec_ld) export LIBC := $(libc) -app-%: +export $(common_param) +app-%: $(uexec_ld) $(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 $@ -$(build_dir)/bin/%: exec_%.o +$(build_dir)/bin/%: exec_%.o $(uexec_ld) $(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: INCLUDES += $(build_dir)/includes +exec: INCLUDES += $(LIBC_INCLUDE) exec: $(mkexec-list) + +# General recipes clean: task := clean clean: $(mkapp-list) - @rm -rf $(build_dir) + @rm -rf $(build_dir) $(lbuild_dir) $(uexec_ld) @$(MAKE) $(MKFLAGS) -C libc/ $(task) +.NOTPARALLEL: all: task := all all: $(build_dir)/$(libc_name).a exec app \ No newline at end of file