Sergey Markov
3 years ago
7 changed files with 138 additions and 0 deletions
@ -0,0 +1,20 @@ |
|||||||
|
cmake_minimum_required(VERSION 3.15.0) |
||||||
|
|
||||||
|
set(CMAKE_TOOLCHAIN_FILE cmake/toolchain.cmake) |
||||||
|
|
||||||
|
project(miner_scheduler VERSION 0.1.0) |
||||||
|
|
||||||
|
add_definitions(-DAPP_NAME="miner_scheduler") |
||||||
|
add_definitions(-DAPP_VERSION="0.1.0") |
||||||
|
add_definitions(-DAPP_GCC="${CMAKE_C_COMPILER_VERSION}") |
||||||
|
|
||||||
|
include(ExternalProject) |
||||||
|
include(cmake/fmt.cmake) |
||||||
|
include(cmake/wiringOP.cmake) |
||||||
|
|
||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}) |
||||||
|
add_executable(miner_scheduler main.cpp |
||||||
|
cmd_line_args.cpp) |
||||||
|
|
||||||
|
add_dependencies(miner_scheduler fmt wiringOP) |
||||||
|
|
@ -0,0 +1,18 @@ |
|||||||
|
ExternalProject_Add(fmt |
||||||
|
URL https://github.com/fmtlib/fmt/archive/refs/tags/8.1.1.tar.gz |
||||||
|
#CMAKE_ARGS -DEVENT__LIBRARY_TYPE:STRING=STATIC |
||||||
|
INSTALL_COMMAND "" |
||||||
|
CONFIGURE_COMMAND cmake -DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/toolchain.cmake <SOURCE_DIR> |
||||||
|
BUILD_COMMAND make fmt |
||||||
|
) |
||||||
|
|
||||||
|
ExternalProject_Get_property(fmt BINARY_DIR) |
||||||
|
set(FMT_BINARY_DIR ${BINARY_DIR}) |
||||||
|
|
||||||
|
ExternalProject_Get_property(fmt SOURCE_DIR) |
||||||
|
set(FMT_SRC_DIR ${SOURCE_DIR}) |
||||||
|
|
||||||
|
include_directories(${FMT_SRC_DIR}/include) |
||||||
|
|
||||||
|
link_directories(${FMT_BINARY_DIR}) |
||||||
|
link_libraries(fmt.a) |
@ -0,0 +1,9 @@ |
|||||||
|
set(CMAKE_AR /usr/bin/arm-linux-gnueabihf-ar) |
||||||
|
set(CMAKE_ASM_COMPILER /usr/bin/arm-linux-gnueabihf-as) |
||||||
|
set(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc) |
||||||
|
set(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++) |
||||||
|
set(CMAKE_LINKER /usr/bin/arm-linux-gnueabihf-ld) |
||||||
|
set(CMAKE_OBJCOPY /usr/bin/arm-linux-gnueabihf-objcopy) |
||||||
|
set(CMAKE_RANLIB /usr/bin/arm-linux-gnueabihf-ranlib) |
||||||
|
set(CMAKE_SIZE /usr/bin/arm-linux-gnueabihf-size) |
||||||
|
set(CMAKE_STRIP /usr/bin/arm-linux-gnueabihf-strip) |
@ -0,0 +1,7 @@ |
|||||||
|
ExternalProject_Add(wiringOP |
||||||
|
GIT_REPOSITORY https://github.com/orangepi-xunlong/wiringOP |
||||||
|
BUILD_IN_SOURCE true |
||||||
|
CONFIGURE_COMMAND ./build clean |
||||||
|
BUILD_COMMAND BOARD=orangepipc-h3 ./build |
||||||
|
INSTALL_COMMAND "" |
||||||
|
) |
@ -0,0 +1,68 @@ |
|||||||
|
|
||||||
|
#include <getopt.h> |
||||||
|
#include <iostream> |
||||||
|
#include <fmt/format.h> |
||||||
|
#include "cmd_line_args.h" |
||||||
|
|
||||||
|
static struct option options[] = |
||||||
|
{ |
||||||
|
{"help", no_argument, NULL, '?'}, |
||||||
|
{"version", no_argument, NULL, 'v'}, |
||||||
|
{"config-file", optional_argument, NULL, 'c'}, |
||||||
|
{NULL, 0, NULL, 0 } |
||||||
|
}; |
||||||
|
|
||||||
|
static constexpr auto optc = "?v:c:"; |
||||||
|
|
||||||
|
static constexpr auto help_format = |
||||||
|
"{0} v{1}\n\n" |
||||||
|
"Usage:\n" |
||||||
|
"Availabe options are:\n" |
||||||
|
"\t--help Show help\n" |
||||||
|
"\t--config-file Config file path\n" |
||||||
|
"\t--version Version of the {0}\n" |
||||||
|
"\n" |
||||||
|
"Usage example:\n" |
||||||
|
"{0} --config-file=scheduler.conf\n" |
||||||
|
"\n\n"; |
||||||
|
static constexpr auto version_format =
|
||||||
|
"{0} v{1}\n\n" |
||||||
|
"Build with gcc-{2}";
|
||||||
|
|
||||||
|
void usage() { |
||||||
|
std::cout << fmt::format(help_format, APP_NAME, APP_VERSION) << std::endl; |
||||||
|
} |
||||||
|
|
||||||
|
void version() { |
||||||
|
std::cout << fmt::format(version_format, APP_NAME, APP_VERSION, APP_GCC) << std::endl; |
||||||
|
} |
||||||
|
|
||||||
|
parsed_opts parse_opts(int argc, char** argv) { |
||||||
|
if(argc < 1){ |
||||||
|
exit(1); |
||||||
|
} |
||||||
|
|
||||||
|
std::string config_file {""}; |
||||||
|
|
||||||
|
for(;;) { |
||||||
|
int opt_idx, c; |
||||||
|
|
||||||
|
if((c = getopt_long(argc, argv, optc, options, &opt_idx)) == -1) break; |
||||||
|
|
||||||
|
switch(c) { |
||||||
|
case '?': |
||||||
|
usage(); |
||||||
|
break; |
||||||
|
case 'v': |
||||||
|
version(); |
||||||
|
break; |
||||||
|
case 'c': |
||||||
|
config_file = optarg; |
||||||
|
break; |
||||||
|
default: |
||||||
|
exit(1); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return {config_file}; |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
#ifndef CMD_LINE_ARGS_H |
||||||
|
#define CMD_LINE_ARGS_H |
||||||
|
#include <string> |
||||||
|
|
||||||
|
struct parsed_opts { |
||||||
|
std::string config_file; |
||||||
|
}; |
||||||
|
|
||||||
|
parsed_opts parse_opts(int argc, char** argv); |
||||||
|
#endif // CMD_LINE_ARGS_H
|
Loading…
Reference in new issue