diff --git a/tools/hdi-gen/BUILD.gn b/tools/hdi-gen/BUILD.gn index f2892d4e..bc63e124 100755 --- a/tools/hdi-gen/BUILD.gn +++ b/tools/hdi-gen/BUILD.gn @@ -2,7 +2,7 @@ # # HDF is dual licensed: you can use it either under the terms of # the GPL, or the BSD license, at your option. -# See the LICENSE file in the root of this repository for complete details. +# See the LICENSE file in the root of this repository for complete details. action("build_hdi_gen") { script = "/usr/bin/env" @@ -17,6 +17,6 @@ action("build_hdi_gen") { "-j8", "-C", rebase_path("."), - "OUT_DIR=" + rebase_path(target_out_dir), + "TARGET_DIR=" + rebase_path(target_out_dir), ] } diff --git a/tools/hdi-gen/Makefile b/tools/hdi-gen/Makefile index 53836788..033c2575 100755 --- a/tools/hdi-gen/Makefile +++ b/tools/hdi-gen/Makefile @@ -1,25 +1,35 @@ -# Copyright (c) 2021 Huawei Device Co., Ltd. -# -# HDF is dual licensed: you can use it either under the terms of -# the GPL, or the BSD license, at your option. -# See the LICENSE file in the root of this repository for complete details. - -export OUT_DIR:=. -export TARGET:=$(OUT_DIR)/hdi-gen -export CXXFLAGS = -std=c++14 -O2 -w -export Q := @ -export MAKEFLAGS += --no-print-directory - -MAKE_FILE_NAME = MakefileLinux -ifeq ($(findstring ;, $(PATH)), ;) - MAKE_FILE_NAME := MakefileWin -endif - -all: - $(Q) echo start build $(TARGET) ... - $(Q) $(MAKE) -f $(MAKE_FILE_NAME) - -clean: - $(Q) $(MAKE) -f $(MAKE_FILE_NAME) clean - +# Copyright (c) 2021 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +ifeq ($(findstring ;, $(PATH)), ;) + export PWD:=$(subst /,\, $(abspath $(dir $(realpath $(lastword $(MAKEFILE_LIST)))))) + export TARGET_DIR := $(PWD) + export BUILD_DIR:=$(TARGET_DIR)\build + export TARGET:=$(TARGET_DIR)\hdi-gen.exe +else + export PWD := $(abspath $(dir $(realpath $(lastword $(MAKEFILE_LIST))))) + export TARGET_DIR := $(PWD) + export BUILD_DIR = $(TARGET_DIR)/build + export TARGET:=$(TARGET_DIR)/hdi-gen +endif + +export CXXFLAGS = -std=c++14 -O2 -w +export Q := @ +export MAKEFLAGS += --no-print-directory + +MAKE_FILE_NAME = MakefileLinux +ifeq ($(findstring ;, $(PATH)), ;) + MAKE_FILE_NAME := MakefileWin +endif + +all: + $(Q) echo start build $(TARGET) ... + $(Q) $(MAKE) -f $(MAKE_FILE_NAME) + +clean: + $(Q) $(MAKE) -f $(MAKE_FILE_NAME) clean + .PHONY: clean \ No newline at end of file diff --git a/tools/hdi-gen/MakefileLinux b/tools/hdi-gen/MakefileLinux index 6d5eac49..fe4bccf5 100755 --- a/tools/hdi-gen/MakefileLinux +++ b/tools/hdi-gen/MakefileLinux @@ -1,72 +1,70 @@ -# Copyright (c) 2021 Huawei Device Co., Ltd. -# -# HDF is dual licensed: you can use it either under the terms of -# the GPL, or the BSD license, at your option. -# See the LICENSE file in the root of this repository for complete details. - -PWD := $(abspath $(dir $(realpath $(lastword $(MAKEFILE_LIST))))) -BUILD_DIR = $(PWD)/build -BOUNDS_CHECK_DIR := $(abspath ../../../../third_party/bounds_checking_function) -INCLUDES = -I$(PWD) -I$(BOUNDS_CHECK_DIR)/include - -CODEGEN_SOURCE_DIR := $(PWD)/codegen -CODEGEN_SOURCE := $(wildcard $(CODEGEN_SOURCE_DIR)/*.cpp) -CODEGEN_OBJ_DIR := $(BUILD_DIR)/codegen -CODEGEN_OBJS := $(addprefix $(CODEGEN_OBJ_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SOURCE)))) - -PARSER_SOURCE_DIR := $(PWD)/parser -PARSER_SOURCE := $(wildcard $(PARSER_SOURCE_DIR)/*.cpp) -PARSER_OBJS_DIR := $(BUILD_DIR)/parser -PARSER_OBJS := $(addprefix $(PARSER_OBJS_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(PARSER_SOURCE)))) - -AST_SOURCE_DIR := $(PWD)/ast -AST_SOURCE := $(wildcard $(AST_SOURCE_DIR)/*.cpp) -AST_OBJS_DIR := $(BUILD_DIR)/ast -AST_OBJS := $(addprefix $(AST_OBJS_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(AST_SOURCE)))) - -UTIL_SOURCE_DIR := $(PWD)/util -UTIL_SOURCE := $(wildcard $(UTIL_SOURCE_DIR)/*.cpp) -UTIL_OBJS_DIR := $(BUILD_DIR)/util -UTIL_OBJS := $(addprefix $(UTIL_OBJS_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(UTIL_SOURCE)))) - -BOUNDS_CHECK_SOURCE_DIR := $(abspath ../../../../third_party/bounds_checking_function/src) -BOUNDS_CHECK_SOURCE := $(wildcard $(BOUNDS_CHECK_SOURCE_DIR)/*.c) -BOUNDS_CHECK_OBJS_DIR := $(BUILD_DIR)/bounds_checking_function -BOUNDS_CHECK_OBJS := $(addprefix $(BOUNDS_CHECK_OBJS_DIR)/, $(patsubst %.c, %.o, $(notdir $(BOUNDS_CHECK_SOURCE)))) - -MAIN_SOURCE := $(wildcard *.cpp) -MAIN_OBJS := $(addprefix $(BUILD_DIR)/, $(patsubst %.cpp, %.o, $(MAIN_SOURCE))) - -all:$(TARGET) -$(TARGET) : $(BOUNDS_CHECK_OBJS) $(UTIL_OBJS) $(AST_OBJS) $(PARSER_OBJS) $(CODEGEN_OBJS) $(MAIN_OBJS) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) $^ -o $@ - $(Q) echo $(TARGET):build successful. - -$(BUILD_DIR)/%.o : %.cpp - $(Q) mkdir -p $(BUILD_DIR) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -$(CODEGEN_OBJ_DIR)/%.o : $(CODEGEN_SOURCE_DIR)/%.cpp - $(Q) mkdir -p $(CODEGEN_OBJ_DIR) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -$(PARSER_OBJS_DIR)/%.o : $(PARSER_SOURCE_DIR)/%.cpp - $(Q) mkdir -p $(PARSER_OBJS_DIR) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -$(AST_OBJS_DIR)/%.o : $(AST_SOURCE_DIR)/%.cpp - $(Q) mkdir -p $(AST_OBJS_DIR) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -$(UTIL_OBJS_DIR)/%.o : $(UTIL_SOURCE_DIR)/%.cpp - $(Q) mkdir -p $(UTIL_OBJS_DIR) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -$(BOUNDS_CHECK_OBJS_DIR)/%.o : $(BOUNDS_CHECK_SOURCE_DIR)/%.c - $(Q) mkdir -p $(BOUNDS_CHECK_OBJS_DIR) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -clean: - $(Q) rm -rf $(TARGET) $(BUILD_DIR) - +# Copyright (c) 2021 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +BOUNDS_CHECK_DIR := $(abspath ../../../../third_party/bounds_checking_function) +INCLUDES = -I$(PWD) -I$(BOUNDS_CHECK_DIR)/include + +CODEGEN_SOURCE_DIR := $(PWD)/codegen +CODEGEN_SOURCE := $(wildcard $(CODEGEN_SOURCE_DIR)/*.cpp) +CODEGEN_OBJ_DIR := $(BUILD_DIR)/codegen +CODEGEN_OBJS := $(addprefix $(CODEGEN_OBJ_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SOURCE)))) + +PARSER_SOURCE_DIR := $(PWD)/parser +PARSER_SOURCE := $(wildcard $(PARSER_SOURCE_DIR)/*.cpp) +PARSER_OBJS_DIR := $(BUILD_DIR)/parser +PARSER_OBJS := $(addprefix $(PARSER_OBJS_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(PARSER_SOURCE)))) + +AST_SOURCE_DIR := $(PWD)/ast +AST_SOURCE := $(wildcard $(AST_SOURCE_DIR)/*.cpp) +AST_OBJS_DIR := $(BUILD_DIR)/ast +AST_OBJS := $(addprefix $(AST_OBJS_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(AST_SOURCE)))) + +UTIL_SOURCE_DIR := $(PWD)/util +UTIL_SOURCE := $(wildcard $(UTIL_SOURCE_DIR)/*.cpp) +UTIL_OBJS_DIR := $(BUILD_DIR)/util +UTIL_OBJS := $(addprefix $(UTIL_OBJS_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(UTIL_SOURCE)))) + +BOUNDS_CHECK_SOURCE_DIR := $(abspath ../../../../third_party/bounds_checking_function/src) +BOUNDS_CHECK_SOURCE := $(wildcard $(BOUNDS_CHECK_SOURCE_DIR)/*.c) +BOUNDS_CHECK_OBJS_DIR := $(BUILD_DIR)/bounds_checking_function +BOUNDS_CHECK_OBJS := $(addprefix $(BOUNDS_CHECK_OBJS_DIR)/, $(patsubst %.c, %.o, $(notdir $(BOUNDS_CHECK_SOURCE)))) + +MAIN_SOURCE := $(wildcard *.cpp) +MAIN_OBJS := $(addprefix $(BUILD_DIR)/, $(patsubst %.cpp, %.o, $(MAIN_SOURCE))) + +all:$(TARGET) +$(TARGET) : $(BOUNDS_CHECK_OBJS) $(UTIL_OBJS) $(AST_OBJS) $(PARSER_OBJS) $(CODEGEN_OBJS) $(MAIN_OBJS) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) $^ -o $@ + $(Q) echo $(TARGET):build successful. + +$(BUILD_DIR)/%.o : %.cpp + $(Q) mkdir -p $(BUILD_DIR) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +$(CODEGEN_OBJ_DIR)/%.o : $(CODEGEN_SOURCE_DIR)/%.cpp + $(Q) mkdir -p $(CODEGEN_OBJ_DIR) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +$(PARSER_OBJS_DIR)/%.o : $(PARSER_SOURCE_DIR)/%.cpp + $(Q) mkdir -p $(PARSER_OBJS_DIR) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +$(AST_OBJS_DIR)/%.o : $(AST_SOURCE_DIR)/%.cpp + $(Q) mkdir -p $(AST_OBJS_DIR) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +$(UTIL_OBJS_DIR)/%.o : $(UTIL_SOURCE_DIR)/%.cpp + $(Q) mkdir -p $(UTIL_OBJS_DIR) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +$(BOUNDS_CHECK_OBJS_DIR)/%.o : $(BOUNDS_CHECK_SOURCE_DIR)/%.c + $(Q) mkdir -p $(BOUNDS_CHECK_OBJS_DIR) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +clean: + $(Q) rm -rf $(TARGET) $(BUILD_DIR) + .PHONY:all clean \ No newline at end of file diff --git a/tools/hdi-gen/MakefileWin b/tools/hdi-gen/MakefileWin index 51c1e815..c9ef65b6 100755 --- a/tools/hdi-gen/MakefileWin +++ b/tools/hdi-gen/MakefileWin @@ -1,73 +1,71 @@ -# Copyright (c) 2021 Huawei Device Co., Ltd. -# -# HDF is dual licensed: you can use it either under the terms of -# the GPL, or the BSD license, at your option. -# See the LICENSE file in the root of this repository for complete details. - -PWD:=$(subst /,\, $(abspath $(dir $(realpath $(lastword $(MAKEFILE_LIST)))))) -BUILD_DIR:=$(PWD)\build -BOUNDS_CHECK_DIR:=$(abspath ..\..\..\..\third_party\bounds_checking_function) -INCLUDES:=-I $(PWD) -I $(BOUNDS_CHECK_DIR)\include - -CODEGEN_SOURCE_DIR:=$(PWD)\codegen -CODEGEN_SOURCE:=$(wildcard $(CODEGEN_SOURCE_DIR)/*.cpp) -CODEGEN_OBJ_DIR:=$(BUILD_DIR)\codegen -CODEGEN_OBJS:=$(addprefix $(CODEGEN_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SOURCE)))) - -PARSER_SOURCE_DIR:=$(PWD)\parser -PARSER_SOURCE:=$(wildcard $(PARSER_SOURCE_DIR)/*.cpp) -PARSER_OBJS_DIR:=$(BUILD_DIR)\parser -PARSER_OBJS:=$(addprefix $(PARSER_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(PARSER_SOURCE)))) - -AST_SOURCE_DIR:=$(PWD)\ast -AST_SOURCE:=$(wildcard $(AST_SOURCE_DIR)/*.cpp) -AST_OBJS_DIR:=$(BUILD_DIR)\ast -AST_OBJS:=$(addprefix $(AST_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(AST_SOURCE)))) - -UTIL_SOURCE_DIR:=$(PWD)\util -UTIL_SOURCE:=$(wildcard $(UTIL_SOURCE_DIR)/*.cpp) -UTIL_OBJS_DIR:=$(BUILD_DIR)\util -UTIL_OBJS:=$(addprefix $(UTIL_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(UTIL_SOURCE)))) - -BOUNDS_CHECK_SOURCE_DIR:=$(abspath ..\..\..\..\third_party\bounds_checking_function\src) -BOUNDS_CHECK_SOURCE:=$(wildcard $(BOUNDS_CHECK_SOURCE_DIR)/*.c) -BOUNDS_CHECK_OBJS_DIR:=$(BUILD_DIR)\bounds_checking_function -BOUNDS_CHECK_OBJS:=$(addprefix $(BOUNDS_CHECK_OBJS_DIR)\, $(patsubst %.c, %.o, $(notdir $(BOUNDS_CHECK_SOURCE)))) - -MAIN_SOURCE:=$(wildcard *.cpp) -MAIN_OBJS:=$(addprefix $(BUILD_DIR)\, $(patsubst %.cpp, %.o, $(MAIN_SOURCE))) - -all : $(TARGET) -$(TARGET) : $(BOUNDS_CHECK_OBJS) $(UTIL_OBJS) $(AST_OBJS) $(PARSER_OBJS) $(CODEGEN_OBJS) $(MAIN_OBJS) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) $^ -o $@ - $(Q) echo $(TARGET):build successful. - -$(BUILD_DIR)\\%.o : %.cpp - $(Q) if not exist $(BUILD_DIR) (mkdir $(BUILD_DIR)) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -$(CODEGEN_OBJ_DIR)\\%.o : $(CODEGEN_SOURCE_DIR)\\%.cpp - $(Q) if not exist $(CODEGEN_OBJ_DIR) (mkdir $(CODEGEN_OBJ_DIR)) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -$(PARSER_OBJS_DIR)\\%.o : $(PARSER_SOURCE_DIR)\\%.cpp - $(Q) if not exist $(PARSER_OBJS_DIR) (mkdir $(PARSER_OBJS_DIR)) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -$(AST_OBJS_DIR)\\%.o : $(AST_SOURCE_DIR)\\%.cpp - $(Q) if not exist $(AST_OBJS_DIR) (mkdir $(AST_OBJS_DIR)) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -$(UTIL_OBJS_DIR)\\%.o : $(UTIL_SOURCE_DIR)\\%.cpp - $(Q) if not exist $(UTIL_OBJS_DIR) (mkdir $(UTIL_OBJS_DIR)) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -$(BOUNDS_CHECK_OBJS_DIR)\\%.o : $(BOUNDS_CHECK_SOURCE_DIR)\\%.c - $(Q) if not exist $(BOUNDS_CHECK_OBJS_DIR) (mkdir $(BOUNDS_CHECK_OBJS_DIR)) - $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ - -clean: - $(Q) if exist $(TARGET).exe (del $(TARGET).exe) - $(Q) if exist $(BUILD_DIR) (rd /s /q $(BUILD_DIR)) - +# Copyright (c) 2021 Huawei Device Co., Ltd. +# +# HDF is dual licensed: you can use it either under the terms of +# the GPL, or the BSD license, at your option. +# See the LICENSE file in the root of this repository for complete details. + +BOUNDS_CHECK_DIR:=$(subst /,\, $(abspath ..\..\..\..\third_party\bounds_checking_function)) +INCLUDES:=-I $(PWD) -I $(BOUNDS_CHECK_DIR)\include + +CODEGEN_SOURCE_DIR:=$(PWD)\codegen +CODEGEN_SOURCE:=$(wildcard $(CODEGEN_SOURCE_DIR)/*.cpp) +CODEGEN_OBJ_DIR:=$(BUILD_DIR)\codegen +CODEGEN_OBJS:=$(addprefix $(CODEGEN_OBJ_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(CODEGEN_SOURCE)))) + +PARSER_SOURCE_DIR:=$(PWD)\parser +PARSER_SOURCE:=$(wildcard $(PARSER_SOURCE_DIR)/*.cpp) +PARSER_OBJS_DIR:=$(BUILD_DIR)\parser +PARSER_OBJS:=$(addprefix $(PARSER_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(PARSER_SOURCE)))) + +AST_SOURCE_DIR:=$(PWD)\ast +AST_SOURCE:=$(wildcard $(AST_SOURCE_DIR)/*.cpp) +AST_OBJS_DIR:=$(BUILD_DIR)\ast +AST_OBJS:=$(addprefix $(AST_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(AST_SOURCE)))) + +UTIL_SOURCE_DIR:=$(PWD)\util +UTIL_SOURCE:=$(wildcard $(UTIL_SOURCE_DIR)/*.cpp) +UTIL_OBJS_DIR:=$(BUILD_DIR)\util +UTIL_OBJS:=$(addprefix $(UTIL_OBJS_DIR)\, $(patsubst %.cpp, %.o, $(notdir $(UTIL_SOURCE)))) + +BOUNDS_CHECK_SOURCE_DIR:=$(subst /,\, $(abspath ..\..\..\..\third_party\bounds_checking_function\src)) +BOUNDS_CHECK_SOURCE:=$(wildcard $(BOUNDS_CHECK_SOURCE_DIR)/*.c) +BOUNDS_CHECK_OBJS_DIR:=$(BUILD_DIR)\bounds_checking_function +BOUNDS_CHECK_OBJS:=$(addprefix $(BOUNDS_CHECK_OBJS_DIR)\, $(patsubst %.c, %.o, $(notdir $(BOUNDS_CHECK_SOURCE)))) + +MAIN_SOURCE:=$(wildcard *.cpp) +MAIN_OBJS:=$(addprefix $(BUILD_DIR)\, $(patsubst %.cpp, %.o, $(MAIN_SOURCE))) + +all : $(TARGET) +$(TARGET) : $(BOUNDS_CHECK_OBJS) $(UTIL_OBJS) $(AST_OBJS) $(PARSER_OBJS) $(CODEGEN_OBJS) $(MAIN_OBJS) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) $^ -o $@ + $(Q) echo $(TARGET):build successful. + +$(BUILD_DIR)\\%.o : %.cpp + $(Q) if not exist $(BUILD_DIR) (mkdir $(BUILD_DIR)) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +$(CODEGEN_OBJ_DIR)\\%.o : $(CODEGEN_SOURCE_DIR)\\%.cpp + $(Q) if not exist $(CODEGEN_OBJ_DIR) (mkdir $(CODEGEN_OBJ_DIR)) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +$(PARSER_OBJS_DIR)\\%.o : $(PARSER_SOURCE_DIR)\\%.cpp + $(Q) if not exist $(PARSER_OBJS_DIR) (mkdir $(PARSER_OBJS_DIR)) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +$(AST_OBJS_DIR)\\%.o : $(AST_SOURCE_DIR)\\%.cpp + $(Q) if not exist $(AST_OBJS_DIR) (mkdir $(AST_OBJS_DIR)) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +$(UTIL_OBJS_DIR)\\%.o : $(UTIL_SOURCE_DIR)\\%.cpp + $(Q) if not exist $(UTIL_OBJS_DIR) (mkdir $(UTIL_OBJS_DIR)) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +$(BOUNDS_CHECK_OBJS_DIR)\\%.o : $(BOUNDS_CHECK_SOURCE_DIR)\\%.c + $(Q) if not exist $(BOUNDS_CHECK_OBJS_DIR) (mkdir $(BOUNDS_CHECK_OBJS_DIR)) + $(Q) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $^ -o $@ + +clean: + $(Q) if exist $(TARGET) (del $(TARGET)) + $(Q) if exist $(BUILD_DIR) (rd /s /q $(BUILD_DIR)) + .PHONY:all clean \ No newline at end of file diff --git a/tools/hdi-gen/build_hdi_files.py b/tools/hdi-gen/build_hdi_files.py index d30e2797..640136b9 100755 --- a/tools/hdi-gen/build_hdi_files.py +++ b/tools/hdi-gen/build_hdi_files.py @@ -69,6 +69,7 @@ def get_idl_file_type(file_path): file.close() return idl_type + def c_interface_file_translate(idl_file, out_dir, part, outputs): file = idl_file.split("/")[-1] file_name = translate_file_name(file.split(".")[0]) @@ -86,7 +87,6 @@ def c_interface_file_translate(idl_file, out_dir, part, outputs): outputs.append(client_proxy_source_file) elif part == "server_lib_source": outputs.append(iface_header_file) - outputs.append(server_driver_source_file) outputs.append(server_stub_header_file) outputs.append(server_stub_source_file) else: @@ -98,6 +98,7 @@ def c_interface_file_translate(idl_file, out_dir, part, outputs): outputs.append(server_impl_header_file) outputs.append(server_impl_source_file) + def c_callback_file_translate(idl_file, out_dir, part, outputs): file = idl_file.split("/")[-1] file_name = translate_file_name(file.split(".")[0]) @@ -124,6 +125,7 @@ def c_callback_file_translate(idl_file, out_dir, part, outputs): outputs.append(server_impl_header_file) outputs.append(server_impl_source_file) + def c_types_file_translate(idl_file, out_dir, outputs): file = idl_file.split("/")[-1] file_name = translate_file_name(file.split(".")[0]) @@ -134,6 +136,7 @@ def c_types_file_translate(idl_file, out_dir, outputs): outputs.append(types_header_file) outputs.append(types_source_file) + def c_idl_translate(idl_files, out_dir): outputs = [] for idl_file in idl_files: @@ -146,6 +149,7 @@ def c_idl_translate(idl_files, out_dir): c_types_file_translate(idl_file, out_dir, outputs) return outputs + def cpp_interface_file_translate(idl_file, out_dir, part, outputs): file = idl_file.split("/")[-1] file_name = translate_file_name(file.split(".")[0]) @@ -165,7 +169,6 @@ def cpp_interface_file_translate(idl_file, out_dir, part, outputs): outputs.append(client_proxy_source_file) elif part == "server_lib_source": outputs.append(iface_header_file) - outputs.append(server_driver_source_file) outputs.append(server_stub_header_file) outputs.append(server_stub_source_file) else: @@ -178,6 +181,7 @@ def cpp_interface_file_translate(idl_file, out_dir, part, outputs): outputs.append(server_impl_header_file) outputs.append(server_impl_source_file) + def cpp_callback_file_translate(idl_file, out_dir, part, outputs): file = idl_file.split("/")[-1] file_name = translate_file_name(file.split(".")[0]) @@ -207,6 +211,7 @@ def cpp_callback_file_translate(idl_file, out_dir, part, outputs): outputs.append(server_impl_header_file) outputs.append(server_impl_source_file) + def cpp_types_file_translate(idl_file, out_dir, outputs): file = idl_file.split("/")[-1] file_name = translate_file_name(file.split(".")[0]) @@ -217,6 +222,7 @@ def cpp_types_file_translate(idl_file, out_dir, outputs): outputs.append(types_header_file) outputs.append(types_source_file) + def cpp_idl_translate(idl_files, out_dir): outputs = [] for idl_file in idl_files: @@ -229,6 +235,7 @@ def cpp_idl_translate(idl_files, out_dir): cpp_types_file_translate(idl_file, out_dir, outputs) return outputs + def idl_translate(idl_files, language, out_dir): outputs = [] if language == "c": @@ -237,6 +244,7 @@ def idl_translate(idl_files, language, out_dir): outputs = cpp_idl_translate(idl_files, out_dir) return outputs + def c_get_compile_source_file(idl_files, out_dir, part): outputs = [] for idl_file in idl_files: @@ -249,6 +257,7 @@ def c_get_compile_source_file(idl_files, out_dir, part): c_types_file_translate(idl_file, out_dir, outputs) return outputs + def cpp_get_compile_source_file(idl_files, out_dir, part): outputs = [] for idl_file in idl_files: @@ -261,6 +270,7 @@ def cpp_get_compile_source_file(idl_files, out_dir, part): cpp_types_file_translate(idl_file, out_dir, outputs) return outputs + def get_compile_source_file(idl_files, language, out_dir, part): outputs = [] if language == "c": @@ -269,6 +279,7 @@ def get_compile_source_file(idl_files, language, out_dir, part): outputs = cpp_get_compile_source_file(idl_files, out_dir, part) return outputs + def main(argv): outputs = [] if len(argv) < 4: @@ -288,5 +299,6 @@ def main(argv): sys.stdout.write('\n'.join(outputs)) + if __name__ == "__main__": main(sys.argv) \ No newline at end of file diff --git a/tools/hdi-gen/codegen/c_client_proxy_code_emitter.cpp b/tools/hdi-gen/codegen/c_client_proxy_code_emitter.cpp index d281390a..d325f6a5 100755 --- a/tools/hdi-gen/codegen/c_client_proxy_code_emitter.cpp +++ b/tools/hdi-gen/codegen/c_client_proxy_code_emitter.cpp @@ -79,32 +79,37 @@ void CClientProxyCodeEmitter::EmitProxySourceFile() void CClientProxyCodeEmitter::EmitProxyInclusions(StringBuilder& sb) { - EmitProxyStdlibInclusions(sb); - sb.AppendFormat("#include \"%s.h\"\n", FileName(interfaceName_).string()); + HeaderFile::HeaderFileSet headerFiles; + + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(interfaceName_))); + GetHeaderOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } } -void CClientProxyCodeEmitter::EmitProxyStdlibInclusions(StringBuilder& sb) +void CClientProxyCodeEmitter::GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) { - sb.Append("#include \n"); - if (!isCallbackInterface() && !isKernelCode_) { - sb.Append("#include \n"); - } - - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_base")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_log")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_sbuf")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "osal_mem")); if (isKernelCode_) { - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_io_service_if")); } else { - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "servmgr_hdi")); + if (!isCallbackInterface()) { + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_dlist")); + } } const AST::TypeStringMap& types = ast_->GetTypes(); for (const auto& pair : types) { AutoPtr type = pair.second; if (type->GetTypeKind() == TypeKind::TYPE_UNION) { - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec")); break; } } diff --git a/tools/hdi-gen/codegen/c_client_proxy_code_emitter.h b/tools/hdi-gen/codegen/c_client_proxy_code_emitter.h index 1b97e442..0c0c6448 100755 --- a/tools/hdi-gen/codegen/c_client_proxy_code_emitter.h +++ b/tools/hdi-gen/codegen/c_client_proxy_code_emitter.h @@ -29,7 +29,7 @@ private: void EmitProxyInclusions(StringBuilder& sb); - void EmitProxyStdlibInclusions(StringBuilder& sb); + void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); void EmitProxyCallMethodImpl(StringBuilder& sb); diff --git a/tools/hdi-gen/codegen/c_code_emitter.cpp b/tools/hdi-gen/codegen/c_code_emitter.cpp index 1845cb52..6bed3067 100755 --- a/tools/hdi-gen/codegen/c_code_emitter.cpp +++ b/tools/hdi-gen/codegen/c_code_emitter.cpp @@ -47,6 +47,15 @@ void CCodeEmitter::EmitInterfaceMethodCommands(StringBuilder& sb) sb.Append("};\n"); } +void CCodeEmitter::GetImportInclusions(HeaderFile::HeaderFileSet& headerFiles) +{ + for (const auto& importPair : ast_->GetImports()) { + AutoPtr importAst = importPair.second; + String fileName = FileName(importAst->GetFullName()); + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(importAst->GetFullName()))); + } +} + void CCodeEmitter::EmitInterfaceMethodParameter(const AutoPtr& parameter, StringBuilder& sb, const String& prefix) { diff --git a/tools/hdi-gen/codegen/c_code_emitter.h b/tools/hdi-gen/codegen/c_code_emitter.h index f9cabda3..0ed14fa0 100755 --- a/tools/hdi-gen/codegen/c_code_emitter.h +++ b/tools/hdi-gen/codegen/c_code_emitter.h @@ -9,7 +9,6 @@ #ifndef OHOS_HDI_C_CODE_EMITTER_H #define OHOS_HDI_C_CODE_EMITTER_H -#include #include "ast/ast.h" #include "codegen/code_emitter.h" #include "util/autoptr.h" @@ -26,6 +25,8 @@ public: protected: void EmitInterfaceMethodCommands(StringBuilder& sb); + void GetImportInclusions(HeaderFile::HeaderFileSet& headerFiles); + void EmitInterfaceMethodParameter(const AutoPtr& parameter, StringBuilder& sb, const String& prefix); void EmitErrorHandle(const AutoPtr& method, const String& gotoLabel, bool isClient, StringBuilder& sb, diff --git a/tools/hdi-gen/codegen/c_custom_types_code_emitter.cpp b/tools/hdi-gen/codegen/c_custom_types_code_emitter.cpp index 1ba4a9a9..51942e8a 100755 --- a/tools/hdi-gen/codegen/c_custom_types_code_emitter.cpp +++ b/tools/hdi-gen/codegen/c_custom_types_code_emitter.cpp @@ -63,11 +63,21 @@ void CCustomTypesCodeEmitter::EmitCustomTypesHeaderFile() } void CCustomTypesCodeEmitter::EmitHeaderInclusions(StringBuilder& sb) +{ + HeaderFile::HeaderFileSet headerFiles; + GetHeaderOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } +} + +void CCustomTypesCodeEmitter::GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) { for (size_t i = 0; i < ast_->GetTypeDefinitionNumber(); i++) { AutoPtr type = ast_->GetTypeDefintion(i); if (type->GetTypeKind() == TypeKind::TYPE_STRUCT) { - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_sbuf")); break; } } @@ -168,21 +178,26 @@ void CCustomTypesCodeEmitter::EmitCustomTypesSourceFile() void CCustomTypesCodeEmitter::EmitSoucreIncludsions(StringBuilder& sb) { - sb.AppendFormat("#include \"%s.h\"\n", FileName(infName_).string()); - EmitSourceStdlibInclusions(sb); + HeaderFile::HeaderFileSet headerFiles; + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(infName_))); + GetSourceOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } } -void CCustomTypesCodeEmitter::EmitSourceStdlibInclusions(StringBuilder& sb) +void CCustomTypesCodeEmitter::GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) { - sb.Append("#include \n"); - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_log")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "osal_mem")); const AST::TypeStringMap& types = ast_->GetTypes(); for (const auto& pair : types) { AutoPtr type = pair.second; if (type->GetTypeKind() == TypeKind::TYPE_STRUCT || type->GetTypeKind() == TypeKind::TYPE_UNION) { - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec")); break; } } diff --git a/tools/hdi-gen/codegen/c_custom_types_code_emitter.h b/tools/hdi-gen/codegen/c_custom_types_code_emitter.h index 02282252..e7d93c9e 100755 --- a/tools/hdi-gen/codegen/c_custom_types_code_emitter.h +++ b/tools/hdi-gen/codegen/c_custom_types_code_emitter.h @@ -27,6 +27,8 @@ private: void EmitHeaderInclusions(StringBuilder& sb); + void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); + void EmitCustomTypeDecls(StringBuilder& sb); void EmitCustomTypeDecl(StringBuilder& sb, const AutoPtr& type); @@ -43,7 +45,7 @@ private: void EmitSoucreIncludsions(StringBuilder& sb); - void EmitSourceStdlibInclusions(StringBuilder& sb); + void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); void EmitCustomTypeDataProcess(StringBuilder& sb); diff --git a/tools/hdi-gen/codegen/c_interface_code_emitter.cpp b/tools/hdi-gen/codegen/c_interface_code_emitter.cpp index 47b5f421..2dca6a5d 100755 --- a/tools/hdi-gen/codegen/c_interface_code_emitter.cpp +++ b/tools/hdi-gen/codegen/c_interface_code_emitter.cpp @@ -68,13 +68,21 @@ void CInterfaceCodeEmitter::EmitInterfaceHeaderFile() void CInterfaceCodeEmitter::EmitImportInclusions(StringBuilder& sb) { - sb.Append("#include \n"); - for (const auto& importPair : ast_->GetImports()) { - AutoPtr importAst = importPair.second; - sb.AppendFormat("#include \"%s.h\"\n", FileName(importAst->GetFullName()).string()); + HeaderFile::HeaderFileSet headerFiles; + + GetImportInclusions(headerFiles); + GetHeaderOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); } } +void CInterfaceCodeEmitter::GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) +{ + headerFiles.emplace(HeaderFile(HeaderFileType::C_STD_HEADER_FILE, "stdint")); +} + void CInterfaceCodeEmitter::EmitInterfaceDefinition(StringBuilder& sb) { sb.AppendFormat("struct %s {\n", interfaceName_.string()); diff --git a/tools/hdi-gen/codegen/c_interface_code_emitter.h b/tools/hdi-gen/codegen/c_interface_code_emitter.h index a4e76b85..dfdab7c1 100755 --- a/tools/hdi-gen/codegen/c_interface_code_emitter.h +++ b/tools/hdi-gen/codegen/c_interface_code_emitter.h @@ -27,6 +27,8 @@ private: void EmitImportInclusions(StringBuilder& sb); + void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); + void EmitInterfaceDefinition(StringBuilder& sb); void EmitInterfaceMethods(StringBuilder& sb, const String& prefix); diff --git a/tools/hdi-gen/codegen/c_service_driver_code_emitter.cpp b/tools/hdi-gen/codegen/c_service_driver_code_emitter.cpp index d0332756..1f3efb4a 100755 --- a/tools/hdi-gen/codegen/c_service_driver_code_emitter.cpp +++ b/tools/hdi-gen/codegen/c_service_driver_code_emitter.cpp @@ -66,11 +66,22 @@ void CServiceDriverCodeEmitter::EmitDriverSourceFile() void CServiceDriverCodeEmitter::EmitDriverIncluions(StringBuilder& sb) { - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.AppendFormat("#include \"%s.h\"\n", FileName(stubName_).string()); + HeaderFile::HeaderFileSet headerFiles; + + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(stubName_))); + GetDriverSourceOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } +} + +void CServiceDriverCodeEmitter::GetDriverSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) +{ + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_base")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_log")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "osal_mem")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_device_desc")); } void CServiceDriverCodeEmitter::EmitDriverServiceDecl(StringBuilder& sb) @@ -156,7 +167,7 @@ void CServiceDriverCodeEmitter::EmitDriverEntryDefinition(StringBuilder& sb) sb.AppendFormat("struct HdfDriverEntry g_%sDriverEntry = {\n", infName_.ToLowerCase().string()); sb.Append(g_tab).Append(".moduleVersion = 1,\n"); sb.Append(g_tab).AppendFormat(".moduleName = \"%s\",\n", - Options::GetInstance().GetModeName().string()); + Options::GetInstance().GetModuleName().string()); sb.Append(g_tab).AppendFormat(".Bind = Hdf%sDriverBind,\n", infName_.string()); sb.Append(g_tab).AppendFormat(".Init = Hdf%sDriverInit,\n", infName_.string()); sb.Append(g_tab).AppendFormat(".Release = Hdf%sDriverRelease,\n", infName_.string()); diff --git a/tools/hdi-gen/codegen/c_service_driver_code_emitter.h b/tools/hdi-gen/codegen/c_service_driver_code_emitter.h index c4582f27..94fd2272 100755 --- a/tools/hdi-gen/codegen/c_service_driver_code_emitter.h +++ b/tools/hdi-gen/codegen/c_service_driver_code_emitter.h @@ -27,6 +27,8 @@ private: void EmitDriverIncluions(StringBuilder& sb); + void GetDriverSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); + void EmitDriverServiceDecl(StringBuilder& sb); void EmitDriverDispatch(StringBuilder& sb); diff --git a/tools/hdi-gen/codegen/c_service_impl_code_emitter.cpp b/tools/hdi-gen/codegen/c_service_impl_code_emitter.cpp index 2ea8fdf2..e73d3bd9 100755 --- a/tools/hdi-gen/codegen/c_service_impl_code_emitter.cpp +++ b/tools/hdi-gen/codegen/c_service_impl_code_emitter.cpp @@ -45,7 +45,7 @@ void CServiceImplCodeEmitter::EmitServiceImplHeaderFile() EmitLicense(sb); EmitHeadMacro(sb, implFullName_); sb.Append("\n"); - sb.AppendFormat("#include \"%s.h\"\n", FileName(interfaceName_).string()); + EmitServiceImplHeaderInclusions(sb); sb.Append("\n"); EmitHeadExternC(sb); sb.Append("\n"); @@ -61,6 +61,17 @@ void CServiceImplCodeEmitter::EmitServiceImplHeaderFile() file.Close(); } +void CServiceImplCodeEmitter::EmitServiceImplHeaderInclusions(StringBuilder& sb) +{ + HeaderFile::HeaderFileSet headerFiles; + + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(interfaceName_))); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } +} + void CServiceImplCodeEmitter::EmitServiceImplConstructDecl(StringBuilder& sb) { sb.AppendFormat("void %sServiceConstruct(struct %s* service);\n", infName_.string(), interfaceName_.string()); @@ -73,7 +84,7 @@ void CServiceImplCodeEmitter::EmitServiceImplSourceFile() StringBuilder sb; EmitLicense(sb); - EmitServiceImplInclusions(sb); + EmitServiceImplSourceInclusions(sb); sb.Append("\n"); EmitServiceImplMethodImpls(sb, ""); sb.Append("\n"); @@ -85,13 +96,24 @@ void CServiceImplCodeEmitter::EmitServiceImplSourceFile() file.Close(); } -void CServiceImplCodeEmitter::EmitServiceImplInclusions(StringBuilder& sb) +void CServiceImplCodeEmitter::EmitServiceImplSourceInclusions(StringBuilder& sb) { - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.AppendFormat("#include \"%s.h\"\n", FileName(infName_ + "Service").string()); + HeaderFile::HeaderFileSet headerFiles; + + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(implName_))); + GetSourceOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } +} + +void CServiceImplCodeEmitter::GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) +{ + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_base")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_log")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "osal_mem")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec")); } void CServiceImplCodeEmitter::EmitServiceImplMethodImpls(StringBuilder& sb, const String& prefix) diff --git a/tools/hdi-gen/codegen/c_service_impl_code_emitter.h b/tools/hdi-gen/codegen/c_service_impl_code_emitter.h index 1ab5fb5e..c2bc8420 100755 --- a/tools/hdi-gen/codegen/c_service_impl_code_emitter.h +++ b/tools/hdi-gen/codegen/c_service_impl_code_emitter.h @@ -25,11 +25,15 @@ private: void EmitServiceImplHeaderFile(); + void EmitServiceImplHeaderInclusions(StringBuilder& sb); + void EmitServiceImplConstructDecl(StringBuilder& sb); void EmitServiceImplSourceFile(); - void EmitServiceImplInclusions(StringBuilder& sb); + void EmitServiceImplSourceInclusions(StringBuilder& sb); + + void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); void EmitServiceImplMethodImpls(StringBuilder& sb, const String& prefix); diff --git a/tools/hdi-gen/codegen/c_service_stub_code_emitter.cpp b/tools/hdi-gen/codegen/c_service_stub_code_emitter.cpp index d6e883c8..4ccf0d70 100755 --- a/tools/hdi-gen/codegen/c_service_stub_code_emitter.cpp +++ b/tools/hdi-gen/codegen/c_service_stub_code_emitter.cpp @@ -33,12 +33,11 @@ bool CServiceStubCodeEmitter::ResolveDirectory(const String& targetDirectory) void CServiceStubCodeEmitter::EmitCode() { - - EmitCbServiceStubHeaderFile(); + EmitServiceStubHeaderFile(); EmitServiceStubSourceFile(); } -void CServiceStubCodeEmitter::EmitCbServiceStubHeaderFile() +void CServiceStubCodeEmitter::EmitServiceStubHeaderFile() { String filePath = String::Format("%s%s.h", directory_.string(), FileName(stubName_).string()); File file(filePath, File::WRITE); @@ -47,7 +46,7 @@ void CServiceStubCodeEmitter::EmitCbServiceStubHeaderFile() EmitLicense(sb); EmitHeadMacro(sb, stubFullName_); sb.Append("\n"); - sb.AppendFormat("#include \"%s.h\"\n", FileName(interfaceName_).string()); + EmitStubHeaderInclusions(sb); sb.Append("\n"); EmitHeadExternC(sb); sb.Append("\n"); @@ -63,6 +62,17 @@ void CServiceStubCodeEmitter::EmitCbServiceStubHeaderFile() file.Close(); } +void CServiceStubCodeEmitter::EmitStubHeaderInclusions(StringBuilder& sb) +{ + HeaderFile::HeaderFileSet headerFiles; + + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(interfaceName_))); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } +} + void CServiceStubCodeEmitter::EmitCbServiceStubMethodsDcl(StringBuilder& sb) { if (!isCallbackInterface()) { @@ -82,7 +92,7 @@ void CServiceStubCodeEmitter::EmitServiceStubSourceFile() StringBuilder sb; EmitLicense(sb); - EmitServiceStubInclusions(sb); + EmitStubSourceInclusions(sb); sb.Append("\n"); if (!isKernelCode_) { @@ -119,54 +129,56 @@ void CServiceStubCodeEmitter::EmitServiceStubSourceFile() file.Close(); } -void CServiceStubCodeEmitter::EmitServiceStubInclusions(StringBuilder& sb) +void CServiceStubCodeEmitter::EmitStubSourceInclusions(StringBuilder& sb) { + HeaderFile::HeaderFileSet headerFiles; if (!isCallbackInterface()) { - EmitServiceStubStdlibInclusions(sb); - sb.AppendFormat("#include \"%s.h\"\n", FileName(stubName_).string()); + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(stubName_))); if (isKernelCode_) { - sb.AppendFormat("#include \"%s.h\"\n", FileName(implName_).string()); + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(implName_))); } else { for (const auto& importPair : ast_->GetImports()) { AutoPtr importAst = importPair.second; if (importAst->GetASTFileType() == ASTFileType::AST_ICALLBACK) { String fileName = FileName(importAst->GetInterfaceDef()->GetFullName()); - sb.AppendFormat("#include \"%s.h\"\n", fileName.string()); + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, fileName)); } } } } else { - sb.AppendFormat("#include \"%s.h\"\n", FileName(stubName_).string()); - EmitServiceStubStdlibInclusions(sb); - sb.Append("#include \n"); - sb.AppendFormat("#include \"%s.h\"\n", FileName(implName_).string()); + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(stubName_))); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_remote_service")); + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(implName_))); + } + + GetSourceOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); } } -void CServiceStubCodeEmitter::EmitServiceStubStdlibInclusions(StringBuilder& sb) +void CServiceStubCodeEmitter::GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) { if (!isKernelCode_) { - sb.Append("#include \n"); - } - - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); - - if (isKernelCode_) { + headerFiles.emplace(HeaderFile(HeaderFileType::SYSTEM_HEADER_FILE, "dlfcn")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec")); + } else { const AST::TypeStringMap& types = ast_->GetTypes(); for (const auto& pair : types) { AutoPtr type = pair.second; if (type->GetTypeKind() == TypeKind::TYPE_UNION) { - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec")); break; } } - } else { - sb.Append("#include \n"); } + + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_base")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_device_desc")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_log")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_sbuf")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "osal_mem")); } void CServiceStubCodeEmitter::EmitDriverLibPath(StringBuilder& sb) @@ -180,7 +192,6 @@ void CServiceStubCodeEmitter::EmitDriverLibPath(StringBuilder& sb) void CServiceStubCodeEmitter::EmitServConstructTypedef(StringBuilder& sb) { - typedef void (*SERVICE_CONSTRUCT_FUNC)(struct callbacks *); sb.AppendFormat("typedef void (*SERVICE_CONSTRUCT_FUNC)(struct %s *);\n", interfaceName_.string()); } @@ -533,6 +544,5 @@ void CServiceStubCodeEmitter::EmitKernelStubReleaseImpl(StringBuilder& sb) sb.Append(g_tab).Append("OsalMemFree(instance);\n"); sb.Append("}"); } - } // namespace HDI } // namespace OHOS \ No newline at end of file diff --git a/tools/hdi-gen/codegen/c_service_stub_code_emitter.h b/tools/hdi-gen/codegen/c_service_stub_code_emitter.h index 03350ae3..e888015e 100755 --- a/tools/hdi-gen/codegen/c_service_stub_code_emitter.h +++ b/tools/hdi-gen/codegen/c_service_stub_code_emitter.h @@ -23,15 +23,17 @@ private: void EmitCode() override; - void EmitCbServiceStubHeaderFile(); + void EmitServiceStubHeaderFile(); + + void EmitStubHeaderInclusions(StringBuilder& sb); void EmitCbServiceStubMethodsDcl(StringBuilder& sb); void EmitServiceStubSourceFile(); - void EmitServiceStubInclusions(StringBuilder& sb); + void EmitStubSourceInclusions(StringBuilder& sb); - void EmitServiceStubStdlibInclusions(StringBuilder& sb); + void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); void EmitDriverLibPath(StringBuilder& sb); diff --git a/tools/hdi-gen/codegen/code_emitter.cpp b/tools/hdi-gen/codegen/code_emitter.cpp index 3f1c7028..e092349f 100755 --- a/tools/hdi-gen/codegen/code_emitter.cpp +++ b/tools/hdi-gen/codegen/code_emitter.cpp @@ -8,8 +8,6 @@ #include "codegen/code_emitter.h" -#include "util/logger.h" - namespace OHOS { namespace HDI { bool CodeEmitter::OutPut(const AutoPtr& ast, const String& targetDirectory, bool isKernelCode) diff --git a/tools/hdi-gen/codegen/code_emitter.h b/tools/hdi-gen/codegen/code_emitter.h index 7a867460..296bce28 100755 --- a/tools/hdi-gen/codegen/code_emitter.h +++ b/tools/hdi-gen/codegen/code_emitter.h @@ -9,6 +9,7 @@ #ifndef OHOS_HDI_CODE_EMITTER_H #define OHOS_HDI_CODE_EMITTER_H +#include #include "ast/ast.h" #include "util/autoptr.h" #include "util/light_refcount_base.h" @@ -16,6 +17,53 @@ namespace OHOS { namespace HDI { +enum class HeaderFileType { + OWN_HEADER_FILE, + SYSTEM_HEADER_FILE, + C_STD_HEADER_FILE, + CPP_STD_HEADER_FILE, + OTHER_MODULES_HEADER_FILE, + OWN_MODULE_HEADER_FILE, +}; + +struct HeaderFile { + HeaderFile(HeaderFileType type, String fileName) : type_(type), fileName_(fileName) {} + + struct compare { + bool operator()(const HeaderFile& lhs, const HeaderFile& rhs) + { + if (lhs.type_ < rhs.type_) { + return true; + } else if (lhs.type_ > rhs.type_) { + return false; + } + + return lhs.fileName_.Compare(rhs.fileName_) <= 0; + } + }; + + String ToString() const { + switch(type_) { + case HeaderFileType::OWN_HEADER_FILE: + case HeaderFileType::OWN_MODULE_HEADER_FILE: + return String::Format("#include \"%s.h\"", fileName_.string()); + case HeaderFileType::SYSTEM_HEADER_FILE: + case HeaderFileType::C_STD_HEADER_FILE: + case HeaderFileType::OTHER_MODULES_HEADER_FILE: + return String::Format("#include <%s.h>", fileName_.string()); + case HeaderFileType::CPP_STD_HEADER_FILE: + return String::Format("#include <%s>", fileName_.string()); + default: + return String::Format("//"); + } + } + + using HeaderFileSet = std::set; + + HeaderFileType type_; + String fileName_; +}; + class CodeEmitter : public LightRefCountBase { public: virtual ~CodeEmitter() = default; diff --git a/tools/hdi-gen/codegen/cpp_client_proxy_code_emitter.cpp b/tools/hdi-gen/codegen/cpp_client_proxy_code_emitter.cpp index 6c5059ff..bbb0ad13 100755 --- a/tools/hdi-gen/codegen/cpp_client_proxy_code_emitter.cpp +++ b/tools/hdi-gen/codegen/cpp_client_proxy_code_emitter.cpp @@ -8,7 +8,6 @@ #include "codegen/cpp_client_proxy_code_emitter.h" #include "util/file.h" - #include "util/logger.h" namespace OHOS { @@ -46,7 +45,7 @@ void CppClientProxyCodeEmitter::EmitProxyHeaderFile() EmitLicense(sb); EmitHeadMacro(sb, proxyFullName_); sb.Append("\n"); - EmitProxyHeadrInclusions(sb); + EmitProxyHeaderInclusions(sb); sb.Append("\n"); EmitBeginNamespace(sb); sb.Append("\n"); @@ -62,10 +61,21 @@ void CppClientProxyCodeEmitter::EmitProxyHeaderFile() file.Close(); } -void CppClientProxyCodeEmitter::EmitProxyHeadrInclusions(StringBuilder& sb) +void CppClientProxyCodeEmitter::EmitProxyHeaderInclusions(StringBuilder& sb) { - sb.AppendFormat("#include \"%s.h\"\n", FileName(interfaceName_).string()); - sb.Append("#include \n"); + HeaderFile::HeaderFileSet headerFiles; + + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(interfaceName_))); + GetHeaderOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } +} + +void CppClientProxyCodeEmitter::GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) +{ + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "iremote_proxy")); } void CppClientProxyCodeEmitter::EmitProxyDecl(StringBuilder& sb, const String& prefix) @@ -164,21 +174,30 @@ void CppClientProxyCodeEmitter::EmitProxySourceFile() void CppClientProxyCodeEmitter::EmitProxySourceInclusions(StringBuilder& sb) { - sb.AppendFormat("#include \"%s.h\"\n", FileName(proxyName_).string()); - EmitProxySourceStdlibInclusions(sb); + HeaderFile::HeaderFileSet headerFiles; + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(proxyName_))); + GetSourceOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } } -void CppClientProxyCodeEmitter::EmitProxySourceStdlibInclusions(StringBuilder& sb) +void CppClientProxyCodeEmitter::GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) { - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); + if (!isCallbackInterface()) { + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "iservmgr_hdi")); + } + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_base")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_log")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "message_option")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "message_parcel")); const AST::TypeStringMap& types = ast_->GetTypes(); for (const auto& pair : types) { AutoPtr type = pair.second; if (type->GetTypeKind() == TypeKind::TYPE_UNION) { - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec")); break; } } @@ -207,7 +226,8 @@ void CppClientProxyCodeEmitter::EmitGetInstanceMethodImpl(StringBuilder& sb, con "HDF_LOGE(\"%{public}s:get IServiceManager failed!\", __func__);\n"); sb.Append(prefix + g_tab + g_tab + g_tab).Append("break;\n"); sb.Append(prefix + g_tab + g_tab).Append("}\n\n"); - sb.Append(prefix + g_tab + g_tab).Append("sptr remote = servMgr->GetService(serviceName.c_str());\n"); + sb.Append(prefix + g_tab + g_tab).Append("sptr remote = "); + sb.Append("servMgr->GetService(serviceName.c_str());\n"); sb.Append(prefix + g_tab + g_tab).Append("if (remote != nullptr) {\n"); sb.Append(prefix + g_tab + g_tab + g_tab).AppendFormat("return iface_cast<%s>(remote);\n", interface_->GetName().string()); diff --git a/tools/hdi-gen/codegen/cpp_client_proxy_code_emitter.h b/tools/hdi-gen/codegen/cpp_client_proxy_code_emitter.h index 868f113f..dcf10b67 100755 --- a/tools/hdi-gen/codegen/cpp_client_proxy_code_emitter.h +++ b/tools/hdi-gen/codegen/cpp_client_proxy_code_emitter.h @@ -25,7 +25,9 @@ private: void EmitProxyHeaderFile(); - void EmitProxyHeadrInclusions(StringBuilder& sb); + void EmitProxyHeaderInclusions(StringBuilder& sb); + + void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); void EmitProxyDecl(StringBuilder& sb, const String& prefix); @@ -43,7 +45,7 @@ private: void EmitProxySourceInclusions(StringBuilder& sb); - void EmitProxySourceStdlibInclusions(StringBuilder& sb); + void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); void EmitGetMethodImpl(StringBuilder& sb, const String& prefix); diff --git a/tools/hdi-gen/codegen/cpp_code_emitter.cpp b/tools/hdi-gen/codegen/cpp_code_emitter.cpp index 83b857d0..4a791c6e 100755 --- a/tools/hdi-gen/codegen/cpp_code_emitter.cpp +++ b/tools/hdi-gen/codegen/cpp_code_emitter.cpp @@ -12,8 +12,6 @@ #include #include -#include "util/logger.h" - namespace OHOS { namespace HDI { String CppCodeEmitter::FileName(const String& name) @@ -50,6 +48,53 @@ void CppCodeEmitter::EmitInterfaceMethodCommands(StringBuilder& sb, const String sb.Append(prefix).Append("};\n"); } +void CppCodeEmitter::GetStdlibInclusions(HeaderFile::HeaderFileSet& headerFiles) +{ + bool includeString = false; + bool includeList = false; + bool includeMap = false; + + const AST::TypeStringMap& types = ast_->GetTypes(); + for (const auto& pair : types) { + AutoPtr type = pair.second; + switch (type->GetTypeKind()) { + case TypeKind::TYPE_STRING: { + if (!includeString) { + headerFiles.emplace(HeaderFile(HeaderFileType::CPP_STD_HEADER_FILE, "string")); + includeString = true; + } + break; + } + case TypeKind::TYPE_ARRAY: + case TypeKind::TYPE_LIST: { + if (!includeList) { + headerFiles.emplace(HeaderFile(HeaderFileType::CPP_STD_HEADER_FILE, "vector")); + includeList = true; + } + break; + } + case TypeKind::TYPE_MAP: { + if (!includeMap) { + headerFiles.emplace(HeaderFile(HeaderFileType::CPP_STD_HEADER_FILE, "map")); + includeMap = true; + } + break; + } + default: + break; + } + } +} + +void CppCodeEmitter::GetImportInclusions(HeaderFile::HeaderFileSet& headerFiles) +{ + for (const auto& importPair : ast_->GetImports()) { + AutoPtr importAst = importPair.second; + String fileName = FileName(importAst->GetFullName()); + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(importAst->GetFullName()))); + } +} + void CppCodeEmitter::EmitInterfaceMethodParameter(const AutoPtr& param, StringBuilder& sb, const String& prefix) { diff --git a/tools/hdi-gen/codegen/cpp_code_emitter.h b/tools/hdi-gen/codegen/cpp_code_emitter.h index a7c30f1e..1ce214c2 100755 --- a/tools/hdi-gen/codegen/cpp_code_emitter.h +++ b/tools/hdi-gen/codegen/cpp_code_emitter.h @@ -27,6 +27,10 @@ public: protected: void EmitInterfaceMethodCommands(StringBuilder& sb, const String& prefix); + void GetStdlibInclusions(HeaderFile::HeaderFileSet& headerFiles); + + void GetImportInclusions(HeaderFile::HeaderFileSet& headerFiles); + void EmitInterfaceMethodParameter(const AutoPtr& param, StringBuilder& sb, const String& prefix); void EmitLicense(StringBuilder& sb); diff --git a/tools/hdi-gen/codegen/cpp_custom_types_code_emitter.cpp b/tools/hdi-gen/codegen/cpp_custom_types_code_emitter.cpp index 248b801e..ee6ef607 100755 --- a/tools/hdi-gen/codegen/cpp_custom_types_code_emitter.cpp +++ b/tools/hdi-gen/codegen/cpp_custom_types_code_emitter.cpp @@ -66,56 +66,20 @@ void CppCustomTypesCodeEmitter::EmitCustomTypesHeaderFile() void CppCustomTypesCodeEmitter::EmitHeaderFileInclusions(StringBuilder& sb) { - EmitCustomTypesStdlibInclusions(sb); - sb.Append("#include \n"); - EmitImportInclusions(sb); -} + HeaderFile::HeaderFileSet headerFiles; -void CppCustomTypesCodeEmitter::EmitCustomTypesStdlibInclusions(StringBuilder& sb) -{ - bool includeString = false; - bool includeList = false; - bool includeMap = false; + GetStdlibInclusions(headerFiles); + GetImportInclusions(headerFiles); + GetHeaderOtherLibInclusions(headerFiles); - const AST::TypeStringMap& types = ast_->GetTypes(); - for (const auto& pair : types) { - AutoPtr type = pair.second; - switch (type->GetTypeKind()) { - case TypeKind::TYPE_STRING: { - if (!includeString) { - sb.Append("#include \n"); - includeString = true; - } - break; - } - case TypeKind::TYPE_ARRAY: - case TypeKind::TYPE_LIST: { - if (!includeList) { - sb.Append("#include \n"); - includeList = true; - } - break; - } - case TypeKind::TYPE_MAP: { - if (!includeMap) { - sb.Append("#include \n"); - includeMap = true; - } - break; - } - default: - break; - } + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); } } -void CppCustomTypesCodeEmitter::EmitImportInclusions(StringBuilder& sb) +void CppCustomTypesCodeEmitter::GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) { - for (const auto& importPair : ast_->GetImports()) { - AutoPtr importAst = importPair.second; - String fileName = FileName(importAst->GetFullName()); - sb.Append("#include ").AppendFormat("\"%s.h\"\n", fileName.string()); - } + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "message_parcel")); } void CppCustomTypesCodeEmitter::EmitCustomTypeDecls(StringBuilder& sb) @@ -205,18 +169,24 @@ void CppCustomTypesCodeEmitter::EmitCustomTypesSourceFile() void CppCustomTypesCodeEmitter::EmitSourceFileInclusions(StringBuilder& sb) { - sb.AppendFormat("#include \"%s.h\"\n", FileName(infName_).string()); - EmitSourceStdlibInclusions(sb); + HeaderFile::HeaderFileSet headerFiles; + + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(infName_))); + GetSourceOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } } -void CppCustomTypesCodeEmitter::EmitSourceStdlibInclusions(StringBuilder& sb) +void CppCustomTypesCodeEmitter::GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) { - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_log")); const AST::TypeStringMap& types = ast_->GetTypes(); for (const auto& pair : types) { AutoPtr type = pair.second; if (type->GetTypeKind() == TypeKind::TYPE_STRUCT || type->GetTypeKind() == TypeKind::TYPE_UNION) { - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec")); break; } } diff --git a/tools/hdi-gen/codegen/cpp_custom_types_code_emitter.h b/tools/hdi-gen/codegen/cpp_custom_types_code_emitter.h index c311c756..2dae423a 100755 --- a/tools/hdi-gen/codegen/cpp_custom_types_code_emitter.h +++ b/tools/hdi-gen/codegen/cpp_custom_types_code_emitter.h @@ -27,9 +27,7 @@ private: void EmitHeaderFileInclusions(StringBuilder& sb); - void EmitCustomTypesStdlibInclusions(StringBuilder& sb); - - void EmitImportInclusions(StringBuilder& sb); + void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); void EmitCustomTypeDecls(StringBuilder& sb); @@ -45,7 +43,7 @@ private: void EmitSourceFileInclusions(StringBuilder& sb); - void EmitSourceStdlibInclusions(StringBuilder& sb); + void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); void EmitCustomTypeDataProcess(StringBuilder& sb); diff --git a/tools/hdi-gen/codegen/cpp_interface_code_emitter.cpp b/tools/hdi-gen/codegen/cpp_interface_code_emitter.cpp index 0e0a7c76..71f96a65 100755 --- a/tools/hdi-gen/codegen/cpp_interface_code_emitter.cpp +++ b/tools/hdi-gen/codegen/cpp_interface_code_emitter.cpp @@ -66,62 +66,21 @@ void CppInterfaceCodeEmitter::EmitInterfaceHeaderFile() void CppInterfaceCodeEmitter::EmitInterfaceInclusions(StringBuilder& sb) { - EmitInterfaceStdlibInclusions(sb); - EmitInterfaceDBinderInclusions(sb); - EmitInterfaceSelfDefinedTypeInclusions(sb); -} + HeaderFile::HeaderFileSet headerFiles; -void CppInterfaceCodeEmitter::EmitInterfaceStdlibInclusions(StringBuilder& sb) -{ - bool includeString = false; - bool includeList = false; - bool includeMap = false; + GetStdlibInclusions(headerFiles); + GetImportInclusions(headerFiles); + GetHeaderOtherLibInclusions(headerFiles); - const AST::TypeStringMap& types = ast_->GetTypes(); - for (const auto& pair : types) { - AutoPtr type = pair.second; - switch (type->GetTypeKind()) { - case TypeKind::TYPE_STRING: { - if (!includeString) { - sb.Append("#include \n"); - includeString = true; - } - break; - } - case TypeKind::TYPE_ARRAY: - case TypeKind::TYPE_LIST: { - if (!includeList) { - sb.Append("#include \n"); - includeList = true; - } - break; - } - case TypeKind::TYPE_MAP: { - if (!includeMap) { - sb.Append("#include \n"); - includeMap = true; - } - break; - } - default: - break; - } + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); } } -void CppInterfaceCodeEmitter::EmitInterfaceDBinderInclusions(StringBuilder& sb) +void CppInterfaceCodeEmitter::GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) { - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); -} - -void CppInterfaceCodeEmitter::EmitInterfaceSelfDefinedTypeInclusions(StringBuilder& sb) -{ - for (const auto& importPair : ast_->GetImports()) { - AutoPtr importAst = importPair.second; - sb.Append("#include ").AppendFormat("\"%s.h\"\n", FileName(importAst->GetFullName()).string()); - } + headerFiles.emplace(HeaderFile(HeaderFileType::C_STD_HEADER_FILE, "stdint")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "iremote_broker")); } void CppInterfaceCodeEmitter::EmitInterfaceDefinition(StringBuilder& sb) diff --git a/tools/hdi-gen/codegen/cpp_interface_code_emitter.h b/tools/hdi-gen/codegen/cpp_interface_code_emitter.h index 2481aac5..d4eddb59 100755 --- a/tools/hdi-gen/codegen/cpp_interface_code_emitter.h +++ b/tools/hdi-gen/codegen/cpp_interface_code_emitter.h @@ -28,11 +28,7 @@ private: void EmitInterfaceInclusions(StringBuilder& sb); - void EmitInterfaceStdlibInclusions(StringBuilder& sb); - - void EmitInterfaceDBinderInclusions(StringBuilder& sb); - - void EmitInterfaceSelfDefinedTypeInclusions(StringBuilder& sb); + void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); void EmitInterfaceDefinition(StringBuilder& sb); diff --git a/tools/hdi-gen/codegen/cpp_service_driver_code_emitter.cpp b/tools/hdi-gen/codegen/cpp_service_driver_code_emitter.cpp index 9a08369b..736f665b 100755 --- a/tools/hdi-gen/codegen/cpp_service_driver_code_emitter.cpp +++ b/tools/hdi-gen/codegen/cpp_service_driver_code_emitter.cpp @@ -162,7 +162,7 @@ void CppServiceDriverCodeEmitter::EmitDriverEntryDefinition(StringBuilder& sb) sb.AppendFormat("struct HdfDriverEntry g_%sDriverEntry = {\n", infName_.ToLowerCase().string()); sb.Append(g_tab).Append(".moduleVersion = 1,\n"); sb.Append(g_tab).AppendFormat(".moduleName = \"%s\",\n", - Options::GetInstance().GetModeName().string()); + Options::GetInstance().GetModuleName().string()); sb.Append(g_tab).AppendFormat(".Bind = Hdf%sDriverBind,\n", infName_.string()); sb.Append(g_tab).AppendFormat(".Init = Hdf%sDriverInit,\n", infName_.string()); sb.Append(g_tab).AppendFormat(".Release = Hdf%sDriverRelease,\n", infName_.string()); diff --git a/tools/hdi-gen/codegen/cpp_service_impl_code_emitter.cpp b/tools/hdi-gen/codegen/cpp_service_impl_code_emitter.cpp index 263f68bd..873ba68d 100755 --- a/tools/hdi-gen/codegen/cpp_service_impl_code_emitter.cpp +++ b/tools/hdi-gen/codegen/cpp_service_impl_code_emitter.cpp @@ -71,12 +71,16 @@ void CppServiceImplCodeEmitter::EmitImplHeaderFile() void CppServiceImplCodeEmitter::EmitServiceImplInclusions(StringBuilder& sb) { + HeaderFile::HeaderFileSet headerFiles; if (!isCallbackInterface()) { - sb.AppendFormat("#include \"%s.h\"\n", FileName(interfaceName_).string()); + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(interfaceName_))); } else { - sb.AppendFormat("#include \"%s.h\"\n", FileName(stubName_).string()); + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(stubName_))); + } + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); } - sb.Append("#include \n"); } void CppServiceImplCodeEmitter::EmitServiceImplDecl(StringBuilder& sb) @@ -159,7 +163,7 @@ void CppServiceImplCodeEmitter::EmitImplSourceFile() StringBuilder sb; EmitLicense(sb); - sb.AppendFormat("#include \"%s_service.h\"\n", FileName(infName_).string()); + EmitImplSourceInclusions(sb); sb.Append("\n"); EmitBeginNamespace(sb); sb.Append("\n"); @@ -179,6 +183,22 @@ void CppServiceImplCodeEmitter::EmitImplSourceFile() file.Close(); } +void CppServiceImplCodeEmitter::EmitImplSourceInclusions(StringBuilder& sb) +{ + HeaderFile::HeaderFileSet headerFiles; + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(implName_))); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_base")); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } +} + +void CppServiceImplCodeEmitter::GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) +{ + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_base")); +} + void CppServiceImplCodeEmitter::EmitServiceImplMethodImpls(StringBuilder& sb, const String& prefix) { for (size_t i = 0; i < interface_->GetMethodNumber(); i++) { diff --git a/tools/hdi-gen/codegen/cpp_service_impl_code_emitter.h b/tools/hdi-gen/codegen/cpp_service_impl_code_emitter.h index 265545a6..dc0b7f57 100755 --- a/tools/hdi-gen/codegen/cpp_service_impl_code_emitter.h +++ b/tools/hdi-gen/codegen/cpp_service_impl_code_emitter.h @@ -43,6 +43,10 @@ private: void EmitImplSourceFile(); + void EmitImplSourceInclusions(StringBuilder& sb); + + void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); + void EmitServiceImplMethodImpls(StringBuilder& sb, const String& prefix); void EmitServiceImplMethodImpl(const AutoPtr& method, StringBuilder& sb, const String& prefix); diff --git a/tools/hdi-gen/codegen/cpp_service_stub_code_emitter.cpp b/tools/hdi-gen/codegen/cpp_service_stub_code_emitter.cpp index 040705f8..e90a0eec 100755 --- a/tools/hdi-gen/codegen/cpp_service_stub_code_emitter.cpp +++ b/tools/hdi-gen/codegen/cpp_service_stub_code_emitter.cpp @@ -64,13 +64,23 @@ void CppServiceStubCodeEmitter::EmitStubHeaderFile() void CppServiceStubCodeEmitter::EmitStubHeaderInclusions(StringBuilder& sb) { - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); - if (isCallbackInterface()) { - sb.Append("#include \n"); + HeaderFile::HeaderFileSet headerFiles; + + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(interfaceName_))); + GetHeaderOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } +} + +void CppServiceStubCodeEmitter::GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) +{ + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "message_parcel")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "message_option")); + if (isCallbackInterface()) { + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "iremote_stub")); } - sb.AppendFormat("#include \"%s.h\"\n", FileName(interfaceName_).string()); } void CppServiceStubCodeEmitter::EmitStubDecl(StringBuilder& sb) @@ -238,31 +248,34 @@ void CppServiceStubCodeEmitter::EmitStubSourceFile() void CppServiceStubCodeEmitter::EmitStubSourceInclusions(StringBuilder& sb) { - sb.AppendFormat("#include \"%s.h\"\n", FileName(stubName_).string()); - EmitStubSourceStdlibInclusions(sb); + HeaderFile::HeaderFileSet headerFiles; + headerFiles.emplace(HeaderFile(HeaderFileType::OWN_HEADER_FILE, FileName(stubName_))); + GetSourceOtherLibInclusions(headerFiles); + + for (const auto& file : headerFiles) { + sb.AppendFormat("%s\n", file.ToString().string()); + } } -void CppServiceStubCodeEmitter::EmitStubSourceStdlibInclusions(StringBuilder& sb) +void CppServiceStubCodeEmitter::GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles) { if (!isCallbackInterface()) { - sb.Append("#include \n"); - } - sb.Append("#include \n"); - sb.Append("#include \n"); - sb.Append("#include \n"); - - const AST::TypeStringMap& types = ast_->GetTypes(); - if (isCallbackInterface()) { + headerFiles.emplace(HeaderFile(HeaderFileType::SYSTEM_HEADER_FILE, "dlfcn")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_sbuf_ipc")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec")); + } else { + const AST::TypeStringMap& types = ast_->GetTypes(); for (const auto& pair : types) { AutoPtr type = pair.second; if (type->GetTypeKind() == TypeKind::TYPE_UNION) { - sb.Append("#include \n"); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec")); break; } } - } else { - sb.Append("#include \n"); } + + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_base")); + headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_log")); } void CppServiceStubCodeEmitter::EmitDriverLibPath(StringBuilder& sb) diff --git a/tools/hdi-gen/codegen/cpp_service_stub_code_emitter.h b/tools/hdi-gen/codegen/cpp_service_stub_code_emitter.h index 9d8bd615..c0dd1fd4 100755 --- a/tools/hdi-gen/codegen/cpp_service_stub_code_emitter.h +++ b/tools/hdi-gen/codegen/cpp_service_stub_code_emitter.h @@ -28,6 +28,8 @@ private: void EmitStubHeaderInclusions(StringBuilder& sb); + void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); + void EmitStubUsingNamespace(StringBuilder& sb); void EmitStubDecl(StringBuilder& sb); @@ -57,7 +59,7 @@ private: void EmitStubSourceInclusions(StringBuilder& sb); - void EmitStubSourceStdlibInclusions(StringBuilder& sb); + void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles); void EmitDriverLibPath(StringBuilder& sb); diff --git a/tools/hdi-gen/util/options.cpp b/tools/hdi-gen/util/options.cpp index 5960d6ae..42f7d621 100755 --- a/tools/hdi-gen/util/options.cpp +++ b/tools/hdi-gen/util/options.cpp @@ -25,7 +25,7 @@ static struct option g_longOpts[] = { {"gen-java", no_argument, nullptr, 'J'}, {"gen-hash", no_argument, nullptr, 'H'}, {"build-target", required_argument, nullptr, 'p'}, - {"mode-name", required_argument, nullptr, 'N'}, + {"module-name", required_argument, nullptr, 'N'}, {"kernel", no_argument, nullptr, 'K'}, {"dump-ast", no_argument, nullptr, 'D'}, {nullptr, 0, nullptr, 0} @@ -56,7 +56,7 @@ void Options::SetOptionData(char op) switch (op) { case 'c': doCompile_ = true; - sourceFiles_.push_back(optarg); + sourceFiles_.push_back(optarg); break; case 'd': doOutDir_ = true; @@ -72,8 +72,8 @@ void Options::SetOptionData(char op) doModeKernel_ = true; break; case 'N': - doSetModeName_ = true; - modeName_ = optarg; + doSetModuleName_ = true; + moduleName_ = optarg; break; case 'C': SetLanguage("c"); @@ -137,9 +137,8 @@ void Options::CheckOptions() if (doGeneratePart_ && !codePart_.Equals("all") && !codePart_.Equals("client") && !codePart_.Equals("server")) { - errors_.push_back( - String::Format("%s: The '--build-target' option parameter must be 'client' 'server' or 'all'.", - program_.string())); + String errorLog = "The '--build-target' option parameter must be 'client' 'server' or 'all'."; + errors_.push_back(String::Format("%s: %s", program_.string(), errorLog.string())); } } else { if (doGetHashKey_ || doDumpAST_ || doGenerateCode_ || doOutDir_) { @@ -178,7 +177,7 @@ void Options::ShowUsage() const " --gen-cpp Generate C++ code\n" " --gen-java Generate Java code\n" " --kernel Generate kernel-mode ioservice stub code, default user-mode ioservice stub code\n" - " --mode-name Set driver module name\n" + " --module-name Set driver module name\n" " --build-target Generate client code, server code or all code\n" " -d Place generated codes into \n"); } diff --git a/tools/hdi-gen/util/options.h b/tools/hdi-gen/util/options.h index e9423120..d33f1aec 100755 --- a/tools/hdi-gen/util/options.h +++ b/tools/hdi-gen/util/options.h @@ -80,9 +80,9 @@ public: return codePart_; } - inline String GetModeName() const + inline String GetModuleName() const { - return doSetModeName_ ? modeName_ : "sample"; + return doSetModuleName_ ? moduleName_ : "sample"; } inline String GetGenerationDirectory() const @@ -112,7 +112,7 @@ private: doGenerateCode_(false), doModeKernel_(false), doGeneratePart_(false), - doSetModeName_(false), + doSetModuleName_(false), doOutDir_(false) {} void SetOptionData(char op); @@ -133,7 +133,7 @@ private: std::vector sourceFiles_; String targetLanguage_; String codePart_; - String modeName_; + String moduleName_; String generationDirectory_; String illegalOptions_; std::vector errors_; @@ -146,7 +146,7 @@ private: bool doGenerateCode_; bool doModeKernel_; bool doGeneratePart_; - bool doSetModeName_; + bool doSetModuleName_; bool doOutDir_; }; } // namespace HDI diff --git a/tools/hdi-gen/util/string.cpp b/tools/hdi-gen/util/string.cpp index 66e26dc3..3359e790 100755 --- a/tools/hdi-gen/util/string.cpp +++ b/tools/hdi-gen/util/string.cpp @@ -196,6 +196,23 @@ bool String::Equals(const String& other) const return false; } +int String::Compare(const String& other) const +{ + if (string_ == nullptr) { + if (other.string_ == nullptr) { + return 0; + } else { + return -1; + } + } + + if (other.string_ == nullptr) { + return 1; + } + + return strcmp(string_, other.string_); +} + int String::GetHashCode() const { // BKDR Hash Function diff --git a/tools/hdi-gen/util/string.h b/tools/hdi-gen/util/string.h index fc7acf67..2330f88a 100755 --- a/tools/hdi-gen/util/string.h +++ b/tools/hdi-gen/util/string.h @@ -57,6 +57,8 @@ public: bool Equals(const String& other) const; + int Compare(const String& other) const; + int GetHashCode() const; int IndexOf(char c, int fromIndex = 0) const;