# Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # The package path prefix, if you want to install to another root, set DESTDIR to that root PREFIX ?= /usr # The library path excluding prefix LIB ?= /lib # The resource path excluding prefix DATA ?= /share # The library path including prefix LIBDIR ?= $(PREFIX)$(LIB) # The resource path including prefix DATADIR ?= $(PREFIX)$(DATA) # The generic documentation path including prefix DOCDIR ?= $(DATADIR)/doc # The info manual documentation path including prefix INFODIR ?= $(DATADIR)/info # The license base path including prefix LICENSEDIR ?= $(DATADIR)/licenses # The name of the package as it should be installed PKGNAME = libgammamm # The version of the library. LIB_MAJOR = 1 LIB_MINOR = 0 LIB_VERSION = $(LIB_MAJOR).$(LIB_MINOR) # The so in libgammamm.so as the library file is named on Linux ifeq ($(PLATFORM),w32) SO = dll else ifeq ($(PLATFORM),osx) SO = dylib else SO = so endif endif # Platform dependent flags ifeq ($(PLATFORM),w32) SHARED = -mdll LDSO = -Wl,-soname,libgammamm.$(SO).$(LIB_MAJOR) PIC = else ifeq ($(PLATFORM),osx) SHARED = -dynamiclib LDSO = PIC = -fPIC else SHARED = -shared LDSO = -Wl,-soname,libgammamm.$(SO).$(LIB_MAJOR) PIC = -fPIC endif endif # The C standard for C code compilation STD = c++11 # Optimisation settings for C code compilation OPTIMISE ?= -Og -g # Definitions for CPP, remove __GCC__ if you are not using g++ DEFS = __GCC__ # Warning flags, set to empty if you are not using GCC WARN = -Wall -Wextra -pedantic -Wdouble-promotion -Wformat=2 -Winit-self \ -Wmissing-include-dirs -Wtrampolines -Wfloat-equal -Wshadow \ -Wmissing-declarations -Wredundant-decls -Winline -Wno-variadic-macros \ -Weffc++ -Wc++11-compat -Wzero-as-null-pointer-constant -Wuseless-cast \ -Wsync-nand -Wunsafe-loop-optimizations -Wcast-align -Wstrict-overflow \ -Wundef -Wcast-qual -Wwrite-strings -Wlogical-op \ -Wpacked -Wvector-operation-performance -Wsuggest-attribute=const \ -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure \ -Wsuggest-attribute=format -Wnormalized=nfkc -Wconversion \ -fstrict-aliasing -fstrict-overflow -fipa-pure-const -ftree-vrp \ -fstack-usage -funsafe-loop-optimizations # ignored: -Waggregate-return # Flags to use when compiling CXX_FLAGS = $(foreach D,$(DEFS),-D$(D)) -std=$(STD) \ $(OPTIMISE) $(CXXFLAGS) $(PIC) $(CPPFLAGS) $(WARN) # Flags to use when linking LD_FLAGS = -lgamma -std=$(STD) $(OPTIMISE) $(LDFLAGS) $(WARN) .PHONY: all all: bin/libgammamm.so bin/test bin/libgammamm.so: obj/libgamma-error.o obj/libgamma-facade.o obj/libgamma-method.o @mkdir -p bin $(CXX) $(LD_FLAGS) $(SHARED) $(LDSO) -o $@ $^ bin/test: obj/test.o obj/libgamma-error.o obj/libgamma-facade.o obj/libgamma-method.o $(CXX) $(LD_FLAGS) -o $@ $^ obj/%.o: src/%.cc src/*.hh @mkdir -p obj $(CXX) $(CXX_FLAGS) -c -o $@ $< .PHONY: clean clean: -rm -r obj bin