From 9672b4c3af152d99c7ed5bff0a530c9adc79fe8b Mon Sep 17 00:00:00 2001 From: Dirk Ziegelmeier Date: Mon, 30 Apr 2018 21:35:12 +0200 Subject: [PATCH] Work on CMake build system - restructure to use included cmake files, this is more flexible --- src/CMakeLists.txt | 284 -------------------------------------------- src/Filelists.cmake | 258 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 258 insertions(+), 284 deletions(-) delete mode 100644 src/CMakeLists.txt create mode 100644 src/Filelists.cmake diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index f9c23aaa..00000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,284 +0,0 @@ -set(LWIP_VERSION_MAJOR "2") -set(LWIP_VERSION_MINOR "0") -set(LWIP_VERSION_REVISION "3") -# LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */ -# LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for Git versions */ -set(LWIP_VERSION_RC "LWIP_RC_DEVELOPMENT") - -set(LWIP_VERSION_STRING - "${LWIP_VERSION_MAJOR}.${LWIP_VERSION_MINOR}.${LWIP_VERSION_REVISION}" -) - -# The minimum set of files needed for lwIP. -set(lwipcore_SRCS - core/init.c - core/def.c - core/dns.c - core/inet_chksum.c - core/ip.c - core/mem.c - core/memp.c - core/netif.c - core/pbuf.c - core/raw.c - core/stats.c - core/sys.c - core/altcp.c - core/altcp_alloc.c - core/altcp_tcp.c - core/tcp.c - core/tcp_in.c - core/tcp_out.c - core/timeouts.c - core/udp.c -) -set(lwipcore4_SRCS - core/ipv4/autoip.c - core/ipv4/dhcp.c - core/ipv4/etharp.c - core/ipv4/icmp.c - core/ipv4/igmp.c - core/ipv4/ip4_frag.c - core/ipv4/ip4.c - core/ipv4/ip4_addr.c -) -set(lwipcore6_SRCS - core/ipv6/dhcp6.c - core/ipv6/ethip6.c - core/ipv6/icmp6.c - core/ipv6/inet6.c - core/ipv6/ip6.c - core/ipv6/ip6_addr.c - core/ipv6/ip6_frag.c - core/ipv6/mld6.c - core/ipv6/nd6.c -) - -# APIFILES: The files which implement the sequential and socket APIs. -set(lwipapi_SRCS - api/api_lib.c - api/api_msg.c - api/err.c - api/if_api.c - api/netbuf.c - api/netdb.c - api/netifapi.c - api/sockets.c - api/tcpip.c -) - -# Files implementing various generic network interface functions -set(lwipnetif_SRCS - netif/ethernet.c - netif/bridgeif.c - netif/bridgeif_fdb.c - netif/slipif.c -) - -# 6LoWPAN -set(lwipsixlowpan_SRCS - netif/lowpan6_common.c - netif/lowpan6.c - netif/lowpan6_ble.c - netif/zepif.c -) - -# PPP -set(lwipppp_SRCS - netif/ppp/auth.c - netif/ppp/ccp.c - netif/ppp/chap-md5.c - netif/ppp/chap_ms.c - netif/ppp/chap-new.c - netif/ppp/demand.c - netif/ppp/eap.c - netif/ppp/ecp.c - netif/ppp/eui64.c - netif/ppp/fsm.c - netif/ppp/ipcp.c - netif/ppp/ipv6cp.c - netif/ppp/lcp.c - netif/ppp/magic.c - netif/ppp/mppe.c - netif/ppp/multilink.c - netif/ppp/ppp.c - netif/ppp/pppapi.c - netif/ppp/pppcrypt.c - netif/ppp/pppoe.c - netif/ppp/pppol2tp.c - netif/ppp/pppos.c - netif/ppp/upap.c - netif/ppp/utils.c - netif/ppp/vj.c - netif/ppp/polarssl/arc4.c - netif/ppp/polarssl/des.c - netif/ppp/polarssl/md4.c - netif/ppp/polarssl/md5.c - netif/ppp/polarssl/sha1.c -) - -# SNMPv3 agent -set(lwipsnmp_SRCS - apps/snmp/snmp_asn1.c - apps/snmp/snmp_core.c - apps/snmp/snmp_mib2.c - apps/snmp/snmp_mib2_icmp.c - apps/snmp/snmp_mib2_interfaces.c - apps/snmp/snmp_mib2_ip.c - apps/snmp/snmp_mib2_snmp.c - apps/snmp/snmp_mib2_system.c - apps/snmp/snmp_mib2_tcp.c - apps/snmp/snmp_mib2_udp.c - apps/snmp/snmp_snmpv2_framework.c - apps/snmp/snmp_snmpv2_usm.c - apps/snmp/snmp_msg.c - apps/snmp/snmpv3.c - apps/snmp/snmp_netconn.c - apps/snmp/snmp_pbuf_stream.c - apps/snmp/snmp_raw.c - apps/snmp/snmp_scalar.c - apps/snmp/snmp_table.c - apps/snmp/snmp_threadsync.c - apps/snmp/snmp_traps.c -) - -# HTTP server + client -set(lwiphttp_SRCS - apps/http/altcp_proxyconnect.c - apps/http/fs.c - apps/http/http_client.c - apps/http/httpd.c -) - -# MAKEFSDATA HTTP server host utility -set(lwipmakefsdata_SRCS - apps/http/makefsdata/makefsdata.c -) - -# IPERF server -set(lwipiperf_SRCS - apps/lwiperf/lwiperf.c -) - -# SMTP client -set(lwipsmtp_SRCS - apps/smtp/smtp.c -) - -# SNTP client -set(lwipsntp_SRCS - apps/sntp/sntp.c -) - -# MDNS responder -set(lwipmdns_SRCS - apps/mdns/mdns.c -) - -# NetBIOS name server -set(lwipnetbios_SRCS - apps/netbiosns/netbiosns.c -) - -# TFTP server files -set(lwiptftp_SRCS - apps/tftp/tftp_server.c -) - -# MQTT client files -set(lwipmqtt_SRCS - apps/mqtt/mqtt.c -) - -# ARM MBEDTLS related files of lwIP rep -set(lwipmbedtls_SRCS - apps/altcp_tls/altcp_tls_mbedtls.c - apps/altcp_tls/altcp_tls_mbedtls_mem.c - apps/snmp/snmpv3_mbedtls.c -) - -# All LWIP files without apps -set(lwipnoapps_SRCS - ${lwipcore_SRCS} - ${lwipcore4_SRCS} - ${lwipcore6_SRCS} - ${lwipapi_SRCS} - ${lwipnetif_SRCS} - ${lwipsixlowpan_SRCS} - ${lwipppp_SRCS} -) - -# LWIPAPPFILES: All LWIP APPs -set(lwipallapps_SRCS - ${lwipsnmp_SRCS} - ${lwiphttp_SRCS} - ${lwipiperf_SRCS} - ${lwipsmtp_SRCS} - ${lwipsntp_SRCS} - ${lwipmdns_SRCS} - ${lwipnetbios_SRCS} - ${lwiptftp_SRCS} - ${lwipmqtt_SRCS} - ${lwipmbedtls_SRCS} -) - -# Generate lwip/init.h (version info) -configure_file(include/lwip/init.h.cmake.in ${CMAKE_CURRENT_SOURCE_DIR}/include/lwip/init.h) - -# Documentation -set(DOXYGEN_IN ../doc/doxygen/lwip.Doxyfile.cmake.in) -set(DOXYGEN_OUT ${CMAKE_CURRENT_SOURCE_DIR}/../doc/doxygen/lwip.Doxyfile) -configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT}) - -option(LWIP_BUILD_DOCUMENTATION "Build documentation" OFF) -if(LWIP_BUILD_DOCUMENTATION) - find_package(Doxygen) - if (DOXYGEN_FOUND) - message("Doxygen build started") - # note the option ALL which allows to build the docs together with the application - add_custom_target(lwipdocs ALL - COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../doc/doxygen - COMMENT "Generating API documentation with Doxygen" - VERBATIM) - else (DOXYGEN_FOUND) - message("Doxygen needs to be installed to generate the doxygen documentation") - endif (DOXYGEN_FOUND) -endif(LWIP_BUILD_DOCUMENTATION) - -# Generate Filelists.mk via cmake -function(lwip_gen_filelist_entries var_name filelist_var_name) - foreach(srcfile ${${filelist_var_name}}) - set(tmp "${tmp}$(LWIPDIR)/${srcfile} ") - endforeach() - set(${var_name} "${tmp}" PARENT_SCOPE) -endfunction(lwip_gen_filelist_entries) -lwip_gen_filelist_entries("filelist_mk_COREFILES" "lwipcore_SRCS") -lwip_gen_filelist_entries("filelist_mk_CORE4FILES" "lwipcore4_SRCS") -lwip_gen_filelist_entries("filelist_mk_CORE6FILES" "lwipcore6_SRCS") -lwip_gen_filelist_entries("filelist_mk_APIFILES" "lwipapi_SRCS") -lwip_gen_filelist_entries("filelist_mk_NETIFFILES" "lwipnetif_SRCS") -lwip_gen_filelist_entries("filelist_mk_SIXLOWPANFILES" "lwipsixlowpan_SRCS") -lwip_gen_filelist_entries("filelist_mk_PPPFILES" "lwipppp_SRCS") -lwip_gen_filelist_entries("filelist_mk_SNMPFILES" "lwipsnmp_SRCS") -lwip_gen_filelist_entries("filelist_mk_HTTPFILES" "lwiphttp_SRCS") -lwip_gen_filelist_entries("filelist_mk_MKFSDATAFILES" "lwipmakefsdata_SRCS") -lwip_gen_filelist_entries("filelist_mk_IPERFFILES" "lwipiperf_SRCS") -lwip_gen_filelist_entries("filelist_mk_SMTPFILES" "lwipsmtp_SRCS") -lwip_gen_filelist_entries("filelist_mk_SNTPFILES" "lwipsntp_SRCS") -lwip_gen_filelist_entries("filelist_mk_MDNSFILES" "lwipmdns_SRCS") -lwip_gen_filelist_entries("filelist_mk_NETBIOSFILES" "lwipnetbios_SRCS") -lwip_gen_filelist_entries("filelist_mk_TFTPFILES" "lwiptftp_SRCS") -lwip_gen_filelist_entries("filelist_mk_MQTTFILES" "lwipmqtt_SRCS") -lwip_gen_filelist_entries("filelist_mk_MBEDTLSFILES" "lwipmbedtls_SRCS") -configure_file(Filelists.mk.cmake.in ${CMAKE_CURRENT_SOURCE_DIR}/Filelists.mk) - -# lwIP libraries -add_library(lwipcore EXCLUDE_FROM_ALL ${lwipnoapps_SRCS}) - -add_library(lwipapps EXCLUDE_FROM_ALL ${lwipallapps_SRCS}) - -# when NOT cross-compiling, build makefsdata -if (NOT CMAKE_CROSSCOMPILING) - add_executable(makefsdata ${lwipmakefsdata_SRCS}) -endif() diff --git a/src/Filelists.cmake b/src/Filelists.cmake new file mode 100644 index 00000000..8d875740 --- /dev/null +++ b/src/Filelists.cmake @@ -0,0 +1,258 @@ +# This file is indended to be included in end-user CMakeLists.txt +# include(/path/to/Filelists.cmake) +# It assumes the variable LWIP_DIR is defined pointing to the +# root path of lwIP sources. +# +# This file is NOT designed (on purpose) to be included as cmake +# subdir via add_subdirectory() +# The intention is to provide greater flexibility to users to +# create their own targets using the *_SRCS variables. + +set(LWIP_VERSION_MAJOR "2") +set(LWIP_VERSION_MINOR "0") +set(LWIP_VERSION_REVISION "3") +# LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */ +# LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for Git versions */ +set(LWIP_VERSION_RC "LWIP_RC_DEVELOPMENT") + +set(LWIP_VERSION_STRING + "${LWIP_VERSION_MAJOR}.${LWIP_VERSION_MINOR}.${LWIP_VERSION_REVISION}" +) + +# The minimum set of files needed for lwIP. +set(lwipcore_SRCS + ${LWIP_DIR}/src/core/init.c + ${LWIP_DIR}/src/core/def.c + ${LWIP_DIR}/src/core/dns.c + ${LWIP_DIR}/src/core/inet_chksum.c + ${LWIP_DIR}/src/core/ip.c + ${LWIP_DIR}/src/core/mem.c + ${LWIP_DIR}/src/core/memp.c + ${LWIP_DIR}/src/core/netif.c + ${LWIP_DIR}/src/core/pbuf.c + ${LWIP_DIR}/src/core/raw.c + ${LWIP_DIR}/src/core/stats.c + ${LWIP_DIR}/src/core/sys.c + ${LWIP_DIR}/src/core/altcp.c + ${LWIP_DIR}/src/core/altcp_alloc.c + ${LWIP_DIR}/src/core/altcp_tcp.c + ${LWIP_DIR}/src/core/tcp.c + ${LWIP_DIR}/src/core/tcp_in.c + ${LWIP_DIR}/src/core/tcp_out.c + ${LWIP_DIR}/src/core/timeouts.c + ${LWIP_DIR}/src/core/udp.c +) +set(lwipcore4_SRCS + ${LWIP_DIR}/src/core/ipv4/autoip.c + ${LWIP_DIR}/src/core/ipv4/dhcp.c + ${LWIP_DIR}/src/core/ipv4/etharp.c + ${LWIP_DIR}/src/core/ipv4/icmp.c + ${LWIP_DIR}/src/core/ipv4/igmp.c + ${LWIP_DIR}/src/core/ipv4/ip4_frag.c + ${LWIP_DIR}/src/core/ipv4/ip4.c + ${LWIP_DIR}/src/core/ipv4/ip4_addr.c +) +set(lwipcore6_SRCS + ${LWIP_DIR}/src/core/ipv6/dhcp6.c + ${LWIP_DIR}/src/core/ipv6/ethip6.c + ${LWIP_DIR}/src/core/ipv6/icmp6.c + ${LWIP_DIR}/src/core/ipv6/inet6.c + ${LWIP_DIR}/src/core/ipv6/ip6.c + ${LWIP_DIR}/src/core/ipv6/ip6_addr.c + ${LWIP_DIR}/src/core/ipv6/ip6_frag.c + ${LWIP_DIR}/src/core/ipv6/mld6.c + ${LWIP_DIR}/src/core/ipv6/nd6.c +) + +# APIFILES: The files which implement the sequential and socket APIs. +set(lwipapi_SRCS + ${LWIP_DIR}/src/api/api_lib.c + ${LWIP_DIR}/src/api/api_msg.c + ${LWIP_DIR}/src/api/err.c + ${LWIP_DIR}/src/api/if_api.c + ${LWIP_DIR}/src/api/netbuf.c + ${LWIP_DIR}/src/api/netdb.c + ${LWIP_DIR}/src/api/netifapi.c + ${LWIP_DIR}/src/api/sockets.c + ${LWIP_DIR}/src/api/tcpip.c +) + +# Files implementing various generic network interface functions +set(lwipnetif_SRCS + ${LWIP_DIR}/src/netif/ethernet.c + ${LWIP_DIR}/src/netif/bridgeif.c + ${LWIP_DIR}/src/netif/bridgeif_fdb.c + ${LWIP_DIR}/src/netif/slipif.c +) + +# 6LoWPAN +set(lwipsixlowpan_SRCS + ${LWIP_DIR}/src/netif/lowpan6_common.c + ${LWIP_DIR}/src/netif/lowpan6.c + ${LWIP_DIR}/src/netif/lowpan6_ble.c + ${LWIP_DIR}/src/netif/zepif.c +) + +# PPP +set(lwipppp_SRCS + ${LWIP_DIR}/src/netif/ppp/auth.c + ${LWIP_DIR}/src/netif/ppp/ccp.c + ${LWIP_DIR}/src/netif/ppp/chap-md5.c + ${LWIP_DIR}/src/netif/ppp/chap_ms.c + ${LWIP_DIR}/src/netif/ppp/chap-new.c + ${LWIP_DIR}/src/netif/ppp/demand.c + ${LWIP_DIR}/src/netif/ppp/eap.c + ${LWIP_DIR}/src/netif/ppp/ecp.c + ${LWIP_DIR}/src/netif/ppp/eui64.c + ${LWIP_DIR}/src/netif/ppp/fsm.c + ${LWIP_DIR}/src/netif/ppp/ipcp.c + ${LWIP_DIR}/src/netif/ppp/ipv6cp.c + ${LWIP_DIR}/src/netif/ppp/lcp.c + ${LWIP_DIR}/src/netif/ppp/magic.c + ${LWIP_DIR}/src/netif/ppp/mppe.c + ${LWIP_DIR}/src/netif/ppp/multilink.c + ${LWIP_DIR}/src/netif/ppp/ppp.c + ${LWIP_DIR}/src/netif/ppp/pppapi.c + ${LWIP_DIR}/src/netif/ppp/pppcrypt.c + ${LWIP_DIR}/src/netif/ppp/pppoe.c + ${LWIP_DIR}/src/netif/ppp/pppol2tp.c + ${LWIP_DIR}/src/netif/ppp/pppos.c + ${LWIP_DIR}/src/netif/ppp/upap.c + ${LWIP_DIR}/src/netif/ppp/utils.c + ${LWIP_DIR}/src/netif/ppp/vj.c + ${LWIP_DIR}/src/netif/ppp/polarssl/arc4.c + ${LWIP_DIR}/src/netif/ppp/polarssl/des.c + ${LWIP_DIR}/src/netif/ppp/polarssl/md4.c + ${LWIP_DIR}/src/netif/ppp/polarssl/md5.c + ${LWIP_DIR}/src/netif/ppp/polarssl/sha1.c +) + +# SNMPv3 agent +set(lwipsnmp_SRCS + ${LWIP_DIR}/src/apps/snmp/snmp_asn1.c + ${LWIP_DIR}/src/apps/snmp/snmp_core.c + ${LWIP_DIR}/src/apps/snmp/snmp_mib2.c + ${LWIP_DIR}/src/apps/snmp/snmp_mib2_icmp.c + ${LWIP_DIR}/src/apps/snmp/snmp_mib2_interfaces.c + ${LWIP_DIR}/src/apps/snmp/snmp_mib2_ip.c + ${LWIP_DIR}/src/apps/snmp/snmp_mib2_snmp.c + ${LWIP_DIR}/src/apps/snmp/snmp_mib2_system.c + ${LWIP_DIR}/src/apps/snmp/snmp_mib2_tcp.c + ${LWIP_DIR}/src/apps/snmp/snmp_mib2_udp.c + ${LWIP_DIR}/src/apps/snmp/snmp_snmpv2_framework.c + ${LWIP_DIR}/src/apps/snmp/snmp_snmpv2_usm.c + ${LWIP_DIR}/src/apps/snmp/snmp_msg.c + ${LWIP_DIR}/src/apps/snmp/snmpv3.c + ${LWIP_DIR}/src/apps/snmp/snmp_netconn.c + ${LWIP_DIR}/src/apps/snmp/snmp_pbuf_stream.c + ${LWIP_DIR}/src/apps/snmp/snmp_raw.c + ${LWIP_DIR}/src/apps/snmp/snmp_scalar.c + ${LWIP_DIR}/src/apps/snmp/snmp_table.c + ${LWIP_DIR}/src/apps/snmp/snmp_threadsync.c + ${LWIP_DIR}/src/apps/snmp/snmp_traps.c +) + +# HTTP server + client +set(lwiphttp_SRCS + ${LWIP_DIR}/src/apps/http/altcp_proxyconnect.c + ${LWIP_DIR}/src/apps/http/fs.c + ${LWIP_DIR}/src/apps/http/http_client.c + ${LWIP_DIR}/src/apps/http/httpd.c +) + +# MAKEFSDATA HTTP server host utility +set(lwipmakefsdata_SRCS + ${LWIP_DIR}/src/apps/http/makefsdata/makefsdata.c +) + +# IPERF server +set(lwipiperf_SRCS + ${LWIP_DIR}/src/apps/lwiperf/lwiperf.c +) + +# SMTP client +set(lwipsmtp_SRCS + ${LWIP_DIR}/src/apps/smtp/smtp.c +) + +# SNTP client +set(lwipsntp_SRCS + ${LWIP_DIR}/src/apps/sntp/sntp.c +) + +# MDNS responder +set(lwipmdns_SRCS + ${LWIP_DIR}/src/apps/mdns/mdns.c +) + +# NetBIOS name server +set(lwipnetbios_SRCS + ${LWIP_DIR}/src/apps/netbiosns/netbiosns.c +) + +# TFTP server files +set(lwiptftp_SRCS + ${LWIP_DIR}/src/apps/tftp/tftp_server.c +) + +# MQTT client files +set(lwipmqtt_SRCS + ${LWIP_DIR}/src/apps/mqtt/mqtt.c +) + +# ARM MBEDTLS related files of lwIP rep +set(lwipmbedtls_SRCS + ${LWIP_DIR}/src/apps/altcp_tls/altcp_tls_mbedtls.c + ${LWIP_DIR}/src/apps/altcp_tls/altcp_tls_mbedtls_mem.c + ${LWIP_DIR}/src/apps/snmp/snmpv3_mbedtls.c +) + +# All LWIP files without apps +set(lwipnoapps_SRCS + ${lwipcore_SRCS} + ${lwipcore4_SRCS} + ${lwipcore6_SRCS} + ${lwipapi_SRCS} + ${lwipnetif_SRCS} + ${lwipsixlowpan_SRCS} + ${lwipppp_SRCS} +) + +# LWIPAPPFILES: All LWIP APPs +set(lwipallapps_SRCS + ${lwipsnmp_SRCS} + ${lwiphttp_SRCS} + ${lwipiperf_SRCS} + ${lwipsmtp_SRCS} + ${lwipsntp_SRCS} + ${lwipmdns_SRCS} + ${lwipnetbios_SRCS} + ${lwiptftp_SRCS} + ${lwipmqtt_SRCS} + ${lwipmbedtls_SRCS} +) + +# Generate lwip/init.h (version info) +configure_file(${LWIP_DIR}/src/include/lwip/init.h.cmake.in ${LWIP_DIR}/src/include/lwip/init.h) + +# Documentation +set(DOXYGEN_IN ${LWIP_DIR}/doc/doxygen/lwip.Doxyfile.cmake.in) +set(DOXYGEN_OUT ${LWIP_DIR}/doc/doxygen/lwip.Doxyfile) +configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT}) + +find_package(Doxygen) +if (DOXYGEN_FOUND) + message("Doxygen build started") + # note the option ALL which allows to build the docs together with the application + add_custom_target(lwipdocs EXCLUDE_FROM_ALL + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} + WORKING_DIRECTORY ${LWIP_DIR}/doc/doxygen + COMMENT "Generating API documentation with Doxygen" + VERBATIM) +else (DOXYGEN_FOUND) + message("Doxygen needs to be installed to generate the doxygen documentation") +endif (DOXYGEN_FOUND) + +# lwIP libraries +add_library(lwipcore EXCLUDE_FROM_ALL ${lwipnoapps_SRCS}) +add_library(lwipallapps EXCLUDE_FROM_ALL ${lwipallapps_SRCS})