diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2024-11-23 22:33:43 +0100 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2024-11-23 22:33:43 +0100 |
| commit | b1e857cf1471d1871a9396696b22fa531da98249 (patch) | |
| tree | 3923008a8653057698cb339faf6dcfa92e18364b /project-base/Makefile | |
| parent | 106bb7fcadf637cec883648916cc8d19529d6199 (diff) | |
add projbase to repo
Diffstat (limited to 'project-base/Makefile')
| -rw-r--r-- | project-base/Makefile | 133 |
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 |
