1# Copyright (c) 2023-2024 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13 14BOUNDS_CHECK_DIR := $(abspath ../../../third_party/bounds_checking_function) 15INCLUDES = -I$(PWD) -I$(BOUNDS_CHECK_DIR)/include 16 17CODEGEN_SOURCE_DIR := $(PWD)/codegen 18CODEGEN_SOURCE := $(wildcard $(CODEGEN_SOURCE_DIR)/*.cpp) 19CODEGEN_OBJ_DIR := $(BUILD_DIR)/codegen 20CODEGEN_OBJS := $(addprefix $(CODEGEN_OBJ_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SOURCE)))) 21 22METADATA_SOURCE_DIR := $(PWD)/metadata 23METADATA_SOURCE := $(wildcard $(METADATA_SOURCE_DIR)/*.cpp) 24METADATA_OBJ_DIR := $(BUILD_DIR)/metadata 25METADATA_OBJS := $(addprefix $(METADATA_OBJ_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(METADATA_SOURCE)))) 26 27PARSER_SOURCE_DIR := $(PWD)/parser 28PARSER_SOURCE := $(wildcard $(PARSER_SOURCE_DIR)/*.cpp) 29PARSER_OBJS_DIR := $(BUILD_DIR)/parser 30PARSER_OBJS := $(addprefix $(PARSER_OBJS_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(PARSER_SOURCE)))) 31 32AST_SOURCE_DIR := $(PWD)/ast 33AST_SOURCE := $(wildcard $(AST_SOURCE_DIR)/*.cpp) 34AST_OBJS_DIR := $(BUILD_DIR)/ast 35AST_OBJS := $(addprefix $(AST_OBJS_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(AST_SOURCE)))) 36 37UTIL_SOURCE_DIR := $(PWD)/util 38UTIL_SOURCE := $(wildcard $(UTIL_SOURCE_DIR)/*.cpp) 39UTIL_OBJS_DIR := $(BUILD_DIR)/util 40UTIL_OBJS := $(addprefix $(UTIL_OBJS_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(UTIL_SOURCE)))) 41 42BOUNDS_CHECK_SOURCE_DIR := $(abspath ../../../third_party/bounds_checking_function/src) 43BOUNDS_CHECK_SOURCE := $(wildcard $(BOUNDS_CHECK_SOURCE_DIR)/*.c) 44BOUNDS_CHECK_OBJS_DIR := $(BUILD_DIR)/bounds_checking_function 45BOUNDS_CHECK_OBJS := $(addprefix $(BOUNDS_CHECK_OBJS_DIR)/, $(patsubst %.c, %.o, $(notdir $(BOUNDS_CHECK_SOURCE)))) 46 47MAIN_SOURCE := $(wildcard *.cpp) 48MAIN_OBJS := $(addprefix $(BUILD_DIR)/, $(patsubst %.cpp, %.o, $(MAIN_SOURCE))) 49 50all:$(TARGET) 51 52$(TARGET) : $(BOUNDS_CHECK_OBJS) $(UTIL_OBJS) $(HASH_OBJS) $(AST_OBJS) $(PARSER_OBJS) $(CODEGEN_OBJS) $(METADATA_OBJS) $(MAIN_OBJS) 53 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) $^ -o $@ 54 $(Q) echo $(TARGET):build successful. 55 56$(BUILD_DIR)/%.o : %.cpp 57 $(Q) mkdir -p $(BUILD_DIR) 58 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 59 60$(CODEGEN_OBJ_DIR)/%.o : $(CODEGEN_SOURCE_DIR)/%.cpp 61 $(Q) mkdir -p $(CODEGEN_OBJ_DIR) 62 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 63 64$(METADATA_OBJ_DIR)/%.o : $(METADATA_SOURCE_DIR)/%.cpp 65 $(Q) mkdir -p $(METADATA_OBJ_DIR) 66 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 67 68$(PARSER_OBJS_DIR)/%.o : $(PARSER_SOURCE_DIR)/%.cpp 69 $(Q) mkdir -p $(PARSER_OBJS_DIR) 70 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 71 72$(AST_OBJS_DIR)/%.o : $(AST_SOURCE_DIR)/%.cpp 73 $(Q) mkdir -p $(AST_OBJS_DIR) 74 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 75 76$(UTIL_OBJS_DIR)/%.o : $(UTIL_SOURCE_DIR)/%.cpp 77 $(Q) mkdir -p $(UTIL_OBJS_DIR) 78 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 79 80$(BOUNDS_CHECK_OBJS_DIR)/%.o : $(BOUNDS_CHECK_SOURCE_DIR)/%.c 81 $(Q) mkdir -p $(BOUNDS_CHECK_OBJS_DIR) 82 $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ 83 84clean: 85 $(Q) rm -rf $(TARGET) $(BUILD_DIR) 86 87.PHONY:all clean