diff --git a/CMakeLists.txt b/CMakeLists.txt index 7167aad2..c39afb9d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,12 +8,13 @@ include(PIPMacros.cmake) # Options -option(ICU "Unicode support" 1) -option(STD_IOSTREAM "Building with std iostream operators support" 0) -option(INTROSPECTION_CONTAINERS "Build with containers introspection" 0) -option(INTROSPECTION_THREADS "Build with threads introspection" 0) -option(LIB "System install" 1) -option(DEBUG "Build with -g3" 0) +option(ICU "Unicode support" ON) +option(STD_IOSTREAM "Building with std iostream operators support" OFF) +option(INTROSPECTION_CONTAINERS "Build with containers introspection" OFF) +option(INTROSPECTION_THREADS "Build with threads introspection" OFF) +option(LIB "System install" ON) +option(STATIC_LIB OFF) +option(DEBUG "Build with -g3" OFF) # Basic @@ -42,6 +43,18 @@ set(PIP_LIBS_TARGETS pip) set(LIBS_MAIN) set(LIBS_STATUS) +if (DEFINED ENV{QNX_HOST} OR PIP_FREERTOS) + set(STATIC_LIB ON) +endif() + +if(STATIC_LIB) + set(PIP_LIB_TYPE STATIC) + message(STATUS "Building PIP static library") +else() + set(PIP_LIB_TYPE SHARED) + message(STATUS "Building PIP shared library") +endif() + #if(LIB) if(WIN32) if(MINGW) @@ -106,6 +119,12 @@ endif() # Main lib set(PIP_FOLDERS "." "core" "containers" "thread" "system" "io_devices" "io_utils" "console" "math" "code" "geo" "resources" "opencl" "crypt") +if(PIP_FREERTOS) + list(REMOVE_ITEM PIP_FOLDERS "io_devices") + include_directories("${PIP_SRC_MAIN}/io_devices") + list(REMOVE_ITEM PIP_FOLDERS "console") + include_directories("${PIP_SRC_MAIN}/console") +endif() include_directories("${PIP_SRC_MAIN}") set(PIP_MAIN_FOLDERS) foreach(F ${PIP_FOLDERS}) @@ -133,6 +152,12 @@ gather_src("${PIP_SRC_OPENCL}" CPP_LIB_OPENCL HDRS PHDRS) gather_src("${PIP_SRC_IO_UTILS}" CPP_LIB_IO_UTILS HDRS PHDRS) +if(PIP_FREERTOS) + add_definitions(-DPIP_FREERTOS) + set(ICU OFF) + set(LIB OFF) +endif() + # Check Bessel functions set(CMAKE_REQUIRED_INCLUDES math.h) set(CMAKE_REQUIRED_LIBRARIES m) @@ -178,68 +203,69 @@ CHECK_FUNCTION_EXISTS(timer_delete PIP_TIMER_RT_2) if(DEBUG) add_definitions(-DPIP_DEBUG) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") - message(STATUS "Building debug version") + message(STATUS "Building PIP debug version") else() set(CMAKE_BUILD_TYPE "Release") - message(STATUS "Building release version") + message(STATUS "Building PIP release version") endif() # Check if std::iostream operators support if(STD_IOSTREAM) add_definitions(-DPIP_STD_IOSTREAM) - message(STATUS "Building with std iostream operators support") + message(STATUS "Building PIP with std iostream operators support") else() - message(STATUS "Building without std iostream operators support") + message(STATUS "Building PIP without std iostream operators support") endif() # Check if STL containers is on (to enable use "-DSTL=" argument of cmake) if(STL) - message(STATUS "Building with STL containers") + message(STATUS "Building PIP with STL containers") add_definitions(-DPIP_CONTAINERS_STL) else() - message(STATUS "Building with PIP containers") + message(STATUS "Building PIP with PIP containers") endif() # Check if ICU used for PIString and PIChar if(ICU) - message(STATUS "Building with ICU") + message(STATUS "Building PIP with ICU") add_definitions(-DPIP_ICU) list(APPEND LIBS_MAIN icuuc) else() - message(STATUS "Building without ICU, attention!") + message(STATUS "Building PIP without ICU, attention!") endif() # Check if PIP should be built with containers introspection if(INTROSPECTION_CONTAINERS) - message(STATUS "Building with containers introspection") + message(STATUS "Building PIP with containers introspection") add_definitions(-DPIP_INTROSPECTION_CONTAINERS) else() - message(STATUS "Building without containers introspection") + message(STATUS "Building PIP without containers introspection") endif() # Check if PIP should be built with threads introspection if(INTROSPECTION_THREADS) - message(STATUS "Building with threads introspection") + message(STATUS "Building PIP with threads introspection") add_definitions(-DPIP_INTROSPECTION_THREADS) else() - message(STATUS "Building without threads introspection") + message(STATUS "Building PIP without threads introspection") endif() # Check if RT timers exists if(PIP_TIMER_RT_0 AND PIP_TIMER_RT_1 AND PIP_TIMER_RT_2) add_definitions(-DPIP_TIMER_RT) - message(STATUS "Building with timers: Thread, ThreadRT, Pool") + message(STATUS "Building PIP with timers: Thread, ThreadRT, Pool") else() - message(STATUS "Building with timers: Thread, Pool") + message(STATUS "Building PIP with timers: Thread, Pool") endif() + # Add main library if(APPLE) add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE) @@ -266,18 +292,22 @@ else() endif() endif() set(PIP_LIBS) -foreach(LIB_ ${LIBS_MAIN}) - find_library(${LIB_}_FOUND ${LIB_}) - if(${LIB_}_FOUND) - list(APPEND CMAKE_REQUIRED_LIBRARIES ${${LIB_}_FOUND}) - list(APPEND PIP_LIBS ${${LIB_}_FOUND}) - endif() -endforeach() +if(PIP_FREERTOS) + set(PIP_LIBS ${LIBS_MAIN}) +else() + foreach(LIB_ ${LIBS_MAIN}) + find_library(${LIB_}_FOUND ${LIB_}) + if(${LIB_}_FOUND) + list(APPEND CMAKE_REQUIRED_LIBRARIES ${${LIB_}_FOUND}) + list(APPEND PIP_LIBS ${${LIB_}_FOUND}) + endif() + endforeach() +endif() list(APPEND LIBS_STATUS ${LIBS_MAIN}) if(WIN32) list(APPEND CPP_LIB_MAIN "pip_resource_win.rc") add_definitions(-DPSAPI_VERSION=1) - add_library(pip SHARED ${CPP_LIB_MAIN} ${HDRS} ${PHDRS}) + add_library(pip ${PIP_LIB_TYPE} ${CPP_LIB_MAIN} ${HDRS} ${PHDRS}) if(${C_COMPILER} STREQUAL "cl.exe") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2 /Ob2 /Ot /W0") else() @@ -287,13 +317,11 @@ if(WIN32) else() set(${CMAKE_CXX_FLAGS} "${CMAKE_CXX_FLAGS} -O3 -fPIC") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") - if(DEFINED ENV{QNX_HOST}) + if(DEFINED ENV{QNX_HOST} OR PIP_FREERTOS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftemplate-depth-32") - add_library(pip STATIC ${CPP_LIB_MAIN}) else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") - add_library(pip SHARED ${CPP_LIB_MAIN}) endif() + add_library(pip ${PIP_LIB_TYPE} ${CPP_LIB_MAIN}) endif() set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS}") include(GenerateExportHeader) @@ -301,137 +329,137 @@ generate_export_header(pip) list(APPEND HDRS "${CMAKE_CURRENT_BINARY_DIR}/pip_export.h") target_link_libraries(pip ${PIP_LIBS}) - -# Check if USB is supported -find_library(usb_FOUND usb SHARED) -if(usb_FOUND) - message(STATUS "Building with USB support") - add_definitions(-DPIP_USB) - add_library(pip_usb SHARED ${CPP_LIB_USB}) - target_link_libraries(pip_usb pip ${usb_FOUND}) - list(APPEND LIBS_STATUS usb) - list(APPEND PIP_LIBS_TARGETS pip_usb) -else() - message(STATUS "Building without USB support") -endif() - - -# Check if PIP support cryptographic encryption/decryption using sodium library -find_library(sodium_FOUND sodium) -if(sodium_FOUND) - message(STATUS "Building with crypt support") - add_definitions(-DPIP_CRYPT) - add_library(pip_crypt SHARED ${CPP_LIB_CRYPT}) - target_link_libraries(pip_crypt pip ${sodium_FOUND}) - list(APPEND LIBS_STATUS sodium) - list(APPEND PIP_LIBS_TARGETS pip_crypt) -else() - message(STATUS "Building without crypt support") -endif() - - -# Check if PIP support compress/decompress using zlib library -find_library(zlib_FOUND NAMES z zlib) -if(zlib_FOUND) - message(STATUS "Building with zlib compress support") - add_definitions(-DPIP_COMPRESS) - add_library(pip_compress SHARED ${CPP_LIB_COMPRESS}) - target_link_libraries(pip_compress pip ${zlib_FOUND}) - list(APPEND LIBS_STATUS zlib) - list(APPEND PIP_LIBS_TARGETS pip_compress) -else() - message(STATUS "Building without compress support") -endif() - - -# Check if PIP support fftw3 for PIFFT using in math module -set(FFTW_LIB_NAME fftw3) -set(FFTW_LIB_SUFFIXES "" "f" "l" "q") -set(FFTW_LIB_SUFFIXES2 "" "-3") -set(FFTW_LIBS) -set(PIP_FFTW_FOUND) -set(CMAKE_REQUIRED_INCLUDES fftw3.h) -foreach(FFTW_S_ IN LISTS FFTW_LIB_SUFFIXES) - set(FFTW_BREAK false) - foreach(FFTW_S2_ IN LISTS FFTW_LIB_SUFFIXES2) - if(NOT FFTW_BREAK) - set(FFTW_CLN "${FFTW_LIB_NAME}${FFTW_S_}${FFTW_S2_}") - set(FFTW_CLNT "${FFTW_LIB_NAME}${FFTW_S_}_threads${FFTW_S2_}") - find_library(${FFTW_CLN}_FOUND ${FFTW_CLN}) - find_library(${FFTW_CLNT}_FOUND ${FFTW_CLNT}) - if(${FFTW_CLN}_FOUND) - list(APPEND FFTW_LIBS "${FFTW_CLN}") - #message(STATUS "PIFFTW found ${FFTW_CLN} = ${${FFTW_CLN}_FOUND}") - set(${FFTW_CLN}_CTS "${FFTW_CLN}") - if(${FFTW_CLNT}_FOUND) - list(APPEND FFTW_LIBS "${FFTW_CLNT}") - list(APPEND ${FFTW_CLN}_CTS "${FFTW_CLNT}") - endif() - set(CMAKE_REQUIRED_LIBRARIES ${${FFTW_CLN}_CTS}) - CHECK_FUNCTION_EXISTS(fftw${FFTW_S_}_make_planner_thread_safe ${FFTW_CLN}_TSFE) - add_definitions(-DPIP_FFTW${FFTW_S_}) - set(PIP_FFTW_FOUND true) - if(${FFTW_CLN}_TSFE) - add_definitions(-DPIP_FFTW${FFTW_S_}_THREADSAFE) - else() - message(STATUS "Warning: PIFFTW${FFTW_S_}::preparePlan was not threadsafe") - endif() - #message(STATUS "${FFTW_CLN} -> ${${FFTW_CLN}_TSFE}") - endif() - endif() - endforeach() -endforeach() -if(FFTW_LIBS) - message(STATUS "Building with fftw3 support: ${FFTW_LIBS}") - add_library(pip_fftw SHARED ${CPP_LIB_FFTW}) - target_link_libraries(pip_fftw pip ${FFTW_LIBS}) - list(APPEND LIBS_STATUS ${FFTW_LIBS}) - list(APPEND PIP_LIBS_TARGETS pip_fftw) -else() - message(STATUS "Building without fftw3 support") -endif() - - -# Check if PIP support OpenCL -find_package(OpenCL QUIET) -if(OpenCL_FOUND) - message(STATUS "Building with OpenCL support") - if(APPLE) - include_directories(${OpenCL_INCLUDE_DIRS}/Headers) +if (NOT PIP_FREERTOS) + # Check if USB is supported + find_library(usb_FOUND usb SHARED) + if(usb_FOUND) + message(STATUS "Building PIP with USB support") + add_definitions(-DPIP_USB) + add_library(pip_usb ${PIP_LIB_TYPE} ${CPP_LIB_USB}) + target_link_libraries(pip_usb pip ${usb_FOUND}) + list(APPEND LIBS_STATUS usb) + list(APPEND PIP_LIBS_TARGETS pip_usb) else() - include_directories(${OpenCL_INCLUDE_DIRS}) + message(STATUS "Building PIP without USB support") endif() - add_definitions(-DPIP_OPENCL) - pip_resources(CL_RES "src_opencl/resources.conf") - add_library(pip_opencl SHARED ${CPP_LIB_OPENCL} ${CL_RES}) - add_dependencies(pip_opencl pip_rc) - target_link_libraries(pip_opencl pip OpenCL::OpenCL) - list(APPEND LIBS_STATUS OpenCL) - list(APPEND PIP_LIBS_TARGETS pip_opencl) - set(OpenCL_FOUND ${OpenCL_LIBRARIES}) -else() - message(STATUS "Building without OpenCL support") -endif() -# Check if PIP IO Utils library supports crypt -set(IO_UTILS_LIBS pip) -add_library(pip_io_utils SHARED ${CPP_LIB_IO_UTILS}) -if(sodium_FOUND) - message(STATUS "Building IO Utils library with crypt support") - list(APPEND IO_UTILS_LIBS pip_crypt) -else() - message(STATUS "Building IO Utils library without crypt support, attention!") -endif() -target_link_libraries(pip_io_utils ${IO_UTILS_LIBS}) -list(APPEND PIP_LIBS_TARGETS pip_io_utils) + # Check if PIP support cryptographic encryption/decryption using sodium library + find_library(sodium_FOUND sodium) + if(sodium_FOUND) + message(STATUS "Building PIP with crypt support") + add_definitions(-DPIP_CRYPT) + add_library(pip_crypt ${PIP_LIB_TYPE} ${CPP_LIB_CRYPT}) + target_link_libraries(pip_crypt pip ${sodium_FOUND}) + list(APPEND LIBS_STATUS sodium) + list(APPEND PIP_LIBS_TARGETS pip_crypt) + else() + message(STATUS "Building PIP without crypt support") + endif() + # Check if PIP support compress/decompress using zlib library + find_library(zlib_FOUND NAMES z zlib) + if(zlib_FOUND) + message(STATUS "Building PIP with zlib compress support") + add_definitions(-DPIP_COMPRESS) + add_library(pip_compress ${PIP_LIB_TYPE} ${CPP_LIB_COMPRESS}) + target_link_libraries(pip_compress pip ${zlib_FOUND}) + list(APPEND LIBS_STATUS zlib) + list(APPEND PIP_LIBS_TARGETS pip_compress) + else() + message(STATUS "Building PIP without compress support") + endif() -# Test program -add_executable(pip_test "main.cpp") -target_link_libraries(pip_test pip) + # Check if PIP support fftw3 for PIFFT using in math module + set(FFTW_LIB_NAME fftw3) + set(FFTW_LIB_SUFFIXES "" "f" "l" "q") + set(FFTW_LIB_SUFFIXES2 "" "-3") + set(FFTW_LIBS) + set(PIP_FFTW_FOUND) + set(CMAKE_REQUIRED_INCLUDES fftw3.h) + foreach(FFTW_S_ IN LISTS FFTW_LIB_SUFFIXES) + set(FFTW_BREAK false) + foreach(FFTW_S2_ IN LISTS FFTW_LIB_SUFFIXES2) + if(NOT FFTW_BREAK) + set(FFTW_CLN "${FFTW_LIB_NAME}${FFTW_S_}${FFTW_S2_}") + set(FFTW_CLNT "${FFTW_LIB_NAME}${FFTW_S_}_threads${FFTW_S2_}") + find_library(${FFTW_CLN}_FOUND ${FFTW_CLN}) + find_library(${FFTW_CLNT}_FOUND ${FFTW_CLNT}) + if(${FFTW_CLN}_FOUND) + list(APPEND FFTW_LIBS "${FFTW_CLN}") + #message(STATUS "PIFFTW found ${FFTW_CLN} = ${${FFTW_CLN}_FOUND}") + set(${FFTW_CLN}_CTS "${FFTW_CLN}") + if(${FFTW_CLNT}_FOUND) + list(APPEND FFTW_LIBS "${FFTW_CLNT}") + list(APPEND ${FFTW_CLN}_CTS "${FFTW_CLNT}") + endif() + set(CMAKE_REQUIRED_LIBRARIES ${${FFTW_CLN}_CTS}) + CHECK_FUNCTION_EXISTS(fftw${FFTW_S_}_make_planner_thread_safe ${FFTW_CLN}_TSFE) + add_definitions(-DPIP_FFTW${FFTW_S_}) + set(PIP_FFTW_FOUND true) + if(${FFTW_CLN}_TSFE) + add_definitions(-DPIP_FFTW${FFTW_S_}_THREADSAFE) + else() + message(STATUS "Warning: PIFFTW${FFTW_S_}::preparePlan was not threadsafe") + endif() + #message(STATUS "${FFTW_CLN} -> ${${FFTW_CLN}_TSFE}") + endif() + endif() + endforeach() + endforeach() + if(FFTW_LIBS) + message(STATUS "Building PIP with fftw3 support: ${FFTW_LIBS}") + add_library(pip_fftw ${PIP_LIB_TYPE} ${CPP_LIB_FFTW}) + target_link_libraries(pip_fftw pip ${FFTW_LIBS}) + list(APPEND LIBS_STATUS ${FFTW_LIBS}) + list(APPEND PIP_LIBS_TARGETS pip_fftw) + else() + message(STATUS "Building PIP without fftw3 support") + endif() + + + # Check if PIP support OpenCL + find_package(OpenCL QUIET) + if(OpenCL_FOUND) + message(STATUS "Building PIP with OpenCL support") + if(APPLE) + include_directories(${OpenCL_INCLUDE_DIRS}/Headers) + else() + include_directories(${OpenCL_INCLUDE_DIRS}) + endif() + add_definitions(-DPIP_OPENCL) + pip_resources(CL_RES "src_opencl/resources.conf") + add_library(pip_opencl ${PIP_LIB_TYPE} ${CPP_LIB_OPENCL} ${CL_RES}) + add_dependencies(pip_opencl pip_rc) + target_link_libraries(pip_opencl pip OpenCL::OpenCL) + list(APPEND LIBS_STATUS OpenCL) + list(APPEND PIP_LIBS_TARGETS pip_opencl) + set(OpenCL_FOUND ${OpenCL_LIBRARIES}) + else() + message(STATUS "Building PIP without OpenCL support") + endif() + + + # Check if PIP IO Utils library supports crypt + set(IO_UTILS_LIBS pip) + add_library(pip_io_utils ${PIP_LIB_TYPE} ${CPP_LIB_IO_UTILS}) + if(sodium_FOUND) + message(STATUS "Building PIP IO Utils library with crypt support") + list(APPEND IO_UTILS_LIBS pip_crypt) + else() + message(STATUS "Building PIP IO Utils library without crypt support, attention!") + endif() + target_link_libraries(pip_io_utils ${IO_UTILS_LIBS}) + list(APPEND PIP_LIBS_TARGETS pip_io_utils) + + + # Test program + add_executable(pip_test "main.cpp") + target_link_libraries(pip_test pip) + +endif(NOT PIP_FREERTOS) # Install # Check if system or local install will be used (to system install use "-DLIB=" argument of cmake) @@ -473,39 +501,46 @@ if(LIB) file(GLOB CMAKES "*.cmake") install(FILES ${CMAKES} DESTINATION ${CMAKE_ROOT}/Modules) else() - install(TARGETS ${PIP_LIBS_TARGETS} DESTINATION bin) - install(FILES ${HDRS} DESTINATION include) - message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") + if(NOT PIP_FREERTOS) + install(TARGETS ${PIP_LIBS_TARGETS} DESTINATION bin) + install(FILES ${HDRS} DESTINATION include) + message(STATUS "Install ${PROJECT_NAME} to local \"bin\"") + endif() endif() +if(NOT PIP_FREERTOS) # Auxiliary -add_subdirectory("${PIP_SRC_MAIN}/auxiliary/piterminal") + add_subdirectory("${PIP_SRC_MAIN}/auxiliary/piterminal") # Utils -add_subdirectory("utils/system_test") -add_subdirectory("utils/remote_console") -add_subdirectory("utils/code_model_generator") -add_subdirectory("utils/resources_compiler") -add_subdirectory("utils/udp_file_transfer") -if(sodium_FOUND) - add_subdirectory("utils/system_daemon") - add_subdirectory("utils/crypt_tool") + add_subdirectory("utils/system_test") + add_subdirectory("utils/remote_console") + add_subdirectory("utils/code_model_generator") + add_subdirectory("utils/resources_compiler") + add_subdirectory("utils/udp_file_transfer") + if(sodium_FOUND) + add_subdirectory("utils/system_daemon") + add_subdirectory("utils/crypt_tool") + endif() + endif() # Libraries messages -message(STATUS "Building modules: ${PIP_LIBS_TARGETS}") +message(STATUS "Building PIP modules: ${PIP_LIBS_TARGETS}") if(DEFINED LIBPROJECT) set(PIP_LIBS_TARGETS ${PIP_LIBS_TARGETS} PARENT_SCOPE) endif() -foreach(LIB_ ${LIBS_STATUS}) - message(STATUS "Library ${LIB_} -> " ${${LIB_}_FOUND}) - if(NOT ${LIB_}_FOUND) - message(WARNING "Library ${LIB_} not found, please install it") - endif() -endforeach() +if(NOT PIP_FREERTOS) + foreach(LIB_ ${LIBS_STATUS}) + message(STATUS "Library ${LIB_} -> " ${${LIB_}_FOUND}) + if(NOT ${LIB_}_FOUND) + message(WARNING "Library ${LIB_} not found, please install it") + endif() + endforeach() +endif() # @@ -514,7 +549,7 @@ endforeach() # find_package(Doxygen QUIET) # if(Doxygen_FOUND) - # message(STATUS "Building with documentation via Doxygen") + # message(STATUS "Building PIP with documentation via Doxygen") # #set(DOXYFILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in) # set(DOXYFILE ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile) @@ -532,28 +567,29 @@ endforeach() # ) # install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION share/doc) # endif() - -include(PIPDocumentation.cmake) -find_package(Doxygen) -if(DOXYGEN_FOUND) - set(DOXY_PROJECT_NUMBER "${_PIP_FULL_VERSION}") - set(DOXY_QHP_CUST_FILTER_ATTRS "\"PIP ${_PIP_FULL_VERSION}\"") - set(DOXY_QHP_SECT_FILTER_ATTRS "\"PIP ${_PIP_FULL_VERSION}\"") - set(DOXY_EXAMPLE_PATH "\"${PROJECT_SOURCE_DIR}/doc/examples\"") - set(DOXY_IMAGE_PATH "\"${PROJECT_SOURCE_DIR}/doc/images\"") - if(DOXYGEN_DOT_EXECUTABLE) - string(REPLACE "\\" "" _DOT_PATH "${DOXYGEN_DOT_PATH}") - set(DOXY_DOT_PATH "\"${_DOT_PATH}\"") - set(DOXY_MSCGEN_PATH "\"${_DOT_PATH}\"") - set(DOXY_DIA_PATH "\"${_DOT_PATH}\"") +if (NOT PIP_FREERTOS) + include(PIPDocumentation.cmake) + find_package(Doxygen) + if(DOXYGEN_FOUND) + set(DOXY_PROJECT_NUMBER "${_PIP_FULL_VERSION}") + set(DOXY_QHP_CUST_FILTER_ATTRS "\"PIP ${_PIP_FULL_VERSION}\"") + set(DOXY_QHP_SECT_FILTER_ATTRS "\"PIP ${_PIP_FULL_VERSION}\"") + set(DOXY_EXAMPLE_PATH "\"${PROJECT_SOURCE_DIR}/doc/examples\"") + set(DOXY_IMAGE_PATH "\"${PROJECT_SOURCE_DIR}/doc/images\"") + if(DOXYGEN_DOT_EXECUTABLE) + string(REPLACE "\\" "" _DOT_PATH "${DOXYGEN_DOT_PATH}") + set(DOXY_DOT_PATH "\"${_DOT_PATH}\"") + set(DOXY_MSCGEN_PATH "\"${_DOT_PATH}\"") + set(DOXY_DIA_PATH "\"${_DOT_PATH}\"") + endif() + set(DOXY_INPUT) + foreach(F ${PIP_SRC_DIRS}) + list(APPEND DOXY_INPUT "\"${PROJECT_SOURCE_DIR}/${F}\"") + endforeach(F) + string(REPLACE ";" " " DOXY_INPUT "${DOXY_INPUT}") + string(REPLACE ";" " " DOXY_INCLUDE_PATH "${PIP_MAIN_FOLDERS}") + add_documentation(doc Doxyfile.in) + install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION ../share/doc/pip COMPONENT doc EXCLUDE_FROM_ALL OPTIONAL) endif() - set(DOXY_INPUT) - foreach(F ${PIP_SRC_DIRS}) - list(APPEND DOXY_INPUT "\"${PROJECT_SOURCE_DIR}/${F}\"") - endforeach(F) - string(REPLACE ";" " " DOXY_INPUT "${DOXY_INPUT}") - string(REPLACE ";" " " DOXY_INCLUDE_PATH "${PIP_MAIN_FOLDERS}") - add_documentation(doc Doxyfile.in) - install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html DESTINATION ../share/doc/pip COMPONENT doc EXCLUDE_FROM_ALL OPTIONAL) endif() diff --git a/src_main/code/picodeinfo.h b/src_main/code/picodeinfo.h index e195ffbd..22a52c35 100755 --- a/src_main/code/picodeinfo.h +++ b/src_main/code/picodeinfo.h @@ -45,7 +45,7 @@ typedef PIByteArray(*AccessFunction)(const void *, const char *); struct PIP_EXPORT TypeInfo { TypeInfo(const PIString & n = PIString(), const PIString & t = PIString(), PICodeInfo::TypeFlags f = 0, int b = -1) {name = n; type = t; flags = f; bits = b;} - const bool isBitfield() const {return bits > 0;} + bool isBitfield() const {return bits > 0;} MetaMap meta; PIString name; PIString type; diff --git a/src_main/core/piincludes_p.h b/src_main/core/piincludes_p.h index fde610a0..3440661f 100644 --- a/src_main/core/piincludes_p.h +++ b/src_main/core/piincludes_p.h @@ -41,4 +41,5 @@ typedef LONG(NTAPI*PINtSetTimerResolution)(ULONG, BOOLEAN, PULONG); #include + #endif // PIINCLUDES_P_H diff --git a/src_main/core/piinit.cpp b/src_main/core/piinit.cpp index bfff83c1..51c4223d 100644 --- a/src_main/core/piinit.cpp +++ b/src_main/core/piinit.cpp @@ -23,9 +23,11 @@ #include "pisignals.h" #include "piobject.h" #include "pisysteminfo.h" -#include "pidir.h" -#include "piprocess.h" #include "piresourcesstorage.h" +#ifndef FREERTOS +# include "pidir.h" +# include "piprocess.h" +#endif #ifdef WINDOWS # include extern FILETIME __pi_ftjan1970; @@ -44,7 +46,9 @@ } #else # include -# include +# ifndef FREERTOS +# include +# endif # include # ifdef BLACKBERRY # include @@ -88,6 +92,7 @@ PRIVATE_DEFINITION_START(PIInit) #endif PRIVATE_DEFINITION_END(PIInit) +#ifndef FREERTOS void __sighandler__(PISignals::Signal s) { //piCout << Hex << int(s); if (s == PISignals::StopTTYInput || s == PISignals::StopTTYOutput) @@ -95,6 +100,7 @@ void __sighandler__(PISignals::Signal s) { if (s == PISignals::UserDefined1) dumpApplicationToFile(PIDir::home().path() + PIDir::separator + PIStringAscii("_PIP_DUMP_") + PIString::fromNumber(PIProcess::currentPID())); } +#endif #ifdef ANDROID @@ -109,6 +115,7 @@ PIInit::PIInit() { PISystemInfo * sinfo = PISystemInfo::instance(); sinfo->execDateTime = PIDateTime::current(); setFileCharset("UTF-8"); +#ifndef FREERTOS #ifndef ANDROID PISignals::setSlot(__sighandler__); PISignals::grabSignals(PISignals::UserDefined1); @@ -211,11 +218,14 @@ PIInit::PIInit() { #endif #ifdef MAC_OS host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &__pi_mac_clock); +#endif #endif char cbuff[1024]; memset(cbuff, 0, 1024); +#ifndef FREERTOS if (gethostname(cbuff, 1023) == 0) sinfo->hostname = cbuff; +#endif #ifdef WINDOWS SYSTEM_INFO sysinfo; GetSystemInfo(&sysinfo); @@ -248,11 +258,13 @@ PIInit::PIInit() { if (l) sinfo->user = l; } +# ifndef FREERTOS struct utsname uns; if (uname(&uns) == 0) { sinfo->OS_version = uns.release; sinfo->architecture = uns.machine; } +# endif #endif sinfo->OS_name = #ifdef WINDOWS @@ -270,7 +282,11 @@ PIInit::PIInit() { # ifdef FREE_BSD PIStringAscii("FreeBSD"); # else +# ifdef FREERTOS + PIStringAscii("FreeRTOS"); +# else uns.sysname; +# endif # endif # endif # endif diff --git a/src_main/core/piobject.cpp b/src_main/core/piobject.cpp index c1210bfa..91e38dcb 100755 --- a/src_main/core/piobject.cpp +++ b/src_main/core/piobject.cpp @@ -18,9 +18,10 @@ */ #include "piobject.h" -#include "pifile.h" #include "pisysteminfo.h" - +#ifndef FREERTOS +# include "pifile.h" +#endif /** \class PIObject * \brief This is base class for any classes which use events -> handlers mechanism. @@ -585,7 +586,7 @@ void dumpApplication() { //printf("dump application done\n"); } - +#ifndef FREERTOS bool dumpApplicationToFile(const PIString & path) { PIFile f(path + "_tmp"); f.setName("__S__DumpFile"); @@ -600,3 +601,4 @@ bool dumpApplicationToFile(const PIString & path) { PIFile::rename(path + "_tmp", path); return true; } +#endif diff --git a/src_main/core/pitime.h b/src_main/core/pitime.h index e239e2c5..1c9bfaea 100755 --- a/src_main/core/pitime.h +++ b/src_main/core/pitime.h @@ -25,11 +25,14 @@ #include "pistring.h" -#include -#ifdef QNX -# include +#ifdef FREERTOS +# include "time.h" +#else +# include +# ifdef QNX +# include +# endif #endif - //! \brief Sleep for "msecs" milliseconds PIP_EXPORT void msleep(int msecs); diff --git a/src_main/io_devices/pican.cpp b/src_main/io_devices/pican.cpp index 84eb5d12..4375e16d 100644 --- a/src_main/io_devices/pican.cpp +++ b/src_main/io_devices/pican.cpp @@ -1,7 +1,7 @@ #include "pican.h" #include "pipropertystorage.h" #include "piincludes_p.h" -#if !defined(WINDOWS) && !defined(MAC_OS) +#if !defined(WINDOWS) && !defined(MAC_OS) && !defined(FREERTOS) # define PIP_CAN #endif #ifdef PIP_CAN diff --git a/src_main/piplatform.h b/src_main/piplatform.h index d75690b2..bf230b2c 100644 --- a/src_main/piplatform.h +++ b/src_main/piplatform.h @@ -45,13 +45,18 @@ # define ANDROID # endif #endif +#ifdef PIP_FREERTOS +# define FREERTOS +#endif #ifndef WINDOWS # ifndef QNX # ifndef FREE_BSD # ifndef MAC_OS # ifndef ANDROID # ifndef BLACKBERRY -# define LINUX +# ifndef FREERTOS +# define LINUX +# endif # endif # endif # endif diff --git a/src_main/system/picodec.cpp b/src_main/system/picodec.cpp index d6c63394..7d17fbc5 100755 --- a/src_main/system/picodec.cpp +++ b/src_main/system/picodec.cpp @@ -17,6 +17,8 @@ along with this program. If not, see . */ +#ifndef PIP_FREERTOS + #include "picodec.h" @@ -39,3 +41,5 @@ PIByteArray PICodec::exec_iconv(const PIString & from, const PIString & to, cons waitForFinish(); return readOutput(); } + +#endif // PIP_FREERTOS diff --git a/src_main/system/picodec.h b/src_main/system/picodec.h index d34f8e4c..f774439a 100755 --- a/src_main/system/picodec.h +++ b/src_main/system/picodec.h @@ -20,6 +20,8 @@ #ifndef PICODEC_H #define PICODEC_H +#ifndef PIP_FREERTOS + #include "piprocess.h" class PIP_EXPORT PICodec: protected PIProcess @@ -48,4 +50,5 @@ private: }; +#endif // PIP_FREERTOS #endif // PICODEC_H diff --git a/src_main/system/pilibrary.cpp b/src_main/system/pilibrary.cpp index 985aee64..dad0d4d8 100644 --- a/src_main/system/pilibrary.cpp +++ b/src_main/system/pilibrary.cpp @@ -17,6 +17,8 @@ along with this program. If not, see . */ +#ifndef PIP_FREERTOS + #include "pilibrary.h" #include "piincludes_p.h" #ifndef WINDOWS @@ -107,3 +109,5 @@ void PILibrary::getLastError() { else liberror.clear(); #endif } + +#endif // PIP_FREERTOS diff --git a/src_main/system/pilibrary.h b/src_main/system/pilibrary.h index bd43abaf..bf01d1ee 100644 --- a/src_main/system/pilibrary.h +++ b/src_main/system/pilibrary.h @@ -16,10 +16,12 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ - +# #ifndef PILIBRARY_H #define PILIBRARY_H +#ifndef PIP_FREERTOS + #include "pistring.h" class PIP_EXPORT PILibrary { @@ -45,4 +47,5 @@ private: }; +#endif // PIP_FREERTOS #endif // PILIBRARY_H diff --git a/src_main/system/piprocess.cpp b/src_main/system/piprocess.cpp index 4c496f1d..2231dff5 100755 --- a/src_main/system/piprocess.cpp +++ b/src_main/system/piprocess.cpp @@ -17,6 +17,8 @@ along with this program. If not, see . */ +#ifndef PIP_FREERTOS + #include "piincludes_p.h" #include "piprocess.h" #ifndef WINDOWS @@ -26,7 +28,6 @@ #ifdef MAC_OS # include #endif - PRIVATE_DEFINITION_START(PIProcess) #ifdef WINDOWS STARTUPINFOA si; @@ -38,7 +39,6 @@ PRIVATE_DEFINITION_START(PIProcess) PRIVATE_DEFINITION_END(PIProcess) - PIProcess::PIProcess(): PIThread() { exit_code = -1; #ifdef WINDOWS @@ -307,3 +307,5 @@ PIString PIProcess::getEnvironmentVariable(const PIString & variable) { return PIString(); } +#endif // PIP_FREERTOS + diff --git a/src_main/system/piprocess.h b/src_main/system/piprocess.h index 82c22a08..bcf24f3b 100755 --- a/src_main/system/piprocess.h +++ b/src_main/system/piprocess.h @@ -23,6 +23,8 @@ #ifndef PIPROCESS_H #define PIPROCESS_H +#ifndef PIP_FREERTOS + #include "pithread.h" #include "pifile.h" @@ -102,4 +104,5 @@ private: }; +#endif // PIP_FREERTOS #endif // PIPROCESS_H diff --git a/src_main/system/pisystemmonitor.cpp b/src_main/system/pisystemmonitor.cpp index 8a1201ca..092d64f1 100755 --- a/src_main/system/pisystemmonitor.cpp +++ b/src_main/system/pisystemmonitor.cpp @@ -83,6 +83,7 @@ PISystemMonitor::ProcessStats::ProcessStats() { } +#ifndef FREERTOS bool PISystemMonitor::startOnProcess(int pID, int interval_ms) { stop(); self_ = false; @@ -109,13 +110,12 @@ bool PISystemMonitor::startOnProcess(int pID, int interval_ms) { return start(interval_ms); } - bool PISystemMonitor::startOnSelf(int interval_ms) { bool ret = startOnProcess(PIProcess::currentPID(), interval_ms); self_ = true; return ret; } - +#endif PIVector PISystemMonitor::threadsStatistic() const { mutex_.lock(); diff --git a/src_main/system/pisystemmonitor.h b/src_main/system/pisystemmonitor.h index 9ea60ee5..54d4f35c 100755 --- a/src_main/system/pisystemmonitor.h +++ b/src_main/system/pisystemmonitor.h @@ -70,9 +70,10 @@ public: ullong space_used; ullong space_free;*/ }; - +#ifndef FREERTOS bool startOnProcess(int pID, int interval_ms = 1000); bool startOnSelf(int interval_ms = 1000); +#endif void stop(); const ProcessStats & statistic() const {return stat;} diff --git a/src_main/thread/pithread.cpp b/src_main/thread/pithread.cpp index 58b2703e..855784f6 100755 --- a/src_main/thread/pithread.cpp +++ b/src_main/thread/pithread.cpp @@ -31,7 +31,7 @@ # include # define gettid() syscall(SYS_gettid) #endif -#if defined(MAC_OS) || defined(BLACKBERRY) +#if defined(MAC_OS) || defined(BLACKBERRY) || defined(FREERTOS) # include #endif __THREAD_FUNC_RET__ thread_function(void * t) {PIThread::__thread_func__(t); return 0;} @@ -335,7 +335,8 @@ int PIThread::priority2System(PIThread::Priority p) { void PIThread::setPriority(PIThread::Priority prior) { - priority_ = prior; +#ifndef FREERTOS // FreeRTOS can't change priority runtime + priority_ = prior; #ifndef WINDOWS if (!running_ || (PRIVATE->thread == 0)) return; //piCout << "setPriority" << PRIVATE->thread; @@ -354,6 +355,7 @@ void PIThread::setPriority(PIThread::Priority prior) { if (!running_ || (PRIVATE->thread == 0)) return; SetThreadPriority(PRIVATE->thread, priority2System(priority_)); #endif +#endif //FREERTOS }