blob: 7febb089875172a18a05a628cd7e99ce4ef12692 [file] [log] [blame]
#
# Copyright (c) 2022 Project CHIP Authors
# All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
macro(chip_app_component_codegen IDL_NAME)
include("${CHIP_ROOT}/build/chip/chip_codegen.cmake")
include("${CHIP_ROOT}/src/app/codegen-data-model-provider/model.cmake")
# The IDF build system performs a two-pass expansion to determine
# component expansion. The first pass runs in script-mode
# to determine idf_component_register REQUIRES and PRIV_REQUIRES.
#
# We can only set up code generation during the 2nd pass
#
# see https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/build-system.html
if (NOT CMAKE_BUILD_EARLY_EXPANSION)
chip_codegen(app-codegen
INPUT "${IDL_NAME}"
GENERATOR "cpp-app"
OUTPUTS
"app/PluginApplicationCallbacks.h"
"app/callback-stub.cpp"
"app/cluster-init-callback.cpp"
OUTPUT_PATH APP_GEN_DIR
OUTPUT_FILES APP_GEN_FILES
)
add_dependencies(${COMPONENT_LIB} app-codegen)
target_include_directories(${COMPONENT_LIB} PUBLIC "${APP_GEN_DIR}")
target_sources(${COMPONENT_LIB} PRIVATE ${APP_GEN_FILES})
endif()
endmacro()
macro(chip_app_component_zapgen ZAP_NAME)
include("${CHIP_ROOT}/build/chip/chip_codegen.cmake")
# The IDF build system performs a two-pass expansion to determine
# component expansion. The first pass runs in script-mode
# to determine idf_component_register REQUIRES and PRIV_REQUIRES.
#
# We can only set up code generation during the 2nd pass
#
# see https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/build-system.html
if (NOT CMAKE_BUILD_EARLY_EXPANSION)
chip_zapgen(app-zapgen
INPUT "${ZAP_NAME}"
GENERATOR "app-templates"
OUTPUTS
"zap-generated/access.h"
"zap-generated/endpoint_config.h"
"zap-generated/gen_config.h"
"zap-generated/IMClusterCommandHandler.cpp"
OUTPUT_PATH APP_TEMPLATE_GEN_DIR
OUTPUT_FILES APP_TEMPLATE_GEN_FILES
)
add_dependencies(${COMPONENT_LIB} app-zapgen)
target_include_directories(${COMPONENT_LIB} PUBLIC "${APP_TEMPLATE_GEN_DIR}")
target_sources(${COMPONENT_LIB} PRIVATE ${APP_TEMPLATE_GEN_FILES})
# When data model interface is used, provide a default code-generation data model as
# part of zapgen. See `chip_data_model.cmake` for similar logic
set(CHIP_DATA_MODEL_INTERFACE "disabled" CACHE STRING "Data model interface option to use: enabled or disabled")
if ("${CHIP_DATA_MODEL_INTERFACE}" STREQUAL "enabled")
target_sources(${COMPONENT_LIB} PRIVATE ${CODEGEN_DATA_MODEL_SOURCES})
endif()
endif()
endmacro()