diff --git a/netutils/nng/CMakeLists.txt b/netutils/nng/CMakeLists.txt new file mode 100644 index 000000000..4aa74131d --- /dev/null +++ b/netutils/nng/CMakeLists.txt @@ -0,0 +1,173 @@ +# +# Copyright (C) 2024 Xiaomi Corporation +# +# Licensed 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_NETUTILS_NNG) + + # ############################################################################ + # Config and Fetch NNG lib + # ############################################################################ + + set(NNG_DIR ${CMAKE_CURRENT_LIST_DIR}/nng) + + if(NOT EXISTS ${NNG_DIR}) + set(NNG_URL "https://github.com/nanomsg/nng/archive") + FetchContent_Declare( + nng_fetch + URL ${NNG_URL}/v${CONFIG_NETUTILS_NNG_VERSION}.tar.gz SOURCE_DIR + ${NNG_DIR} BINARY_DIR ${CMAKE_BINARY_DIR}/apps/netutils/nng/nng + DOWNLOAD_NO_PROGRESS true + TIMEOUT 30) + + FetchContent_GetProperties(nng_fetch) + + if(NOT nng_fetch) + FetchContent_Populate(nng_fetch) + endif() + + execute_process(COMMAND sh -c "patch -p0 < nng_porting_for_nuttx.patch" + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + endif() + + set(CFLAGS + -DNNG_PLATFORM_POSIX + -DNNG_HAVE_GETRANDOM + -DNNG_TRANSPORT_INPROC + -DNNG_TRANSPORT_IPC + -DNNG_TRANSPORT_TCP + -DNNG_TRANSPORT_TLS + -DNNG_TRANSPORT_WS + -DNNG_TRANSPORT_WSS + -DNNG_SETSTACKSIZE + -DNNG_HAVE_PTHREAD_SETNAME_NP + -DNNG_USE_EVENTFD + -Wno-unused-value + -Wno-shadow) + + if(CONFIG_SMP_NCPUS) + list(APPEND CFLAGS -DNNG_MAX_TASKQ_THREADS=$(CONFIG_SMP_NCPUS)) + else() + list(APPEND CFLAGS -DNNG_MAX_TASKQ_THREADS=2) + endif() + if(CONFIG_NETUTILS_NNG_HAVE_EPOLL) + list(APPEND CFLAGS -DNNG_HAVE_EPOLL -DNNG_HAVE_EPOLL_CREATE1) + endif() + if(CONFIG_NETUTILS_NNG_USE_MBEDTLS) + list(APPEND CFLAGS -DNNG_TLS_ENGINE_INIT=nng_tls_engine_init_mbed + -DNNG_TLS_ENGINE_FINI=nng_tls_engine_fini_mbed -DNNG_SUPP_TLS) + endif() + + set(CSRCS + ${NNG_DIR}/src/nng.c + ${NNG_DIR}/src/nng_legacy.c + ${NNG_DIR}/src/core/aio.c + ${NNG_DIR}/src/core/device.c + ${NNG_DIR}/src/core/dialer.c + ${NNG_DIR}/src/core/file.c + ${NNG_DIR}/src/core/idhash.c + ${NNG_DIR}/src/core/init.c + ${NNG_DIR}/src/core/list.c + ${NNG_DIR}/src/core/listener.c + ${NNG_DIR}/src/core/lmq.c + ${NNG_DIR}/src/core/message.c + ${NNG_DIR}/src/core/msgqueue.c + ${NNG_DIR}/src/core/options.c + ${NNG_DIR}/src/core/pollable.c + ${NNG_DIR}/src/core/panic.c + ${NNG_DIR}/src/core/pipe.c + ${NNG_DIR}/src/core/protocol.c + ${NNG_DIR}/src/core/reap.c + ${NNG_DIR}/src/core/socket.c + ${NNG_DIR}/src/core/stats.c + ${NNG_DIR}/src/core/stream.c + ${NNG_DIR}/src/core/strs.c + ${NNG_DIR}/src/core/taskq.c + ${NNG_DIR}/src/core/tcp.c + ${NNG_DIR}/src/core/thread.c + ${NNG_DIR}/src/core/timer.c + ${NNG_DIR}/src/core/url.c + ${NNG_DIR}/src/platform/posix/posix_alloc.c + ${NNG_DIR}/src/platform/posix/posix_atomic.c + ${NNG_DIR}/src/platform/posix/posix_clock.c + ${NNG_DIR}/src/platform/posix/posix_debug.c + ${NNG_DIR}/src/platform/posix/posix_file.c + ${NNG_DIR}/src/platform/posix/posix_ipcconn.c + ${NNG_DIR}/src/platform/posix/posix_ipcdial.c + ${NNG_DIR}/src/platform/posix/posix_ipclisten.c + ${NNG_DIR}/src/platform/posix/posix_pipe.c + ${NNG_DIR}/src/platform/posix/posix_resolv_gai.c + ${NNG_DIR}/src/platform/posix/posix_sockaddr.c + ${NNG_DIR}/src/platform/posix/posix_tcpconn.c + ${NNG_DIR}/src/platform/posix/posix_tcpdial.c + ${NNG_DIR}/src/platform/posix/posix_tcplisten.c + ${NNG_DIR}/src/platform/posix/posix_thread.c + ${NNG_DIR}/src/platform/posix/posix_udp.c + ${NNG_DIR}/src/platform/posix/posix_rand_getrandom.c + ${NNG_DIR}/src/sp/transport.c + ${NNG_DIR}/src/sp/protocol/bus0/bus.c + ${NNG_DIR}/src/sp/protocol/pair0/pair.c + ${NNG_DIR}/src/sp/protocol/pair1/pair.c + ${NNG_DIR}/src/sp/protocol/pair1/pair1_poly.c + ${NNG_DIR}/src/sp/protocol/pipeline0/pull.c + ${NNG_DIR}/src/sp/protocol/pipeline0/push.c + ${NNG_DIR}/src/sp/protocol/pubsub0/pub.c + ${NNG_DIR}/src/sp/protocol/pubsub0/sub.c + ${NNG_DIR}/src/sp/protocol/pubsub0/xsub.c + ${NNG_DIR}/src/sp/protocol/reqrep0/rep.c + ${NNG_DIR}/src/sp/protocol/reqrep0/req.c + ${NNG_DIR}/src/sp/protocol/reqrep0/xrep.c + ${NNG_DIR}/src/sp/protocol/reqrep0/xreq.c + ${NNG_DIR}/src/sp/protocol/survey0/respond.c + ${NNG_DIR}/src/sp/protocol/survey0/survey.c + ${NNG_DIR}/src/sp/protocol/survey0/xrespond.c + ${NNG_DIR}/src/sp/protocol/survey0/xsurvey.c + ${NNG_DIR}/src/sp/transport/inproc/inproc.c + ${NNG_DIR}/src/sp/transport/ipc/ipc.c + ${NNG_DIR}/src/sp/transport/tcp/tcp.c + ${NNG_DIR}/src/sp/transport/tls/tls.c + ${NNG_DIR}/src/sp/transport/ws/websocket.c + ${NNG_DIR}/src/supplemental/base64/base64.c + ${NNG_DIR}/src/supplemental/http/http_chunk.c + ${NNG_DIR}/src/supplemental/http/http_client.c + ${NNG_DIR}/src/supplemental/http/http_conn.c + ${NNG_DIR}/src/supplemental/http/http_msg.c + ${NNG_DIR}/src/supplemental/http/http_public.c + ${NNG_DIR}/src/supplemental/http/http_schemes.c + ${NNG_DIR}/src/supplemental/http/http_server.c + ${NNG_DIR}/src/supplemental/sha1/sha1.c + ${NNG_DIR}/src/supplemental/tls/tls_common.c + ${NNG_DIR}/src/supplemental/util/platform.c + ${NNG_DIR}/src/supplemental/websocket/websocket.c) + + if(CONFIG_NETUTILS_NNG_HAVE_EPOLL) + list(APPEND CSRCS ${NNG_DIR}/src/platform/posix/posix_pollq_epoll.c) + else() + list(APPEND CSRCS ${NNG_DIR}/src/platform/posix/posix_pollq_poll.c) + endif() + if(CONFIG_NETUTILS_NNG_USE_MBEDTLS) + list(APPEND CSRCS ${NNG_DIR}/src/supplemental/tls/mbedtls/tls.c) + endif() + + set_property( + TARGET nuttx + APPEND + PROPERTY NUTTX_INCLUDE_DIRECTORIES ${NNG_DIR}/include) + set(INCDIR ${NNG_DIR}/src) + + nuttx_add_library(nng STATIC) + target_sources(nng PRIVATE ${CSRCS}) + target_compile_options(nng PRIVATE ${CFLAGS}) + target_include_directories(nng PRIVATE ${INCDIR}) +endif()