blob: 61ab9100fa78e75e8a820372e4487799350709c1 [file] [log] [blame]
#
# Copyright (c) 2020 Project CHIP Authors
# Copyright (c) 2018 Nest Labs, Inc.
# 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.
#
# Description:
# Component makefile for building CHIP within the ESP32 ESP-IDF environment.
#
# ==================================================
# General settings
# ==================================================
SHELL = /bin/bash
# CHIP source root directory
CHIP_ROOT ?= $(realpath $(COMPONENT_PATH)/../../../..)
# Directory into which the CHIP build system will place its output.
OUTPUT_DIR := $(BUILD_DIR_BASE)/chip
REL_OUTPUT_DIR := $(shell perl -e 'use File::Spec; use Cwd; print File::Spec->abs2rel(Cwd::realpath($$ARGV[0]), Cwd::realpath($$ARGV[1])) . "\n"' $(OUTPUT_DIR) $(COMPONENT_PATH))
REL_CHIP_ROOT := $(shell perl -e 'use File::Spec; use Cwd; print File::Spec->abs2rel(Cwd::realpath($$ARGV[0]), Cwd::realpath($$ARGV[1])) . "\n"' $(CHIP_ROOT) $(COMPONENT_PATH))
COMPONENT_LIBRARIES :=
# ==================================================
# Compilation flags specific to building CHIP
# ==================================================
# Include directories to be searched when building CHIP. Make sure
# that anything starting with $(IDF_PATH) ends up being included with
# -isystem, not -I, so warnings in those headers don't cause the build
# to fail.
INCLUDES := $(OUTPUT_DIR)/src/include \
$(OUTPUT_DIR)/src/include/platform/ESP32 \
$(filter-out $(IDF_PATH)/%, $(COMPONENT_INCLUDES))
SYSTEM_INCLUDES := $(IDF_PATH)/components/lwip/lwip/src/include \
$(IDF_PATH)/components/freertos/include/freertos/ \
$(IDF_PATH)/components/mbedtls/mbedtls/include \
$(filter $(IDF_PATH)/%, $(COMPONENT_INCLUDES))
# Compiler flags for building CHIP
ALL_INCLUDES := $(addprefix -I,$(INCLUDES)) $(addprefix -isystem,$(SYSTEM_INCLUDES))
CFLAGS += $(ALL_INCLUDES)
CPPFLAGS += $(ALL_INCLUDES)
CXXFLAGS += $(ALL_INCLUDES)
# ==================================================
# Configuration for the CHIP ESF-IDF Component
# ==================================================
# Header directories to be included when building other components that use CHIP.
# Note that these must be relative to the component source directory.
# TODO Boot the CHIP_ROOT includedirs
COMPONENT_ADD_INCLUDEDIRS = project-config \
$(REL_OUTPUT_DIR)/include \
$(REL_CHIP_ROOT)/src/include/platform/ESP32 \
$(REL_CHIP_ROOT)/src/include/ \
$(REL_CHIP_ROOT)/src/lib \
$(REL_CHIP_ROOT)/src/ \
$(REL_CHIP_ROOT)/src/system \
$(IDF_PATH)/components/mbedtls/mbedtls/include \
$(REL_CHIP_ROOT)/src/app
# Linker flags to be included when building other components that use CHIP.
COMPONENT_ADD_LDFLAGS = -L$(OUTPUT_DIR)/lib/ \
-lCHIP
ifdef CONFIG_ENABLE_CHIP_SHELL
COMPONENT_ADD_LDFLAGS += -lCHIPShell
endif
ifdef CONFIG_ENABLE_PW_RPC
COMPONENT_ADD_LDFLAGS += -lPwRpc
endif
COMPONENT_ADD_INCLUDEDIRS += $(REL_OUTPUT_DIR)/src/include \
$(REL_CHIP_ROOT)/third_party/nlassert/repo/include \
$(REL_OUTPUT_DIR)/gen/third_party/connectedhomeip/src/app/include \
$(REL_OUTPUT_DIR)/gen/include \
$(REL_CHIP_ROOT)/zzz_generated/app-common
# Tell the ESP-IDF build system that the CHIP component defines its own build
# and clean targets.
COMPONENT_OWNBUILDTARGET := chip_build
COMPONENT_OWNCLEANTARGET := chip_clean
is_debug ?= true
# ==================================================
# Build Rules
# ==================================================
$(OUTPUT_DIR) :
echo "MKDIR $@"
@mkdir -p "$@"
fix_cflags = $(filter-out -DHAVE_CONFIG_H,\
$(filter-out -D,\
$(filter-out IDF_VER%,\
$(1) -D$(filter IDF_VER%,$(1))\
)))
CHIP_CFLAGS = $(call fix_cflags,$(CFLAGS) $(CPPFLAGS))
CHIP_CXXFLAGS = $(call fix_cflags,$(CXXFLAGS) $(CPPFLAGS))
install-chip : $(OUTPUT_DIR)
echo "INSTALL CHIP..."
echo > $(OUTPUT_DIR)/args.gn
echo "import(\"//args.gni\")" >> $(OUTPUT_DIR)/args.gn
echo target_cflags_c = [$(foreach word,$(CHIP_CFLAGS),\"$(word)\",)] | sed -e 's/=\"/=\\"/g;s/\"\"/\\"\"/g;' >> $(OUTPUT_DIR)/args.gn
echo target_cflags_cc = [$(foreach word,$(CHIP_CXXFLAGS),\"$(word)\",)] | sed -e 's/=\"/=\\"/g;s/\"\"/\\"\"/g;' >> $(OUTPUT_DIR)/args.gn
echo esp32_ar = \"$(AR)\" >> $(OUTPUT_DIR)/args.gn
echo esp32_cc = \"$(CC)\" >> $(OUTPUT_DIR)/args.gn
echo esp32_cxx = \"$(CXX)\" >> $(OUTPUT_DIR)/args.gn
echo esp32_cpu = \"esp32\" >> $(OUTPUT_DIR)/args.gn
ifeq ($(is_debug),false)
@echo "is_debug = false" >> $(OUTPUT_DIR)/args.gn
endif
if [[ "$(CONFIG_ENABLE_PW_RPC)" = "y" ]]; then \
echo "chip_build_pw_rpc_lib = true" >> $(OUTPUT_DIR)/args.gn ;\
echo "chip_build_pw_trace_lib = true" >> $(OUTPUT_DIR)/args.gn ;\
echo "remove_default_configs = [\"//third_party/connectedhomeip/third_party/pigweed/repo/pw_build:cpp17\"]" >> $(OUTPUT_DIR)/args.gn ;\
echo "pw_log_BACKEND = \"//third_party/connectedhomeip/third_party/pigweed/repo/pw_log_basic\"" >> $(OUTPUT_DIR)/args.gn ;\
echo "pw_assert_BACKEND = \"//third_party/connectedhomeip/third_party/pigweed/repo/pw_assert_log\"" >> $(OUTPUT_DIR)/args.gn ;\
echo "pw_sys_io_BACKEND = \"//third_party/connectedhomeip/examples/platform/esp32/pw_sys_io:pw_sys_io_esp32\"" >> $(OUTPUT_DIR)/args.gn ;\
echo "pw_trace_BACKEND = \"//third_party/connectedhomeip/third_party/pigweed/repo/pw_trace_tokenized\"" >> $(OUTPUT_DIR)/args.gn ;\
echo "dir_pw_third_party_nanopb = \"//third_party/connectedhomeip/third_party/nanopb/repo\"" >>$(OUTPUT_DIR)/args.gn ;\
fi
if [[ "$(CONFIG_ENABLE_CHIP_SHELL)" = "y" ]]; then \
echo "chip_build_libshell = true" >> $(OUTPUT_DIR)/args.gn ;\
fi
if [[ "$(CONFIG_USE_MINIMAL_MDNS)" = "n" ]]; then \
echo "chip_mdns = platform" >> $(OUTPUT_DIR)/args.gn ;\
fi
if [[ "$(CONFIG_DISABLE_IPV4)" = "y" ]]; then \
echo "chip_inet_config_enable_ipv4 = false" >> $(OUTPUT_DIR)/args.gn ;\
fi
echo "Written file $(OUTPUT_DIR)/args.gn"
cd $(CHIP_ROOT) && PW_ENVSETUP_QUIET=1 . scripts/activate.sh && cd $(COMPONENT_PATH) && gn gen --check --fail-on-unused-args $(OUTPUT_DIR)
cd $(COMPONENT_PATH); ninja $(subst 1,-v,$(filter 1,$(V))) -C $(OUTPUT_DIR) esp32
chip_build : install-chip
echo "CHIP built and installed..."
cp -a ${OUTPUT_DIR}/lib/libCHIP.a ${OUTPUT_DIR}/libchip.a
chip_clean:
echo "RM $(OUTPUT_DIR)"
rm -rf $(OUTPUT_DIR)