1#
2# Copyright (c) 2020-2023 Huawei Device Co., Ltd.
3#
4# This software is licensed under the terms of the GNU General Public
5# License version 2, as published by the Free Software Foundation, and
6# may be copied, distributed, and modified under those terms.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11# GNU General Public License for more details.
12#
13#
14
15ccflags-$(CONFIG_DRIVERS_HDF_TEST) +=  -I$(srctree)/include/hdf \
16    -I$(srctree)/include/hdf/osal \
17    -I$(srctree)/include/hdf/utils \
18    -I$(srctree)/drivers/hdf/inner_api/osal/shared \
19    -I$(srctree)/drivers/hdf/inner_api/host/shared \
20    -I$(srctree)/drivers/hdf/inner_api/utils \
21    -I$(srctree)/drivers/hdf/inner_api/core \
22    -I$(srctree)/drivers/hdf/khdf/osal/include \
23    -I$(srctree)/drivers/hdf/framework/utils/include
24
25ifeq ($(LOCAL_HCS_ROOT),)
26  LOCAL_HCS_ROOT := $(PRODUCT_PATH)
27endif
28
29CURRENT_DIR := $(abspath $(dir $(realpath $(lastword $(MAKEFILE_LIST)))))
30SOURCE_ROOT := $(abspath $(CURRENT_DIR)/../../../../../../)
31
32HC_GEN_DIR := $(abspath $(SOURCE_ROOT)/drivers/hdf_core/framework/tools/hc-gen)
33ifneq ($(OUT_DIR),)
34HC_GEN := $(OUT_DIR)/kernel/OBJ/${KERNEL_VERSION}/drivers/hdf/khdf/hc_gen_build/hc-gen
35else
36HC_GEN := $(HC_GEN_DIR)/build/hc-gen
37endif
38LOCAL_HCS_ROOT := $(CURRENT_DIR)
39
40HCS_DIR := $(LOCAL_HCS_ROOT)
41
42ifneq ($(TARGET_BOARD_PLATFORM),)
43  HCS_DIR := $(LOCAL_HCS_ROOT)/$(TARGET_BOARD_PLATFORM)
44else
45  ifneq ($(CONFIG_ARCH_HI3516DV300),)
46    HCS_DIR := $(LOCAL_HCS_ROOT)
47  endif
48  ifneq ($(CONFIG_ARCH_HI3518EV300),)
49    HCS_DIR := $(LOCAL_HCS_ROOT)
50  endif
51  ifneq ($(CONFIG_ARCH_HI3751V350),)
52    HCS_DIR := $(LOCAL_HCS_ROOT)
53  endif
54endif
55$(info HCS_DIR = $(HCS_DIR))
56HCB_FLAGS := -b -i -a
57
58HCS_OBJ := hdf_hcs_hex.o
59HCS_OBJ_SRC := $(subst .o,.c,$(notdir $(HCS_OBJ)))
60
61CONFIG_GEN_HEX_SRC := $(addprefix $(LOCAL_HCS_ROOT)/, $(HCS_OBJ_SRC))
62CONFIG_HCS_SRC := $(subst _hcs_hex.o,.hcs,$(addprefix $(HCS_DIR)/, $(HCS_OBJ)))
63
64HDF_FRAMWORK_TEST_ROOT = $(abspath $(SOURCE_ROOT)/drivers/hdf_core/framework/test/unittest/utils/hcs_parser/unittest)
65HCS_MACRO_OBJ := hcs_macro_cases.o
66HCS_MACRO_SRC := $(HDF_FRAMWORK_TEST_ROOT)/hcs_macro_cases.c
67HCS_DEP := $(HDF_FRAMWORK_TEST_ROOT)/hdf_macro_test.h
68HCS_MACRO_GEN_FILE := $(HDF_FRAMWORK_TEST_ROOT)/hdf_macro_test
69HCS_FILE := $(HCS_DIR)/hdf.hcs
70
71$(obj)/$(HCS_OBJ): $(CONFIG_GEN_HEX_SRC)
72	$(Q)$(CC) $(c_flags) -c -o $@ $<
73	$(Q)rm -f $<
74
75$(CONFIG_GEN_HEX_SRC):  $(LOCAL_HCS_ROOT)/%_hcs_hex.c: $(HCS_DIR)/%.hcs | $(HC_GEN)
76	$(Q)echo gen hdf built-in config
77	$(Q)if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi
78	$(Q)$(HC_GEN) $(HCB_FLAGS) -o $(subst _hex.c,,$(@)) $<
79
80$(CONFIG_GEN_SRCS): $(CONFIG_OUT_DIR)%.c: $(HCS_DIR)/%.hcs | $(HC_GEN)
81	$(Q)echo gen hdf driver config
82	$(Q)if [ ! -d $(dir $@) ]; then mkdir -p $(dir $@); fi
83	$(Q)$(HC_GEN) -t -o $@ $<
84
85$(HC_GEN):
86	$(HIDE)make -C $(HC_GEN_DIR) BUILD_DIR=$(dir $@)
87
88$(obj)/$(HCS_MACRO_OBJ): $(HCS_MACRO_SRC) $(HCS_DEP)
89	$(Q)$(CC) $(c_flags) -c -o $@ $<
90
91$(HCS_DEP): $(HC_GEN)
92	$(Q)echo gen hdf built-in config macro
93	$(Q)$(HC_GEN) -m -o $(HCS_MACRO_GEN_FILE) $(HCS_FILE)
94
95obj-$(CONFIG_DRIVERS_HDF) += $(HCS_OBJ) \
96                             $(HCS_MACRO_OBJ)
97