# POSIX compatibility layer for ThreadX.
#
# This target is EXCLUDE_FROM_ALL: it is not part of the default build and is
# only produced when something asks for it, either by name or by linking it.
#
# The include directory is deliberately PUBLIC. The layer ships replacements for
# errno.h, fcntl.h, pthread.h, sched.h, signal.h and time.h, and application code
# has to see those rather than a toolchain's own copies. That is also why the
# layer cannot be used on the hosted simulation ports, where the C library
# already supplies them; the top-level CMakeLists.txt skips it there.

add_library(posix-threadx EXCLUDE_FROM_ALL)

target_include_directories(posix-threadx
    SYSTEM
    PUBLIC
    ${CMAKE_CURRENT_LIST_DIR}
)

target_sources(posix-threadx
    PRIVATE
    ${CMAKE_CURRENT_LIST_DIR}/px_abs_time_to_rel_ticks.c
    ${CMAKE_CURRENT_LIST_DIR}/px_clock_getres.c
    ${CMAKE_CURRENT_LIST_DIR}/px_clock_gettime.c
    ${CMAKE_CURRENT_LIST_DIR}/px_clock_settime.c
    ${CMAKE_CURRENT_LIST_DIR}/px_cond_broadcast.c
    ${CMAKE_CURRENT_LIST_DIR}/px_cond_destroy.c
    ${CMAKE_CURRENT_LIST_DIR}/px_cond_init.c
    ${CMAKE_CURRENT_LIST_DIR}/px_cond_signal.c
    ${CMAKE_CURRENT_LIST_DIR}/px_cond_timedwait.c
    ${CMAKE_CURRENT_LIST_DIR}/px_cond_wait.c
    ${CMAKE_CURRENT_LIST_DIR}/px_error.c
    ${CMAKE_CURRENT_LIST_DIR}/px_in_thread_context.c
    ${CMAKE_CURRENT_LIST_DIR}/px_internal_signal_dispatch.c
    ${CMAKE_CURRENT_LIST_DIR}/px_memory_allocate.c
    ${CMAKE_CURRENT_LIST_DIR}/px_memory_release.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_arrange_msg.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_attr_init.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_close.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_create.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_find_queue.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_get_new_queue.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_get_queue_desc.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_open.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_priority_search.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_putback_queue.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_queue_delete.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_queue_init.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_receive.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_reset_queue.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_send.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mq_unlink.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_attr_destroy.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_attr_getprotocol.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_attr_getpshared.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_attr_gettype.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_attr_initi.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_attr_setprotocol.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_attr_setpshared.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_attr_settype.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_destroy.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_init.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_lock.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_set_default_mutexattr.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_timedlock.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_trylock.c
    ${CMAKE_CURRENT_LIST_DIR}/px_mx_unlock.c
    ${CMAKE_CURRENT_LIST_DIR}/px_nanosleep.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_destroy.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_getdetachstate.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_getinheritsched.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_getschedparam.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_getschedpolicy.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_getstack.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_getstackaddr.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_getstacksize.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_init.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_setdetachstate.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_setinheritsched.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_setschedparam.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_setschedpolicyl.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_setstack.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_setstackaddr.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_attr_setstacksize.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_cancel.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_create.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_detach.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_equal.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_exit.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_getcanceltype.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_getschedparam.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_init.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_join.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_kill.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_once.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_self.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_set_default_pthread_attr.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_setcancelstate.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_setcanceltype.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_setschedparam.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_sigmask.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_testcancel.c
    ${CMAKE_CURRENT_LIST_DIR}/px_pth_yield.c
    ${CMAKE_CURRENT_LIST_DIR}/px_px_initialize.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sched_get_prio.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sched_yield.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_close.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_destroy.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_find_sem.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_get_new_sem.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_getvalue.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_init.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_open.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_post.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_reset.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_set_sem_name.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_trywait.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_unlink.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sem_wait.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sig_addset.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sig_delset.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sig_emptyset.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sig_fillset.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sig_signal.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sig_wait.c
    ${CMAKE_CURRENT_LIST_DIR}/px_sleep.c
    ${CMAKE_CURRENT_LIST_DIR}/px_system_manager.c
)

target_link_libraries(posix-threadx PUBLIC threadx)
