@@ -17,11 +17,16 @@ STACK_PROTECTOR := 1
17
17
BASEDIR := $(shell pwd)
18
18
HV_OBJDIR ?= $(CURDIR ) /build
19
19
HV_FILE := acrn
20
+ SUB_MAKEFILES := $(wildcard * /Makefile)
21
+
22
+ LIB_DEBUG = $(HV_OBJDIR ) /debug/libdebug.a
23
+ LIB_RELEASE = $(HV_OBJDIR ) /release/librelease.a
20
24
21
25
# initialize the flags we used
22
26
CFLAGS :=
23
27
ASFLAGS :=
24
28
LDFLAGS :=
29
+ ARFLAGS :=
25
30
ARCH_CFLAGS :=
26
31
ARCH_ASFLAGS :=
27
32
ARCH_ARFLAGS :=
@@ -37,6 +42,8 @@ include scripts/kconfig/kconfig.mk
37
42
LD_IN_TOOL = scripts/genld.sh
38
43
BASH = $(shell which bash)
39
44
45
+ ARFLAGS += crs
46
+
40
47
CFLAGS += -Wall -W
41
48
CFLAGS += -ffunction-sections -fdata-sections
42
49
CFLAGS += -fshort-wchar -ffreestanding
@@ -110,8 +117,10 @@ AR ?= ar
110
117
LD ?= ld
111
118
OBJCOPY ?= objcopy
112
119
113
- D_SRCS += $(wildcard debug/* .c)
114
- R_SRCS += $(wildcard release/* .c)
120
+ export CC AS AR LD OBJCOPY
121
+ export CFLAGS ASFLAGS ARFLAGS LDFLAGS ARCH_CFLAGS ARCH_ASFLAGS ARCH_ARFLAGS ARCH_LDFLAGS
122
+ export HV_OBJDIR CONFIG_RELEASE INCLUDE_PATH
123
+ export LIB_DEBUG LIB_RELEASE
115
124
116
125
C_SRCS += boot/acpi.c
117
126
C_SRCS += boot/dmar_parse.c
@@ -222,10 +231,7 @@ endif
222
231
223
232
C_OBJS := $(patsubst % .c,$(HV_OBJDIR ) /% .o,$(C_SRCS ) )
224
233
ifneq ($(CONFIG_RELEASE ) ,y)
225
- C_OBJS += $(patsubst % .c,$(HV_OBJDIR ) /% .o,$(D_SRCS ) )
226
234
CFLAGS += -DHV_DEBUG -DPROFILING_ON
227
- else
228
- C_OBJS += $(patsubst % .c,$(HV_OBJDIR ) /% .o,$(R_SRCS ) )
229
235
endif
230
236
S_OBJS := $(patsubst % .S,$(HV_OBJDIR ) /% .o,$(S_SRCS ) )
231
237
261
267
endif
262
268
263
269
.PHONY : all
264
- all : $(HV_OBJDIR ) /$(HV_FILE ) .32.out $(HV_OBJDIR ) /$(HV_FILE ) .bin
270
+ all : lib $(HV_OBJDIR ) /$(HV_FILE ) .32.out $(HV_OBJDIR ) /$(HV_FILE ) .bin
265
271
266
272
ifeq ($(CONFIG_PLATFORM ) , uefi)
267
273
all : efi
@@ -279,6 +285,24 @@ install: $(HV_OBJDIR)/$(HV_FILE).32.out
279
285
install -D $(HV_OBJDIR ) /$(HV_FILE ) .32.out $(DESTDIR ) /usr/lib/acrn/$(HV_FILE ) .sbl
280
286
endif
281
287
288
+ .PHONY : header
289
+ header : $(VERSION ) $(HV_OBJDIR ) /$(HV_CONFIG_H ) $(TARGET_ACPI_INFO_HEADER )
290
+
291
+ .PHONY : lib
292
+ lib : $(SUB_MAKEFILES )
293
+
294
+ .PHONY : $(SUB_MAKEFILES )
295
+ $(SUB_MAKEFILES ) : header
296
+ for Makefile in $( SUB_MAKEFILES) ; do \
297
+ $(MAKE ) -f $$ Makefile MKFL_NAME=$$ Makefile; \
298
+ done
299
+
300
+ ifneq ($(CONFIG_RELEASE ) ,y)
301
+ LIB_FLAGS += $(LIB_DEBUG )
302
+ else
303
+ LIB_FLAGS += $(LIB_RELEASE )
304
+ endif
305
+
282
306
$(HV_OBJDIR ) /$(HV_FILE ) .32.out : $(HV_OBJDIR ) /$(HV_FILE ) .out
283
307
$(OBJCOPY ) -S --section-alignment=0x1000 -O elf32-i386 $< $@
284
308
@@ -287,7 +311,7 @@ $(HV_OBJDIR)/$(HV_FILE).bin: $(HV_OBJDIR)/$(HV_FILE).out
287
311
288
312
$(HV_OBJDIR ) /$(HV_FILE ) .out : $(C_OBJS ) $(S_OBJS )
289
313
${BASH} ${LD_IN_TOOL} $(ARCH_LDSCRIPT_IN ) $(ARCH_LDSCRIPT ) ${HV_OBJDIR} /.config
290
- $(CC ) -Wl,-Map=$(HV_OBJDIR ) /$(HV_FILE ) .map -o $@ $(LDFLAGS ) $(ARCH_LDFLAGS ) -T$(ARCH_LDSCRIPT ) $^
314
+ $(CC ) -Wl,-Map=$(HV_OBJDIR ) /$(HV_FILE ) .map -o $@ $(LDFLAGS ) $(ARCH_LDFLAGS ) -T$(ARCH_LDSCRIPT ) $^ $( LIB_FLAGS )
291
315
292
316
.PHONY : clean
293
317
clean :
0 commit comments