esp-idf/components/lwip/test_afl_host/Makefile
David Cermak fa97004faf lwip: Support for linux target
Implement linux port layer and reuse the original FreeRTOS layer
that's compiled and used on linux target as well, by means of FreeRTOS
simulator.
2023-01-31 08:43:45 +01:00

116 lines
3.1 KiB
Makefile

LWIP_COMPONENT_DIR=../
FREERTOS_COMPONENT_DIR=$(LWIP_COMPONENT_DIR)/../freertos
COMPONENT_DIR=$(LWIP_COMPONENT_DIR)/../
MOCKS_DIR=$(LWIP_COMPONENT_DIR)/../../tools/mocks
CFLAGS=-D IDF_VER=\"v3.1\" \
-DESP_PLATFORM \
-DLWIP_NO_CTYPE_H=1 \
-DWITH_POSIX \
-fdata-sections \
-ffunction-sections \
-ggdb \
-MMD \
-MP \
-nostdlib \
-Og \
-std=gnu99 \
-Wall \
-Werror=all \
-Wextra \
-Wno-address \
-Wno-constant-conversion \
-Wno-error=deprecated-declarations \
-Wno-error=unused-function \
-Wno-error=unused-variable \
-Wno-incompatible-pointer-types \
-Wno-incompatible-pointer-types-discards-qualifiers \
-Wno-int-to-pointer-cast \
-Wno-macro-redefined \
-Wno-sign-compare \
-Wno-typedef-redefinition \
-Wno-unused-parameter \
-Wno-unused-variable
INC_DIRS=-I . \
-I ./build/config \
-I $(LWIP_COMPONENT_DIR)/include/apps \
-I $(LWIP_COMPONENT_DIR)/include/apps/ping \
-I $(LWIP_COMPONENT_DIR)/include/apps/sntp \
-I $(LWIP_COMPONENT_DIR)/lwip/src/include \
-I $(LWIP_COMPONENT_DIR)/lwip/src/include/netif \
-I $(LWIP_COMPONENT_DIR)/lwip/src/include/posix \
-I $(LWIP_COMPONENT_DIR)/port/include \
-I $(LWIP_COMPONENT_DIR)/port/linux/include \
-I $(LWIP_COMPONENT_DIR)/port/freertos/include \
-I $(FREERTOS_COMPONENT_DIR)/FreeRTOS-Kernel/include \
-I $(FREERTOS_COMPONENT_DIR)/esp_additions/include/freertos \
-I $(FREERTOS_COMPONENT_DIR)/FreeRTOS-Kernel/portable/linux/include \
-I $(COMPONENT_DIR)/esp_hw_support/include \
-I $(COMPONENT_DIR)/linux/include
TEST_NAME=test
FUZZ=afl-fuzz
GEN_CFG=generate_config
LD=$(CC)
ifeq ($(MODE),dhcp_client)
DEPENDENCY_INJECTION=-include dhcp_di.h
OBJECTS=dhcp.o def.o esp32_mock.o test_dhcp_client.o
SAMPLE_PACKETS=in_dhcp_client
else ifeq ($(MODE),dhcp_server)
DEPENDENCY_INJECTION=-include dhcpserver_di.h
OBJECTS=dhcpserver.o def.o esp32_mock.o test_dhcp_server.o
SAMPLE_PACKETS=in_dhcp_server
else ifeq ($(MODE),dns)
CFLAGS+=-DNOT_MOCK_DNS
DEPENDENCY_INJECTION=-include dns_di.h
OBJECTS=dns.o def.o esp32_mock.o test_dns.o
SAMPLE_PACKETS=in_dns
else
$(error Please specify MODE: dhcp_server, dhcp_client, dns)
endif
ifeq ($(INSTR),off)
CC=gcc
CFLAGS+=-DINSTR_IS_OFF
TEST_NAME=test_sim
else
CC=afl-clang-fast
endif
CFLAGS+=$(INC_DIRS)
all: $(TEST_NAME)
def.o: ../lwip/src/core/def.c $(GEN_CFG)
@echo "[CC] $<"
@$(CC) $(CFLAGS) -D BUILDING_DEF $(DEPENDENCY_INJECTION) -c $< -o $@
dns.o: ../lwip/src/core/dns.c $(GEN_CFG)
@echo "[CC] $<"
@$(CC) $(CFLAGS) $(DEPENDENCY_INJECTION) -c $< -o $@
dhcp.o: ../lwip/src/core/ipv4/dhcp.c $(GEN_CFG)
@echo "[CC] $<"
@$(CC) $(CFLAGS) $(DEPENDENCY_INJECTION) -c $< -o $@
dhcpserver.o: ../apps/dhcpserver/dhcpserver.c $(GEN_CFG)
@echo "[CC] $<"
@$(CC) $(CFLAGS) $(DEPENDENCY_INJECTION) -c $< -o $@
%.o: %.c $(GEN_CFG)
@echo "[CC] $<"
@$(CC) $(CFLAGS) -c $< -o $@
.PHONY: $(GEN_CFG)
$(GEN_CFG):
# Run reconfiguration without potential AFL in PATHs
PATH=$(subst $(AFL_PATH):,/:,$(PATH)) idf.py reconfigure
$(TEST_NAME): $(OBJECTS)
@echo "[LD] $@"
@$(LD) $(OBJECTS) -o $@ $(LDLIBS)
fuzz: $(TEST_NAME)
@$(FUZZ) -t 5000+ -i "$(SAMPLE_PACKETS)" -o "out" -- ./$(TEST_NAME)