dev(SF-242): added --version option
This commit is contained in:
parent
86d1193cf9
commit
63c4e8119e
@ -40,13 +40,52 @@ if(DEFINED BOARD)
|
|||||||
include(${SITARA_DEPOT}/compile/sitara_compile_flags.cmake)
|
include(${SITARA_DEPOT}/compile/sitara_compile_flags.cmake)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nlohman json <EFBFBD> GCC7.1
|
# Подгружаем внешние репозитории
|
||||||
|
include(FetchContent)
|
||||||
|
include(RepositoryPath.cmake)
|
||||||
|
|
||||||
|
FetchContent_Declare(
|
||||||
|
cxxopts
|
||||||
|
GIT_REPOSITORY ${cxxopts_path}
|
||||||
|
GIT_TAG master
|
||||||
|
)
|
||||||
|
FetchContent_GetProperties(cxxopts)
|
||||||
|
if(NOT cxxopts_POPULATED)
|
||||||
|
FetchContent_Populate(cxxopts)
|
||||||
|
add_subdirectory(${cxxopts_SOURCE_DIR} ${cxxopts_BINARY_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
# Получаем информацию о последнем Git Tag.
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0
|
||||||
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE GIT_TAG
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
# Получаем информацию о текущем коммите.
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${GIT_EXECUTABLE} show-ref --head -s -- "head"
|
||||||
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE GIT_HEAD
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
# Определяем сведения о версии.
|
||||||
|
set(GIT_VERSION_INFO GIT_TAG="${GIT_TAG}" GIT_HEAD="${GIT_HEAD}")
|
||||||
|
|
||||||
|
|
||||||
|
# убирает предупреждение nlohman json о GCC7.1
|
||||||
add_compile_options(-Wno-psabi)
|
add_compile_options(-Wno-psabi)
|
||||||
|
|
||||||
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> undefined reference pthread, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
#Если не собирается с ошибкой линкера undefined reference pthread, то добавить флаг линкера:
|
||||||
#add_link_options(-lrt)
|
#add_link_options(-lrt)
|
||||||
add_executable(${TARGET_NAME} ./main.cpp ${SRC_FILES})
|
add_executable(${TARGET_NAME} ./main.cpp ${SRC_FILES})
|
||||||
|
|
||||||
|
# Записываем сведения о версии.
|
||||||
|
target_compile_definitions(${TARGET_NAME} PRIVATE ${GIT_VERSION_INFO})
|
||||||
|
|
||||||
target_include_directories(${TARGET_NAME} PRIVATE
|
target_include_directories(${TARGET_NAME} PRIVATE
|
||||||
./
|
./
|
||||||
${INC_DIRS}
|
${INC_DIRS}
|
||||||
@ -56,14 +95,23 @@ target_include_directories(${TARGET_NAME} PRIVATE
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (CMAKE_BUILD_TYPE STREQUAL Debug)
|
if (CMAKE_BUILD_TYPE STREQUAL Debug)
|
||||||
set(LIB_LIST profinetd osald ${Boost_LIBRARIES})
|
set(LIB_LIST
|
||||||
|
profinetd
|
||||||
|
osald
|
||||||
|
${Boost_LIBRARIES}
|
||||||
|
cxxopts)
|
||||||
elseif(CMAKE_BUILD_TYPE STREQUAL Release)
|
elseif(CMAKE_BUILD_TYPE STREQUAL Release)
|
||||||
set(LIB_LIST profinet osal ${Boost_LIBRARIES})
|
set(LIB_LIST
|
||||||
|
profinet
|
||||||
|
osal
|
||||||
|
${Boost_LIBRARIES}
|
||||||
|
cxxopts)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nlohman json <EFBFBD> GCC7.1
|
# убирает предупреждение nlohman json о GCC7.1
|
||||||
add_compile_options(-Wno-psabi)
|
add_compile_options(-Wno-psabi)
|
||||||
|
|
||||||
|
|
||||||
set(LIB_ARCH_DIR x86_64)
|
set(LIB_ARCH_DIR x86_64)
|
||||||
|
|
||||||
if(DEFINED BOARD)
|
if(DEFINED BOARD)
|
||||||
@ -82,10 +130,10 @@ endif()
|
|||||||
|
|
||||||
target_link_directories(${TARGET_NAME} PUBLIC ${LINK_PATH})
|
target_link_directories(${TARGET_NAME} PUBLIC ${LINK_PATH})
|
||||||
|
|
||||||
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> undefined reference pthread, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ${Boost_LIBRARIES} <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pthread <EFBFBD><EFBFBD><EFBFBD> -lpthread:
|
#Если не собирается с ошибкой линкера undefined reference pthread, то после ${Boost_LIBRARIES} добавить pthread или -lpthread:
|
||||||
#target_link_libraries (${TARGET_NAME} PUBLIC profinet osal ${Boost_LIBRARIES} pthread)
|
#target_link_libraries (${TARGET_NAME} PUBLIC profinet osal ${Boost_LIBRARIES} pthread)
|
||||||
|
|
||||||
# <EFBFBD><EFBFBD><EFBFBD> BeagleBoneAI: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GCC8 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> stdc++fs(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <filesystem>)
|
# Для BeagleBoneAI: версия GCC8 нужно указывать stdc++fs(библиотека <filesystem>)
|
||||||
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
|
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
|
||||||
set(LIB_LIST ${LIB_LIST} stdc++fs)
|
set(LIB_LIST ${LIB_LIST} stdc++fs)
|
||||||
endif()
|
endif()
|
||||||
@ -98,13 +146,13 @@ install(
|
|||||||
)
|
)
|
||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
# Копирование заглушки скрипта установки параметров сети.
|
||||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pnet <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fork <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> exit <EFBFBD>
|
# Если не копировать, то в недрах pnet после fork вызовется exit и
|
||||||
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
# и вызовутся деструкторы объектов, что может привести к непредвиденным последствиям.
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/set_network_parameters
|
${CMAKE_CURRENT_SOURCE_DIR}/set_network_parameters
|
||||||
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
#Копирование файла конфигурации
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/program_configure.json
|
${CMAKE_CURRENT_SOURCE_DIR}/program_configure.json
|
||||||
#<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Profinet
|
#Копирование тестового файла конфигурации устройства Profinet
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/profinet_device_configure.json
|
${CMAKE_CURRENT_SOURCE_DIR}/profinet_device_configure.json
|
||||||
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin
|
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin
|
||||||
)
|
)
|
||||||
10
src/RepositoryPath.cmake
Normal file
10
src/RepositoryPath.cmake
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Specify the path to dependencies' git repositories
|
||||||
|
|
||||||
|
cmake_path(SET cxxopts_path "git@sofdev:External/cxxopts.git")
|
||||||
|
|
||||||
|
if (
|
||||||
|
NOT DEFINED cxxopts_path
|
||||||
|
)
|
||||||
|
|
||||||
|
message(FATAL_ERROR "Path to the dependency git repository is not specified")
|
||||||
|
endif()
|
||||||
37
src/Version.h
Normal file
37
src/Version.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#ifndef UFC_ASYNCSERIALCONNECTOR_VERSION_H
|
||||||
|
#define UFC_ASYNCSERIALCONNECTOR_VERSION_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace asc {
|
||||||
|
/**
|
||||||
|
* Содержит сведения о текущей версии ПО.
|
||||||
|
*/
|
||||||
|
class Version {
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Получить текущую версию.
|
||||||
|
*/
|
||||||
|
static std::string GetVersion(){
|
||||||
|
return !GitTag.empty()
|
||||||
|
? GitTag + " " + GitHead
|
||||||
|
: GitHead;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* Последний TAG текущей ветки.
|
||||||
|
*/
|
||||||
|
static const std::string GitTag;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hash текущего коммита.
|
||||||
|
*/
|
||||||
|
static const std::string GitHead;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string asc::Version::GitTag = GIT_TAG;
|
||||||
|
const std::string asc::Version::GitHead = GIT_HEAD;
|
||||||
|
|
||||||
|
#endif // UFC_ASYNCSERIALCONNECTOR_VERSION_H
|
||||||
26
src/main.cpp
26
src/main.cpp
@ -2,14 +2,40 @@
|
|||||||
#include "profinet.hpp"
|
#include "profinet.hpp"
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <cxxopts.hpp>
|
||||||
|
|
||||||
#include "program_config.hpp"
|
#include "program_config.hpp"
|
||||||
#include "app.hpp"
|
#include "app.hpp"
|
||||||
|
#include "Version.h"
|
||||||
|
|
||||||
App app;
|
App app;
|
||||||
|
|
||||||
int main(int argc, char * argv[])
|
int main(int argc, char * argv[])
|
||||||
{
|
{
|
||||||
|
cxxopts::Options options(
|
||||||
|
"ProfinetConnector",
|
||||||
|
"Profinet io device driver. Designed for profinet controller interaction via ethernet\n"
|
||||||
|
);
|
||||||
|
|
||||||
|
options.set_width(160);
|
||||||
|
|
||||||
|
options.add_options()
|
||||||
|
("help", "Display this help", cxxopts::value<bool>()->default_value("false"))
|
||||||
|
("version", "Show git head commit and tag", cxxopts::value<bool>()->default_value("false"));
|
||||||
|
|
||||||
|
auto result = options.parse(argc, argv);
|
||||||
|
|
||||||
|
if (result["help"].as<bool>()) {
|
||||||
|
return not(std::cout << options.help() << std::endl);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Выводим информацию о текущей версии.
|
||||||
|
if (result["version"].as<bool>()) {
|
||||||
|
std::cout << "version: " << asc::Version::GetVersion() << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
app.Init("program_configure.json");
|
app.Init("program_configure.json");
|
||||||
|
|
||||||
app.Run();
|
app.Run();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user