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:=$(subst /,\, $(abspath ..\..\..\..\..\third_party\bounds_checking_function))
15INCLUDES:=-I $(PWD) -I $(BOUNDS_CHECK_DIR)\include
16
17CODEGEN_HDI_SOURCE_DIR := $(PWD)\codegen\HDI
18CODEGEN_HDI_SOURCE := $(wildcard $(CODEGEN_HDI_SOURCE_DIR)/*.cpp)
19CODEGEN_HDI_OBJ_DIR := $(BUILD_DIR)\codegen\HDI
20CODEGEN_HDI_OBJS := $(addprefix $(CODEGEN_HDI_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_HDI_SOURCE))))
21
22CODEGEN_HDITYPE_SOURCE_DIR := $(PWD)\codegen\HDI\type
23CODEGEN_HDITYPE_SOURCE := $(wildcard $(CODEGEN_HDITYPE_SOURCE_DIR)/*.cpp)
24CODEGEN_HDITYPE_OBJ_DIR := $(BUILD_DIR)\codegen\HDI\type
25CODEGEN_HDITYPE_OBJS := $(addprefix $(CODEGEN_HDITYPE_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_HDITYPE_SOURCE))))
26
27CODEGEN_HDIC_SOURCE_DIR := $(PWD)\codegen\HDI\c
28CODEGEN_HDIC_SOURCE := $(wildcard $(CODEGEN_HDIC_SOURCE_DIR)/*.cpp)
29CODEGEN_HDIC_OBJ_DIR := $(BUILD_DIR)\codegen\HDI\c
30CODEGEN_HDIC_OBJS := $(addprefix $(CODEGEN_HDIC_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_HDIC_SOURCE))))
31
32CODEGEN_HDICPP_SOURCE_DIR := $(PWD)\codegen\HDI\cpp
33CODEGEN_HDICPP_SOURCE := $(wildcard $(CODEGEN_HDICPP_SOURCE_DIR)/*.cpp)
34CODEGEN_HDICPP_OBJ_DIR := $(BUILD_DIR)\codegen\HDI\cpp
35CODEGEN_HDICPP_OBJS := $(addprefix $(CODEGEN_HDICPP_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_HDICPP_SOURCE))))
36
37CODEGEN_HDIJAVA_SOURCE_DIR := $(PWD)\codegen\HDI\java
38CODEGEN_HDIJAVA_SOURCE := $(wildcard $(CODEGEN_HDIJAVA_SOURCE_DIR)/*.cpp)
39CODEGEN_HDIJAVA_OBJ_DIR := $(BUILD_DIR)\codegen\HDI\java
40CODEGEN_HDIJAVA_OBJS := $(addprefix $(CODEGEN_HDIJAVA_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_HDIJAVA_SOURCE))))
41
42CODEGEN_SA_SOURCE_DIR := $(PWD)\codegen\SA
43CODEGEN_SA_SOURCE := $(wildcard $(CODEGEN_SA_SOURCE_DIR)/*.cpp)
44CODEGEN_SA_OBJ_DIR := $(BUILD_DIR)\codegen\SA
45CODEGEN_SA_OBJS := $(addprefix $(CODEGEN_SA_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SA_SOURCE))))
46
47CODEGEN_SATYPE_SOURCE_DIR := $(PWD)\codegen\SA\type
48CODEGEN_SATYPE_SOURCE := $(wildcard $(CODEGEN_SATYPE_SOURCE_DIR)/*.cpp)
49CODEGEN_SATYPE_OBJ_DIR := $(BUILD_DIR)\codegen\SA\type
50CODEGEN_SATYPE_OBJS := $(addprefix $(CODEGEN_SATYPE_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SATYPE_SOURCE))))
51
52CODEGEN_SACPP_SOURCE_DIR := $(PWD)\codegen\SA\cpp
53CODEGEN_SACPP_SOURCE := $(wildcard $(CODEGEN_SACPP_SOURCE_DIR)/*.cpp)
54CODEGEN_SACPP_OBJ_DIR := $(BUILD_DIR)\codegen\SA\cpp
55CODEGEN_SACPP_OBJS := $(addprefix $(CODEGEN_SACPP_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SACPP_SOURCE))))
56
57CODEGEN_SATS_SOURCE_DIR := $(PWD)\codegen\SA\ts
58CODEGEN_SATS_SOURCE := $(wildcard $(CODEGEN_SATS_SOURCE_DIR)/*.cpp)
59CODEGEN_SATS_OBJ_DIR := $(BUILD_DIR)\codegen\SA\ts
60CODEGEN_SATS_OBJS := $(addprefix $(CODEGEN_SATS_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SATS_SOURCE))))
61
62CODEGEN_SARUST_SOURCE_DIR := $(PWD)\codegen\SA\rust
63CODEGEN_SARUST_SOURCE := $(wildcard $(CODEGEN_SARUST_SOURCE_DIR)/*.cpp)
64CODEGEN_SARUST_OBJ_DIR := $(BUILD_DIR)\codegen\SA\rust
65CODEGEN_SARUST_OBJS := $(addprefix $(CODEGEN_SARUST_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SARUST_SOURCE))))
66
67CODEGEN_SOURCE_DIR := $(PWD)\codegen
68CODEGEN_SOURCE := $(wildcard $(CODEGEN_SOURCE_DIR)/*.cpp)
69CODEGEN_OBJ_DIR := $(BUILD_DIR)\codegen
70CODEGEN_OBJS := $(addprefix $(CODEGEN_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SOURCE))))
71
72METADATA_SOURCE_DIR := $(PWD)\metadata
73METADATA_SOURCE := $(wildcard $(METADATA_SOURCE_DIR)/*.cpp)
74METADATA_OBJ_DIR := $(BUILD_DIR)\metadata
75METADATA_OBJS := $(addprefix $(METADATA_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(METADATA_SOURCE))))
76
77PARSER_SOURCE_DIR := $(PWD)\parser
78PARSER_SOURCE := $(wildcard $(PARSER_SOURCE_DIR)/*.cpp)
79PARSER_OBJS_DIR := $(BUILD_DIR)\parser
80PARSER_OBJS := $(addprefix $(PARSER_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(PARSER_SOURCE))))
81
82PREPROCESSOR_SOURCE_DIR := $(PWD)\preprocessor
83PREPROCESSOR_SOURCE := $(wildcard $(PREPROCESSOR_SOURCE_DIR)/*.cpp)
84PREPROCESSOR_OBJS_DIR := $(BUILD_DIR)\preprocessor
85PREPROCESSOR_OBJS := $(addprefix $(PREPROCESSOR_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(PREPROCESSOR_SOURCE))))
86
87LEXER_SOURCE_DIR := $(PWD)\lexer
88LEXER_SOURCE := $(wildcard $(LEXER_SOURCE_DIR)/*.cpp)
89LEXER_OBJS_DIR := $(BUILD_DIR)\lexer
90LEXER_OBJS := $(addprefix $(LEXER_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(LEXER_SOURCE))))
91
92AST_SOURCE_DIR := $(PWD)\ast
93AST_SOURCE := $(wildcard $(AST_SOURCE_DIR)/*.cpp)
94AST_OBJS_DIR := $(BUILD_DIR)\ast
95AST_OBJS := $(addprefix $(AST_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(AST_SOURCE))))
96
97AST_BASE_SOURCE_DIR := $(PWD)\ast\base
98AST_BASE_SOURCE := $(wildcard $(AST_BASE_SOURCE_DIR)/*.cpp)
99AST_BASE_OBJS_DIR := $(BUILD_DIR)\ast\base
100AST_BASE_OBJS := $(addprefix $(AST_BASE_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(AST_BASE_SOURCE))))
101
102HASH_SOURCE_DIR := $(PWD)\hash
103HASH_SOURCE := $(wildcard $(HASH_SOURCE_DIR)/*.cpp)
104HASH_OBJS_DIR := $(BUILD_DIR)\hash
105HASH_OBJS := $(addprefix $(HASH_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(HASH_SOURCE))))
106
107UTIL_SOURCE_DIR := $(PWD)\util
108UTIL_SOURCE := $(wildcard $(UTIL_SOURCE_DIR)/*.cpp)
109UTIL_OBJS_DIR := $(BUILD_DIR)\util
110UTIL_OBJS := $(addprefix $(UTIL_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(UTIL_SOURCE))))
111
112BOUNDS_CHECK_SOURCE_DIR := $(subst /,\, $(abspath ..\..\..\..\third_party\bounds_checking_function\src))
113BOUNDS_CHECK_SOURCE := $(wildcard $(BOUNDS_CHECK_SOURCE_DIR)\*.c)
114BOUNDS_CHECK_OBJS_DIR := $(BUILD_DIR)\bounds_checking_function
115BOUNDS_CHECK_OBJS := $(addprefix $(BOUNDS_CHECK_OBJS_DIR)\, $(patsubst %.c, %.o, $(notdir $(BOUNDS_CHECK_SOURCE))))
116
117MAIN_SOURCE := $(wildcard *.cpp)
118MAIN_OBJS := $(addprefix $(BUILD_DIR)\, $(patsubst %.cpp, %.o, $(MAIN_SOURCE)))
119
120CODEGEN_HDI_ALL_OBJS := $(CODEGEN_HDI_OBJS) $(CODEGEN_HDITYPE_OBJS) $(CODEGEN_HDIC_OBJS) $(CODEGEN_HDICPP_OBJS) $(CODEGEN_HDIJAVA_OBJS)
121CODEGEN_SA_ALL_OBJS := $(CODEGEN_SA_OBJS) $(CODEGEN_SATYPE_OBJS) $(CODEGEN_SACPP_OBJS) $(CODEGEN_SATS_OBJS) $(CODEGEN_SARUST_OBJS)
122CODEGEN_ALL_OBJS := $(CODEGEN_HDI_ALL_OBJS) $(CODEGEN_SA_ALL_OBJS) $(CODEGEN_OBJS)
123AST_ALL_OBJS := $(AST_BASE_OBJS) $(AST_OBJS)
124
125all:$(TARGET)
126
127$(TARGET) : $(BOUNDS_CHECK_OBJS) $(UTIL_OBJS) $(HASH_OBJS) $(AST_ALL_OBJS) $(LEXER_OBJS) $(PREPROCESSOR_OBJS) $(PARSER_OBJS) $(METADATA_OBJS) $(CODEGEN_ALL_OBJS) $(MAIN_OBJS)
128	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) $^ -o $@
129	$(Q) echo $(TARGET):build successful.
130
131$(BUILD_DIR)\\%.o : %.cpp
132	$(Q) if not exist $(BUILD_DIR) (mkdir $(BUILD_DIR))
133	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
134
135$(CODEGEN_HDITYPE_OBJ_DIR)\\%.o : $(CODEGEN_HDITYPE_SOURCE_DIR)\\%.cpp
136	$(Q) if not exist $(CODEGEN_HDITYPE_OBJ_DIR) (mkdir $(CODEGEN_HDITYPE_OBJ_DIR))
137	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
138
139$(CODEGEN_HDIC_OBJ_DIR)\\%.o : $(CODEGEN_HDIC_SOURCE_DIR)\\%.cpp
140	$(Q) if not exist $(CODEGEN_HDIC_OBJ_DIR) (mkdir $(CODEGEN_HDIC_OBJ_DIR))
141	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
142
143$(CODEGEN_HDICPP_OBJ_DIR)\\%.o : $(CODEGEN_HDICPP_SOURCE_DIR)\\%.cpp
144	$(Q) if not exist $(CODEGEN_HDICPP_OBJ_DIR) (mkdir $(CODEGEN_HDICPP_OBJ_DIR))
145	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
146
147$(CODEGEN_HDIJAVA_OBJ_DIR)\\%.o : $(CODEGEN_HDIJAVA_SOURCE_DIR)\\%.cpp
148	$(Q) if not exist $(CODEGEN_HDIJAVA_OBJ_DIR) (mkdir $(CODEGEN_HDIJAVA_OBJ_DIR))
149	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
150
151$(CODEGEN_HDI_OBJ_DIR)\\%.o : $(CODEGEN_HDI_SOURCE_DIR)\\%.cpp
152	$(Q) if not exist $(CODEGEN_HDI_OBJ_DIR) (mkdir $(CODEGEN_HDI_OBJ_DIR))
153	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
154
155$(CODEGEN_SATYPE_OBJ_DIR)\\%.o : $(CODEGEN_SATYPE_SOURCE_DIR)\\%.cpp
156	$(Q) if not exist $(CODEGEN_SATYPE_OBJ_DIR) (mkdir $(CODEGEN_SATYPE_OBJ_DIR))
157	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
158
159$(CODEGEN_SACPP_OBJ_DIR)\\%.o : $(CODEGEN_SACPP_SOURCE_DIR)\\%.cpp
160	$(Q) if not exist $(CODEGEN_SACPP_OBJ_DIR) (mkdir $(CODEGEN_SACPP_OBJ_DIR))
161	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
162
163$(CODEGEN_SATS_OBJ_DIR)\\%.o : $(CODEGEN_SATS_SOURCE_DIR)\\%.cpp
164	$(Q) if not exist $(CODEGEN_SATS_OBJ_DIR) (mkdir $(CODEGEN_SATS_OBJ_DIR))
165	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
166
167$(CODEGEN_SARUST_OBJ_DIR)\\%.o : $(CODEGEN_SARUST_SOURCE_DIR)\\%.cpp
168	$(Q) if not exist $(CODEGEN_SARUST_OBJ_DIR) (mkdir $(CODEGEN_SARUST_OBJ_DIR))
169	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
170
171$(CODEGEN_SA_OBJ_DIR)\\%.o : $(CODEGEN_SA_SOURCE_DIR)\\%.cpp
172	$(Q) if not exist $(CODEGEN_SA_OBJ_DIR) (mkdir $(CODEGEN_SA_OBJ_DIR))
173	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
174
175$(CODEGEN_OBJ_DIR)\\%.o : $(CODEGEN_SOURCE_DIR)\\%.cpp
176	$(Q) if not exist $(CODEGEN_OBJ_DIR) (mkdir $(CODEGEN_OBJ_DIR))
177	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
178
179$(METADATA_OBJ_DIR)\\%.o : $(METADATA_SOURCE_DIR)\\%.cpp
180	$(Q) if not exist $(METADATA_OBJ_DIR) (mkdir $(METADATA_OBJ_DIR))
181	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
182
183$(PARSER_OBJS_DIR)\\%.o : $(PARSER_SOURCE_DIR)\\%.cpp
184	$(Q) if not exist $(PARSER_OBJS_DIR) (mkdir $(PARSER_OBJS_DIR))
185	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
186
187$(PREPROCESSOR_OBJS_DIR)\\%.o : $(PREPROCESSOR_SOURCE_DIR)\\%.cpp
188	$(Q) if not exist $(PREPROCESSOR_OBJS_DIR) (mkdir $(PREPROCESSOR_OBJS_DIR))
189	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
190
191$(LEXER_OBJS_DIR)\\%.o : $(LEXER_SOURCE_DIR)\\%.cpp
192	$(Q) if not exist $(LEXER_OBJS_DIR) (mkdir $(LEXER_OBJS_DIR))
193	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
194
195$(AST_BASE_OBJS_DIR)\\%.o : $(AST_BASE_SOURCE_DIR)\\%.cpp
196	$(Q) if not exist $(AST_BASE_OBJS_DIR) (mkdir $(AST_BASE_OBJS_DIR))
197	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
198
199$(AST_OBJS_DIR)\\%.o : $(AST_SOURCE_DIR)\\%.cpp
200	$(Q) if not exist $(AST_OBJS_DIR) (mkdir $(AST_OBJS_DIR))
201	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
202
203$(HASH_OBJS_DIR)\\%.o : $(HASH_SOURCE_DIR)\\%.cpp
204	$(Q) if not exist $(HASH_OBJS_DIR) (mkdir $(HASH_OBJS_DIR))
205	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
206
207$(UTIL_OBJS_DIR)\\%.o : $(UTIL_SOURCE_DIR)\\%.cpp
208	$(Q) if not exist $(UTIL_OBJS_DIR) (mkdir $(UTIL_OBJS_DIR))
209	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
210
211$(BOUNDS_CHECK_OBJS_DIR)\\%.o : $(BOUNDS_CHECK_SOURCE_DIR)\%.c
212	$(Q) if not exist $(BOUNDS_CHECK_OBJS_DIR) (mkdir $(BOUNDS_CHECK_OBJS_DIR))
213	$(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@
214
215clean:
216	$(Q) if exist $(TARGET) (del $(TARGET))
217	$(Q) if exist $(BUILD_DIR) (rd /s /q $(BUILD_DIR))
218
219.PHONY:all clean