mirror of
https://github.com/openharmony/drivers_framework.git
synced 2026-07-20 19:27:49 -04:00
fix:modify make clean and header file order
Signed-off-by: yue <yueyan4@huawei.com>
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user