| # |
| # 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 varients, 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/openthread-instance.h |
| # 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 = \ |
| libopenthread-cli-mtd.a \ |
| libopenthread-cli-ftd.a \ |
| $(NULL) |
| |
| CPPFLAGS_COMMON = \ |
| -I$(top_srcdir)/include \ |
| -I$(top_srcdir)/src \ |
| -I$(top_srcdir)/src/core \ |
| $(OPENTHREAD_TARGET_DEFINES) \ |
| $(NULL) |
| |
| |
| libopenthread_cli_mtd_a_CPPFLAGS = \ |
| -DOPENTHREAD_MTD=1 \ |
| $(CPPFLAGS_COMMON) \ |
| $(NULL) |
| |
| libopenthread_cli_ftd_a_CPPFLAGS = \ |
| -DOPENTHREAD_FTD=1 \ |
| $(CPPFLAGS_COMMON) \ |
| $(NULL) |
| |
| SOURCES_COMMON = \ |
| cli.cpp \ |
| cli_console.cpp \ |
| cli_dataset.cpp \ |
| cli_uart.cpp \ |
| cli_coap.cpp \ |
| cli_udp_example.cpp \ |
| $(NULL) |
| |
| libopenthread_cli_ftd_a_SOURCES = \ |
| $(SOURCES_COMMON) \ |
| $(NULL) |
| |
| libopenthread_cli_mtd_a_SOURCES = \ |
| $(SOURCES_COMMON) \ |
| $(NULL) |
| |
| noinst_HEADERS = \ |
| cli.hpp \ |
| cli_console.hpp \ |
| cli_dataset.hpp \ |
| cli_uart.hpp \ |
| cli_server.hpp \ |
| cli_coap.hpp \ |
| cli_udp_example.hpp \ |
| $(NULL) |
| |
| if OPENTHREAD_BUILD_COVERAGE |
| CLEANFILES = $(wildcard *.gcda *.gcno) |
| endif # OPENTHREAD_BUILD_COVERAGE |
| |
| include $(abs_top_nlbuild_autotools_dir)/automake/post.am |