Files
cariflex/tools/EVerest-main/cmake/ev-define-dependency.cmake
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

104 lines
5.0 KiB
CMake

function(_everest_exclude_modules_loop EVEREST_INTERNAL_DEPENDENT_MODULES_LIST OUTPUT_VARIABLE)
# iterate over the provided list of dependent modules and check if all of these modules are included in EVEREST_EXCLUDE_MODULES
set(EVEREST_INTERNAL_DEPENDENCY_EXCLUDE_COUNT 0)
foreach(EVEREST_INTERNAL_DEPENDENT_MODULE IN LISTS EVEREST_INTERNAL_DEPENDENT_MODULES_LIST)
if("${EVEREST_INTERNAL_DEPENDENT_MODULE}" IN_LIST EVEREST_EXCLUDE_MODULES)
# a dependent module is excluded, exclude the dependency
math(EXPR EVEREST_INTERNAL_DEPENDENCY_EXCLUDE_COUNT "${EVEREST_INTERNAL_DEPENDENCY_EXCLUDE_COUNT}+1")
endif()
endforeach()
list(LENGTH EVEREST_EXCLUDE_MODULES EVEREST_INTERNAL_EXCLUDE_MODULES_LEN)
if(EVEREST_INTERNAL_DEPENDENCY_EXCLUDE_COUNT GREATER 0 AND EVEREST_INTERNAL_DEPENDENCY_EXCLUDE_COUNT EQUAL EVEREST_INTERNAL_EXCLUDE_MODULES_LEN)
# all modules that need this dependency are excluded
set("${OUTPUT_VARIABLE}" OFF PARENT_SCOPE)
endif()
endfunction()
function(_everest_include_modules_loop EVEREST_INTERNAL_DEPENDENT_MODULES_LIST OUTPUT_VARIABLE)
# iterate over the provided list of dependent modules and check if one of these modules is included in EVEREST_INCLUDE_MODULES
foreach(EVEREST_INTERNAL_DEPENDENT_MODULE IN LISTS EVEREST_INTERNAL_DEPENDENT_MODULES_LIST)
if("${EVEREST_INTERNAL_DEPENDENT_MODULE}" IN_LIST EVEREST_INCLUDE_MODULES)
# a dependent module is being build, include the dependency
set("${OUTPUT_VARIABLE}" ON PARENT_SCOPE)
endif()
endforeach()
endfunction()
function(ev_define_dependency)
#
# handle passed arguments
#
set(options "")
set(one_value_args
DEPENDENCY_NAME
OUTPUT_VARIABLE_SUFFIX
)
set(multi_value_args
DEPENDENT_MODULES_LIST
)
cmake_parse_arguments(OPTNS "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN})
if (OPTNS_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} got unknown argument(s): ${OPTNS_UNPARSED_ARGUMENTS}")
endif()
if (NOT OPTNS_DEPENDENCY_NAME)
message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} requires DEPENDENCY_NAME parameter for the dependency name")
endif()
set(DEPENDENCY_NAME "${OPTNS_DEPENDENCY_NAME}")
string(TOUPPER "${OPTNS_DEPENDENCY_NAME}" EVEREST_INTERNAL_DEPENDENCY_NAME_UPPER)
if (NOT OPTNS_DEPENDENT_MODULES_LIST)
message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} requires DEPENDENT_MODULES_LIST parameter for the dependent modules list")
endif()
set(EVEREST_INTERNAL_DEPENDENT_MODULES_LIST "${OPTNS_DEPENDENT_MODULES_LIST}")
list(LENGTH EVEREST_INTERNAL_DEPENDENT_MODULES_LIST EVEREST_INTERNAL_DEPENDENT_MODULES_LIST_LEN)
if (NOT OPTNS_OUTPUT_VARIABLE_SUFFIX)
# use the uppercase dependency name
set(EVEREST_INTERNAL_DEPENDENCY_CONDITION "EVEREST_DEPENDENCY_ENABLED_${EVEREST_INTERNAL_DEPENDENCY_NAME_UPPER}")
else()
# set output variable suffix
set(EVEREST_INTERNAL_DEPENDENCY_CONDITION "EVEREST_DEPENDENCY_ENABLED_${OPTNS_OUTPUT_VARIABLE_SUFFIX}")
endif()
#
# handle the various dependency conditions
#
if(DEFINED "${EVEREST_INTERNAL_DEPENDENCY_CONDITION}")
# always enable a externally set dependency
message(STATUS "${EVEREST_INTERNAL_DEPENDENCY_CONDITION} externally set to: ${${EVEREST_INTERNAL_DEPENDENCY_CONDITION}}")
else()
# disable dependency by default
set("${EVEREST_INTERNAL_DEPENDENCY_CONDITION}" OFF)
# find out if dependency is excluded or uncluded
if(NOT "${DEPENDENCY_NAME}" IN_LIST EVEREST_EXCLUDE_DEPENDENCIES)
if(NOT EVEREST_INCLUDE_MODULES)
# all modules are being build, at the moment we cannot know which dependencies are needed
set("${EVEREST_INTERNAL_DEPENDENCY_CONDITION}" ON)
# find out if all modules that need this dependency are excluded
_everest_exclude_modules_loop("${EVEREST_INTERNAL_DEPENDENT_MODULES_LIST}" "${EVEREST_INTERNAL_DEPENDENCY_CONDITION}")
else()
# EVEREST_INCLUDE_MODULES takes precendece over EVEREST_EXCLUDE_MODULES in everest-generate as well, reflect this here
_everest_include_modules_loop("${EVEREST_INTERNAL_DEPENDENT_MODULES_LIST}" "${EVEREST_INTERNAL_DEPENDENCY_CONDITION}")
endif()
else()
# dependency disabled because it is listed in EVEREST_EXCLUDE_DEPENDENCIES
set("${EVEREST_INTERNAL_DEPENDENCY_CONDITION}" OFF)
endif()
endif()
# log the result
if(NOT ${EVEREST_INTERNAL_DEPENDENCY_CONDITION})
message(STATUS "Dependency ${DEPENDENCY_NAME} NOT enabled:")
else()
message(STATUS "Dependency ${DEPENDENCY_NAME} enabled:")
endif()
message(STATUS " ${EVEREST_INTERNAL_DEPENDENCY_CONDITION}=${${EVEREST_INTERNAL_DEPENDENCY_CONDITION}}")
# propagate the result to the parent scope:
set("${EVEREST_INTERNAL_DEPENDENCY_CONDITION}" "${${EVEREST_INTERNAL_DEPENDENCY_CONDITION}}" PARENT_SCOPE)
endfunction()