Support for building and running external apps (#112)

This commit is contained in:
Ken Van Hoeylandt
2024-12-08 16:46:19 +01:00
committed by GitHub
parent 42e843b463
commit 415442e410
74 changed files with 2901 additions and 126 deletions
+25 -21
View File
@@ -3,31 +3,35 @@ cmake_minimum_required(VERSION 3.16)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
file(GLOB_RECURSE SOURCES "Source/*.c*")
file(GLOB_RECURSE HEADERS "Source/*.h*")
add_library(TactilityCore OBJECT)
target_sources(TactilityCore
PRIVATE ${SOURCES}
PUBLIC ${HEADERS}
)
target_include_directories(TactilityCore SYSTEM
PUBLIC Source/
)
if (DEFINED ENV{ESP_IDF_VERSION})
add_definitions(-DESP_PLATFORM)
target_link_libraries(TactilityCore
PUBLIC idf::mbedtls
PRIVATE idf::nvs_flash # ESP-IDF // for secure.c
file(GLOB_RECURSE SOURCE_FILES Source/*.c*)
idf_component_register(
SRCS ${SOURCE_FILES}
INCLUDE_DIRS "Source/"
REQUIRES mbedtls nvs_flash
)
add_definitions(-DESP_PLATFORM)
else()
file(GLOB_RECURSE SOURCES "Source/*.c*")
file(GLOB_RECURSE HEADERS "Source/*.h*")
add_library(TactilityCore OBJECT)
target_sources(TactilityCore
PRIVATE ${SOURCES}
PUBLIC ${HEADERS}
)
target_include_directories(TactilityCore SYSTEM
PUBLIC Source/
)
add_definitions(-D_Nullable=)
add_definitions(-D_Nonnull=)
target_link_libraries(TactilityCore
PUBLIC mbedtls
PUBLIC freertos_kernel
PUBLIC mbedtls
PUBLIC freertos_kernel
)
endif()
endif()
+1 -1
View File
@@ -112,7 +112,7 @@ ThreadId Mutex::getOwner() const {
std::unique_ptr<ScopedMutexUsage> Mutex::scoped() const {
return std::move(std::make_unique<ScopedMutexUsage>(*this));
return std::make_unique<ScopedMutexUsage>(*this);
}
Mutex* tt_mutex_alloc(Mutex::Type type) {
+82
View File
@@ -0,0 +1,82 @@
#include "File.h"
namespace tt::file {
#define TAG "file"
long getSize(FILE* file) {
long original_offset = ftell(file);
if (fseek(file, 0, SEEK_END) != 0) {
TT_LOG_E(TAG, "fseek failed");
return -1;
}
long file_size = ftell(file);
if (file_size == -1) {
TT_LOG_E(TAG, "Could not get file length");
return -1;
}
if (fseek(file, original_offset, SEEK_SET) != 0) {
TT_LOG_E(TAG, "fseek Failed");
return -1;
}
return file_size;
}
static std::unique_ptr<uint8_t[]> readBinaryInternal(const char* filepath, size_t& outSize, size_t sizePadding = 0) {
FILE* file = fopen(filepath, "rb");
if (file == nullptr) {
TT_LOG_E(TAG, "Failed to open %s", filepath);
return nullptr;
}
long content_length = getSize(file);
if (content_length == -1) {
TT_LOG_E(TAG, "Failed to determine content length for %s", filepath);
return nullptr;
}
auto data = std::make_unique<uint8_t[]>(content_length + sizePadding);
if (data == nullptr) {
TT_LOG_E(TAG, "Insufficient memory. Failed to allocate %ldl bytes.", content_length);
return nullptr;
}
size_t buffer_offset = 0;
while (buffer_offset < content_length) {
size_t bytes_read = fread(&data.get()[buffer_offset], 1, content_length - buffer_offset, file);
TT_LOG_I(TAG, "Read %d bytes", bytes_read);
if (bytes_read > 0) {
buffer_offset += bytes_read;
} else { // Something went wrong?
data = nullptr;
break;
}
}
outSize = buffer_offset;
fclose(file);
return data;
}
std::unique_ptr<uint8_t[]> readBinary(const char* filepath, size_t& outSize) {
return readBinaryInternal(filepath, outSize);
}
std::unique_ptr<uint8_t[]> readString(const char* filepath) {
size_t size = 0;
auto data = readBinaryInternal(filepath, size, 1);
if (size > 0) {
data.get()[size] = 0; // Append null terminator
return data;
} else {
return nullptr;
}
}
}
+15
View File
@@ -0,0 +1,15 @@
#pragma once
#include "TactilityCore.h"
#include <cstdio>
namespace tt::file {
#define TAG "file"
long getSize(FILE* file);
std::unique_ptr<uint8_t[]> readBinary(const char* filepath, size_t& outSize);
std::unique_ptr<uint8_t[]> readString(const char* filepath);
}