| # | |
| # Copyright (c) 2016, The OpenThread Authors. | |
| # All rights reserved. | |
| # | |
| # Redistribution and use in source and binary forms, with or without | |
| # modification, are permitted provided that the following conditions are met: | |
| # 1. Redistributions of source code must retain the above copyright | |
| # notice, this list of conditions and the following disclaimer. | |
| # 2. Redistributions in binary form must reproduce the above copyright | |
| # notice, this list of conditions and the following disclaimer in the | |
| # documentation and/or other materials provided with the distribution. | |
| # 3. Neither the name of the copyright holder nor the | |
| # names of its contributors may be used to endorse or promote products | |
| # derived from this software without specific prior written permission. | |
| # | |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
| # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
| # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
| # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
| # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
| # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
| # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
| # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
| # POSSIBILITY OF SUCH DAMAGE. | |
| # | |
| include $(abs_top_nlbuild_autotools_dir)/automake/pre.am | |
| #---------------------------------------- | |
| # | |
| # This library on the face of it, appears to be identical | |
| # for both the MTD and FTD variants, however ... | |
| # | |
| # The source code here includes numerous OpenThread internal headers. | |
| # Due to the "domino-effect" other internal headers are included. | |
| # | |
| # For example: | |
| # cli.cpp includes: | |
| # src/core/common/instance.hpp | |
| # Which Includes: | |
| # src/core/therad/thread_netif.hpp | |
| # Which Includes: | |
| # src/core/meshcop/dataset_manager.hpp | |
| # Which Includes: | |
| # src/core/threadnetwork_data_leader.hpp | |
| # | |
| # That header (and others) is either an MTD or FTD class flavor. | |
| # | |
| # The FTD flavor has many private components (class variables). | |
| # The MTD flavor has no private components. | |
| # | |
| # Bottom line: The Class(structs) are thus different in the downstream | |
| # libs. At this level (in the CLI, and likewise in the NCP) they are | |
| # functionally identical. | |
| # | |
| # ORIGINALLY (historical note about how things are/where built): | |
| # | |
| # The difference between MTD and FTD was a define.. -DOPENTHREAD_MTD | |
| # There was no "FTD" define, it is/was assumed that FTD is the default. | |
| # | |
| # Historically this library -DOPENTHREAD_MTD was not defined/set. | |
| # (it is set via a commandline define in 'lib-openthread') | |
| # | |
| # Thus, the existing(previous) way *THIS* library was compiled is | |
| # exactly the FTD path. Meaning the "cli" library always sees | |
| # the FTD varients of various headers/classes. | |
| # | |
| # The same is true of the "ncp" library. | |
| # | |
| # HOWEVER there are two varients of the CLI application, CLI-MTD | |
| # and CLI-FTD (and likewise, two varients of the ncp application) | |
| # These applications link against two different OpenThread libraries. | |
| # | |
| # Which flavor, you get depends upon which library: "mtd" or "ftd" is linked. | |
| # | |
| # Which on the surface appear to link fine against the MTD/FTD library. | |
| # | |
| # In this description/example we focus on the "nework_data_leader" | |
| # header file. The FTD varient has many private variables, functions | |
| # and other things of "FTD" (ie: full) implementation items. | |
| # | |
| # In contrast the MTD is generaly stubbed out with stub-functions | |
| # inlined in the header that return "error not implemented" or similar. | |
| # | |
| # Thus it works... here ... With this file and this example. | |
| # | |
| # The unknown: | |
| # What about the other files? | |
| # What about the other c++ classes? | |
| # Is this true always? Is this robust? | |
| # Or is there a hidden "got-ya" that will snag the next person? | |
| # | |
| # This also fails static analisys, checks. | |
| # Application - with MTD vrs FTD class. | |
| # Library #1 (cli-lib) with FTD selected. | |
| # Library #2 (openthread) with two different class flavors. | |
| # | |
| # The static analisys tools will say: "NOPE" different classes! | |
| # Perhaps this will change if/when nothing is implemented in the 'mtd-header' | |
| # | |
| # Additionally, tools that perform "whole program optimization" will | |
| # throw errors becuase the data structures differ greatly. | |
| # | |
| # Hence, CLI library (and NCP) must exist in two flavors. | |
| # | |
| # Unless and until these libraries do not "accidently" suck in | |
| # a "flavored" header file somewhere. | |
| lib_LIBRARIES = $(NULL) | |
| if OPENTHREAD_ENABLE_FTD | |
| lib_LIBRARIES += libopenthread-cli-ftd.a | |
| endif | |
| if OPENTHREAD_ENABLE_MTD | |
| lib_LIBRARIES += libopenthread-cli-mtd.a | |
| endif | |
| CPPFLAGS_COMMON = \ | |
| -I$(top_srcdir)/include \ | |
| -I$(top_srcdir)/src \ | |
| -I$(top_srcdir)/src/core \ | |
| $(OPENTHREAD_TARGET_DEFINES) \ | |
| $(NULL) | |
| if OPENTHREAD_POSIX | |
| CPPFLAGS_COMMON += \ | |
| -DOPENTHREAD_POSIX=1 \ | |
| $(NULL) | |
| else | |
| CPPFLAGS_COMMON += \ | |
| -DOPENTHREAD_POSIX=0 \ | |
| $(NULL) | |
| endif | |
| libopenthread_cli_mtd_a_CPPFLAGS = \ | |
| -DOPENTHREAD_MTD=1 \ | |
| -DOPENTHREAD_FTD=0 \ | |
| -DOPENTHREAD_RADIO=0 \ | |
| $(CPPFLAGS_COMMON) \ | |
| $(NULL) | |
| libopenthread_cli_ftd_a_CPPFLAGS = \ | |
| -DOPENTHREAD_MTD=0 \ | |
| -DOPENTHREAD_FTD=1 \ | |
| -DOPENTHREAD_RADIO=0 \ | |
| $(CPPFLAGS_COMMON) \ | |
| $(NULL) | |
| SOURCES_COMMON = \ | |
| cli.cpp \ | |
| cli_coap.cpp \ | |
| cli_coap_secure.cpp \ | |
| cli_commissioner.cpp \ | |
| cli_console.cpp \ | |
| cli_dataset.cpp \ | |
| cli_joiner.cpp \ | |
| cli_network_data.cpp \ | |
| cli_srp_client.cpp \ | |
| cli_srp_server.cpp \ | |
| cli_uart.cpp \ | |
| cli_udp.cpp \ | |
| $(NULL) | |
| libopenthread_cli_ftd_a_SOURCES = \ | |
| $(SOURCES_COMMON) \ | |
| $(NULL) | |
| libopenthread_cli_mtd_a_SOURCES = \ | |
| $(SOURCES_COMMON) \ | |
| $(NULL) | |
| noinst_HEADERS = \ | |
| cli.hpp \ | |
| cli_coap.hpp \ | |
| cli_coap_secure.hpp \ | |
| cli_commissioner.hpp \ | |
| cli_config.h \ | |
| cli_console.hpp \ | |
| cli_dataset.hpp \ | |
| cli_joiner.hpp \ | |
| cli_network_data.hpp \ | |
| cli_srp_client.hpp \ | |
| cli_srp_server.hpp \ | |
| cli_uart.hpp \ | |
| cli_udp.hpp \ | |
| x509_cert_key.hpp \ | |
| $(NULL) | |
| if OPENTHREAD_BUILD_COVERAGE | |
| CLEANFILES = $(wildcard *.gcda *.gcno) | |
| endif # OPENTHREAD_BUILD_COVERAGE | |
| include $(abs_top_nlbuild_autotools_dir)/automake/post.am |