Hey-Edge / edge-impulse-sdk /classifier /ei_classifier_config.h
eoinedge's picture
Publish Edge Impulse model via ModelForge
25ade36 verified
Raw
History Blame Contribute Delete
5 kB
/* The Clear BSD License
*
* Copyright (c) 2025 EdgeImpulse Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted (subject to the limitations in the disclaimer
* below) provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY
* THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _EI_CLASSIFIER_CONFIG_H_
#define _EI_CLASSIFIER_CONFIG_H_
// clang-format off
// This is a file that's only used in benchmarking to override HW optimized kernels
#ifdef __has_include
#if __has_include("source/benchmark.h")
#include "source/benchmark.h"
#endif
#endif
#if EI_CLASSIFIER_TFLITE_ENABLE_SILABS_MVP == 1
#define EI_CLASSIFIER_TFLITE_ENABLE_CMSIS_NN 0
#define EI_CLASSIFIER_TFLITE_LOAD_CMSIS_NN_SOURCES 1
#endif
#ifndef EI_CLASSIFIER_TFLITE_ENABLE_CMSIS_NN
#if defined(__MBED__)
#include "mbed_version.h"
#if (MBED_VERSION < MBED_ENCODE_VERSION((5), (7), (0)))
#define EI_CLASSIFIER_TFLITE_ENABLE_CMSIS_NN 0
#else
#define EI_CLASSIFIER_TFLITE_ENABLE_CMSIS_NN 1
#endif // Mbed OS 5.7 version check
// __ARM_ARCH_PROFILE is a predefine of arm-gcc. __TARGET_* is armcc
#elif __ARM_ARCH_PROFILE == 'M' || defined(__TARGET_CPU_CORTEX_M0) || defined(__TARGET_CPU_CORTEX_M0PLUS) || defined(__TARGET_CPU_CORTEX_M3) || defined(__TARGET_CPU_CORTEX_M4) || defined(__TARGET_CPU_CORTEX_M7) || defined(ARDUINO_NRF52_ADAFRUIT)
#define EI_CLASSIFIER_TFLITE_ENABLE_CMSIS_NN 1
#else
#define EI_CLASSIFIER_TFLITE_ENABLE_CMSIS_NN 0
#endif
#endif // EI_CLASSIFIER_TFLITE_ENABLE_CMSIS_NN
#if EI_CLASSIFIER_TFLITE_ENABLE_CMSIS_NN == 1
#define CMSIS_NN 1
#define EI_CLASSIFIER_TFLITE_LOAD_CMSIS_NN_SOURCES 1
#endif
#ifndef EI_CLASSIFIER_TFLITE_ENABLE_ARC
#ifdef CPU_ARC
#define EI_CLASSIFIER_TFLITE_ENABLE_ARC 1
#else
#define EI_CLASSIFIER_TFLITE_ENABLE_ARC 0
#endif // CPU_ARC
#endif // EI_CLASSIFIER_TFLITE_ENABLE_ARC
#ifndef EI_CLASSIFIER_TFLITE_ENABLE_ESP_NN
// By default, if one of the CONFIG_IDF_TARGET_ESP32 is defined, it enables ESP-NN.
// This can be overridden by defining EI_CLASSIFIER_TFLITE_ENABLE_ESP_NN to 0 if the user doesn't want to use ESP-NN for some reason.
#if defined(ESP32)|| defined(CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32P4) || defined(CONFIG_IDF_TARGET_ESP32C3)
#include "sdkconfig.h"
#define EI_CLASSIFIER_TFLITE_ENABLE_ESP_NN 1
#else
#define EI_CLASSIFIER_TFLITE_ENABLE_ESP_NN 0
#endif // ESP32 check
#endif
#if EI_CLASSIFIER_TFLITE_ENABLE_ESP_NN == 1
#define ESP_NN 1
#if defined(CONFIG_IDF_TARGET_ESP32S3)
#define EI_CLASSIFIER_TFLITE_ENABLE_ESP_NN_S3 1
#endif // ESP32S3 check
#if defined(CONFIG_IDF_TARGET_ESP32P4)
#define EI_CLASSIFIER_TFLITE_ENABLE_ESP_NN_P4 1
#endif // ESP32P4 check
#endif
// no include checks in the compiler? then just include metadata and then ops_define (optional if on EON model)
#ifndef __has_include
#include "model-parameters/model_metadata.h"
#if (EI_CLASSIFIER_INFERENCING_ENGINE == EI_CLASSIFIER_TFLITE) && (EI_CLASSIFIER_COMPILED == 1)
#include "tflite-model/trained_model_ops_define.h"
#endif
#else
#if __has_include("tflite-model/trained_model_ops_define.h")
#include "tflite-model/trained_model_ops_define.h"
#endif
#endif // __has_include
// clang-format on
#endif // _EI_CLASSIFIER_CONFIG_H_