From f735ed664133bfa1bf08d8d8ce84784aa66f623f Mon Sep 17 00:00:00 2001 From: seanyen Date: Tue, 29 Dec 2020 12:59:32 -0800 Subject: [PATCH] Windows bringup. --- CMakeLists.txt | 9 +++ include/control_toolbox/pid.hpp | 4 +- include/control_toolbox/pid_ros.hpp | 3 +- .../control_toolbox/visibility_control.hpp | 69 +++++++++++++++++++ 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 include/control_toolbox/visibility_control.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 15924584..e8043922 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,14 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() +if(WIN32) + # Enable Math Constants + # https://docs.microsoft.com/en-us/cpp/c-runtime-library/math-constants?view=vs-2019 + add_compile_definitions( + _USE_MATH_DEFINES + ) +endif() + find_package(ament_cmake REQUIRED) find_package(control_msgs REQUIRED) find_package(rclcpp REQUIRED) @@ -24,6 +32,7 @@ add_library(${PROJECT_NAME} SHARED src/sine_sweep.cpp src/sinusoid.cpp) target_include_directories(${PROJECT_NAME} PUBLIC include) +target_compile_definitions(${PROJECT_NAME} PRIVATE "CONTROL_TOOLBOX_BUILDING_LIBRARY") ament_target_dependencies(${PROJECT_NAME} control_msgs rclcpp diff --git a/include/control_toolbox/pid.hpp b/include/control_toolbox/pid.hpp index 3068e39f..6878a436 100644 --- a/include/control_toolbox/pid.hpp +++ b/include/control_toolbox/pid.hpp @@ -44,6 +44,8 @@ #include "realtime_tools/realtime_buffer.h" #include "realtime_tools/realtime_publisher.h" +#include "control_toolbox/visibility_control.hpp" + namespace control_toolbox { /***************************************************/ @@ -104,7 +106,7 @@ namespace control_toolbox */ /***************************************************/ -class Pid +class CONTROL_TOOLBOX_PUBLIC Pid { public: /*! diff --git a/include/control_toolbox/pid_ros.hpp b/include/control_toolbox/pid_ros.hpp index 3eb416a7..2e0e1c3a 100644 --- a/include/control_toolbox/pid_ros.hpp +++ b/include/control_toolbox/pid_ros.hpp @@ -47,11 +47,12 @@ #include "realtime_tools/realtime_publisher.h" #include "control_toolbox/pid.hpp" +#include "control_toolbox/visibility_control.hpp" namespace control_toolbox { -class PidROS +class CONTROL_TOOLBOX_PUBLIC PidROS { public: /*! diff --git a/include/control_toolbox/visibility_control.hpp b/include/control_toolbox/visibility_control.hpp new file mode 100644 index 00000000..e2f6d8e6 --- /dev/null +++ b/include/control_toolbox/visibility_control.hpp @@ -0,0 +1,69 @@ +/********************************************************************* + * Software License Agreement (BSD License) + * + * Copyright (c) 2009, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of the Willow Garage 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 OWNER 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. + *********************************************************************/ + +#ifndef CONTROL_TOOLBOX__VISIBILITY_CONTROL_HPP_ +#define CONTROL_TOOLBOX__VISIBILITY_CONTROL_HPP_ + +// This logic was borrowed (then namespaced) from the examples on the gcc wiki: +// https://gcc.gnu.org/wiki/Visibility + +#if defined _WIN32 || defined __CYGWIN__ + #ifdef __GNUC__ + #define CONTROL_TOOLBOX_EXPORT __attribute__ ((dllexport)) + #define CONTROL_TOOLBOX_IMPORT __attribute__ ((dllimport)) + #else + #define CONTROL_TOOLBOX_EXPORT __declspec(dllexport) + #define CONTROL_TOOLBOX_IMPORT __declspec(dllimport) + #endif + #ifdef CONTROL_TOOLBOX_BUILDING_LIBRARY + #define CONTROL_TOOLBOX_PUBLIC CONTROL_TOOLBOX_EXPORT + #else + #define CONTROL_TOOLBOX_PUBLIC CONTROL_TOOLBOX_IMPORT + #endif + #define CONTROL_TOOLBOX_PUBLIC_TYPE CONTROL_TOOLBOX_PUBLIC + #define CONTROL_TOOLBOX_LOCAL +#else + #define CONTROL_TOOLBOX_EXPORT __attribute__ ((visibility("default"))) + #define CONTROL_TOOLBOX_IMPORT + #if __GNUC__ >= 4 + #define CONTROL_TOOLBOX_PUBLIC __attribute__ ((visibility("default"))) + #define CONTROL_TOOLBOX_LOCAL __attribute__ ((visibility("hidden"))) + #else + #define CONTROL_TOOLBOX_PUBLIC + #define CONTROL_TOOLBOX_LOCAL + #endif + #define CONTROL_TOOLBOX_PUBLIC_TYPE +#endif + +#endif // CONTROL_TOOLBOX__VISIBILITY_CONTROL_HPP_ \ No newline at end of file