This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git


The following commit(s) were added to refs/heads/master by this push:
     new 1c769d141 testing/ltp: add cmake support
1c769d141 is described below

commit 1c769d1410b6c3043d4dc3d0e02080c239a99253
Author: caofuqi1 <[email protected]>
AuthorDate: Tue Nov 18 10:02:30 2025 +0100

    testing/ltp: add cmake support
    
    add cmake support for LTP
    
    Signed-off-by: p-szafonimateusz <[email protected]>
    Co-Authored: xuxin19 <[email protected]>
---
 testing/ltp/CMakeLists.txt | 376 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 376 insertions(+)

diff --git a/testing/ltp/CMakeLists.txt b/testing/ltp/CMakeLists.txt
new file mode 100644
index 000000000..1152b8963
--- /dev/null
+++ b/testing/ltp/CMakeLists.txt
@@ -0,0 +1,376 @@
+# 
##############################################################################
+# apps/testing/ltp/CMakeLists.txt
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more 
contributor
+# license agreements.  See the NOTICE file distributed with this work for
+# additional information regarding copyright ownership.  The ASF licenses this
+# file to you under the Apache License, Version 2.0 (the "License"); you may 
not
+# use this file except in compliance with the License.  You may obtain a copy 
of
+# the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations under
+# the License.
+#
+# 
##############################################################################
+
+if(CONFIG_TESTING_LTP)
+  set(LTPS_VERSION 20230516)
+  set(LTP_DOWNLOAD_URL
+      https://github.com/linux-test-project/ltp/archive/refs/tags/)
+  set(LTP_UNPACK ${CMAKE_CURRENT_SOURCE_DIR}/ltp)
+  set(LTP_URL https://github.com/linux-test-project/ltp.git)
+
+  set(TESTDIR ${LTP_UNPACK}/testcases/open_posix_testsuite)
+
+  if(NOT EXISTS ${TESTDIR})
+    FetchContent_Declare(
+      ltp_fetch
+      DOWNLOAD_NAME "ltp-${LTPS_VERSION}.zip"
+      DOWNLOAD_DIR ${CMAKE_CURRENT_LIST_DIR}
+      URL "${LTP_DOWNLOAD_URL}${LTPS_VERSION}.zip" SOURCE_DIR
+          ${CMAKE_CURRENT_LIST_DIR}/ltp BINARY_DIR
+          ${CMAKE_BINARY_DIR}/apps/testing/ltp/ltp
+      PATCH_COMMAND
+        patch -p1 -d ${LTP_UNPACK} <
+        ${CMAKE_CURRENT_LIST_DIR}/0001-pthread_rwlock_unlock-follow-linux.patch
+        && patch -p1 -d ${LTP_UNPACK} <
+        
${CMAKE_CURRENT_LIST_DIR}/0002-Use-ifdef-instead-of-if-for-__linux__.patch
+        && patch -p1 -d ${LTP_UNPACK} <
+        
${CMAKE_CURRENT_LIST_DIR}/0003-LTP-Re-init-static-variable-to-avoid-errors-during-m.patch
+        && patch -p1 -d ${LTP_UNPACK} <
+        ${CMAKE_CURRENT_LIST_DIR}/0004-test-update-ltp-test-case.patch && patch
+        -p1 -d ${LTP_UNPACK} <
+        
${CMAKE_CURRENT_LIST_DIR}/0005-ltp-update-pthread_cond_timedwait-testcase.patch
+        && patch -p1 -d ${LTP_UNPACK} <
+        ${CMAKE_CURRENT_LIST_DIR}/0006-test-modified-ltp-rwlock-need-init.patch
+        && patch -p1 -d ${LTP_UNPACK} <
+        
${CMAKE_CURRENT_LIST_DIR}/0007-pthread_kill-add-usleep-aviod-semcount-overturn.patch
+        && patch -p1 -d ${LTP_UNPACK} <
+        
${CMAKE_CURRENT_LIST_DIR}/0008-test-ltp-fix-ltp_interfaces_sigaction_23_10-deadloop.patch
+        && patch -p1 -d ${LTP_UNPACK} <
+        
${CMAKE_CURRENT_LIST_DIR}/0009-ltp-modify-user-code-for-fdcheck-compatibility.patch
+        && patch -p1 -d ${LTP_UNPACK} <
+        ${CMAKE_CURRENT_LIST_DIR}/0010-ltp-fix-build-warning.patch && patch -p1
+        -d ${LTP_UNPACK} <
+        
${CMAKE_CURRENT_LIST_DIR}/0011-ltp-fix-the-proc.h-header-file-duplicate-inclusion.patch
+        && patch -p1 -d ${LTP_UNPACK} <
+        ${CMAKE_CURRENT_LIST_DIR}/0012-ltp-fix-build-error.patch
+      DOWNLOAD_NO_PROGRESS true
+      TIMEOUT 30)
+
+    FetchContent_GetProperties(ltp_fetch)
+    if(NOT ltp_fetch_POPULATED)
+      FetchContent_Populate(ltp_fetch)
+    endif()
+  endif()
+
+  if(EXISTS ${TESTDIR})
+    set(BLACKWORDS)
+    set(BLACKSRCS)
+
+    if(NOT CONFIG_FS_AIO)
+      list(APPEND BLACKWORDS "aio.h" "SIGPOLL")
+    endif()
+    list(APPEND BLACKWORDS "pthread_mutexattr_setprioceiling"
+         "pthread_mutexattr_getprioceiling" "pthread_getattr_np"
+         "pthread_mutex_getprioceiling")
+
+    if(NOT CONFIG_PTHREAD_SPINLOCKS)
+      list(APPEND BLACKWORDS "pthread_spin_init" "pthread_spin_destroy"
+           "pthread_spin_trylock")
+    endif()
+    list(
+      APPEND
+      BLACKWORDS
+      "CHILD_MAX"
+      "setpgid("
+      "PTHREAD_SCOPE_PROCESS"
+      "setpgrp"
+      "threads_scenarii.c"
+      "pthread_mutex_lock"
+      "ucontext.h"
+      "msync"
+      "lfind")
+
+    list(
+      APPEND
+      BLACKSRCS
+      ${TESTDIR}/conformance/definitions/time_h/19-1-buildonly.c
+      ${TESTDIR}/conformance/definitions/signal_h/21-1-buildonly.c
+      ${TESTDIR}/conformance/definitions/signal_h/27-1-buildonly.c
+      ${TESTDIR}/conformance/definitions/time_h/19-1-buildonly.c
+      ${TESTDIR}/conformance/interfaces/sem_post/8-1.c
+      ${TESTDIR}/conformance/interfaces/clock_nanosleep/9-1.c
+      ${TESTDIR}/conformance/interfaces/clock_nanosleep/2-2.c
+      ${TESTDIR}/conformance/interfaces/clock_nanosleep/10-1.c
+      ${TESTDIR}/conformance/interfaces/clock_nanosleep/1-5.c
+      ${TESTDIR}/conformance/interfaces/clock_nanosleep/1-3.c
+      ${TESTDIR}/conformance/interfaces/clock_nanosleep/2-3.c
+      ${TESTDIR}/conformance/interfaces/clock_nanosleep/1-4.c
+      ${TESTDIR}/conformance/interfaces/pthread_sigmask/18-1.c
+      ${TESTDIR}/conformance/interfaces/pthread_sigmask/4-1.c
+      ${TESTDIR}/conformance/interfaces/sigprocmask/4-1.c)
+
+    if(NOT CONFIG_LIBC_LOCALTIME)
+      list(APPEND BLACKSRCS
+           ${TESTDIR}/conformance/definitions/time_h/34-1-buildonly.c
+           ${TESTDIR}/conformance/definitions/time_h/35-3-buildonly.c)
+    endif()
+
+    list(
+      APPEND
+      BLACKSRCS
+      ${TESTDIR}/conformance/definitions/time_h/35-1-buildonly.c
+      ${TESTDIR}/conformance/definitions/time_h/35-2-buildonly.c
+      ${TESTDIR}/stress/threads/pthread_kill/stress.c)
+
+    if(NOT CONFIG_PTHREAD_SPINLOCKS)
+      list(APPEND BLACKSRCS
+           ${TESTDIR}/conformance/definitions/pthread_h/3-12-buildonly.c)
+    endif()
+
+    if(NOT CONFIG_SCHED_CHILD_STATUS)
+      list(
+        APPEND BLACKSRCS ${TESTDIR}/conformance/interfaces/pthread_exit/6-1.c
+        ${TESTDIR}/conformance/behavior/WIFEXITED/1-1.c
+        ${TESTDIR}/conformance/behavior/WIFEXITED/1-2.c)
+    endif()
+
+    if(NOT CONFIG_FS_TMPFS)
+      list(APPEND BLACKWORDS "lio_listio")
+    endif()
+
+    if(NOT CONFIG_SIG_EVTHREAD)
+      list(APPEND BLACKWORDS "fork")
+    endif()
+
+    if(NOT CONFIG_MQ_MAXMSGSIZE GREATER_EQUAL 64)
+      list(
+        APPEND
+        BLACKWORDS
+        "mq_close"
+        "mq_getattr"
+        "mq_notify"
+        "mq_open"
+        "mq_receive"
+        "mq_send"
+        "mq_setattr"
+        "mq_timedreceive"
+        "mq_timedsend"
+        "mq_unlink")
+    endif()
+
+    if(NOT CONFIG_PTHREAD_MUTEX_TYPES)
+      list(APPEND BLACKWORDS "pthread_mutexattr_settype")
+    endif()
+
+    if(NOT CONFIG_SCHED_SPORADIC)
+      list(
+        APPEND
+        BLACKSRCS
+        ${TESTDIR}/conformance/interfaces/sched_setscheduler/19-2.c
+        ${TESTDIR}/conformance/interfaces/sched_setscheduler/19-3.c
+        ${TESTDIR}/conformance/interfaces/sched_setscheduler/19-4.c)
+    endif()
+
+    if(NOT CONFIG_SIG_DEFAULT)
+      list(APPEND BLACKWORDS "SIGKILL" "SIGSTOP")
+    endif()
+
+    if(NOT CONFIG_RR_INTERVAL GREATER 0)
+      list(APPEND BLACKWORDS "SCHED_RR")
+    endif()
+
+    if(NOT CONFIG_FS_NAMED_SEMAPHORES)
+      list(APPEND BLACKWORDS "sem_open" "sem_close" "sem_unlink")
+    endif()
+
+    if(NOT CONFIG_PIPES)
+      list(APPEND BLACKWORDS "pipe")
+    endif()
+
+    if(NOT CONFIG_LIBC_MAX_EXITFUNS GREATER_EQUAL 32)
+      list(APPEND BLACKSRCS
+           ${TESTDIR}/conformance/interfaces/pthread_exit/4-1.c
+           ${TESTDIR}/conformance/interfaces/pthread_exit/5-1.c)
+    endif()
+
+    if(NOT CONFIG_CANCELLATION_POINTS)
+      list(APPEND BLACKSRCS
+           ${TESTDIR}/conformance/interfaces/pthread_exit/3-1.c)
+    endif()
+
+    if(NOT CONFIG_TLS_NELEM GREATER_EQUAL 16)
+      list(APPEND BLACKSRCS
+           ${TESTDIR}/conformance/interfaces/pthread_setspecific/1-1.c)
+    endif()
+
+    if(NOT CONFIG_PTHREAD_SPINLOCKS)
+      list(APPEND BLACKWORDS "pthread_spin_lock")
+    endif()
+
+    if(NOT CONFIG_SCHED_WAITPID)
+      list(APPEND BLACKWORDS "waitpid")
+    endif()
+
+    if(NOT CONFIG_SCHED_USER_IDENTITY)
+      list(
+        APPEND
+        BLACKWORDS
+        "setuid"
+        "setgid"
+        "getuid"
+        "getgid"
+        "seteuid"
+        "setegid"
+        "geteuid"
+        "getegid")
+    endif()
+
+    if(CONFIG_TLS_NELEM EQUAL 0)
+      list(APPEND BLACKWORDS "pthread_key_create" "pthread_key_delete"
+           "pthread_setspecific" "pthread_getspecific")
+    endif()
+
+    if(CONFIG_TLS_NCLEANUP EQUAL 0)
+      list(APPEND BLACKWORDS "pthread_cleanup_push" "pthread_cleanup_pop")
+    endif()
+
+    if(NOT CONFIG_LIBC_EXECFUNCS)
+      list(APPEND BLACKWORDS "execl" "execvp" "execlp" "execvpe")
+    endif()
+
+    if(NOT CONFIG_FS_SHMFS)
+      list(APPEND BLACKWORDS "shm_open" "shm_unlink")
+    endif()
+
+    if(NOT LIBC_LOCALE_CATALOG)
+      list(APPEND BLACKWORDS "catopen" "catgets" "catclose")
+    endif()
+
+    if(NOT CONFIG_MM_SHM)
+      list(APPEND BLACKWORDS "shmget" "shmat")
+    endif()
+
+    file(GLOB_RECURSE LTP_ORIGS ${TESTDIR}/*.c)
+
+    if(LTP_ORIGS)
+      foreach(word IN LISTS BLACKWORDS)
+        foreach(file ${LTP_ORIGS})
+          file(STRINGS ${file} content)
+          string(FIND "${content}" "${word}" pos)
+          if(pos GREATER -1)
+            list(APPEND BLACKLIST ${file})
+          endif()
+        endforeach()
+      endforeach()
+    endif()
+
+    foreach(src ${BLACKSRCS})
+      foreach(orig ${LTP_ORIGS})
+        string(REGEX MATCH "${src}$" matched ${orig})
+        if(matched)
+          list(APPEND BLACKLIST ${orig})
+        endif()
+      endforeach()
+    endforeach()
+
+    foreach(ITEM ${BLACKLIST})
+      list(REMOVE_ITEM LTP_ORIGS ${ITEM})
+    endforeach()
+
+    set(LTP_MAINCSRCS "")
+    if(LTP_ORIGS)
+      foreach(file ${LTP_ORIGS})
+        file(STRINGS ${file} content)
+        string(FIND "${content}" "main(" pos)
+        if(pos GREATER -1)
+          list(APPEND LTP_MAINCSRCS ${file})
+        endif()
+      endforeach()
+    endif()
+
+    set(LTP_CSRCS ${LTP_ORIGS})
+    foreach(ITEM ${LTP_MAINCSRCS})
+      list(REMOVE_ITEM LTP_CSRCS ${ITEM})
+    endforeach()
+
+    set(PROGNAME "")
+    if(LTP_MAINCSRCS)
+      foreach(file ${LTP_MAINCSRCS})
+        string(REPLACE "/" ";" file_parts ${file})
+        list(LENGTH file_parts num_parts)
+        if(num_parts GREATER 2)
+          list(GET file_parts -3 part1)
+          list(GET file_parts -2 part2)
+          list(GET file_parts -1 part3)
+          string(REPLACE "-" "_" part1 ${part1})
+          string(REPLACE "-" "_" part2 ${part2})
+          string(REPLACE "-" "_" part3 ${part3})
+          set(prog "ltp_${part1}_${part2}_${part3}")
+          get_filename_component(progg ${prog} NAME_WE)
+          list(APPEND PROGNAME ${progg})
+        endif()
+      endforeach()
+    endif()
+
+    if(CONFIG_NET_CAN)
+      list(APPEND PROGNAME "can_rcv_own_msgs" "can_filter")
+      list(APPEND LTP_MAINCSRCS
+           "${TESTDIR}/../network/can/filter-tests/can_filter.c"
+           "${TESTDIR}/../network/can/filter-tests/can_rcv_own_msgs.c")
+    endif()
+
+    include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+    include_directories(${TESTDIR}/include)
+    include_directories(${TESTDIR}/../../include)
+
+    add_compile_options(
+      -Wall
+      -Wno-strict-prototypes
+      -Wno-return-type
+      -Wno-format
+      -Wno-uninitialized
+      -Wno-unused-variable
+      -Wno-unused-function
+      -Wno-unused-but-set-variable
+      -Wno-unused-value
+      -Wno-int-conversion
+      -Wno-shadow
+      -Wno-incompatible-pointer-types
+      -Wno-overflow
+      -Wno-int-to-pointer-cast)
+
+    if(APPLE)
+      add_compile_options(-Wno-integer-overflow -Wno-absolute-value)
+    endif()
+
+    list(LENGTH LTP_MAINCSRCS SOURCE_FILES_COUNT)
+    math(EXPR LAST_INDEX "${SOURCE_FILES_COUNT} - 1")
+
+    foreach(INDEX RANGE 0 ${LAST_INDEX})
+      list(GET LTP_MAINCSRCS ${INDEX} SOURCE_FILES)
+      list(GET PROGNAME ${INDEX} EXECUTABLE_NAMES)
+      nuttx_add_application(
+        NAME
+        ${EXECUTABLE_NAMES}
+        PRIORITY
+        SCHED_PRIORITY_DEFAULT
+        STACKSIZE
+        ${CONFIG_TESTING_LTP_STACKSIZE}
+        SRCS
+        ${SOURCE_FILES})
+    endforeach()
+  endif()
+
+  nuttx_add_library(ltp)
+  target_sources(ltp PRIVATE ${LTP_CSRCS})
+
+endif()

Reply via email to