@@ -52,9 +52,118 @@ project(mbedcrypto C)
5252
5353set (MBEDTLS_DIR ${BASE_DIR} /others/mbedtls)
5454
55- add_library (mbedcrypto STATIC ${MBEDTLS_DIR} /library/base64.c ${MBEDTLS_DIR} /library/sha1.c ${MBEDTLS_DIR} /library/md5.c ${MBEDTLS_DIR} /library/platform_util.c ${MBEDTLS_DIR} /library/constant_time.c )
55+ set (TF_PSA_CRYPTO_CORE_DIR ${MBEDTLS_DIR} /tf-psa-crypto/core)
56+ set (TF_PSA_CRYPTO_BUILTIN_DIR ${MBEDTLS_DIR} /tf-psa-crypto/drivers/builtin/src)
57+ set (TF_PSA_CRYPTO_INCLUDE_DIR ${MBEDTLS_DIR} /tf-psa-crypto/include)
58+ set (TF_PSA_CRYPTO_BUILTIN_INCLUDE_DIR ${MBEDTLS_DIR} /tf-psa-crypto/drivers/builtin/include)
59+ set (MBEDTLS_PSA_WRAPPERS_C ${CMAKE_CURRENT_BINARY_DIR} /mbedtls_generated/psa_crypto_driver_wrappers_no_static.c)
60+ set (MBEDTLS_PSA_WRAPPERS_H ${CMAKE_CURRENT_BINARY_DIR} /mbedtls_generated/psa_crypto_driver_wrappers.h)
61+ set (MBEDTLS_TF_PSA_CONFIG_HEADERS
62+ ${CMAKE_CURRENT_BINARY_DIR} /mbedtls_generated/tf_psa_crypto_config_check_before.h
63+ ${CMAKE_CURRENT_BINARY_DIR} /mbedtls_generated/tf_psa_crypto_config_check_final.h
64+ ${CMAKE_CURRENT_BINARY_DIR} /mbedtls_generated/tf_psa_crypto_config_check_user.h
65+ )
66+
67+ find_package (Python3 COMPONENTS Interpreter REQUIRED )
68+
69+ execute_process (
70+ COMMAND ${Python3_EXECUTABLE} -c "import venv"
71+ RESULT_VARIABLE MBEDTLS_PYTHON_VENV_RESULT
72+ OUTPUT_QUIET
73+ ERROR_QUIET
74+ )
75+
76+ if (NOT MBEDTLS_PYTHON_VENV_RESULT EQUAL 0)
77+ message (FATAL_ERROR
78+ "python3 module 'venv' is required for mbedTLS v4 wrapper generation environment setup. "
79+ "Please install python3-venv (or equivalent) for ${Python3_EXECUTABLE} ." )
80+ endif ()
81+
82+ set (MBEDTLS_PYTHON_VENV_DIR ${CMAKE_CURRENT_BINARY_DIR} /.build-venv)
83+ if (WIN32 )
84+ set (MBEDTLS_PYTHON ${MBEDTLS_PYTHON_VENV_DIR} /Scripts/python.exe)
85+ else ()
86+ set (MBEDTLS_PYTHON ${MBEDTLS_PYTHON_VENV_DIR} /bin/python)
87+ endif ()
88+
89+ if (NOT EXISTS ${MBEDTLS_PYTHON} )
90+ execute_process (
91+ COMMAND ${Python3_EXECUTABLE} -m venv ${MBEDTLS_PYTHON_VENV_DIR}
92+ RESULT_VARIABLE MBEDTLS_VENV_CREATE_RESULT
93+ )
94+ if (NOT MBEDTLS_VENV_CREATE_RESULT EQUAL 0)
95+ message (FATAL_ERROR "Failed to create Python virtual environment: ${MBEDTLS_PYTHON_VENV_DIR} " )
96+ endif ()
97+ endif ()
5698
57- target_include_directories (mbedcrypto PRIVATE ${MBEDTLS_DIR} /include )
99+ execute_process (
100+ COMMAND ${MBEDTLS_PYTHON} -m pip --version
101+ RESULT_VARIABLE MBEDTLS_PIP_CHECK_RESULT
102+ OUTPUT_QUIET
103+ ERROR_QUIET
104+ )
105+ if (NOT MBEDTLS_PIP_CHECK_RESULT EQUAL 0)
106+ execute_process (
107+ COMMAND ${MBEDTLS_PYTHON} -m ensurepip --upgrade
108+ RESULT_VARIABLE MBEDTLS_ENSUREPIP_RESULT
109+ )
110+ if (NOT MBEDTLS_ENSUREPIP_RESULT EQUAL 0)
111+ message (FATAL_ERROR "Failed to bootstrap pip in ${MBEDTLS_PYTHON_VENV_DIR} " )
112+ endif ()
113+ endif ()
114+
115+ execute_process (
116+ COMMAND ${MBEDTLS_PYTHON} -c "import jinja2, jsonschema"
117+ RESULT_VARIABLE MBEDTLS_PYTHON_MODULES_RESULT
118+ OUTPUT_QUIET
119+ ERROR_QUIET
120+ )
121+ if (NOT MBEDTLS_PYTHON_MODULES_RESULT EQUAL 0)
122+ execute_process (
123+ COMMAND ${MBEDTLS_PYTHON} -m pip install --disable-pip-version-check jinja2 jsonschema
124+ RESULT_VARIABLE MBEDTLS_PIP_INSTALL_RESULT
125+ )
126+ if (NOT MBEDTLS_PIP_INSTALL_RESULT EQUAL 0)
127+ message (FATAL_ERROR
128+ "Failed to install Python modules 'jinja2' and 'jsonschema' into ${MBEDTLS_PYTHON_VENV_DIR} . "
129+ "Please verify network/package access and re-run CMake." )
130+ endif ()
131+ endif ()
132+
133+ add_custom_command (
134+ OUTPUT ${MBEDTLS_PSA_WRAPPERS_C} ${MBEDTLS_PSA_WRAPPERS_H} ${MBEDTLS_TF_PSA_CONFIG_HEADERS}
135+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR} /mbedtls_generated
136+ COMMAND ${MBEDTLS_PYTHON} ${MBEDTLS_DIR} /tf-psa-crypto/scripts/generate_driver_wrappers.py ${CMAKE_CURRENT_BINARY_DIR} /mbedtls_generated
137+ COMMAND ${CMAKE_COMMAND} -E chdir ${MBEDTLS_DIR} /tf-psa-crypto ${MBEDTLS_PYTHON} scripts/generate_config_checks.py ${CMAKE_CURRENT_BINARY_DIR} /mbedtls_generated
138+ DEPENDS
139+ ${MBEDTLS_DIR} /tf-psa-crypto/scripts/generate_driver_wrappers.py
140+ ${MBEDTLS_DIR} /tf-psa-crypto/scripts/generate_config_checks.py
141+ ${MBEDTLS_DIR} /tf-psa-crypto/scripts/data_files/driver_templates/psa_crypto_driver_wrappers.h.jinja
142+ ${MBEDTLS_DIR} /tf-psa-crypto/scripts/data_files/driver_templates/psa_crypto_driver_wrappers_no_static.c.jinja
143+ )
144+
145+ file (GLOB MBEDTLS_PSA_CORE_SOURCES CONFIGURE_DEPENDS ${TF_PSA_CRYPTO_CORE_DIR} /*.c )
146+ list (FILTER MBEDTLS_PSA_CORE_SOURCES EXCLUDE REGEX "psa_crypto_driver_wrappers_no_static\\ .c$" )
147+ file (GLOB MBEDTLS_BUILTIN_SOURCES CONFIGURE_DEPENDS ${TF_PSA_CRYPTO_BUILTIN_DIR} /*.c )
148+
149+ add_library (mbedcrypto STATIC
150+ ${MBEDTLS_PSA_CORE_SOURCES}
151+ ${MBEDTLS_BUILTIN_SOURCES}
152+ ${MBEDTLS_PSA_WRAPPERS_C}
153+ ${MBEDTLS_PSA_WRAPPERS_H}
154+ ${MBEDTLS_TF_PSA_CONFIG_HEADERS}
155+ )
156+
157+ target_include_directories (mbedcrypto PRIVATE
158+ ${MBEDTLS_DIR} /include
159+ ${TF_PSA_CRYPTO_INCLUDE_DIR}
160+ ${TF_PSA_CRYPTO_CORE_DIR}
161+ ${CMAKE_CURRENT_BINARY_DIR} /mbedtls_generated
162+ ${TF_PSA_CRYPTO_BUILTIN_INCLUDE_DIR}
163+ ${TF_PSA_CRYPTO_BUILTIN_DIR}
164+ )
165+
166+ target_link_libraries (mbedcrypto PRIVATE bcrypt )
58167
59168# get mbedtls version with git describe
60169execute_process (
@@ -137,7 +246,17 @@ file(GLOB_RECURSE libModSecuritySources ${BASE_DIR}/src/*.cc)
137246add_library (libModSecurity SHARED ${libModSecuritySources} )
138247
139248target_compile_definitions (libModSecurity PRIVATE WITH_PCRE2 )
140- target_include_directories (libModSecurity PRIVATE ${BASE_DIR} ${BASE_DIR} /headers ${BASE_DIR} /others ${MBEDTLS_DIR} /include )
249+ target_include_directories (libModSecurity PRIVATE
250+ ${BASE_DIR}
251+ ${BASE_DIR} /headers
252+ ${BASE_DIR} /others
253+ ${MBEDTLS_DIR} /include
254+ ${TF_PSA_CRYPTO_INCLUDE_DIR}
255+ ${TF_PSA_CRYPTO_CORE_DIR}
256+ ${CMAKE_CURRENT_BINARY_DIR} /mbedtls_generated
257+ ${TF_PSA_CRYPTO_BUILTIN_INCLUDE_DIR}
258+ ${TF_PSA_CRYPTO_BUILTIN_DIR}
259+ )
141260target_link_libraries (libModSecurity PRIVATE pcre2::pcre2 libinjection mbedcrypto Poco::Poco Iphlpapi.lib )
142261
143262macro (add_package_dependency project compile_definition link_library flag )
@@ -164,7 +283,17 @@ project(libModSecurityTests)
164283
165284function (setTestTargetProperties executable )
166285 target_compile_definitions (${executable} PRIVATE WITH_PCRE2 )
167- target_include_directories (${executable} PRIVATE ${BASE_DIR} ${BASE_DIR} /headers )
286+ target_include_directories (${executable} PRIVATE
287+ ${BASE_DIR}
288+ ${BASE_DIR} /headers
289+ ${BASE_DIR} /others
290+ ${MBEDTLS_DIR} /include
291+ ${TF_PSA_CRYPTO_INCLUDE_DIR}
292+ ${TF_PSA_CRYPTO_CORE_DIR}
293+ ${CMAKE_CURRENT_BINARY_DIR} /mbedtls_generated
294+ ${TF_PSA_CRYPTO_BUILTIN_INCLUDE_DIR}
295+ ${TF_PSA_CRYPTO_BUILTIN_DIR}
296+ )
168297 target_link_libraries (${executable} PRIVATE libModSecurity pcre2::pcre2 dirent::dirent )
169298 add_package_dependency (${executable} WITH_YAJL yajl::yajl HAVE_YAJL )
170299endfunction ()
0 commit comments