1*97dc5e69SMatthias RingwaldBuilding lwIP 2*97dc5e69SMatthias Ringwald============= 3*97dc5e69SMatthias Ringwald 4*97dc5e69SMatthias RingwaldlwIP uses a CMake based build system. 5*97dc5e69SMatthias Ringwald 6*97dc5e69SMatthias RingwaldThe CMake files in this project are designed to 7*97dc5e69SMatthias Ringwaldbe included into your own CMake files. They are 8*97dc5e69SMatthias Ringwaldmainly variable definitions containing a list of 9*97dc5e69SMatthias Ringwaldsource files and predefined static libraries to 10*97dc5e69SMatthias Ringwaldbe linked against application code. 11*97dc5e69SMatthias Ringwald 12*97dc5e69SMatthias Ringwald1) lwIP sources: 13*97dc5e69SMatthias Ringwald src/Filelists.cmake provides file lists containing 14*97dc5e69SMatthias Ringwald the lwIP core library. 15*97dc5e69SMatthias Ringwald The file also contains two static libraries, lwipcore 16*97dc5e69SMatthias Ringwald and lwipallapps, where you can link your app against. 17*97dc5e69SMatthias Ringwald This is the file that is useful to all lwIP users. 18*97dc5e69SMatthias Ringwald 19*97dc5e69SMatthias Ringwald2) Example applications: 20*97dc5e69SMatthias Ringwald contrib/Filelists.cmake provides several file lists 21*97dc5e69SMatthias Ringwald containing the example applications. 22*97dc5e69SMatthias Ringwald The file also contains several static libraries 23*97dc5e69SMatthias Ringwald for these example apps. 24*97dc5e69SMatthias Ringwald This file is only useful for you, if you can use one 25*97dc5e69SMatthias Ringwald of the examples in your application, which is normally 26*97dc5e69SMatthias Ringwald not the case. 27*97dc5e69SMatthias Ringwald 28*97dc5e69SMatthias Ringwald3) OS/platform port: 29*97dc5e69SMatthias Ringwald Usually the OS port needs to be provided by the user. 30*97dc5e69SMatthias Ringwald If a port to Linux, Windows or MacOS is useful for 31*97dc5e69SMatthias Ringwald you, you can use 32*97dc5e69SMatthias Ringwald contrib/ports/{win32, unix}/Filelists.cmake 33*97dc5e69SMatthias Ringwald that contains file lists and libraries for 34*97dc5e69SMatthias Ringwald these operating systems. 35*97dc5e69SMatthias Ringwald 36*97dc5e69SMatthias RingwaldVARIABLES 37*97dc5e69SMatthias Ringwald========= 38*97dc5e69SMatthias RingwaldIn all cases, you need to provide two variables. 39*97dc5e69SMatthias Ringwald 40*97dc5e69SMatthias Ringwald"LWIP_DIR" pointing to the lwIP directory 41*97dc5e69SMatthias RingwaldExample: 42*97dc5e69SMatthias Ringwaldset(LWIP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/externals/lwip) 43*97dc5e69SMatthias Ringwald 44*97dc5e69SMatthias Ringwald"LWIP_INCLUDE_DIRS" that contains the include base paths 45*97dc5e69SMatthias Ringwald- for lwIP itself (${LWIP_DIR}/src/include) 46*97dc5e69SMatthias Ringwald- for lwIP contrib if you use it (${LWIP_DIR}/contrib) 47*97dc5e69SMatthias Ringwald- to a directory containing an OS port 48*97dc5e69SMatthias Ringwald- to a directory containing lwipopts.h 49*97dc5e69SMatthias Ringwald 50*97dc5e69SMatthias RingwaldExample: 51*97dc5e69SMatthias Ringwaldset (LWIP_INCLUDE_DIRS 52*97dc5e69SMatthias Ringwald "${LWIP_DIR}/src/include" 53*97dc5e69SMatthias Ringwald "${LWIP_DIR}/contrib" 54*97dc5e69SMatthias Ringwald "${LWIP_DIR}/contrib/ports/unix/port/include" 55*97dc5e69SMatthias Ringwald "${LWIP_DIR}/contrib/examples/example_app" 56*97dc5e69SMatthias Ringwald) 57*97dc5e69SMatthias Ringwald 58*97dc5e69SMatthias RingwaldPutting it all together 59*97dc5e69SMatthias Ringwald======================= 60*97dc5e69SMatthias RingwaldTo get a working application, your CMake system 61*97dc5e69SMatthias Ringwaldneeds to provide the variables described above, e.g. 62*97dc5e69SMatthias Ringwaldset (LWIP_DIR <path to lwip sources>) 63*97dc5e69SMatthias Ringwaldset (LWIP_INCLUDE_DIRS 64*97dc5e69SMatthias Ringwald "${LWIP_DIR}/src/include" 65*97dc5e69SMatthias Ringwald "${LWIP_DIR}/contrib" 66*97dc5e69SMatthias Ringwald "<path to my port>/include" 67*97dc5e69SMatthias Ringwald "<path to lwipopts.h>" 68*97dc5e69SMatthias Ringwald) 69*97dc5e69SMatthias Ringwald 70*97dc5e69SMatthias RingwaldYou may add some defines: 71*97dc5e69SMatthias Ringwaldset (LWIP_DEFINITIONS LWIP_DEBUG=1) 72*97dc5e69SMatthias Ringwald 73*97dc5e69SMatthias RingwaldThen include the filelists you need: 74*97dc5e69SMatthias Ringwaldinclude(${LWIP_DIR}/src/Filelists.cmake) 75*97dc5e69SMatthias Ringwaldinclude(${LWIP_DIR}/contrib/Filelists.cmake) 76*97dc5e69SMatthias Ringwald 77*97dc5e69SMatthias RingwaldThen, declare you executable: 78*97dc5e69SMatthias Ringwaldadd_executable(my_app <my source files> <my lwip port files>) 79*97dc5e69SMatthias Ringwald 80*97dc5e69SMatthias RingwaldAdd lwIP include dirs to your app: 81*97dc5e69SMatthias Ringwaldtarget_include_directories(my_app PRIVATE ${LWIP_INCLUDE_DIRS}) 82*97dc5e69SMatthias Ringwald 83*97dc5e69SMatthias RingwaldLink your app against the lwIP libs from the filelists you need: 84*97dc5e69SMatthias Ringwaldtarget_link_libraries(my_app lwipcontribapps lwipallapps lwipcore) 85*97dc5e69SMatthias Ringwald 86*97dc5e69SMatthias RingwaldWorking example 87*97dc5e69SMatthias Ringwald=============== 88*97dc5e69SMatthias RingwaldWorking build examples can be found in the 89*97dc5e69SMatthias Ringwaldcontrib/ports/{win32, unix}/example_app 90*97dc5e69SMatthias Ringwaldsubdirectory. 91*97dc5e69SMatthias RingwaldTo use them, create a build directory and call cmake with 92*97dc5e69SMatthias Ringwaldthe lwIP root dir: 93*97dc5e69SMatthias Ringwald 94*97dc5e69SMatthias Ringwald- mkdir build 95*97dc5e69SMatthias Ringwald- cd build 96*97dc5e69SMatthias Ringwald- cmake .. 97*97dc5e69SMatthias Ringwald- cmake --build . 98*97dc5e69SMatthias Ringwald 99*97dc5e69SMatthias RingwaldThe CMakeLists.txt will autoselect the correct port 100*97dc5e69SMatthias Ringwaldfor your system (supported: Linux, Windows, Darwin). 101*97dc5e69SMatthias Ringwald 102*97dc5e69SMatthias RingwaldMakefile based build system 103*97dc5e69SMatthias Ringwald=========================== 104*97dc5e69SMatthias RingwaldlwIP also maintains file lists for Makefile-based 105*97dc5e69SMatthias Ringwaldbuild systems. Look for Filelists.mk files 106*97dc5e69SMatthias Ringwaldin the source tree. We try to maintain them, 107*97dc5e69SMatthias Ringwaldbut lwIP's mainly focused build system is CMake. 108