xref: /btstack/3rd-party/lwip/core/BUILDING (revision 97dc5e692c7d94a280158af58036a0efee5b0e56)
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