19b11eb9a8
- Removed TactilityC, moved its symbols to existing modules and several new ones (pthread-module, c-symbols-module, cpp-symbols-module, posix-symbols-module, freertos-module). - Removed Firmware subproject and moved main() into Tactility subproject. - Strengthened application archive, path, version, stack-size, and device validation. - Moved symbol resolution for elf_loader to app-esp32-module. - Improved `struct Module` declarations and made module and symbol definitions in modules more consistent. - Removed old http download code from Tactility subproject. - Rename app-module's source files for consistency. - Add missing pthread symbols. - Kernel module symbols are now resolvable on all platforms.
109 lines
3.5 KiB
C++
109 lines
3.5 KiB
C++
// SPDX-License-Identifier: Apache-2.0
|
|
#include <pthread/module.h>
|
|
|
|
#include <pthread.h>
|
|
#include <semaphore.h>
|
|
#include <unistd.h>
|
|
|
|
// pthread_mutex_timedlock / pthread_rwlock_timed{rd,wr}lock / sem_timedwait belong to POSIX's
|
|
// optional "Timeouts" feature (_POSIX_TIMEOUTS, from <unistd.h>) - Apple's libc never implements
|
|
// it, so this is the portable, spec-sanctioned test rather than an OS-name check.
|
|
#if defined(_POSIX_TIMEOUTS) && _POSIX_TIMEOUTS >= 0
|
|
#define TT_PTHREAD_HAS_TIMEOUTS 1
|
|
#else
|
|
#define TT_PTHREAD_HAS_TIMEOUTS 0
|
|
#endif
|
|
|
|
#if !defined(ESP_PLATFORM) && defined(__GLIBC_PREREQ)
|
|
#if __GLIBC_PREREQ(2, 30)
|
|
#define TT_PTHREAD_HAS_CLOCKWAIT 1
|
|
#else
|
|
#define TT_PTHREAD_HAS_CLOCKWAIT 0
|
|
#endif
|
|
#else
|
|
#define TT_PTHREAD_HAS_CLOCKWAIT 0
|
|
#endif
|
|
|
|
extern "C" {
|
|
|
|
static const ModuleSymbol SYMBOLS[] = {
|
|
// pthread
|
|
DEFINE_MODULE_SYMBOL(pthread_attr_init),
|
|
DEFINE_MODULE_SYMBOL(pthread_attr_setstacksize),
|
|
DEFINE_MODULE_SYMBOL(pthread_create),
|
|
DEFINE_MODULE_SYMBOL(pthread_detach),
|
|
DEFINE_MODULE_SYMBOL(pthread_exit),
|
|
DEFINE_MODULE_SYMBOL(pthread_join),
|
|
// pthread_cond
|
|
DEFINE_MODULE_SYMBOL(pthread_cond_init),
|
|
DEFINE_MODULE_SYMBOL(pthread_cond_broadcast),
|
|
#if TT_PTHREAD_HAS_CLOCKWAIT
|
|
DEFINE_MODULE_SYMBOL(pthread_cond_clockwait),
|
|
#endif
|
|
DEFINE_MODULE_SYMBOL(pthread_cond_destroy),
|
|
DEFINE_MODULE_SYMBOL(pthread_cond_signal),
|
|
DEFINE_MODULE_SYMBOL(pthread_cond_timedwait),
|
|
// pthread_mutex
|
|
DEFINE_MODULE_SYMBOL(pthread_mutex_destroy),
|
|
DEFINE_MODULE_SYMBOL(pthread_mutex_init),
|
|
DEFINE_MODULE_SYMBOL(pthread_mutex_lock),
|
|
#if TT_PTHREAD_HAS_TIMEOUTS
|
|
DEFINE_MODULE_SYMBOL(pthread_mutex_timedlock),
|
|
#endif
|
|
DEFINE_MODULE_SYMBOL(pthread_mutex_trylock),
|
|
DEFINE_MODULE_SYMBOL(pthread_mutex_unlock),
|
|
// pthread_mutexattr
|
|
DEFINE_MODULE_SYMBOL(pthread_mutexattr_destroy),
|
|
#ifndef ESP_PLATFORM
|
|
DEFINE_MODULE_SYMBOL(pthread_mutexattr_getpshared),
|
|
DEFINE_MODULE_SYMBOL(pthread_mutexattr_setpshared),
|
|
#endif
|
|
DEFINE_MODULE_SYMBOL(pthread_mutexattr_gettype),
|
|
DEFINE_MODULE_SYMBOL(pthread_mutexattr_init),
|
|
DEFINE_MODULE_SYMBOL(pthread_mutexattr_settype),
|
|
// sem
|
|
DEFINE_MODULE_SYMBOL(sem_destroy),
|
|
DEFINE_MODULE_SYMBOL(sem_getvalue),
|
|
DEFINE_MODULE_SYMBOL(sem_init),
|
|
DEFINE_MODULE_SYMBOL(sem_post),
|
|
#if TT_PTHREAD_HAS_TIMEOUTS
|
|
DEFINE_MODULE_SYMBOL(sem_timedwait),
|
|
#endif
|
|
DEFINE_MODULE_SYMBOL(sem_trywait),
|
|
DEFINE_MODULE_SYMBOL(sem_wait),
|
|
// pthread_rwlock
|
|
#if TT_PTHREAD_HAS_CLOCKWAIT
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlock_clockrdlock),
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlock_clockwrlock),
|
|
#endif
|
|
#if TT_PTHREAD_HAS_TIMEOUTS
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlock_timedrdlock),
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlock_timedwrlock),
|
|
#endif
|
|
#ifndef ESP_PLATFORM
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlockattr_destroy),
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlockattr_getpshared),
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlockattr_init),
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlockattr_setpshared),
|
|
#endif
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlock_destroy),
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlock_init),
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlock_rdlock),
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlock_tryrdlock),
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlock_trywrlock),
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlock_unlock),
|
|
DEFINE_MODULE_SYMBOL(pthread_rwlock_wrlock),
|
|
MODULE_SYMBOL_TERMINATOR,
|
|
};
|
|
|
|
Module pthread_module = {
|
|
.name = "pthread",
|
|
.start = nullptr,
|
|
.stop = nullptr,
|
|
.drivers = nullptr,
|
|
.symbols = SYMBOLS,
|
|
.internal = nullptr,
|
|
};
|
|
|
|
}
|