diff --git a/CMakeLists.txt b/CMakeLists.txt index e8b5edaaa..94b6fe74f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,6 +47,8 @@ option(REQUIREMENTS "Generate the html version of the 'requirements' documentati option(PYTHON_BINDINGS "Python library to use the Parameter Framework from python" ON) option(C_BINDINGS "Library to use the Parameter Framework using a C API" ON) option(FATAL_WARNINGS "Turn warnings into errors (-Werror flag)" ON) +option(NETWORKING "Set to OFF in order to stub networking code" ON) +mark_as_advanced(FORCE NETWORKING) include(SetVersion.cmake) diff --git a/remote-processor/CMakeLists.txt b/remote-processor/CMakeLists.txt index 5578ee4bf..ed49e4c23 100644 --- a/remote-processor/CMakeLists.txt +++ b/remote-processor/CMakeLists.txt @@ -40,10 +40,22 @@ generate_export_header(remote-processor set(CMAKE_THREAD_PREFER_PTHREAD 1) find_package(Threads REQUIRED) -# Find ASIO (the standalone version, not Boost) -# If asio isn't installed in a standard directory, add the correct directory to -# CMAKE_PREFIX_PATH (see the main README for more information). -find_path(ASIO_DIR NAMES asio.hpp) +if (NETWORKING) + # Find ASIO (the standalone version, not Boost) + # If asio isn't installed in a standard directory, add the correct directory to + # CMAKE_PREFIX_PATH (see the main README for more information). + find_path(ASIO_DIR NAMES asio.hpp) +else() + # Stub ASIO. + # TODO: have a 'asio' lib in order to take advantage of requirements + # forwarding. + add_library(asio-stub STATIC asio-stub asio-stub/asio.cpp) + set_target_properties(asio-stub PROPERTIES POSITION_INDEPENDENT_CODE TRUE) + target_include_directories(asio-stub PUBLIC asio-stub) + + target_link_libraries(remote-processor PRIVATE asio-stub) + set(ASIO_DIR "${CMAKE_CURRENT_SOURCE_DIR}/asio-stub") +endif() # Hide this variable from CMake GUIs and `cmake -L` set_property(CACHE ASIO_DIR PROPERTY ADVANCED TRUE) target_include_directories(remote-processor SYSTEM PRIVATE "${ASIO_DIR}") diff --git a/remote-processor/asio-stub/asio.cpp b/remote-processor/asio-stub/asio.cpp new file mode 100644 index 000000000..5ceaa4e47 --- /dev/null +++ b/remote-processor/asio-stub/asio.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2016, Intel Corporation + * 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 "asio.hpp" + +namespace asio { +bool write(const dummy_base &, const dummy_base &, const dummy_base &) +{ + return true; +} +bool read(const dummy_base &, const dummy_base &, const dummy_base &) +{ + return true; +} +} diff --git a/remote-processor/asio-stub/asio.hpp b/remote-processor/asio-stub/asio.hpp new file mode 100644 index 000000000..7ce27d402 --- /dev/null +++ b/remote-processor/asio-stub/asio.hpp @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2016, Intel Corporation + * 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. + */ +#pragma once + +#include + +namespace asio +{ +struct dummy_base +{ + template + dummy_base(Args &&...) + { + } + void set_option(const dummy_base &) const {}; +}; +using buffer = dummy_base; +struct io_service : dummy_base +{ + using dummy_base::dummy_base; + + void run(const dummy_base &) const {}; + void stop() const {}; +}; +struct socket_base : dummy_base +{ + using dummy_base::dummy_base; + + using linger = dummy_base; + using enable_connection_aborted = dummy_base; + void close() const {}; +}; + +bool write(const dummy_base &, const dummy_base &, const dummy_base &); +bool read(const dummy_base &, const dummy_base &, const dummy_base &); + +struct error_code : dummy_base, std::error_code +{ +}; +namespace error +{ +static const error_code eof{}; +} + +namespace ip +{ +namespace tcp +{ +using v6 = dummy_base; +using no_delay = dummy_base; +using socket = socket_base; +struct endpoint : dummy_base +{ + using dummy_base::dummy_base; + + dummy_base protocol() const { return {}; }; +}; +struct acceptor : dummy_base +{ + using dummy_base::dummy_base; + + using reuse_address = dummy_base; + void open(const dummy_base &) const {}; + void bind(const dummy_base &) const {}; + void listen() const {}; + void async_accept(const dummy_base &, const dummy_base &) const {}; +}; +} +} +}