diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..b57b17a --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,64 @@ +name: Build + +on: + push: + branches: + - "*" + pull_request: + branches: + - "*" + types: [opened, synchronize, reopened] +jobs: + build-lin: + name: Build Linux + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + configuration: + - Debug + - Release + arch: + - x86 + - x64 + include: + - configuration: Debug + config: debug + - configuration: Release + config: release + steps: + - name: Check out files + uses: actions/checkout@v3 + with: + submodules: true + fetch-depth: 0 + # NOTE - If LFS ever starts getting used during builds, switch this to true! + lfs: false + + - name: Install dependencies (x64) + if: matrix.arch == 'x64' + run: | + sudo apt-get update + sudo apt-get -y install libcurl4-gnutls-dev + - name: Install dependencies (x86) + if: matrix.arch == 'x86' + run: | + sudo dpkg --add-architecture i386 + sudo apt-get update + sudo apt-get -y install gcc-multilib g++-multilib libcurl4-gnutls-dev:i386 + - name: Generate project files + run: ./generate.sh + + - name: Set up problem matching + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build ${{matrix.configuration}} ${{matrix.arch}} binaries + run: | + pushd build + make config=${{matrix.config}}_${{matrix.arch}} -j$(nproc) + - name: Upload ${{matrix.configuration}} ${{matrix.arch}} binaries + uses: actions/upload-artifact@v3.1.0 + with: + name: Linux ${{matrix.configuration}} ${{matrix.arch}} binaries + path: | + build/bin/${{matrix.arch}}/${{matrix.configuration}}/MonitorRam diff --git a/.github/workflows/clang-format-check.yml b/.github/workflows/clang-format-check.yml new file mode 100644 index 0000000..22080ca --- /dev/null +++ b/.github/workflows/clang-format-check.yml @@ -0,0 +1,20 @@ +name: clang-format Check +on: + push: + branches: + - "*" + pull_request: + branches: + - "*" + types: [opened, synchronize, reopened] +jobs: + formatting-check: + name: Formatting Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Run clang-format style check for C/C++/Protobuf programs. + uses: jidicula/clang-format-action@v4.9.0 + with: + clang-format-version: '15' + check-path: 'src' diff --git a/generate.sh b/generate.sh new file mode 100755 index 0000000..ae910e0 --- /dev/null +++ b/generate.sh @@ -0,0 +1,2 @@ +#!/bin/bash +./tools/premake5-linux gmake2 diff --git a/makefile b/makefile deleted file mode 100644 index 60be301..0000000 --- a/makefile +++ /dev/null @@ -1,24 +0,0 @@ -TARGET = monitor -LIBS = -lm -CC = gcc -CFLAGS = -O2 -g -Wall -std=gnu11 - -.PHONY: clean all default - -default: $(TARGET) -all: default - -OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) -HEADERS = $(wildcard *.h) - -%.o: %.c $(HEADERS) - $(CC) $(CFLAGS) -c $< -o $@ - -.PRECIOUS: $(TARGET) $(OBJECTS) - -$(TARGET): $(OBJECTS) - $(CC) $(OBJECTS) -Wall $(LIBS) -o $@ - -clean: - -rm -f *.o - -rm -f $(TARGET) \ No newline at end of file diff --git a/premake5.lua b/premake5.lua new file mode 100644 index 0000000..1314300 --- /dev/null +++ b/premake5.lua @@ -0,0 +1,60 @@ +workspace "MonitorRam" +startproject "MonitorRam" +location "./build" +objdir "%{wks.location}/obj" +targetdir "%{wks.location}/bin/%{cfg.platform}/%{cfg.buildcfg}" + +configurations {"Debug", "Release"} + +platforms {"x86", "x64"} + +filter "platforms:x86" +architecture "x86" +filter {} + +filter "platforms:x64" +architecture "x86_64" +filter {} + +buildoptions {"-std=gnu11"} + +symbols "On" +staticruntime "On" +editandcontinue "Off" +warnings "Extra" +characterset "ASCII" + +if os.istarget("linux") then + buildoptions {"-pthread"} + linkoptions {"-pthread"} +end + +if os.getenv("CI") then + defines {"CI"} +end + +flags {"NoIncrementalLink", "NoMinimalRebuild", "MultiProcessorCompile", "No64BitChecks"} + +filter "configurations:Release" + optimize "Speed" + defines {"NDEBUG"} + flags {"FatalCompileWarnings"} +filter {} + +filter "configurations:Debug" + optimize "Debug" + defines {"DEBUG", "_DEBUG"} +filter {} + +project "MonitorRam" +kind "ConsoleApp" +language "C" + +targetname "MonitorRam" + +files {"./src/**.h", "./src/**.c"} + +includedirs {"./src", "%{prj.location}/src"} + +resincludedirs {"%{_MAIN_SCRIPT_DIR}/src"} + \ No newline at end of file diff --git a/common.c b/src/common.c similarity index 100% rename from common.c rename to src/common.c diff --git a/common.h b/src/common.h similarity index 68% rename from common.h rename to src/common.h index 807d226..fcaaa6a 100644 --- a/common.h +++ b/src/common.h @@ -3,6 +3,6 @@ #define BUFFER_SIZE 4096 -void get_time_stamp(char* buf); +extern void get_time_stamp(char* buf); #endif /* COMMON_H */ diff --git a/main.c b/src/main.c similarity index 90% rename from main.c rename to src/main.c index 0b0bf60..8b71d2a 100644 --- a/main.c +++ b/src/main.c @@ -7,7 +7,10 @@ volatile sig_atomic_t sigint_received = 0; -void sigint_handler(int a) { sigint_received = 1; } +void sigint_handler(int a) { + sigint_received = 1; + (void)a; +} int main(int argc, char* argv[]) { if (argc < 2) { diff --git a/monitor.c b/src/monitor.c similarity index 100% rename from monitor.c rename to src/monitor.c diff --git a/monitor.h b/src/monitor.h similarity index 51% rename from monitor.h rename to src/monitor.h index 298a64c..27e08f2 100644 --- a/monitor.h +++ b/src/monitor.h @@ -1,7 +1,7 @@ #ifndef MONITOR_H #define MONITOR_H -int setup(const char* pid); -int analyse(); +extern int setup(const char* pid); +extern int analyse(); #endif /* MONITOR_H */ diff --git a/utils.c b/src/utils.c similarity index 100% rename from utils.c rename to src/utils.c diff --git a/utils.h b/src/utils.h similarity index 58% rename from utils.h rename to src/utils.h index dfdd640..e99732a 100644 --- a/utils.h +++ b/src/utils.h @@ -1,6 +1,6 @@ #ifndef UTILS_H #define UTILS_H -char* va(const char* fmt, ...); +extern char* va(const char* fmt, ...); #endif /* UTILS_H */ diff --git a/tools/premake5-linux b/tools/premake5-linux new file mode 100755 index 0000000..bcb51ce Binary files /dev/null and b/tools/premake5-linux differ