fix:modify make clean and header file order

Signed-off-by: yue <yueyan4@huawei.com>
This commit is contained in:
yue
2021-12-09 15:09:17 +08:00
parent 78e3e25486
commit 287205cc66
38 changed files with 621 additions and 413 deletions
+2 -2
View File
@@ -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),
]
}
+34 -24
View File
@@ -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
+69 -71
View File
@@ -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
+70 -72
View File
@@ -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
+14 -2
View File
@@ -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)
@@ -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 <hdf_base.h>\n");
if (!isCallbackInterface() && !isKernelCode_) {
sb.Append("#include <hdf_dlist.h>\n");
}
sb.Append("#include <hdf_log.h>\n");
sb.Append("#include <hdf_sbuf.h>\n");
sb.Append("#include <osal_mem.h>\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 <hdf_io_service_if.h>\n");
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_io_service_if"));
} else {
sb.Append("#include <servmgr_hdi.h>\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<ASTType> type = pair.second;
if (type->GetTypeKind() == TypeKind::TYPE_UNION) {
sb.Append("#include <securec.h>\n");
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec"));
break;
}
}
@@ -29,7 +29,7 @@ private:
void EmitProxyInclusions(StringBuilder& sb);
void EmitProxyStdlibInclusions(StringBuilder& sb);
void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles);
void EmitProxyCallMethodImpl(StringBuilder& sb);
+9
View File
@@ -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<AST> importAst = importPair.second;
String fileName = FileName(importAst->GetFullName());
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(importAst->GetFullName())));
}
}
void CCodeEmitter::EmitInterfaceMethodParameter(const AutoPtr<ASTParameter>& parameter, StringBuilder& sb,
const String& prefix)
{
+2 -1
View File
@@ -9,7 +9,6 @@
#ifndef OHOS_HDI_C_CODE_EMITTER_H
#define OHOS_HDI_C_CODE_EMITTER_H
#include <vector>
#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<ASTParameter>& parameter, StringBuilder& sb, const String& prefix);
void EmitErrorHandle(const AutoPtr<ASTMethod>& method, const String& gotoLabel, bool isClient, StringBuilder& sb,
@@ -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<ASTType> type = ast_->GetTypeDefintion(i);
if (type->GetTypeKind() == TypeKind::TYPE_STRUCT) {
sb.Append("#include <hdf_sbuf.h>\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 <hdf_log.h>\n");
sb.Append("#include <osal_mem.h>\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<ASTType> type = pair.second;
if (type->GetTypeKind() == TypeKind::TYPE_STRUCT
|| type->GetTypeKind() == TypeKind::TYPE_UNION) {
sb.Append("#include <securec.h>\n");
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec"));
break;
}
}
@@ -27,6 +27,8 @@ private:
void EmitHeaderInclusions(StringBuilder& sb);
void GetHeaderOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles);
void EmitCustomTypeDecls(StringBuilder& sb);
void EmitCustomTypeDecl(StringBuilder& sb, const AutoPtr<ASTType>& type);
@@ -43,7 +45,7 @@ private:
void EmitSoucreIncludsions(StringBuilder& sb);
void EmitSourceStdlibInclusions(StringBuilder& sb);
void GetSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles);
void EmitCustomTypeDataProcess(StringBuilder& sb);
@@ -68,13 +68,21 @@ void CInterfaceCodeEmitter::EmitInterfaceHeaderFile()
void CInterfaceCodeEmitter::EmitImportInclusions(StringBuilder& sb)
{
sb.Append("#include <stdint.h>\n");
for (const auto& importPair : ast_->GetImports()) {
AutoPtr<AST> 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());
@@ -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);
@@ -66,11 +66,22 @@ void CServiceDriverCodeEmitter::EmitDriverSourceFile()
void CServiceDriverCodeEmitter::EmitDriverIncluions(StringBuilder& sb)
{
sb.Append("#include <hdf_base.h>\n");
sb.Append("#include <hdf_log.h>\n");
sb.Append("#include <osal_mem.h>\n");
sb.Append("#include <hdf_device_desc.h>\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());
@@ -27,6 +27,8 @@ private:
void EmitDriverIncluions(StringBuilder& sb);
void GetDriverSourceOtherLibInclusions(HeaderFile::HeaderFileSet& headerFiles);
void EmitDriverServiceDecl(StringBuilder& sb);
void EmitDriverDispatch(StringBuilder& sb);
@@ -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 <hdf_base.h>\n");
sb.Append("#include <hdf_log.h>\n");
sb.Append("#include <osal_mem.h>\n");
sb.Append("#include <securec.h>\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)
@@ -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);
@@ -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<AST> 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 <hdf_remote_service.h>\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 <dlfcn.h>\n");
}
sb.Append("#include <hdf_base.h>\n");
sb.Append("#include <hdf_device_desc.h>\n");
sb.Append("#include <hdf_log.h>\n");
sb.Append("#include <hdf_sbuf.h>\n");
sb.Append("#include <osal_mem.h>\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<ASTType> type = pair.second;
if (type->GetTypeKind() == TypeKind::TYPE_UNION) {
sb.Append("#include <securec.h>\n");
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec"));
break;
}
}
} else {
sb.Append("#include <securec.h>\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
@@ -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);
-2
View File
@@ -8,8 +8,6 @@
#include "codegen/code_emitter.h"
#include "util/logger.h"
namespace OHOS {
namespace HDI {
bool CodeEmitter::OutPut(const AutoPtr<AST>& ast, const String& targetDirectory, bool isKernelCode)
+48
View File
@@ -9,6 +9,7 @@
#ifndef OHOS_HDI_CODE_EMITTER_H
#define OHOS_HDI_CODE_EMITTER_H
#include <set>
#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<HeaderFile, HeaderFile::compare>;
HeaderFileType type_;
String fileName_;
};
class CodeEmitter : public LightRefCountBase {
public:
virtual ~CodeEmitter() = default;
@@ -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 <iremote_proxy.h>\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 <hdf_base.h>\n");
sb.Append("#include <message_option.h>\n");
sb.Append("#include <message_parcel.h>\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<ASTType> type = pair.second;
if (type->GetTypeKind() == TypeKind::TYPE_UNION) {
sb.Append("#include <securec.h>\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<IRemoteObject> remote = servMgr->GetService(serviceName.c_str());\n");
sb.Append(prefix + g_tab + g_tab).Append("sptr<IRemoteObject> 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());
@@ -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);
+47 -2
View File
@@ -12,8 +12,6 @@
#include <unistd.h>
#include <unordered_set>
#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<ASTType> 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<AST> importAst = importPair.second;
String fileName = FileName(importAst->GetFullName());
headerFiles.emplace(HeaderFile(HeaderFileType::OWN_MODULE_HEADER_FILE, FileName(importAst->GetFullName())));
}
}
void CppCodeEmitter::EmitInterfaceMethodParameter(const AutoPtr<ASTParameter>& param, StringBuilder& sb,
const String& prefix)
{
+4
View File
@@ -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<ASTParameter>& param, StringBuilder& sb, const String& prefix);
void EmitLicense(StringBuilder& sb);
@@ -66,56 +66,20 @@ void CppCustomTypesCodeEmitter::EmitCustomTypesHeaderFile()
void CppCustomTypesCodeEmitter::EmitHeaderFileInclusions(StringBuilder& sb)
{
EmitCustomTypesStdlibInclusions(sb);
sb.Append("#include <message_parcel.h>\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<ASTType> type = pair.second;
switch (type->GetTypeKind()) {
case TypeKind::TYPE_STRING: {
if (!includeString) {
sb.Append("#include <string>\n");
includeString = true;
}
break;
}
case TypeKind::TYPE_ARRAY:
case TypeKind::TYPE_LIST: {
if (!includeList) {
sb.Append("#include <vector>\n");
includeList = true;
}
break;
}
case TypeKind::TYPE_MAP: {
if (!includeMap) {
sb.Append("#include <map>\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<AST> 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 <hdf_log.h>\n");
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "hdf_log"));
const AST::TypeStringMap& types = ast_->GetTypes();
for (const auto& pair : types) {
AutoPtr<ASTType> type = pair.second;
if (type->GetTypeKind() == TypeKind::TYPE_STRUCT || type->GetTypeKind() == TypeKind::TYPE_UNION) {
sb.Append("#include <securec.h>\n");
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec"));
break;
}
}
@@ -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);
@@ -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<ASTType> type = pair.second;
switch (type->GetTypeKind()) {
case TypeKind::TYPE_STRING: {
if (!includeString) {
sb.Append("#include <string>\n");
includeString = true;
}
break;
}
case TypeKind::TYPE_ARRAY:
case TypeKind::TYPE_LIST: {
if (!includeList) {
sb.Append("#include <vector>\n");
includeList = true;
}
break;
}
case TypeKind::TYPE_MAP: {
if (!includeMap) {
sb.Append("#include <map>\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 <stdint.h>\n");
sb.Append("#include <hdf_log.h>\n");
sb.Append("#include <iservmgr_hdi.h>\n");
}
void CppInterfaceCodeEmitter::EmitInterfaceSelfDefinedTypeInclusions(StringBuilder& sb)
{
for (const auto& importPair : ast_->GetImports()) {
AutoPtr<AST> 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)
@@ -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);
@@ -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());
@@ -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 <hdf_base.h>\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++) {
@@ -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<ASTMethod>& method, StringBuilder& sb, const String& prefix);
@@ -64,13 +64,23 @@ void CppServiceStubCodeEmitter::EmitStubHeaderFile()
void CppServiceStubCodeEmitter::EmitStubHeaderInclusions(StringBuilder& sb)
{
sb.Append("#include <message_parcel.h>\n");
sb.Append("#include <message_option.h>\n");
sb.Append("#include <refbase.h>\n");
if (isCallbackInterface()) {
sb.Append("#include <iremote_stub.h>\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 <dlfcn.h>\n");
}
sb.Append("#include <hdf_base.h>\n");
sb.Append("#include <hdf_log.h>\n");
sb.Append("#include <hdf_sbuf_ipc.h>\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<ASTType> type = pair.second;
if (type->GetTypeKind() == TypeKind::TYPE_UNION) {
sb.Append("#include <securec.h>\n");
headerFiles.emplace(HeaderFile(HeaderFileType::OTHER_MODULES_HEADER_FILE, "securec"));
break;
}
}
} else {
sb.Append("#include <securec.h>\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)
@@ -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);
+7 -8
View File
@@ -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 <mode name> Set driver module name\n"
" --module-name <module name> Set driver module name\n"
" --build-target <target name> Generate client code, server code or all code\n"
" -d <directory> Place generated codes into <directory>\n");
}
+5 -5
View File
@@ -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<String> sourceFiles_;
String targetLanguage_;
String codePart_;
String modeName_;
String moduleName_;
String generationDirectory_;
String illegalOptions_;
std::vector<String> errors_;
@@ -146,7 +146,7 @@ private:
bool doGenerateCode_;
bool doModeKernel_;
bool doGeneratePart_;
bool doSetModeName_;
bool doSetModuleName_;
bool doOutDir_;
};
} // namespace HDI
+17
View File
@@ -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
+2
View File
@@ -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;