summaryrefslogtreecommitdiff
path: root/project-base/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'project-base/Makefile')
-rw-r--r--project-base/Makefile133
1 files changed, 133 insertions, 0 deletions
diff --git a/project-base/Makefile b/project-base/Makefile
new file mode 100644
index 0000000..a5cb259
--- /dev/null
+++ b/project-base/Makefile
@@ -0,0 +1,133 @@
+MAKEFLAGS += -s
+MAKEFLAGS += --always-make
+
+main_file = src/entry.c
+output_file = libprojectbase
+flags = -m64 -c -Wall -Wno-maybe-uninitialized -DMODE_DEBUG -g
+release_flags = -m64 -c -Wall -O3
+
+gcc_install_dir := $(shell which "gcc")
+gcc_install_dir := $(subst gcc,,$(gcc_install_dir))
+
+ifeq ($(OS), Windows_NT)
+ install_dir = $(gcc_install_dir)../x86_64-w64-mingw32/
+ permissions =
+ libs = -lSDL2 -lSDL2_mixer
+
+ # Commands
+ install_deps_command = empty
+ install_lib_command = install_windows
+ create_examples_command = examples_windows
+ create_tests_command = tests_windows
+ generate_docs_command = docs_windows
+else
+ install_dir = /usr/
+ permissions = sudo
+ libs = -lX11 -lm -ldl -lSDL2 -lSDL2_mixer
+ # -Wl,-Bstatic -ldl -Wl,-Bdynamic
+
+ # Commands
+ install_deps_command = install_deps
+ install_lib_command = install_linux
+ create_examples_command = examples_linux
+ create_tests_command = tests_linux
+ generate_docs_command = docs_linux
+endif
+
+include_dir = $(install_dir)include/projectbase
+lib_dir = $(install_dir)lib/$(output_file)
+
+
+all:
+ make $(install_deps_command)
+ make build
+ make examples
+
+empty:
+ @$(NOECHO) $(NOOP)
+
+# Install deps (Linux)
+install_deps:
+ sudo apt-get --yes --force-yes install freeglut3-dev
+ sudo apt-get --yes --force-yes install binutils-gold
+ sudo apt-get --yes --force-yes install g++
+ sudo apt-get --yes --force-yes install mesa-common-dev
+ sudo apt-get --yes --force-yes install build-essential
+ sudo apt-get --yes --force-yes install libglew1.5-dev
+ sudo apt-get --yes --force-yes install libglm-dev
+ sudo apt-get --yes --force-yes install mesa-utils
+ sudo apt-get --yes --force-yes install libglu1-mesa-dev
+ sudo apt-get --yes --force-yes install libgl1-mesa-dev
+ sudo apt-get --yes --force-yes install libxrandr-dev
+ sudo apt-get --yes --force-yes install libsdl2-dev
+ sudo apt-get --yes --force-yes install libsdl2-mixer-dev
+
+# Build (Windows + Linux)
+build:
+ $(permissions) rm -rf "build/"
+ $(permissions) mkdir -p "build/"
+ $(permissions) rm -rf "$(include_dir)"
+ $(permissions) mkdir -p "$(include_dir)"
+
+ $(permissions) gcc $(flags) $(main_file) -o build/$(output_file)-debug.o $(libs)
+ #$(permissions) gcc $(release_flags) $(main_file) -o build/$(output_file).o $(libs)
+
+ $(permissions) ar rcs build/$(output_file)-debug.a build/$(output_file)-debug.o
+ #$(permissions) ar rcs build/$(output_file).a build/$(output_file).o
+
+ make $(install_lib_command)
+
+install_windows:
+ $(permissions) cp -a "src/." "$(include_dir)" 2>/dev/null || :
+ $(permissions) cp "build/$(output_file).a" "$(lib_dir).a" 2>/dev/null || :
+ $(permissions) cp "build/$(output_file)-debug.a" "$(lib_dir)-debug.a" 2>/dev/null || :
+
+ # github action shite
+ $(permissions) mkdir -p "C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/x86_64-w64-mingw32/include/projectbase" 2>/dev/null || :
+ $(permissions) cp -a "src/." "C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/x86_64-w64-mingw32/include/projectbase" 2>/dev/null || :
+ $(permissions) cp "build/$(output_file).a" "C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/x86_64-w64-mingw32/lib/$(output_file).a" 2>/dev/null || :
+ $(permissions) cp "build/$(output_file)-debug.a" "C:/ProgramData/Chocolatey/lib/mingw/tools/install/mingw64/x86_64-w64-mingw32/lib/$(output_file)-debug.a" 2>/dev/null || :
+
+install_linux:
+ $(permissions) cp -a "src/." "$(include_dir)" 2>/dev/null || :
+ $(permissions) cp "build/$(output_file).a" "$(lib_dir).a" 2>/dev/null || :
+ $(permissions) cp "build/$(output_file)-debug.a" "$(lib_dir)-debug.a" 2>/dev/null || :
+
+## Tests (Windows + Linux)
+tests:
+ make build
+ # we use assets from examples in tests
+ make examples
+ make $(create_tests_command)
+
+tests_windows:
+ gcc -m64 -g tests/main.c build/data.o -o build/tests.exe -lprojectbase $(libs)
+ ./build/tests
+
+tests_linux:
+ $(permissions) gcc -m64 -g tests/main.c build/data.o -o build/tests -lprojectbase $(libs)
+ $(permissions) sudo chmod +x build/tests
+ $(permissions) ./build/tests
+
+## Examples (Windows + Linux)
+examples:
+ $(permissions) cp "examples/logo_64.png" "build/logo_64.png"
+ $(permissions) cp "examples/logo_64.bmp" "build/logo_64.bmp"
+ $(permissions) cp "examples/mono.ttf" "build/mono.ttf"
+ $(permissions) ld -r -b binary -o build/data.o examples/en.mo examples/logo_64.png examples/logo_64.bmp examples/mono.ttf
+ make $(create_examples_command)
+
+examples_windows:
+ $(permissions) gcc -m64 -g -DMODE_DEBUG examples/example_window.c build/data.o -o build/example_window.exe -lprojectbase-debug $(libs)
+
+examples_linux:
+ $(permissions) gcc -m64 -g -DMODE_DEBUG examples/example_window.c build/data.o -o build/example_window -lprojectbase-debug $(libs)
+ $(permissions) chmod +x build/example_window
+
+docs:
+ $(permissions) gcc -m64 -g -DMODE_DEBUG docs/gen_docs.c -o build/gen_docs.exe -lprojectbase $(libs)
+ $(permissions) ./build/gen_docs
+ $(permissions) pandoc --pdf-engine wkhtmltopdf -V margin-top=14 -V margin-left=9 -V margin-right=9 -V margin-bottom=14 -V papersize=letter .\build\docs_title.html .\build\docs.html -o .\build\docs_title.pdf
+
+cloc:
+ cloc-1.88.exe --exclude-dir=external src/ docs/ examples/ \ No newline at end of file