summaryrefslogtreecommitdiffstats
path: root/docs/gettingstarted/developers/buildsystem/cmakeandninja.rst
diff options
context:
space:
mode:
authorNathan Skrzypczak <nathan.skrzypczak@gmail.com>2021-08-19 11:38:06 +0200
committerDave Wallace <dwallacelf@gmail.com>2021-10-13 23:22:32 +0000
commit9ad39c026c8a3c945a7003c4aa4f5cb1d4c80160 (patch)
tree3cca19635417e28ae381d67ae31c75df2925032d /docs/gettingstarted/developers/buildsystem/cmakeandninja.rst
parentf47122e07e1ecd0151902a3cabe46c60a99bee8e (diff)
docs: better docs, mv doxygen to sphinx
This patch refactors the VPP sphinx docs in order to make it easier to consume for external readers as well as VPP developers. It also makes sphinx the single source of documentation, which simplifies maintenance and operation. Most important updates are: - reformat the existing documentation as rst - split RELEASE.md and move it into separate rst files - remove section 'events' - remove section 'archive' - remove section 'related projects' - remove section 'feature by release' - remove section 'Various links' - make (Configuration reference, CLI docs, developer docs) top level items in the list - move 'Use Cases' as part of 'About VPP' - move 'Troubleshooting' as part of 'Getting Started' - move test framework docs into 'Developer Documentation' - add a 'Contributing' section for gerrit, docs and other contributer related infos - deprecate doxygen and test-docs targets - redirect the "make doxygen" target to "make docs" Type: refactor Change-Id: I552a5645d5b7964d547f99b1336e2ac24e7c209f Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com> Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
Diffstat (limited to 'docs/gettingstarted/developers/buildsystem/cmakeandninja.rst')
-rw-r--r--docs/gettingstarted/developers/buildsystem/cmakeandninja.rst186
1 files changed, 0 insertions, 186 deletions
diff --git a/docs/gettingstarted/developers/buildsystem/cmakeandninja.rst b/docs/gettingstarted/developers/buildsystem/cmakeandninja.rst
deleted file mode 100644
index 580d261bdac..00000000000
--- a/docs/gettingstarted/developers/buildsystem/cmakeandninja.rst
+++ /dev/null
@@ -1,186 +0,0 @@
-Introduction to cmake and ninja
-===============================
-
-Cmake plus ninja is approximately equal to GNU autotools plus GNU
-make, respectively. Both cmake and GNU autotools support self and
-cross-compilation, checking for required components and versions.
-
-- For a decent-sized project - such as vpp - build performance is drastically better with (cmake, ninja).
-
-- The cmake input language looks like an actual language, rather than a shell scripting scheme on steroids.
-
-- Ninja doesn't pretend to support manually-generated input files. Think of it as a fast, dumb robot which eats mildly legible byte-code.
-
-See the `cmake website <http://cmake.org>`_, and the `ninja website
-<https://ninja-build.org>`_ for additional information.
-
-vpp cmake configuration files
------------------------------
-
-The top of the vpp project cmake hierarchy lives in .../src/CMakeLists.txt.
-This file defines the vpp project, and (recursively) includes two kinds
-of files: rule/function definitions, and target lists.
-
-- Rule/function definitions live in .../src/cmake/{\*.cmake}. Although the contents of these files is simple enough to read, it shouldn't be necessary to modify them very often
-
-- Build target lists come from CMakeLists.txt files found in subdirectories, which are named in the SUBDIRS list in .../src/CMakeLists.txt
-
-::
-
- ##############################################################################
- # subdirs - order matters
- ##############################################################################
- if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
- find_package(OpenSSL REQUIRED)
- set(SUBDIRS
- vppinfra svm vlib vlibmemory vlibapi vnet vpp vat vcl plugins
- vpp-api tools/vppapigen tools/g2 tools/perftool)
- elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
- set(SUBDIRS vppinfra)
- else()
- message(FATAL_ERROR "Unsupported system: ${CMAKE_SYSTEM_NAME}")
- endif()
-
- foreach(DIR ${SUBDIRS})
- add_subdirectory(${DIR})
- endforeach()
-
-- The vpp cmake configuration hierarchy discovers the list of plugins to be built by searching for subdirectories in .../src/plugins which contain CMakeLists.txt files
-
-
-::
-
- ##############################################################################
- # find and add all plugin subdirs
- ##############################################################################
- FILE(GLOB files RELATIVE
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/*/CMakeLists.txt
- )
- foreach (f ${files})
- get_filename_component(dir ${f} DIRECTORY)
- add_subdirectory(${dir})
- endforeach()
-
-How to write a plugin CMakeLists.txt file
------------------------------------------
-
-It's really quite simple. Follow the pattern:
-
-::
-
- add_vpp_plugin(mactime
- SOURCES
- mactime.c
- node.c
-
- API_FILES
- mactime.api
-
- INSTALL_HEADERS
- mactime_all_api_h.h
- mactime_msg_enum.h
-
- API_TEST_SOURCES
- mactime_test.c
- )
-
-Adding a target elsewhere in the source tree
---------------------------------------------
-
-Within reason, adding a subdirectory to the SUBDIRS list in
-.../src/CMakeLists.txt is perfectly OK. The indicated directory will
-need a CMakeLists.txt file.
-
-.. _building-g2:
-
-Here's how we build the g2 event data visualization tool:
-
-::
-
- option(VPP_BUILD_G2 "Build g2 tool." OFF)
- if(VPP_BUILD_G2)
- find_package(GTK2 COMPONENTS gtk)
- if(GTK2_FOUND)
- include_directories(${GTK2_INCLUDE_DIRS})
- add_vpp_executable(g2
- SOURCES
- clib.c
- cpel.c
- events.c
- main.c
- menu1.c
- pointsel.c
- props.c
- g2version.c
- view1.c
-
- LINK_LIBRARIES vppinfra Threads::Threads m ${GTK2_LIBRARIES}
- NO_INSTALL
- )
- endif()
- endif()
-
-The g2 component is optional, and is not built by default. There are
-a couple of ways to tell cmake to include it in build.ninja [or in Makefile.]
-
-When invoking cmake manually [rarely done and not very easy], specify
--DVPP_BUILD_G2=ON:
-
-::
-
- $ cmake ... -DVPP_BUILD_G2=ON
-
-Take a good look at .../build-data/packages/vpp.mk to see where and
-how the top-level Makefile and .../build-root/Makefile set all of the
-cmake arguments. One strategy to enable an optional component is fairly
-obvious. Add -DVPP_BUILD_G2=ON to vpp_cmake_args.
-
-That would work, of course, but it's not a particularly elegant solution.
-
-Tinkering with build options: ccmake
-------------------------------------
-
-The easy way to set VPP_BUILD_G2 - or frankly **any** cmake
-parameter - is to install the "cmake-curses-gui" package and use
-it.
-
-- Do a straightforward vpp build using the top level Makefile, "make build" or "make build-release"
-- Ajourn to .../build-root/build-vpp-native/vpp or .../build-root/build-vpp_debug-native/vpp
-- Invoke "ccmake ." to reconfigure the project as desired
-
-Here's approximately what you'll see:
-
-::
-
- CCACHE_FOUND /usr/bin/ccache
- CMAKE_BUILD_TYPE
- CMAKE_INSTALL_PREFIX /scratch/vpp-gate/build-root/install-vpp-nati
- DPDK_INCLUDE_DIR /scratch/vpp-gate/build-root/install-vpp-nati
- DPDK_LIB /scratch/vpp-gate/build-root/install-vpp-nati
- MBEDTLS_INCLUDE_DIR /usr/include
- MBEDTLS_LIB1 /usr/lib/x86_64-linux-gnu/libmbedtls.so
- MBEDTLS_LIB2 /usr/lib/x86_64-linux-gnu/libmbedx509.so
- MBEDTLS_LIB3 /usr/lib/x86_64-linux-gnu/libmbedcrypto.so
- MUSDK_INCLUDE_DIR MUSDK_INCLUDE_DIR-NOTFOUND
- MUSDK_LIB MUSDK_LIB-NOTFOUND
- PRE_DATA_SIZE 128
- VPP_API_TEST_BUILTIN ON
- VPP_BUILD_G2 OFF
- VPP_BUILD_PERFTOOL OFF
- VPP_BUILD_VCL_TESTS ON
- VPP_BUILD_VPPINFRA_TESTS OFF
-
- CCACHE_FOUND: Path to a program.
- Press [enter] to edit option Press [d] to delete an entry CMake Version 3.10.2
- Press [c] to configure
- Press [h] for help Press [q] to quit without generating
- Press [t] to toggle advanced mode (Currently Off)
-
-Use the cursor to point at the VPP_BUILD_G2 line. Press the return key
-to change OFF to ON. Press "c" to regenerate build.ninja, etc.
-
-At that point "make build" or "make build-release" will build g2. And so on.
-
-Note that toggling advanced mode ["t"] gives access to substantially
-all of the cmake option, discovered directories and paths.