1# Copyright (c) 2021 Huawei Device Co., Ltd. 2# 3# HDF is dual licensed: you can use it either under the terms of 4# the GPL, or the BSD license, at your option. 5# See the LICENSE file in the root of this repository for complete details. 6 7BOUNDS_CHECK_DIR:=$(subst /,\, $(abspath ..\..\..\..\..\third_party\bounds_checking_function)) 8INCLUDES:=-I $(PWD) -I $(BOUNDS_CHECK_DIR)\include 9 10CODEGEN_SOURCE_DIR:=$(PWD)\codegen 11CODEGEN_SOURCE:=$(wildcard $(CODEGEN_SOURCE_DIR)/*.cpp) 12CODEGEN_OBJ_DIR:=$(BUILD_DIR)\codegen 13CODEGEN_OBJS:=$(addprefix $(CODEGEN_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SOURCE)))) 14 15PARSER_SOURCE_DIR:=$(PWD)\parser 16PARSER_SOURCE:=$(wildcard $(PARSER_SOURCE_DIR)/*.cpp) 17PARSER_OBJS_DIR:=$(BUILD_DIR)\parser 18PARSER_OBJS:=$(addprefix $(PARSER_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(PARSER_SOURCE)))) 19 20PREPROCESSOR_SOURCE_DIR := $(PWD)\preprocessor 21PREPROCESSOR_SOURCE := $(wildcard $(PREPROCESSOR_SOURCE_DIR)/*.cpp) 22PREPROCESSOR_OBJS_DIR := $(BUILD_DIR)\preprocessor 23PREPROCESSOR_OBJS := $(addprefix $(PREPROCESSOR_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(PREPROCESSOR_SOURCE)))) 24 25LEXER_SOURCE_DIR := $(PWD)\lexer 26LEXER_SOURCE := $(wildcard $(LEXER_SOURCE_DIR)/*.cpp) 27LEXER_OBJS_DIR := $(BUILD_DIR)\lexer 28LEXER_OBJS := $(addprefix $(LEXER_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(LEXER_SOURCE)))) 29 30AST_SOURCE_DIR:=$(PWD)\ast 31AST_SOURCE:=$(wildcard $(AST_SOURCE_DIR)/*.cpp) 32AST_OBJS_DIR:=$(BUILD_DIR)\ast 33AST_OBJS:=$(addprefix $(AST_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(AST_SOURCE)))) 34 35HASH_SOURCE_DIR := $(PWD)\hash 36HASH_SOURCE := $(wildcard $(HASH_SOURCE_DIR)/*.cpp) 37HASH_OBJS_DIR := $(BUILD_DIR)\hash 38HASH_OBJS := $(addprefix $(HASH_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(HASH_SOURCE)))) 39 40UTIL_SOURCE_DIR:=$(PWD)\util 41UTIL_SOURCE:=$(wildcard $(UTIL_SOURCE_DIR)/*.cpp) 42UTIL_OBJS_DIR:=$(BUILD_DIR)\util 43UTIL_OBJS:=$(addprefix $(UTIL_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(UTIL_SOURCE)))) 44 45BOUNDS_CHECK_SOURCE_DIR:=$(subst /,\, $(abspath ..\..\..\..\..\third_party\bounds_checking_function\src)) 46BOUNDS_CHECK_SOURCE:=$(wildcard $(BOUNDS_CHECK_SOURCE_DIR)/*.c) 47BOUNDS_CHECK_OBJS_DIR:=$(BUILD_DIR)\bounds_checking_function 48BOUNDS_CHECK_OBJS:=$(addprefix $(BOUNDS_CHECK_OBJS_DIR)\, $(patsubst %.c, %.o, $(notdir $(BOUNDS_CHECK_SOURCE)))) 49 50MAIN_SOURCE:=$(wildcard *.cpp) 51MAIN_OBJS:=$(addprefix $(BUILD_DIR)\, $(patsubst %.cpp, %.o, $(MAIN_SOURCE))) 52 53all : $(TARGET) 54 55$(TARGET) : $(BOUNDS_CHECK_OBJS) $(UTIL_OBJS) $(HASH_OBJS) $(AST_OBJS) $(LEXER_OBJS) $(PREPROCESSOR_OBJS) $(PARSER_OBJS) $(CODEGEN_OBJS) $(MAIN_OBJS) 56 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) $^ -o $@ 57 $(Q) echo $(TARGET):build successful. 58 59$(BUILD_DIR)\\%.o : %.cpp 60 $(Q) if not exist $(BUILD_DIR) (mkdir $(BUILD_DIR)) 61 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 62 63$(CODEGEN_OBJ_DIR)\\%.o : $(CODEGEN_SOURCE_DIR)\\%.cpp 64 $(Q) if not exist $(CODEGEN_OBJ_DIR) (mkdir $(CODEGEN_OBJ_DIR)) 65 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 66 67$(PARSER_OBJS_DIR)\\%.o : $(PARSER_SOURCE_DIR)\\%.cpp 68 $(Q) if not exist $(PARSER_OBJS_DIR) (mkdir $(PARSER_OBJS_DIR)) 69 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 70 71$(PREPROCESSOR_OBJS_DIR)\\%.o : $(PREPROCESSOR_SOURCE_DIR)\\%.cpp 72 $(Q) if not exist $(PREPROCESSOR_OBJS_DIR) (mkdir $(PREPROCESSOR_OBJS_DIR)) 73 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 74 75$(LEXER_OBJS_DIR)\\%.o : $(LEXER_SOURCE_DIR)\\%.cpp 76 $(Q) if not exist $(LEXER_OBJS_DIR) (mkdir $(LEXER_OBJS_DIR)) 77 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 78 79$(AST_OBJS_DIR)\\%.o : $(AST_SOURCE_DIR)\\%.cpp 80 $(Q) if not exist $(AST_OBJS_DIR) (mkdir $(AST_OBJS_DIR)) 81 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 82 83$(HASH_OBJS_DIR)\\%.o : $(HASH_SOURCE_DIR)\\%.cpp 84 $(Q) if not exist $(HASH_OBJS_DIR) (mkdir $(HASH_OBJS_DIR)) 85 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 86 87$(UTIL_OBJS_DIR)\\%.o : $(UTIL_SOURCE_DIR)\\%.cpp 88 $(Q) if not exist $(UTIL_OBJS_DIR) (mkdir $(UTIL_OBJS_DIR)) 89 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 90 91$(BOUNDS_CHECK_OBJS_DIR)\\%.o : $(BOUNDS_CHECK_SOURCE_DIR)\\%.c 92 $(Q) if not exist $(BOUNDS_CHECK_OBJS_DIR) (mkdir $(BOUNDS_CHECK_OBJS_DIR)) 93 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 94 95clean: 96 $(Q) if exist $(TARGET) (del $(TARGET)) 97 $(Q) if exist $(BUILD_DIR) (rd /s /q $(BUILD_DIR)) 98 99.PHONY:all clean