2023-12-20 16:20:36 +00:00
|
|
|
#***************************************************************************************
|
|
|
|
# Copyright (c) 2014-2022 Zihao Yu, Nanjing University
|
|
|
|
#
|
|
|
|
# NEMU is licensed under Mulan PSL v2.
|
|
|
|
# You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
|
|
# You may obtain a copy of Mulan PSL v2 at:
|
|
|
|
# http://license.coscl.org.cn/MulanPSL2
|
|
|
|
#
|
|
|
|
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
|
|
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
|
|
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
|
|
#
|
|
|
|
# See the Mulan PSL v2 for more details.
|
|
|
|
#**************************************************************************************/
|
|
|
|
|
|
|
|
# Sanity check
|
|
|
|
ifeq ($(wildcard $(NEMU_HOME)/src/nemu-main.c),)
|
|
|
|
$(error NEMU_HOME=$(NEMU_HOME) is not a NEMU repo)
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Include variables and rules generated by menuconfig
|
|
|
|
-include $(NEMU_HOME)/include/config/auto.conf
|
|
|
|
-include $(NEMU_HOME)/include/config/auto.conf.cmd
|
|
|
|
|
|
|
|
remove_quote = $(patsubst "%",%,$(1))
|
|
|
|
|
|
|
|
# Extract variabls from menuconfig
|
|
|
|
GUEST_ISA ?= $(call remove_quote,$(CONFIG_ISA))
|
|
|
|
ENGINE ?= $(call remove_quote,$(CONFIG_ENGINE))
|
|
|
|
NAME = $(GUEST_ISA)-nemu-$(ENGINE)
|
|
|
|
|
|
|
|
# Include all filelist.mk to merge file lists
|
|
|
|
FILELIST_MK = $(shell find -L ./src -name "filelist.mk")
|
|
|
|
include $(FILELIST_MK)
|
|
|
|
|
|
|
|
# Filter out directories and files in blacklist to obtain the final set of source files
|
|
|
|
DIRS-BLACKLIST-y += $(DIRS-BLACKLIST)
|
|
|
|
SRCS-BLACKLIST-y += $(SRCS-BLACKLIST) $(shell find -L $(DIRS-BLACKLIST-y) -name "*.c")
|
|
|
|
SRCS-y += $(shell find -L $(DIRS-y) -name "*.c")
|
|
|
|
SRCS = $(filter-out $(SRCS-BLACKLIST-y),$(SRCS-y))
|
|
|
|
|
|
|
|
# Extract compiler and options from menuconfig
|
2024-03-03 12:58:29 +00:00
|
|
|
ifneq ($(CONFIG_CC),)
|
2023-12-20 16:20:36 +00:00
|
|
|
CC = $(call remove_quote,$(CONFIG_CC))
|
2024-03-03 12:58:29 +00:00
|
|
|
endif
|
2023-12-20 16:20:36 +00:00
|
|
|
CFLAGS_BUILD += $(call remove_quote,$(CONFIG_CC_OPT))
|
|
|
|
CFLAGS_BUILD += $(if $(CONFIG_CC_LTO),-flto,)
|
|
|
|
CFLAGS_BUILD += $(if $(CONFIG_CC_DEBUG),-Og -ggdb3,)
|
|
|
|
CFLAGS_BUILD += $(if $(CONFIG_CC_ASAN),-fsanitize=address,)
|
|
|
|
CFLAGS_TRACE += -DITRACE_COND=$(if $(CONFIG_ITRACE_COND),$(call remove_quote,$(CONFIG_ITRACE_COND)),true)
|
|
|
|
CFLAGS += $(CFLAGS_BUILD) $(CFLAGS_TRACE) -D__GUEST_ISA__=$(GUEST_ISA)
|
|
|
|
LDFLAGS += $(CFLAGS_BUILD)
|
2024-02-08 12:07:03 +00:00
|
|
|
INC_PATH += $(NEMU_HOME)/src/isa/$(GUEST_ISA)/local-include
|
2023-12-20 16:20:36 +00:00
|
|
|
|
|
|
|
# Include rules for menuconfig
|
|
|
|
include $(NEMU_HOME)/scripts/config.mk
|
|
|
|
|
|
|
|
ifdef CONFIG_TARGET_AM
|
|
|
|
include $(AM_HOME)/Makefile
|
|
|
|
LINKAGE += $(ARCHIVES)
|
|
|
|
else
|
|
|
|
# Include rules to build NEMU
|
|
|
|
include $(NEMU_HOME)/scripts/native.mk
|
|
|
|
endif
|
2024-01-13 02:38:20 +00:00
|
|
|
|
|
|
|
include $(NEMU_HOME)/tests/Makefile
|
2024-03-06 04:50:56 +00:00
|
|
|
unit-tests: TEST_OBJS = $(filter-out $(OBJ_DIR)/src/nemu-main.o, $(OBJS))
|
|
|
|
unit-tests: CFLAGS += $(shell pkg-config --cflags check)
|
|
|
|
unit-tests: LDFLAGS += $(shell pkg-config --libs check)
|
|
|
|
unit-tests: $(TEST_SRCS:%.c=$(OBJ_DIR)/%)
|
2024-01-13 02:38:20 +00:00
|
|
|
|
2024-03-06 04:50:56 +00:00
|
|
|
IMAGES = $(patsubst %.bin, %, $(shell find $(IMAGES_PATH) -type f -name '*.bin'))
|
2024-02-08 12:07:03 +00:00
|
|
|
|
2024-03-06 04:50:56 +00:00
|
|
|
COLOR_RED = \033[1;31m
|
|
|
|
COLOR_GREEN = \033[1;32m
|
|
|
|
COLOR_BLUE = \033[1;34m
|
|
|
|
COLOR_NONE = \033[0m
|
|
|
|
|
|
|
|
RESULT = .result.tmp
|
|
|
|
$(shell > $(RESULT)) # Clear result file
|
|
|
|
|
|
|
|
$(IMAGES): %: %.bin $(BINARY)
|
|
|
|
@echo + TEST $(notdir $<)
|
|
|
|
@$(BINARY) -b $< >/dev/null 2>&1 || printf "\t%14s\n" $(notdir $<) >> $(RESULT)
|
|
|
|
|
|
|
|
integration-tests: $(IMAGES)
|
|
|
|
@printf "$(COLOR_BLUE)INTEGRATION TEST:$(COLOR_NONE)\n\tALL: %s\n\tFAILED: %s\n" $(words $(IMAGES)) $(shell wc -l $(RESULT) | cut -f1 -d' ')
|
|
|
|
@test ! -s $(RESULT) || printf "$(COLOR_RED)FAILED:$(COLOR_NONE)\n"
|
|
|
|
@cat $(RESULT)
|
|
|
|
@test ! -s $(RESULT); \
|
|
|
|
r=$$?; \
|
|
|
|
$(RM) $(RESULT); \
|
|
|
|
test $$r -eq 0
|
|
|
|
|
|
|
|
test: unit-tests integration-tests
|
|
|
|
|
|
|
|
.PHONY: test unit-tests integration-tests
|