From 060b064c6f8073cd4f37bda5993279a3bfe9932e Mon Sep 17 00:00:00 2001 From: Mike Nolan Date: Thu, 18 Jun 2026 03:02:51 -0500 Subject: [PATCH] fix mbedtls and make it staticly linked to shared object when fetchcontent is enabled --- cmake/findmbed.cmake | 37 ++++++++++++++++++++++----------- cmake/helpers.cmake | 2 ++ pkgconfig/CMakeLists.txt | 2 +- pkgconfig/tessesframework.pc.in | 2 ++ src/TF_Init.cpp | 9 +++++--- 5 files changed, 36 insertions(+), 16 deletions(-) diff --git a/cmake/findmbed.cmake b/cmake/findmbed.cmake index 991e974..fc0e174 100644 --- a/cmake/findmbed.cmake +++ b/cmake/findmbed.cmake @@ -1,27 +1,40 @@ +if(TESSESFRAMEWORK_ENABLE_MBED) if(TESSESFRAMEWORK_FETCHCONTENT) set(MBEDTLS_FATAL_WARNINGS OFF CACHE INTERNAL "For TessesFramework" FORCE) set(ENABLE_TESTING OFF CACHE INTERNAL "For TessesFramework" FORCE) set(ENABLE_PROGRAMS OFF CACHE INTERNAL "For TessesFramework" FORCE) +set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build static libraries" FORCE) + +if(NOT TESSESFRAMEWORK_STATIC) +set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "Build with PIC" FORCE) +endif() FetchContent_Declare( mbedtls URL https://downloads.tesses.net/cache/libraries/source/mbedtls-3.6.4.tar.bz2 ) -if(TESSESFRAMEWORK_ENABLE_MBED AND TESSESFRAMEWORK_FETCHCONTENT) -set(MBEDTLS_FATAL_WARNINGS OFF CACHE INTERNAL "For TessesFramework" FORCE) -set(ENABLE_TESTING OFF CACHE INTERNAL "For TessesFramework" FORCE) -set(ENABLE_PROGRAMS OFF CACHE INTERNAL "For TessesFramework" FORCE) -if(TESSESFRAMEWORK_STATIC) -set(USE_STATIC_MBEDTLS_LIBRARY ON CACHE INTERNAL "For TessesFramework" FORCE) -set(USE_SHARED_MBEDTLS_LIBRARY OFF CACHE INTERNAL "For TessesFramework" FORCE) -else() -set(USE_STATIC_MBEDTLS_LIBRARY OFF CACHE INTERNAL "For TessesFramework" FORCE) -set(USE_SHARED_MBEDTLS_LIBRARY ON CACHE INTERNAL "For TessesFramework" FORCE) -endif() +if(NOT mbedtls_POPULATED) + set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build static" FORCE) + if(NOT TESSESFRAMEWORK_STATIC) + set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "Build PIC" FORCE) + set(CMAKE_SKIP_INSTALL_RULES ON) + set(DISABLE_PACKAGE_CONFIG_AND_INSTALL ON CACHE BOOL "" FORCE) + endif() + + FetchContent_Populate(mbedtls) + if(NOT TESSESFRAMEWORK_STATIC) + install(CODE "set(CMAKE_INSTALL_LOCAL_ONLY TRUE)" ALL_COMPONENTS) + endif() + + add_subdirectory(${mbedtls_SOURCE_DIR} ${mbedtls_BINARY_DIR}) + + if(NOT TESSESFRAMEWORK_STATIC) + set(CMAKE_SKIP_INSTALL_RULES OFF) + endif() endif() -FetchContent_MakeAvailable(mbedtls) else() find_package(MbedTLS REQUIRED) +endif() endif() \ No newline at end of file diff --git a/cmake/helpers.cmake b/cmake/helpers.cmake index 6706c5f..979e633 100644 --- a/cmake/helpers.cmake +++ b/cmake/helpers.cmake @@ -46,7 +46,9 @@ endif() if(TESSESFRAMEWORK_FETCHCONTENT) target_link_libraries(tessesframework PRIVATE mbedtls mbedx509 mbedcrypto everest p256m) +if(TESSESFRAMEWORK_STATIC) list(APPEND TessesFrameworkLibs mbedtls mbedx509 mbedcrypto everest p256m) +endif() else() target_link_libraries(tessesframework PRIVATE mbedtls mbedx509 mbedcrypto) diff --git a/pkgconfig/CMakeLists.txt b/pkgconfig/CMakeLists.txt index 85e6e4a..680f702 100644 --- a/pkgconfig/CMakeLists.txt +++ b/pkgconfig/CMakeLists.txt @@ -4,7 +4,7 @@ set(PKGCONFIG_LIBDIR "\${prefix}/${CMAKE_INSTALL_LIBDIR}") set(PKGCONFIG_PROJECT_DESCRIPTION "A cross platform wrapper library") set(PKGCONFIG_PROJECT_HOMEPAGE_URL "https://git.tesses.org/tessesframework") -if(TESSESFRAMEWORK_ENABLE_MBED) +if(TESSESFRAMEWORK_ENABLE_MBED AND NOT (TESSESFRAMEWORK_FETCHCONTENT AND NOT TESSESFRAMEWORK_STATIC)) set(PKGCONFIG_DEPS "Requires: mbedtls") else() set(PKGCONFIG_DEPS "") diff --git a/pkgconfig/tessesframework.pc.in b/pkgconfig/tessesframework.pc.in index 52fd53d..5670f7a 100644 --- a/pkgconfig/tessesframework.pc.in +++ b/pkgconfig/tessesframework.pc.in @@ -7,5 +7,7 @@ Description: @PKGCONFIG_PROJECT_DESCRIPTION@ URL: @PKGCONFIG_PROJECT_HOMEPAGE_URL@ Version: @PROJECT_VERSION@ +@PKGCONFIG_DEPS@ + Cflags: -I"${includedir}" Libs: -L"${libdir}" -ltessesframework \ No newline at end of file diff --git a/src/TF_Init.cpp b/src/TF_Init.cpp index 2d8af36..7a89107 100644 --- a/src/TF_Init.cpp +++ b/src/TF_Init.cpp @@ -510,7 +510,7 @@ std::string TF_GetExecutableName() { if (sysctl(mib, 4, path.data(), &len, NULL, 0) < 0) { return ""; } - + path.resize(len-1); return path; #elif defined(__NetBSD__) auto path = Filesystem::LocalFS->ReadLink( @@ -523,15 +523,18 @@ std::string TF_GetExecutableName() { return path.ToString(); #elif TARGET_OS_MAC && !TARGET_OS_IPHONE std::string path; - path.resize(1024); + path.resize(1025); uint32_t bufsize = (uint32_t)path.size(); if (_NSGetExecutablePath(path.data(), &bufsize) == 0) { - path.resize(bufsize); + path.resize(bufsize-1); return path; } else { path.resize(bufsize); if (_NSGetExecutablePath(path.data(), &bufsize) == 0) + { + path.resize(bufsize-1); return path; + } } #endif