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