Skip to content

Commit 5449ff2

Browse files
committed
feat: add initial host and target based unittests
1 parent 2b2dbe2 commit 5449ff2

File tree

15 files changed

+1734
-0
lines changed

15 files changed

+1734
-0
lines changed

.gitmodules

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
11
[submodule "esp-stub-lib"]
22
path = esp-stub-lib
33
url = https://github.com/espressif/esp-stub-lib
4+
shallow = true
5+
[submodule "unittests/CMock"]
6+
path = unittests/CMock
7+
url = https://github.com/ThrowTheSwitch/CMock.git
8+
shallow = true
9+
[submodule "unittests/Unity"]
10+
path = unittests/Unity
11+
url = https://github.com/ThrowTheSwitch/Unity.git
12+
shallow = true

cmake/esp-build-config.cmake

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# ESP Build Configuration
2+
# Common build settings shared across the esp-flasher-stub project
3+
4+
# Include ESP target utilities
5+
include(${CMAKE_CURRENT_LIST_DIR}/esp-targets.cmake)
6+
7+
# Common ESP build flags
8+
set(ESP_COMMON_C_FLAGS
9+
-std=gnu17
10+
-Wall -Wextra -Werror -Wshadow -Wundef -Wconversion
11+
-fno-common -ffunction-sections
12+
)
13+
14+
# Production build flags (for main firmware)
15+
set(ESP_FIRMWARE_C_FLAGS
16+
${ESP_COMMON_C_FLAGS}
17+
-Os # Optimize for size
18+
-nostdlib -fno-builtin # No standard library
19+
)
20+
21+
# Test build flags (for unit tests)
22+
set(ESP_TEST_C_FLAGS
23+
${ESP_COMMON_C_FLAGS}
24+
-g -O0 # Debug build for tests
25+
)
26+
27+
# Common linker flags
28+
set(ESP_COMMON_LINKER_FLAGS
29+
-Wl,-static -Wl,--gc-sections
30+
)
31+
32+
# Function to configure ESP build for firmware
33+
function(configure_esp_firmware TARGET_CHIP)
34+
validate_esp_target(${TARGET_CHIP})
35+
36+
# Get target-specific flags
37+
get_esp_target_flags(${TARGET_CHIP} TARGET_FLAGS)
38+
39+
# Apply firmware build configuration
40+
add_compile_options(${ESP_FIRMWARE_C_FLAGS} ${TARGET_FLAGS})
41+
add_link_options(${ESP_COMMON_LINKER_FLAGS} ${TARGET_FLAGS})
42+
43+
# ESP8266 specific handling
44+
if(TARGET_CHIP STREQUAL "esp8266")
45+
set(CMAKE_LINK_DEPENDS_USE_LINKER FALSE PARENT_SCOPE)
46+
endif()
47+
48+
message(STATUS "ESP firmware build configured for ${TARGET_CHIP}")
49+
endfunction()
50+
51+
# Function to configure ESP build for tests
52+
function(configure_esp_tests ESP_TARGET)
53+
validate_esp_target(${ESP_TARGET})
54+
55+
# Get target-specific flags
56+
get_esp_target_flags(${ESP_TARGET} TARGET_FLAGS)
57+
58+
# Apply test build configuration (more debug-friendly)
59+
add_compile_options(${ESP_TEST_C_FLAGS} ${TARGET_FLAGS})
60+
add_link_options(${ESP_COMMON_LINKER_FLAGS} ${TARGET_FLAGS})
61+
62+
# ESP8266 specific handling
63+
if(ESP_TARGET STREQUAL "esp8266")
64+
set(CMAKE_LINK_DEPENDS_USE_LINKER FALSE PARENT_SCOPE)
65+
endif()
66+
67+
message(STATUS "ESP test build configured for ${ESP_TARGET}")
68+
endfunction()
69+
70+
message(STATUS "ESP build configuration loaded")

cmake/esp-targets.cmake

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# ESP Target Definitions and Utilities
2+
# Shared across the entire esp-flasher-stub project
3+
4+
# Define supported ESP targets
5+
set(ESP8266_TARGET esp8266)
6+
set(XTENSA_TARGETS esp32 esp32s2 esp32s3)
7+
set(RISCV_TARGETS esp32c2 esp32c3 esp32c5 esp32c6 esp32c61 esp32h2 esp32h21 esp32h4 esp32p4)
8+
set(ALL_ESP_TARGETS ${ESP8266_TARGET} ${XTENSA_TARGETS} ${RISCV_TARGETS})
9+
10+
# Function to validate ESP target
11+
function(validate_esp_target TARGET_CHIP)
12+
if(NOT TARGET_CHIP IN_LIST ALL_ESP_TARGETS)
13+
message(FATAL_ERROR "Invalid TARGET_CHIP '${TARGET_CHIP}'. Must be one of: ${ALL_ESP_TARGETS}")
14+
endif()
15+
endfunction()
16+
17+
# Function to get appropriate toolchain file for target
18+
function(get_esp_toolchain_file ESP_TARGET OUTPUT_VAR)
19+
validate_esp_target(${ESP_TARGET})
20+
21+
# Find the cmake directory from the CMAKE_MODULE_PATH
22+
foreach(module_path ${CMAKE_MODULE_PATH})
23+
if(EXISTS "${module_path}/esp-targets.cmake")
24+
set(TOOLCHAIN_DIR ${module_path}/toolchains)
25+
break()
26+
endif()
27+
endforeach()
28+
29+
if(ESP_TARGET IN_LIST XTENSA_TARGETS)
30+
set(${OUTPUT_VAR} ${TOOLCHAIN_DIR}/xtensa.cmake PARENT_SCOPE)
31+
elseif(ESP_TARGET STREQUAL "esp8266")
32+
set(${OUTPUT_VAR} ${TOOLCHAIN_DIR}/esp8266.cmake PARENT_SCOPE)
33+
else()
34+
set(${OUTPUT_VAR} ${TOOLCHAIN_DIR}/riscv.cmake PARENT_SCOPE)
35+
endif()
36+
endfunction()
37+
38+
# Function to get toolchain prefix for target
39+
function(get_esp_toolchain_prefix TARGET_CHIP OUTPUT_VAR)
40+
validate_esp_target(${TARGET_CHIP})
41+
42+
if(TARGET_CHIP IN_LIST XTENSA_TARGETS)
43+
set(${OUTPUT_VAR} "xtensa-${TARGET_CHIP}-elf-" PARENT_SCOPE)
44+
elseif(TARGET_CHIP STREQUAL "esp8266")
45+
set(${OUTPUT_VAR} "xtensa-lx106-elf-" PARENT_SCOPE)
46+
else()
47+
set(${OUTPUT_VAR} "riscv32-esp-elf-" PARENT_SCOPE)
48+
endif()
49+
endfunction()
50+
51+
# Function to get target-specific compile flags
52+
function(get_esp_target_flags TARGET_CHIP OUTPUT_VAR)
53+
validate_esp_target(${TARGET_CHIP})
54+
55+
# Architecture-specific flags
56+
set(EXTRA_RISCV_FLAGS -march=rv32imc -mabi=ilp32 -msmall-data-limit=0)
57+
set(EXTRA_XTENSA_FLAGS -mtext-section-literals -mlongcalls)
58+
59+
if(TARGET_CHIP IN_LIST XTENSA_TARGETS)
60+
set(${OUTPUT_VAR} "-DXTENSA" ${EXTRA_XTENSA_FLAGS} PARENT_SCOPE)
61+
elseif(TARGET_CHIP STREQUAL "esp8266")
62+
set(${OUTPUT_VAR} "-DESP8266" ${EXTRA_XTENSA_FLAGS} PARENT_SCOPE)
63+
else()
64+
set(${OUTPUT_VAR} "-DRISCV" ${EXTRA_RISCV_FLAGS} PARENT_SCOPE)
65+
endif()
66+
endfunction()
67+
68+
message(STATUS "ESP targets loaded: ${ALL_ESP_TARGETS}")

unittests/CMock

Submodule CMock added at 94dcd39

0 commit comments

Comments
 (0)