Skip to content

Commit 725fd35

Browse files
committed
feat: new optional features
- Added a new kind of insight: logic structure - Added the CORE_CALLBACK overall setting
1 parent 96cef4e commit 725fd35

File tree

5 files changed

+35
-11
lines changed

5 files changed

+35
-11
lines changed

Diff for: CI/update/templates/easy_cmake.cmake

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ overall_settings(
4747
# OPTIMIZATION "s"
4848
# BUILD_OPT ./build.opt
4949
# DISABLE_HAL_MODULES ADC I2C RTC SPI TIM DAC EXTI ETH SD QSPI
50+
# CORE_CALLBACK
5051
)
5152

5253
# STEP 3: configure your sketch

Diff for: cmake/convert_file.cmake

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ function(elf2hex ELFTGT)
1313
set_property(TARGET ${ELFTGT} APPEND PROPERTY ADDITIONAL_CLEAN_FILES "$<TARGET_FILE:${ELFTGT}>.hex")
1414
endfunction()
1515

16-
function(gv2svg GVFILE)
16+
function(gv2svg GVFILE ENGINE)
1717
get_filename_component(ABSGV ${GVFILE} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_BINARY_DIR})
1818
get_filename_component(GVNAME ${GVFILE} NAME)
1919

2020
# HACK: all this to get the final SVG file as a visible target with the same name as the file
2121
add_custom_target(${GVNAME}.svg DEPENDS ${ABSGV})
2222
add_custom_command(TARGET ${GVNAME}.svg POST_BUILD
23-
COMMAND ${SFDP} -Tsvg -o ${ABSGV}.svg ${ABSGV}
23+
COMMAND ${ENGINE} -Tsvg -o ${ABSGV}.svg ${ABSGV}
2424
)
2525
set_property(TARGET ${GVNAME}.svg APPEND PROPERTY ADDITIONAL_CLEAN_FILES ${ABSGV}.svg)
2626

Diff for: cmake/insights.cmake

+15-5
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ macro(find_dependencies TGT DEPTGTS)
2222
endmacro()
2323

2424
function(insights)
25-
set(KEYWORDS "DIRECT_INCLUDES" "TRANSITIVE_INCLUDES" "SYMBOLS" "ARCHIVES")
25+
set(KEYWORDS "DIRECT_INCLUDES" "TRANSITIVE_INCLUDES" "SYMBOLS" "ARCHIVES" "LOGIC_STRUCTURE")
2626
cmake_parse_arguments(PARSE_ARGV 0 INSIGHTS "${KEYWORDS}" "TARGET" "")
2727

2828
if(DEFINED INSIGHTS_UNPARSED_ARGUMENTS OR DEFINED INSIGHTS_KEYWORDS_MISSING_VALUES)
@@ -84,7 +84,7 @@ function(insights)
8484
COMMAND ${Python3_EXECUTABLE} ${SCRIPTS_FOLDER}/includes.py -o ${INSIGHTS_DIRECT_INCLUDES_GVFNAME} ${ALL_LOGS}
8585
DEPENDS ${ALL_LOGS}
8686
)
87-
gv2svg(${INSIGHTS_DIRECT_INCLUDES_GVFNAME})
87+
gv2svg(${INSIGHTS_DIRECT_INCLUDES_GVFNAME} ${SFDP})
8888
endif()
8989

9090
if (${INSIGHTS_TRANSITIVE_INCLUDES})
@@ -93,7 +93,7 @@ function(insights)
9393
COMMAND ${Python3_EXECUTABLE} ${SCRIPTS_FOLDER}/includes.py -t ${INSIGHTS_TRANSITIVE_INCLUDES_GVFNAME} ${ALL_LOGS}
9494
DEPENDS ${ALL_LOGS}
9595
)
96-
gv2svg(${INSIGHTS_TRANSITIVE_INCLUDES_GVFNAME})
96+
gv2svg(${INSIGHTS_TRANSITIVE_INCLUDES_GVFNAME} ${SFDP})
9797
endif()
9898

9999
if (${INSIGHTS_SYMBOLS})
@@ -102,7 +102,7 @@ function(insights)
102102
COMMAND ${Python3_EXECUTABLE} ${SCRIPTS_FOLDER}/syms.py -m ${MAPFILE} -f ${INSIGHTS_SYMBOLS_GVFNAME}
103103
DEPENDS ${MAPFILE}
104104
)
105-
gv2svg(${INSIGHTS_SYMBOLS_GVFNAME})
105+
gv2svg(${INSIGHTS_SYMBOLS_GVFNAME} ${SFDP})
106106
endif()
107107

108108
if (${INSIGHTS_ARCHIVES})
@@ -111,6 +111,16 @@ function(insights)
111111
COMMAND ${Python3_EXECUTABLE} ${SCRIPTS_FOLDER}/syms.py -m ${MAPFILE} -s ${INSIGHTS_ARCHIVES_GVFNAME}
112112
DEPENDS ${MAPFILE}
113113
)
114-
gv2svg(${INSIGHTS_ARCHIVES_GVFNAME})
114+
gv2svg(${INSIGHTS_ARCHIVES_GVFNAME} ${SFDP})
115+
endif()
116+
117+
if(${INSIGHTS_LOGIC_STRUCTURE})
118+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/gv)
119+
add_custom_command(OUTPUT ${OUTDIR}/logicstructure.gv
120+
COMMAND ${CMAKE_COMMAND} --graphviz=${CMAKE_CURRENT_BINARY_DIR}/gv/project.gv ${CMAKE_BINARY_DIR}
121+
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/gv/project.gv.${INSIGHTS_TARGET} ${OUTDIR}/logicstructure.gv
122+
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/gv/project.gv.${INSIGHTS_TARGET}
123+
)
124+
gv2svg(${OUTDIR}/logicstructure.gv ${DOT})
115125
endif()
116126
endfunction()

Diff for: cmake/overall_settings.cmake

+14-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@ cmake_minimum_required(VERSION 3.21)
22
add_library(user_settings INTERFACE)
33

44
function(overall_settings)
5-
set(KEYWORDS0 STANDARD_LIBC PRINTF_FLOAT SCANF_FLOAT DEBUG_SYMBOLS LTO NO_RELATIVE_MACRO UNDEF_NDEBUG)
5+
if(TARGET user_settings)
6+
message(SEND_ERROR "overall_settings() was called twice. This is not allowed as it could result in conflicting settings.")
7+
return()
8+
endif()
9+
10+
add_library(user_settings INTERFACE)
11+
12+
set(KEYWORDS0 STANDARD_LIBC PRINTF_FLOAT SCANF_FLOAT DEBUG_SYMBOLS LTO NO_RELATIVE_MACRO UNDEF_NDEBUG CORE_CALLBACK)
613
set(KEYWORDS1 OPTIMIZATION BUILD_OPT)
714
set(KEYWORDSN DISABLE_HAL_MODULES)
815
cmake_parse_arguments(PARSE_ARGV 0 WANT "${KEYWORDS0}" "${KEYWORDS1}" "${KEYWORDSN}")
@@ -11,6 +18,12 @@ function(overall_settings)
1118
message(SEND_ERROR "Invalid call to overall_settings(); some arguments went unparsed")
1219
endif()
1320

21+
if(${WANT_CORE_CALLBACK})
22+
target_compile_options(user_settings INTERFACE
23+
CORE_CALLBACK
24+
)
25+
endif()
26+
1427
if(NOT ${WANT_NO_RELATIVE_MACRO})
1528
# $<TARGET_PROPERTY:SOURCE_DIR> is evaluated by the final consumer, not user_settings
1629
target_compile_options(user_settings INTERFACE

Diff for: cmake/toolchain.cmake

+3-3
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ else()
2929
set(PYTHON_HAS_JINJA ON)
3030
endif()
3131

32-
33-
34-
find_program(SFDP "sfdp") # graphviz layout engine -- you may change the engine, use dot or whatever
32+
# graphviz layout engines
33+
find_program(SFDP "sfdp")
34+
find_program(DOT "dot")
3535

3636
include("${CMAKE_CURRENT_LIST_DIR}/ensure_core_deps.cmake")
3737
ensure_core_deps()

0 commit comments

Comments
 (0)