Skip to content

Commit 81db242

Browse files
shiqinggwenlingz
authored andcommitted
hv: enhance Makefile to compile debug/release into 2 libraries
enhance Makefile to compile debug/release into 2 libraries v1 -> v2: * auto make all the libraries Tracked-On: #861 Signed-off-by: Shiqing Gao <shiqing.gao@intel.com>
1 parent 19b35f9 commit 81db242

File tree

3 files changed

+81
-7
lines changed

3 files changed

+81
-7
lines changed

hypervisor/Makefile

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,16 @@ STACK_PROTECTOR := 1
1717
BASEDIR := $(shell pwd)
1818
HV_OBJDIR ?= $(CURDIR)/build
1919
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
2024

2125
# initialize the flags we used
2226
CFLAGS :=
2327
ASFLAGS :=
2428
LDFLAGS :=
29+
ARFLAGS :=
2530
ARCH_CFLAGS :=
2631
ARCH_ASFLAGS :=
2732
ARCH_ARFLAGS :=
@@ -37,6 +42,8 @@ include scripts/kconfig/kconfig.mk
3742
LD_IN_TOOL = scripts/genld.sh
3843
BASH = $(shell which bash)
3944

45+
ARFLAGS += crs
46+
4047
CFLAGS += -Wall -W
4148
CFLAGS += -ffunction-sections -fdata-sections
4249
CFLAGS += -fshort-wchar -ffreestanding
@@ -110,8 +117,10 @@ AR ?= ar
110117
LD ?= ld
111118
OBJCOPY ?= objcopy
112119

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
115124

116125
C_SRCS += boot/acpi.c
117126
C_SRCS += boot/dmar_parse.c
@@ -222,10 +231,7 @@ endif
222231

223232
C_OBJS := $(patsubst %.c,$(HV_OBJDIR)/%.o,$(C_SRCS))
224233
ifneq ($(CONFIG_RELEASE),y)
225-
C_OBJS += $(patsubst %.c,$(HV_OBJDIR)/%.o,$(D_SRCS))
226234
CFLAGS += -DHV_DEBUG -DPROFILING_ON
227-
else
228-
C_OBJS += $(patsubst %.c,$(HV_OBJDIR)/%.o,$(R_SRCS))
229235
endif
230236
S_OBJS := $(patsubst %.S,$(HV_OBJDIR)/%.o,$(S_SRCS))
231237

@@ -261,7 +267,7 @@ else
261267
endif
262268

263269
.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
265271

266272
ifeq ($(CONFIG_PLATFORM), uefi)
267273
all: efi
@@ -279,6 +285,24 @@ install: $(HV_OBJDIR)/$(HV_FILE).32.out
279285
install -D $(HV_OBJDIR)/$(HV_FILE).32.out $(DESTDIR)/usr/lib/acrn/$(HV_FILE).sbl
280286
endif
281287

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+
282306
$(HV_OBJDIR)/$(HV_FILE).32.out: $(HV_OBJDIR)/$(HV_FILE).out
283307
$(OBJCOPY) -S --section-alignment=0x1000 -O elf32-i386 $< $@
284308

@@ -287,7 +311,7 @@ $(HV_OBJDIR)/$(HV_FILE).bin: $(HV_OBJDIR)/$(HV_FILE).out
287311

288312
$(HV_OBJDIR)/$(HV_FILE).out: $(C_OBJS) $(S_OBJS)
289313
${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)
291315

292316
.PHONY: clean
293317
clean:

hypervisor/debug/Makefile

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#
2+
# ACRN Hypervisor Static Library for Debug Features
3+
#
4+
5+
FILE_PATH := $(dir $(MKFL_NAME))
6+
SRCS += $(wildcard $(FILE_PATH)/*.c)
7+
OBJS += $(patsubst %.c,$(HV_OBJDIR)/%.o,$(SRCS))
8+
9+
.PHONY: default
10+
default: lib
11+
12+
ifneq ($(CONFIG_RELEASE),y)
13+
lib: $(OBJS)
14+
$(AR) $(ARFLAGS) $(LIB_DEBUG) $(OBJS)
15+
endif
16+
17+
.PHONY: clean
18+
clean:
19+
rm -f $(OBJS)
20+
21+
-include $(OBJS:.o=.d)
22+
23+
$(HV_OBJDIR)/%.o: %.c
24+
[ ! -e $@ ] && mkdir -p $(dir $@); \
25+
$(CC) $(patsubst %, -I%, $(INCLUDE_PATH)) -I. -c $(CFLAGS) $(ARCH_CFLAGS) $< -o $@ -MMD -MT $@

hypervisor/release/Makefile

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#
2+
# ACRN Hypervisor Static Library for Release Version
3+
#
4+
5+
FILE_PATH := $(dir $(MKFL_NAME))
6+
SRCS += $(wildcard $(FILE_PATH)/*.c)
7+
OBJS += $(patsubst %.c,$(HV_OBJDIR)/%.o,$(SRCS))
8+
9+
.PHONY: default
10+
default: lib
11+
12+
ifeq ($(CONFIG_RELEASE),y)
13+
lib: $(OBJS)
14+
$(AR) $(ARFLAGS) $(LIB_RELEASE) $(OBJS)
15+
endif
16+
17+
.PHONY: clean
18+
clean:
19+
rm -f $(OBJS)
20+
21+
-include $(OBJS:.o=.d)
22+
23+
$(HV_OBJDIR)/%.o: %.c
24+
[ ! -e $@ ] && mkdir -p $(dir $@); \
25+
$(CC) $(patsubst %, -I%, $(INCLUDE_PATH)) -I. -c $(CFLAGS) $(ARCH_CFLAGS) $< -o $@ -MMD -MT $@

0 commit comments

Comments
 (0)