Skip to content

Commit 7cca806

Browse files
committed
chore: bootstrap CMock in CMake
Ensure test builds have access CMock generator by downloading it into the build folder.
1 parent 862941f commit 7cca806

2 files changed

Lines changed: 47 additions & 1 deletion

File tree

helper.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ build_dir?=build
1616
target_debian_arch?=$(shell dpkg --print-architecture || echo 'i386')
1717

1818
packages?=make cmake time file git sudo
19-
packages+=build-essential pkg-config bison flex python
19+
packages+=build-essential pkg-config bison flex python ruby
2020
packages+=libusb-1.0-0-dev libssl-dev libxml2-dev libjson-c-dev
2121
packages+=doxygen xsltproc plantuml roffit
2222
packages+=radvd parprouted bridge-utils net-tools zip unzip

libs2/test/CMakeLists.txt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,52 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "C51")
3232
target_link_libraries(new_test_t2 zipgateway-lib)
3333
endif()
3434
add_test(test_transport_service2 new_test_t2)
35+
36+
set(CMOCK_RB "" CACHE FILEPATH "Path to CMock lib/cmock.rb used for local mock regeneration")
37+
set(CMOCK_VERSION "2.4.6" CACHE STRING "CMock version used for regeneration")
38+
set(CMOCK_ARCHIVE "${CMAKE_BINARY_DIR}/tools/cmock-v${CMOCK_VERSION}.tar.gz")
39+
set(CMOCK_ARCHIVE_SHA256 "7b4b0a1ca9ecd4d461e3a442b4b2c98c37e451d8966e636483142fdf49667ed7"
40+
CACHE STRING "Expected SHA256 for CMock archive")
41+
set(CMOCK_ROOT "${CMAKE_BINARY_DIR}/tools/CMock-${CMOCK_VERSION}")
42+
set(CMOCK_RB_DEFAULT "${CMOCK_ROOT}/lib/cmock.rb")
43+
if(CMOCK_RB STREQUAL "")
44+
if(NOT EXISTS "${CMOCK_RB_DEFAULT}")
45+
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/tools")
46+
if(NOT EXISTS "${CMOCK_ARCHIVE}")
47+
message(STATUS "Downloading CMock v${CMOCK_VERSION} for mock regeneration")
48+
file(DOWNLOAD
49+
"https://github.com/ThrowTheSwitch/CMock/archive/refs/tags/v${CMOCK_VERSION}.tar.gz"
50+
"${CMOCK_ARCHIVE}"
51+
SHOW_PROGRESS
52+
STATUS CMOCK_DOWNLOAD_STATUS
53+
TLS_VERIFY ON)
54+
list(GET CMOCK_DOWNLOAD_STATUS 0 CMOCK_DOWNLOAD_CODE)
55+
list(GET CMOCK_DOWNLOAD_STATUS 1 CMOCK_DOWNLOAD_MESSAGE)
56+
if(NOT CMOCK_DOWNLOAD_CODE EQUAL 0)
57+
message(FATAL_ERROR "Failed to download CMock archive: ${CMOCK_DOWNLOAD_MESSAGE}")
58+
endif()
59+
endif()
60+
61+
file(SHA256 "${CMOCK_ARCHIVE}" CMOCK_ARCHIVE_SHA256_ACTUAL)
62+
if(NOT CMOCK_ARCHIVE_SHA256_ACTUAL STREQUAL CMOCK_ARCHIVE_SHA256)
63+
message(FATAL_ERROR
64+
"CMock archive SHA256 mismatch. Expected ${CMOCK_ARCHIVE_SHA256}, got ${CMOCK_ARCHIVE_SHA256_ACTUAL}")
65+
endif()
66+
67+
execute_process(
68+
COMMAND ${CMAKE_COMMAND} -E tar xzf "${CMOCK_ARCHIVE}"
69+
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/tools"
70+
RESULT_VARIABLE CMOCK_EXTRACT_RESULT)
71+
if(NOT CMOCK_EXTRACT_RESULT EQUAL 0)
72+
message(FATAL_ERROR "Failed to extract ${CMOCK_ARCHIVE}")
73+
endif()
74+
75+
file(MAKE_DIRECTORY "${CMOCK_ROOT}/vendor/unity/auto")
76+
file(COPY "${CMAKE_SOURCE_DIR}/libs2/TestFramework/unity/auto/type_sanitizer.rb"
77+
DESTINATION "${CMOCK_ROOT}/vendor/unity/auto")
78+
endif()
79+
set(CMOCK_RB "${CMOCK_RB_DEFAULT}" CACHE FILEPATH "Path to CMock lib/cmock.rb used by regen_mock_zw_transport_api" FORCE)
80+
endif()
3581
endif()
3682

3783
add_definitions( -DRANDLEN=64 )

0 commit comments

Comments
 (0)