ifeq ($(BUILDTYPE),) buildtype_Darwin = osx buildtype_Haiku = haiku BUILDTYPE := $(buildtype_$(shell uname -s )) ifeq ($(BUILDTYPE),) BUILDTYPE := unix endif endif export BUILDTYPE OPTFLAGS = -g -O0 ifeq ($(BUILDTYPE),windows) MINGW = x86_64-w64-mingw32- CC = $(MINGW)gcc CXX = $(MINGW)g++ CFLAGS += \ $(OPTFLAGS) \ -ffunction-sections \ -fdata-sections \ -Wno-attributes \ -Wa,-mbig-obj \ -static CXXFLAGS += \ $(OPTFLAGS) \ -std=c++23 \ -Wno-deprecated-enum-float-conversion \ -Wno-deprecated-enum-enum-conversion \ -Wno-attributes \ -Wa,-mbig-obj \ -static LDFLAGS += -Wl,--gc-sections -static AR = $(MINGW)gcc-ar PKG_CONFIG = $(MINGW)pkg-config --static WINDRES = $(MINGW)windres WX_CONFIG = /usr/i686-w64-mingw32/sys-root/mingw/bin/wx-config-3.0 --static=yes NINJA = /bin/ninja PROTOC = /mingw64/bin/protoc PROTOC_SEPARATOR = ; EXT = .exe AB_SANDBOX = no else CC = clang CXX = clang++ CFLAGS = \ $(OPTFLAGS) \ -I/opt/homebrew/include -I/usr/local/include \ -Wno-unknown-warning-option CXXFLAGS = \ $(OPTFLAGS) \ -std=c++23 \ -fexperimental-library \ -I/opt/homebrew/include -I/usr/local/include \ -Wformat \ -Wformat-security \ -Wno-deprecated-enum-float-conversion \ -Wno-deprecated-enum-enum-conversion LDFLAGS = AR = ar PKG_CONFIG = pkg-config ifeq ($(BUILDTYPE),osx) else LDFLAGS += -pthread -Wl,--no-as-needed endif endif HOSTCC = gcc HOSTCXX = g++ -std=c++20 HOSTCFLAGS = -g -O3 HOSTLDFLAGS = REALOBJ = .obj OBJ = $(REALOBJ)/$(BUILDTYPE) DESTDIR ?= PREFIX ?= /usr/local BINDIR ?= $(PREFIX)/bin # Special Windows settings. #ifeq ($(OS), Windows_NT) # EXT ?= .exe # MINGWBIN = /mingw32/bin # CCPREFIX = $(MINGWBIN)/ # PKG_CONFIG = $(MINGWBIN)/pkg-config # WX_CONFIG = /usr/bin/sh $(MINGWBIN)/wx-config --static=yes # PROTOC = $(MINGWBIN)/protoc # WINDRES = windres # LDFLAGS += \ # -static # CXXFLAGS += \ # -fext-numeric-literals \ # -Wno-deprecated-enum-float-conversion \ # -Wno-deprecated-enum-enum-conversion # # # Required to get the gcc run - time libraries on the path. # export PATH := $(PATH):$(MINGWBIN) #endif # Special OSX settings. ifeq ($(shell uname),Darwin) LDFLAGS += \ -framework IOKit \ -framework AppKit \ -framework UniformTypeIdentifiers \ -framework UserNotifications endif .PHONY: all all: +all README.md .PHONY: binaries tests binaries: all tests: all README.md: $(OBJ)/scripts/+mkdocindex/mkdocindex$(EXT) @echo $(PROGRESSINFO)MKDOC $@ @csplit -s -f$(OBJ)/README. README.md '//' '%%' @(cat $(OBJ)/README.00 && $< && cat $(OBJ)/README.01) > README.md .PHONY: tests clean:: $(hide) rm -rf $(REALOBJ) include build/ab.mk DOCKERFILES = \ debian11 \ debian12 \ fedora40 \ fedora41 \ manjaro docker-%: tests/docker/Dockerfile.% docker build -t $* -f $< . .PHONY: dockertests dockertests: $(foreach f,$(DOCKERFILES), docker-$(strip $f) .WAIT)