############################################################################
# boards/xtensa/esp32/esp32-devkitc/src/Make.defs
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.  The
# ASF licenses this file to you 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.
#
############################################################################

include $(TOPDIR)/Make.defs

CSRCS = esp32_boot.c esp32_bringup.c

ifeq ($(CONFIG_BOARDCTL),y)
CSRCS += esp32_appinit.c
ifeq ($(CONFIG_BOARDCTL_RESET),y)
CSRCS += esp32_reset.c
endif
endif

ifeq ($(CONFIG_MMCSD),y)
CSRCS += esp32_mmcsd.c
endif

ifeq ($(CONFIG_DEV_GPIO),y)
CSRCS += esp32_gpio.c
endif

ifeq ($(CONFIG_PWM),y)
CSRCS += esp32_ledc.c
endif

ifeq ($(CONFIG_USERLED),y)
CSRCS += esp32_userleds.c
endif

ifeq ($(CONFIG_WS2812),y)
CSRCS += esp32_ws2812.c
endif

ifeq ($(CONFIG_ARCH_BUTTONS),y)
CSRCS += esp32_buttons.c
endif

ifeq ($(CONFIG_ESP32_TWAI),y)
CSRCS += esp32_twai.c
endif

ifeq ($(CONFIG_NET_W5500),y)
CSRCS += esp32_w5500.c
endif

DEPPATH += --dep-path board
VPATH += :board
CFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board

