3
3
# ############################
4
4
.PHONY : all clean link
5
5
6
-
7
-
8
6
# Git revision number
9
7
GIT_REV != git rev-parse --short HEAD 2> /dev/null
10
8
BUILD := build
11
- TARGETS != find . -maxdepth 1 -type f -name '*.mk'
12
- TARGETS != echo $(TARGETS) | sed -e 's/.mk//' -e 's/.\/target-//'
13
9
14
10
# Documentation
15
11
MDSOURCES != find docs -type f -name '*.md'
@@ -20,75 +16,55 @@ MDFLAGS := --from gfm --to html --standalone \
20
16
HTMLDOCS := $(patsubst docs/% .md,$(HTMLDIR ) /% .html,$(MDSOURCES ) )
21
17
HTMLDIRS := $(shell cd docs && find -type d | tr '\n' ' ')
22
18
23
-
24
- # Platform Agnostic Source Code
25
- CSOURCES_TI != find src/core src/libc src/adt -type f -name '*.c'
26
-
27
- # Third Party Source Code
28
- CSOURCES_TP != find src/third_party -type f -name '*.c'
29
-
30
- CSOURCES_TI := $(CSOURCES_TI ) $(CSOURCES_TP )
31
-
32
- # Test Source Code
33
- TESTSOURCES != find src/test/core src/test/libc src/test/adt -type f -name '*.c'
34
-
35
19
INCLUDEDIR != find src -type d -name "include" -printf "-I%p "
36
20
37
- all :
38
-
39
- ifndef TARGET
40
- # Not a fatal error if clean or doc
41
- ifeq($(MAKECMDGOALS),clean)
42
- else ifeq ($(MAKECMDGOALS),doc)
43
- else
44
- $(error TARGET is not set, availible targets: $(TARGETS))
45
- endif
46
-
47
- TARGETL != echo $(TARGET ) | tr '[ :upper:]' '[:lower:]'
48
-
49
- ifdef TARGET
50
- BUILD := build-$(TARGETL)
51
- -include target-$(TARGETL ) .mk
52
- endif
53
-
54
- COBJECTS := $(patsubst % .c,$(BUILD ) /% .c.o,$(CSOURCES ) )
55
- SOBJECTS := $(patsubst % .s,$(BUILD ) /% .s.o,$(SSOURCES ) )
56
- TESTOBJECTS := $(patsubst % .c,$(BUILD ) /% .c.o,$(TESTSOURCES ) )
57
- SRCDIR != find src/ -type d | tr '\n' ' '
21
+ include .config
22
+ TARGETL != echo $(CONFIG_TARGET ) | tr '[ :upper:]' '[:lower:]'
23
+ BUILD := build-$(TARGETL )
24
+ include $(shell pwd) /scripts/target-$(TARGETL ) .mk
58
25
59
26
WARNINGS := -Wall -Wextra -Wno-unused-parameter
60
27
DEFS := $(INCLUDEDIR ) -fbuiltin -DGITREV="\"$(GIT_REV ) \""
61
28
29
+ HELPER_MK := $(shell pwd) /scripts/helper.mk
30
+ MK_FLAGS := --no-print-directory -s
31
+ SUBDIRS := $(shell find . -name Makefile)
32
+ SUBDIRS := $(patsubst % Makefile,% ,$(SUBDIRS ) )
33
+ SUBDIRS := $(patsubst % ./,% ,$(SUBDIRS ) )
34
+ OBJECTS := $(shell for dir in $(SUBDIRS ) ; do\
35
+ TOP_DIR=`pwd` $(MAKE ) $(MK_FLAGS ) -f $(HELPER_MK ) -C $$dir;\
36
+ done;)
37
+
38
+ ifeq ($(CONFIG_TESTING ) ,y)
39
+ DEFS += -DTEST_HARNESS=1
40
+ BIN := test-$(BIN)
41
+ endif
62
42
43
+ OBJECTS := $(patsubst % .o,$(BUILD ) /% .o,$(OBJECTS ) )
44
+ SRCDIR != find src/ -type d | tr '\n' ' '
63
45
64
- all : test link doc
46
+ all : link doc
65
47
66
48
# C files are compiled universally the same, assembler targets are defined in
67
49
# The target specific makefiles
68
50
$(BUILD ) /% .c.o : % .c Makefile | setup_builddir
69
51
@printf " \033[1mCC\033[0m $<\n"
70
52
@$(CC ) -c $< -o $@ $(DEFS ) $(TARGET_DEFS ) $(WARNINGS )
71
53
72
- link : $(SOBJECTS ) $( COBJECTS )
54
+ link : $(OBJECTS )
73
55
@printf " \033[1mLINK\033[0m $@ \n"
74
56
@$(CC ) $(DEFS ) $(WARNINGS ) $(LDFLAGS ) $(TARGET_LDFLAGS ) \
75
- -o bin/$(BIN ) $(SOBJECTS ) $( COBJECTS )
57
+ -o bin/$(BIN ) $(OBJECTS )
76
58
77
59
setup_builddir :
78
60
@mkdir -p $(BUILD )
79
61
@cd $(BUILD ) && mkdir -p ` echo $( SRCDIR) `
80
62
81
63
clean :
82
64
@printf " \033[1mCLEAN\033[0m \n"
83
- @find $( BUILD ) -type f -name ' *.o ' -exec rm {} +
65
+ @find . -type d -name " build* " -exec rm -rf {} +
84
66
@find $(HTMLDIR ) -type f -exec rm {} +
85
67
86
- test : DEFS += -DTEST_HARNESS=1
87
- test : $(SOBJECTS ) $(COBJECTS ) $(TESTOBJECTS )
88
- @printf " \033[1mLINK TEST\033[0m $0 \n"
89
- @$(CC ) $(DEFS ) $(WARNINGS ) $(LDFLAGS ) $(TARGET_LDFLAGS ) \
90
- -o bin/test-$(BIN ) $(SOBJECTS ) $(COBJECTS ) $(TESTOBJECTS )
91
-
92
68
doc_setup :
93
69
@mkdir -p $(HTMLDIR )
94
70
@cd $(HTMLDIR ) && mkdir -p $(HTMLDIRS )
@@ -98,3 +74,6 @@ doc: doc_setup | $(HTMLDOCS)
98
74
html/% .html : docs/% .md
99
75
@printf " \033[1mHTML\033[0m $<\n"
100
76
@$(MARKDOWN ) $(MDFLAGS ) $< --output $@
77
+
78
+ menuconfig :
79
+ @kconfig-mconf Kconfig
0 commit comments