[v0.01] Initialize repository reusing stuff from cpufetch
This commit is contained in:
36
.github/workflows/lockdown.yml
vendored
Normal file
36
.github/workflows/lockdown.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
name: 'Disable PR in gpufetch'
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: opened
|
||||
pull_request_target:
|
||||
types: opened
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
action:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/repo-lockdown@v2
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
exclude-issue-created-before: ''
|
||||
exclude-issue-labels: ''
|
||||
issue-labels: ''
|
||||
issue-comment: ''
|
||||
skip-closed-issue-comment: false
|
||||
close-issue: false
|
||||
lock-issue: true
|
||||
issue-lock-reason: ''
|
||||
exclude-pr-created-before: ''
|
||||
exclude-pr-labels: ''
|
||||
pr-labels: ''
|
||||
pr-comment: 'gpufetch does not accept pull requests, see [the contributing guidelines](https://github.com/Dr-Noob/gpufetch/blob/master/CONTRIBUTING.md) for details'
|
||||
skip-closed-pr-comment: false
|
||||
close-pr: true
|
||||
lock-pr: false
|
||||
pr-lock-reason: ''
|
||||
process-only: 'prs'
|
||||
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
gpufetch
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 Dr-Noob
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
46
Makefile
Normal file
46
Makefile
Normal file
@@ -0,0 +1,46 @@
|
||||
CXX ?= g++
|
||||
|
||||
CXXFLAGS+=-Wall -Wextra -pedantic -fstack-protector-all -pedantic
|
||||
SANITY_FLAGS=-Wfloat-equal -Wshadow -Wpointer-arith
|
||||
|
||||
PREFIX ?= /usr
|
||||
|
||||
SRC_COMMON=src/common/
|
||||
|
||||
COMMON_SRC = $(SRC_COMMON)main.c $(SRC_COMMON)args.c $(SRC_COMMON)global.c
|
||||
COMMON_HDR = $(SRC_COMMON)args.h $(SRC_COMMON)global.h
|
||||
|
||||
SOURCE += $(COMMON_SRC)
|
||||
HEADERS += $(COMMON_HDR)
|
||||
OUTPUT=gpufetch
|
||||
|
||||
all: CXXFLAGS += -O3
|
||||
all: $(OUTPUT)
|
||||
|
||||
debug: CXXFLAGS += -g -O0
|
||||
debug: $(OUTPUT)
|
||||
|
||||
static: CXXFLAGS += -static -O3
|
||||
static: $(OUTPUT)
|
||||
|
||||
strict: CXXFLAGS += -O3 -Werror -fsanitize=undefined -D_FORTIFY_SOURCE=2
|
||||
strict: $(OUTPUT)
|
||||
|
||||
$(OUTPUT): Makefile $(SOURCE) $(HEADERS)
|
||||
$(CXX) $(CXXFLAGS) $(SANITY_FLAGS) $(SOURCE) -o $(OUTPUT)
|
||||
|
||||
run: $(OUTPUT)
|
||||
./$(OUTPUT)
|
||||
|
||||
clean:
|
||||
@rm -f $(OUTPUT)
|
||||
|
||||
install: $(OUTPUT)
|
||||
install -Dm755 "gpufetch" "$(DESTDIR)$(PREFIX)/bin/gpufetch"
|
||||
install -Dm644 "LICENSE" "$(DESTDIR)$(PREFIX)/share/licenses/gpufetch-git/LICENSE"
|
||||
install -Dm644 "gpufetch.1" "$(DESTDIR)$(PREFIX)/share/man/man1/gpufetch.1.gz"
|
||||
|
||||
uninstall:
|
||||
rm -f "$(DESTDIR)$(PREFIX)/bin/gpufetch"
|
||||
rm -f "$(DESTDIR)$(PREFIX)/share/licenses/gpufetch-git/LICENSE"
|
||||
rm -f "$(DESTDIR)$(PREFIX)/share/man/man1/gpufetch.1.gz"
|
||||
99
src/common/args.c
Normal file
99
src/common/args.c
Normal file
@@ -0,0 +1,99 @@
|
||||
#include <getopt.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "args.h"
|
||||
#include "global.h"
|
||||
|
||||
struct args_struct {
|
||||
bool help_flag;
|
||||
bool version_flag;
|
||||
};
|
||||
|
||||
const char args_chr[] = {
|
||||
/* [ARG_CHAR_HELP] = */ 'h',
|
||||
/* [ARG_CHAR_VERSION] = */ 'V',
|
||||
};
|
||||
|
||||
const char *args_str[] = {
|
||||
/* [ARG_CHAR_HELP] = */ "help",
|
||||
/* [ARG_CHAR_VERSION] = */ "version",
|
||||
};
|
||||
|
||||
static struct args_struct args;
|
||||
|
||||
bool show_help() {
|
||||
return args.help_flag;
|
||||
}
|
||||
|
||||
bool show_version() {
|
||||
return args.version_flag;
|
||||
}
|
||||
|
||||
int max_arg_str_length() {
|
||||
int max_len = -1;
|
||||
int len = sizeof(args_str) / sizeof(args_str[0]);
|
||||
for(int i=0; i < len; i++) {
|
||||
max_len = max(max_len, (int) strlen(args_str[i]));
|
||||
}
|
||||
return max_len;
|
||||
}
|
||||
|
||||
char* build_short_options() {
|
||||
const char *c = args_chr;
|
||||
int len = sizeof(args_chr) / sizeof(args_chr[0]);
|
||||
char* str = (char *) emalloc(sizeof(char) * (len*2 + 1));
|
||||
memset(str, 0, sizeof(char) * (len*2 + 1));
|
||||
|
||||
sprintf(str, "%c%c",
|
||||
c[ARG_HELP], c[ARG_VERSION]);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
bool parse_args(int argc, char* argv[]) {
|
||||
int opt;
|
||||
int option_index = 0;
|
||||
opterr = 0;
|
||||
|
||||
args.version_flag = false;
|
||||
args.help_flag = false;
|
||||
|
||||
const struct option long_options[] = {
|
||||
{args_str[ARG_HELP], no_argument, 0, args_chr[ARG_HELP] },
|
||||
{args_str[ARG_VERSION], no_argument, 0, args_chr[ARG_VERSION] },
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
char* short_options = build_short_options();
|
||||
opt = getopt_long(argc, argv, short_options, long_options, &option_index);
|
||||
|
||||
while (!args.help_flag && !args.version_flag && opt != -1) {
|
||||
if(opt == args_chr[ARG_HELP]) {
|
||||
args.help_flag = true;
|
||||
}
|
||||
else if(opt == args_chr[ARG_VERSION]) {
|
||||
args.version_flag = true;
|
||||
}
|
||||
else {
|
||||
printWarn("Invalid options");
|
||||
args.help_flag = true;
|
||||
}
|
||||
|
||||
option_index = 0;
|
||||
opt = getopt_long(argc, argv, short_options, long_options, &option_index);
|
||||
}
|
||||
|
||||
if(optind < argc) {
|
||||
printWarn("Invalid options");
|
||||
args.help_flag = true;
|
||||
}
|
||||
|
||||
if((args.help_flag + args.version_flag) > 1) {
|
||||
printWarn("You should specify just one option");
|
||||
args.help_flag = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
19
src/common/args.h
Normal file
19
src/common/args.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#ifndef __ARGS__
|
||||
#define __ARGS__
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
enum {
|
||||
ARG_HELP,
|
||||
ARG_VERSION
|
||||
};
|
||||
|
||||
extern const char args_chr[];
|
||||
extern const char *args_str[];
|
||||
|
||||
int max_arg_str_length();
|
||||
bool parse_args(int argc, char* argv[]);
|
||||
bool show_help();
|
||||
bool show_version();
|
||||
|
||||
#endif
|
||||
95
src/common/global.c
Normal file
95
src/common/global.c
Normal file
@@ -0,0 +1,95 @@
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#define RED ""
|
||||
#define BOLD ""
|
||||
#define RESET ""
|
||||
|
||||
#else
|
||||
|
||||
#define RED "\x1b[31;1m"
|
||||
#define BOLD "\x1b[;1m"
|
||||
#define RESET "\x1b[0m"
|
||||
|
||||
#endif
|
||||
|
||||
enum {
|
||||
LOG_LEVEL_NORMAL,
|
||||
LOG_LEVEL_VERBOSE
|
||||
};
|
||||
|
||||
int LOG_LEVEL;
|
||||
|
||||
void printWarn(const char *fmt, ...) {
|
||||
if(LOG_LEVEL == LOG_LEVEL_VERBOSE) {
|
||||
int buffer_size = 4096;
|
||||
char* buffer = new char[buffer_size];
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
vsnprintf(buffer,buffer_size, fmt, args);
|
||||
va_end(args);
|
||||
fprintf(stderr, BOLD "[WARNING]: " RESET "%s\n",buffer);
|
||||
delete [] buffer;
|
||||
}
|
||||
}
|
||||
|
||||
void printErr(const char *fmt, ...) {
|
||||
int buffer_size = 4096;
|
||||
char* buffer = new char[buffer_size];
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
vsnprintf(buffer,buffer_size, fmt, args);
|
||||
va_end(args);
|
||||
fprintf(stderr, RED "[ERROR]: " RESET "%s\n",buffer);
|
||||
delete [] buffer;
|
||||
}
|
||||
|
||||
void printBug(const char *fmt, ...) {
|
||||
int buffer_size = 4096;
|
||||
char* buffer = new char[buffer_size];
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
vsnprintf(buffer,buffer_size, fmt, args);
|
||||
va_end(args);
|
||||
fprintf(stderr, RED "[ERROR]: " RESET "%s\n",buffer);
|
||||
fprintf(stderr,"Please, create a new issue with this error message in https://github.com/Dr-Noob/gpufetch/issues\n");
|
||||
delete [] buffer;
|
||||
}
|
||||
|
||||
void set_log_level(bool verbose) {
|
||||
if(verbose) LOG_LEVEL = LOG_LEVEL_VERBOSE;
|
||||
else LOG_LEVEL = LOG_LEVEL_NORMAL;
|
||||
}
|
||||
|
||||
int max(int a, int b) {
|
||||
return a > b ? a : b;
|
||||
}
|
||||
|
||||
void* emalloc(size_t size) {
|
||||
void* ptr = malloc(size);
|
||||
|
||||
if(ptr == NULL) {
|
||||
printErr("malloc failed: %s", strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void* ecalloc(size_t nmemb, size_t size) {
|
||||
void* ptr = calloc(nmemb, size);
|
||||
|
||||
if(ptr == NULL) {
|
||||
printErr("calloc failed: %s", strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
return ptr;
|
||||
}
|
||||
17
src/common/global.h
Normal file
17
src/common/global.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef __GLOBAL__
|
||||
#define __GLOBAL__
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#define STRING_UNKNOWN "Unknown"
|
||||
|
||||
void set_log_level(bool verbose);
|
||||
void printWarn(const char *fmt, ...);
|
||||
void printErr(const char *fmt, ...);
|
||||
void printBug(const char *fmt, ...);
|
||||
int max(int a, int b);
|
||||
void* emalloc(size_t size);
|
||||
void* ecalloc(size_t nmemb, size_t size);
|
||||
|
||||
#endif
|
||||
51
src/common/main.c
Normal file
51
src/common/main.c
Normal file
@@ -0,0 +1,51 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "args.h"
|
||||
#include "global.h"
|
||||
|
||||
static const char* VERSION = "0.01";
|
||||
|
||||
void print_help(char *argv[]) {
|
||||
const char **t = args_str;
|
||||
const char *c = args_chr;
|
||||
int max_len = max_arg_str_length();
|
||||
|
||||
printf("Usage: %s [OPTION]...\n", argv[0]);
|
||||
printf("Simple yet fancy GPU architecture fetching tool\n\n");
|
||||
|
||||
printf("Options: \n");
|
||||
printf(" -%c, --%s %*s Prints this help and exit\n", c[ARG_HELP], t[ARG_HELP], (int) (max_len-strlen(t[ARG_HELP])), "");
|
||||
printf(" -%c, --%s %*s Prints cpufetch version and exit\n", c[ARG_VERSION], t[ARG_VERSION], (int) (max_len-strlen(t[ARG_VERSION])), "");
|
||||
|
||||
printf("\nBUGS: \n");
|
||||
printf(" Report bugs to https://github.com/Dr-Noob/gpufetch/issues\n");
|
||||
|
||||
printf("\nNOTE: \n");
|
||||
printf(" Peak performance information is NOT accurate. gpufetch computes peak performance using the max\n");
|
||||
printf(" frequency. However, to properly compute peak performance, you need to know the frequency of the\n");
|
||||
printf(" GPU running real code.\n");
|
||||
printf(" For peak performance measurement see: https://github.com/Dr-Noob/peakperf\n");
|
||||
}
|
||||
|
||||
void print_version() {
|
||||
printf("gpufetch v%s\n", VERSION);
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
if(!parse_args(argc,argv))
|
||||
return EXIT_FAILURE;
|
||||
|
||||
if(show_help()) {
|
||||
print_help(argv);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
if(show_version()) {
|
||||
print_version();
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
Reference in New Issue
Block a user