From 50021f53757acace00b28d4dc04220a88b7b5cbd Mon Sep 17 00:00:00 2001 From: "Alexander W. Schultz" Date: Fri, 15 Nov 2024 07:54:41 -0500 Subject: [PATCH] Top level Makefile Upgraded The top level makefile now handles the building of nuklear.h, docs, and demos. Doing this, not only provides a more familar interface for C programmers, but allows the build system to become simplified. Using `make` can take advantage of multiple processes and threading. Next up in the line will be updating the workflow to take advantage of these properties. --- Makefile | 86 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 70 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 30da7f73b..5b345f7be 100644 --- a/Makefile +++ b/Makefile @@ -1,36 +1,90 @@ -docs_path:=./doc -doxyfile:=$(docs_path)/Doxyfile +###################################################################################### +## SETTINGS ## +###################################################################################### +## path stuff +DOCS_PATH:=./doc +DEMO_PATH=demo +SRC_PATH=src -.PHONY: usage +## Documents settings +DOXYFILE:=$(DOCS_PATH)/Doxyfile + + +## HEADER file packing settings +## note: source file paths are prefixed later, no need to add prefix here; just +## give it the name. +MACRO = NK +INTRO = HEADER.md +PUB = nuklear.h +OUTPUT = nuklear.h + +PRIV1 = nuklear_internal.h nuklear_math.c nuklear_util.c nuklear_color.c nuklear_utf8.c nuklear_buffer.c nuklear_string.c nuklear_draw.c nuklear_vertex.c + +EXTERN = stb_rect_pack.h stb_truetype.h + +PRIV2 = nuklear_font.c nuklear_input.c nuklear_style.c nuklear_context.c nuklear_pool.c nuklear_page_element.c nuklear_table.c nuklear_panel.c nuklear_window.c nuklear_popup.c nuklear_contextual.c nuklear_menu.c nuklear_layout.c nuklear_tree.c nuklear_group.c nuklear_list_view.c nuklear_widget.c nuklear_text.c nuklear_image.c nuklear_9slice.c nuklear_button.c nuklear_toggle.c nuklear_selectable.c nuklear_slider.c nuklear_knob.c nuklear_progress.c nuklear_scrollbar.c nuklear_text_editor.c nuklear_edit.c nuklear_property.c nuklear_chart.c nuklear_color_picker.c nuklear_combo.c nuklear_tooltip.c + +OUTRO = LICENSE CHANGELOG CREDITS + +## Demo settings +DEMO_LIST = $(shell find $(DEMO_PATH) -type f -name Makefile -printf "%h ") + +###################################################################################### +## RECIPES ## +###################################################################################### + + +.PHONY: usage all demos $(DEMO_LIST) usage: echo "make docs to create documentation" echo "make nuke to rebuild the single header nuklear.h from source" + echo "make demos to build all of the demos echo "make all to re-pack the header and create documentation" - echo "make install to "install" man files" +all: docs nuke demos +demos: $(DEMO_LIST) + + +######################################################################################## +## Nuklear.h -docs: $(docs_path)/html/index.html +nuke: $(addprefix $(SRC_PATH)/, $(SRC)) + python3 $(SRC_PATH)/build.py --macro $(MACRO) --intro $(addprefix $(SRC_PATH)/, $(INTRO)) --pub $(addprefix $(SRC_PATH)/, $(PUB)) --priv1 "$(addprefix $(SRC_PATH)/, $(PRIV1))" --extern "$(addprefix $(SRC_PATH)/, $(EXTERN))" --priv2 "$(addprefix $(SRC_PATH)/, $(PRIV2))" --outro "$(addprefix $(SRC_PATH)/, $(OUTRO))" > $(OUTPUT) -$(docs_path)/html/index.html: $(docs_path)/doxygen-awesome-css/doxygen-awesome.css $(doxyfile) - doxygen $(doxyfile) -$(doxyfile): + + + +######################################################################################## +## Docs + +docs: $(DOCS_PATH)/html/index.html + +$(DOCS_PATH)/html/index.html: $(DOCS_PATH)/doxygen-awesome-css/doxygen-awesome.css $(DOXYFILE) + doxygen $(DOXYFILE) + +$(DOXYFILE): doxygen -g $@ -$(docs_path)/doxygen-awesome-css/doxygen-awesome.css: - git clone https://github.com/jothepro/doxygen-awesome-css.git $(docs_path)/doxygen-awesome-css --branch v2.3.4 +$(DOCS_PATH)/doxygen-awesome-css/doxygen-awesome.css: + git clone https://github.com/jothepro/doxygen-awesome-css.git $(DOCS_PATH)/doxygen-awesome-css --branch v2.3.4 -nuke: - cd ./src && ./paq.sh -all: docs nuke -install: +######################################################################################## +## Demos + +$(DEMO_LIST): + $(MAKE) -C $@ + -clean: - rm -rf $(docs_path)/html +######################################################################################## +## Utility helpers + +clean: + rm -rf $(DOCS_PATH)/html $(OUTPUT)