From a8261960bcb4d08b254b2cfce746cca166329b6a Mon Sep 17 00:00:00 2001 From: qchang Date: Mon, 12 Mar 2018 16:35:22 -0700 Subject: add root CMakeLists.txt and README Change-Id: I83a88aaad416946c79faaa84f98be6a42ccc6200 Signed-off-by: qchang --- CMakeLists.txt | 145 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ README | 68 +++++++++++++++++++++++++++ 2 files changed, 213 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 README diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..590a5a5 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,145 @@ +######################################################################### +# +# Copyright (c) 2018 Huawei Technologies Co.,Ltd. +# 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. +######################################################################### + + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11) +PROJECT(nStack) +SET(CMAKE_C_COMPILER "gcc") +SET(EXECUTABLE_PATH ${CMAKE_CURRENT_LIST_DIR}/release/bin) +SET(LIB_PATH_STATIC ${PROJECT_BINARY_DIR}) +SET(LIB_PATH_SHARED ${CMAKE_CURRENT_LIST_DIR}/release/lib64) +SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_PATH_STATIC}) +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_PATH}) +SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIB_PATH_SHARED}) +SET(DMM_DPDK_INSTALL_DIR "" CACHE STRING "to get the dpdk install path by cmd") + +MESSAGE(STATUS "Top dir is: " ${CMAKE_CURRENT_LIST_DIR}) +MESSAGE(STATUS "Static library dir: " ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}) +MESSAGE(STATUS "Executable binary dir: " ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) +MESSAGE(STATUS "Shared library dir: " ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) + + +add_custom_target(clean-cmake-files + COMMAND ${CMAKE_COMMAND} -P clean-all.cmake +) + +option(WITH_SECUREC_LIB "Option description" OFF) +option(WITH_HAL_LIB "Option description" OFF) + +if(WITH_SECUREC_LIB) + add_definitions(-DSECUREC_LIB) +endif() + +if(WITH_HAL_LIB) + add_definitions(-DHAL_LIB) +endif() + +SET(post_compile "${PROJECT_BINARY_DIR}/post_compile.sh") +FILE(WRITE ${post_compile} "#!/bin/bash\n") +if(WITH_HAL_LIB) +else() +FILE(APPEND ${post_compile} +" + +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/nSocket/include/nstack_dmm_api.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/adapt/nstack_dmm_adpt.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/adapt/nstack_share_res.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/adapt/nstack_rd_mng.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/nSocket/include/declare_syscalls.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/include/* ${CMAKE_CURRENT_LIST_DIR}/release/include/ +cp -rf ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/base/include/*.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ +cp -rf ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/base/include/common/* ${CMAKE_CURRENT_LIST_DIR}/release/include/ + +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/common/include/* ${CMAKE_CURRENT_LIST_DIR}/release/include/ +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/ipc/mgr_com/mgr_com.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ +cp -f ${CMAKE_CURRENT_LIST_DIR}/src/framework/hal/hal.h ${CMAKE_CURRENT_LIST_DIR}/release/include/ +cp -f ${CMAKE_CURRENT_LIST_DIR}/build/libdmm_api.a ${CMAKE_CURRENT_LIST_DIR}/release/lib64/ +echo post compile process success. +" +) +endif() + +SET(clean_compile "${PROJECT_BINARY_DIR}/clean_compile.sh") +FILE(WRITE ${clean_compile} "#!/bin/bash\n") +FILE(APPEND ${clean_compile} +" + +rm -rf ${CMAKE_CURRENT_LIST_DIR}/release/include/*.h +rm -rf ${CMAKE_CURRENT_LIST_DIR}/release/include/generic +rm -rf ${CMAKE_CURRENT_LIST_DIR}/release/lib64/libdmm_api.a + +echo post clean process success. +" +) + +ADD_CUSTOM_TARGET(DPDK ALL COMMAND sh post_compile.sh) +ADD_DEPENDENCIES(DPDK dmm_api) + +ADD_CUSTOM_TARGET(clean-all + COMMAND ${CMAKE_BUILD_TOOL} clean + COMMAND sh clean_compile.sh) + +SET(JSON_C_URL https://github.com/json-c/json-c/archive/json-c-0.12.1-20160607.tar.gz) +SET(JSON_C_DOWNLOAD_DIR ${CMAKE_CURRENT_LIST_DIR}/thirdparty/json/) +SET(JSON_C_SRC ${CMAKE_CURRENT_LIST_DIR}/thirdparty/json/json-c-0.12.1) +if(EXISTS "${JSON_C_DOWNLOAD_DIR}/json-c-0.12.1.tar.gz") + SET(JSON_DOWNLOAD_CMD tar -xvf ${JSON_C_DOWNLOAD_DIR}/json-c-0.12.1.tar.gz -C ${JSON_C_DOWNLOAD_DIR}/json-c-0.12.1 --strip-components 1) +else() + SET(JSON_DOWNLOAD_CMD wget --no-check-certificate -O json-c-0.12.1.tar.gz ${JSON_C_URL} && tar -xvf ${JSON_C_DOWNLOAD_DIR}/json-c-0.12.1.tar.gz -C ${JSON_C_DOWNLOAD_DIR}/json-c-0.12.1 --strip-components 1) +endif() +INCLUDE(ExternalProject) +ExternalProject_Add( + JSON + DOWNLOAD_DIR ${JSON_C_DOWNLOAD_DIR} + DOWNLOAD_COMMAND ${JSON_DOWNLOAD_CMD} + BUILD_IN_SOURCE 1 + SOURCE_DIR ${JSON_C_SRC} + CONFIGURE_COMMAND sh autogen.sh COMMAND sh ./configure --enable-static --with-pic + BUILD_COMMAND make -j 8 + INSTALL_COMMAND cp -f .libs/libjson-c.a ${LIB_PATH_STATIC}/ +) + +SET(SECUREC_SRC ${CMAKE_CURRENT_LIST_DIR}/thirdparty/SecureC/src) +SET(SECUREC_SRC_H ${CMAKE_CURRENT_LIST_DIR}/thirdparty/SecureC/include) + +if(WITH_SECUREC_LIB) +INCLUDE(ExternalProject) +ExternalProject_Add( + SECUREC + SOURCE_DIR ${SECUREC_SRC} + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND "" + BUILD_COMMAND COMMAND make -j 8 + INSTALL_COMMAND cp -f ${SECUREC_SRC}/../lib/libsecurec.so ${LIB_PATH_SHARED}/ +) +endif() + +SET(GLOG_SRC ${CMAKE_CURRENT_LIST_DIR}/thirdparty/glog/glog-0.3.4) +INCLUDE(ExternalProject) +ExternalProject_Add( + GLOG + SOURCE_DIR ${GLOG_SRC} + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND autoreconf COMMAND sh configure CFLAGS=-fPIC CXXFLAGS=-fPIC + BUILD_COMMAND COMMAND make -j 8 + INSTALL_COMMAND cp -f ${GLOG_SRC}/.libs/libglog.a ${LIB_PATH_STATIC}/ +) + +ADD_SUBDIRECTORY(src) +ADD_SUBDIRECTORY(app_example) + +#ADD_SUBDIRECTORY(thirdparty/rsrdma) +ADD_SUBDIRECTORY(thirdparty/apps) diff --git a/README b/README new file mode 100644 index 0000000..b0f3243 --- /dev/null +++ b/README @@ -0,0 +1,68 @@ +一、DMM compile + +1.compile all module: +cd build +cmake -D DMM_DPDK_INSTALL_DIR=$DPDK_INSTALL_PATH .. +make -j 8 + +Note: DPDK_INSTALL_PATH - the path in which DPDK has been installed + +libnStackAdpt.so, libnStackAPI.so, libsecurec.so will be copyed to release\lib64 folder. +declare_syscalls.h, nsocket_dmm_api.h will be copyed to release\include folder + +configure files : + release\configure + module_config.json is the stack module config file. + rd_config.json is the rd config file. + the content of these two configure files just a simple. + +2. run DMM +nStack DMM is just a library linked by APP, no need run any other. + +for example: + gcc -g -o sendmsg sendmsg.c -L./DMM/release/lib64 -lnStackAPI + sendmsg.c is a APP that create a socket and connect to the service. + run app:./sendmsg 192.168.1.10 1024 1 + + module_config.json rd_config.json should be put together with sendmsg + + module_config.json for example: + { + "default_stack_name": "kernel", /*when rd can't not be find maybe choose the defualt one*/ + "module_list": [ + { + "stack_name": "kernel", + "function_name": "kernel_stack_register", + "libname": "", /*library name, if loadtype is static, this maybe null, else must give a library name*/ + "loadtype": "static", /*library load type: static or dynamic*/ + "deploytype": "1", + "maxfd": "1024", + "minfd": "0", + "priorty": "1", + "stackid": "0", /*must be ordered and not be repeated*/ + } + ] + } + + rd_config.json for example: + { + "ip_route": [ + { + "subnet": "192.165.1.1/16", + "type": "nstack-kernel", /*output interface type, nstack-kernel: indicate that this ip should go through linux protocol, nstack-dpdk: go through stackx protocol*/ + }, + { + "subnet": "192.167.1.1/16", + "type": "nstack-kernel", + } + ] + "prot_route": [ + { + "proto_type": "11", + "type": "nstack-kernel", + }, + } + + + + \ No newline at end of file -- cgit 1.2.3-korg