# Makefile to build x48ng without autotools # # The cc-option function and the C{,PP}FLAGS logic were copied from the # fsverity-utils project. # https://git.kernel.org/pub/scm/fs/fsverity/fsverity-utils.git/ # The governing license can be found in the LICENSE file or at # https://opensource.org/license/MIT. TARGETS = libx48ng.a PREFIX = /usr DOCDIR = $(PREFIX)/doc/x48ng MANDIR = $(PREFIX)/man CFLAGS ?= -g -O2 FULL_WARNINGS = no LUA_VERSION ?= lua PKG_CONFIG ?= pkg-config VERSION_MAJOR = 0 VERSION_MINOR = 41 PATCHLEVEL = 0 DOTOS = src/emu_serial.o \ src/emu_emulate.o \ src/emu_init.o \ src/emu_keyboard.o \ src/emu_memory.o \ src/emu_register.o \ src/emu_timer.o \ src/debugger.o \ src/romio.o \ MAKEFLAGS +=-j$(NUM_CORES) -l$(NUM_CORES) cc-option = $(shell if $(CC) $(1) -c -x c /dev/null -o /dev/null > /dev/null 2>&1; \ then echo $(1); fi) ifeq ($(FULL_WARNINGS), no) EXTRA_WARNING_FLAGS := -Wno-unused-function \ -Wno-redundant-decls \ $(call cc-option,-Wno-maybe-uninitialized) \ $(call cc-option,-Wno-discarded-qualifiers) \ $(call cc-option,-Wno-uninitialized) \ $(call cc-option,-Wno-ignored-qualifiers) endif ifeq ($(FULL_WARNINGS), yes) EXTRA_WARNING_FLAGS := -Wunused-function \ -Wredundant-decls \ -fsanitize-trap \ $(call cc-option,-Wunused-variable) endif override CFLAGS := -std=c11 \ -Wall -Wextra -Wpedantic \ -Wformat=2 -Wshadow \ -Wwrite-strings -Wstrict-prototypes -Wold-style-definition \ -Wnested-externs -Wmissing-include-dirs \ -Wdouble-promotion \ -Wno-sign-conversion \ -Wno-unused-variable \ -Wno-unused-parameter \ -Wno-conversion \ -Wno-format-nonliteral \ $(call cc-option,-Wjump-misses-init) \ $(call cc-option,-Wlogical-op) \ $(call cc-option,-Wno-unknown-warning-option) \ $(EXTRA_WARNING_FLAGS) \ $(CFLAGS) override CPPFLAGS := -I./src/ -D_GNU_SOURCE=1 \ -DVERSION_MAJOR=$(VERSION_MAJOR) \ -DVERSION_MINOR=$(VERSION_MINOR) \ -DPATCHLEVEL=$(PATCHLEVEL) \ $(CPPFLAGS) LIBS = -lm # ### lua # override CFLAGS += $(shell "$(PKG_CONFIG)" --cflags $(LUA_VERSION)) # LIBS += $(shell "$(PKG_CONFIG)" --libs $(LUA_VERSION)) ### debugger override CFLAGS += $(shell "$(PKG_CONFIG)" --cflags readline) LIBS += $(shell "$(PKG_CONFIG)" --libs readline) .PHONY: all clean clean-all pretty-code install mrproper all: $(TARGETS) # Binaries libx48ng.a: $(DOTOS) ar rcs $@ $^ # Cleaning clean: rm -f src/*.o mrproper: clean rm -f $(TARGETS) # make -C dist/ROMs mrproper clean-all: mrproper # Formatting pretty-code: clang-format -i src/*.c src/*.h src/legacy_tools/*.c # Installing # get-roms: # make -C dist/ROMs # dist/config.lua: dist/x48ng # $^ --print-config > $@ # install: all dist/config.lua # install -m 755 -d -- $(DESTDIR)$(PREFIX)/bin # install -c -m 755 dist/x48ng $(DESTDIR)$(PREFIX)/bin/x48ng # install -m 755 -d -- $(DESTDIR)$(PREFIX)/share/x48ng # install -c -m 644 dist/hplogo.png $(DESTDIR)$(PREFIX)/share/x48ng/hplogo.png # cp -R dist/ROMs/ $(DESTDIR)$(PREFIX)/share/x48ng/ # install -c -m 755 dist/setup-x48ng-home.sh $(DESTDIR)$(PREFIX)/share/x48ng/setup-x48ng-home.sh # chmod 755 $(DESTDIR)$(PREFIX)/share/x48ng/setup-x48ng-home.sh # install -m 755 -d -- $(DESTDIR)$(PREFIX)/libexec # install -c -m 755 dist/x48ng-dump2rom $(DESTDIR)$(PREFIX)/libexec/x48ng-dump2rom # install -c -m 755 dist/x48ng-checkrom $(DESTDIR)$(PREFIX)/libexec/x48ng-checkrom # install -m 755 -d -- $(DESTDIR)$(MANDIR)/man1 # sed "s|@VERSION@|$(VERSION_MAJOR).$(VERSION_MINOR).$(PATCHLEVEL)|g" dist/x48ng.man.1 > $(DESTDIR)$(MANDIR)/man1/x48ng.1 # install -m 755 -d -- $(DESTDIR)$(DOCDIR) # cp -R AUTHORS LICENSE README* doc* romdump/ $(DESTDIR)$(DOCDIR) # install -c -m 644 dist/config.lua $(DESTDIR)$(DOCDIR)/config.lua # install -m 755 -d -- $(DESTDIR)$(PREFIX)/share/applications # sed "s|@PREFIX@|$(PREFIX)|g" dist/x48ng.desktop > $(DESTDIR)$(PREFIX)/share/applications/x48ng.desktop