1################################################################################################### 2 3.PHONY: r d p sh cr cd cp csh lr ld lp lsh config all install install-headers install-lib\ 4 install-bin clean distclean 5all: r lr lsh 6 7## Load Previous Configuration #################################################################### 8 9-include config.mk 10 11## Configurable options ########################################################################### 12 13# Directory to store object files, libraries, executables, and dependencies: 14BUILD_DIR ?= build 15 16# Include debug-symbols in release builds 17MINISAT_RELSYM ?= -g 18 19# Sets of compile flags for different build types 20MINISAT_REL ?= -O3 -D NDEBUG 21MINISAT_DEB ?= -O0 -D DEBUG 22MINISAT_PRF ?= -O3 -D NDEBUG 23MINISAT_FPIC ?= -fpic 24 25# GNU Standard Install Prefix 26prefix ?= /usr/local 27 28## Write Configuration ########################################################################### 29 30config: 31 @( echo 'BUILD_DIR?=$(BUILD_DIR)' ; \ 32 echo 'MINISAT_RELSYM?=$(MINISAT_RELSYM)' ; \ 33 echo 'MINISAT_REL?=$(MINISAT_REL)' ; \ 34 echo 'MINISAT_DEB?=$(MINISAT_DEB)' ; \ 35 echo 'MINISAT_PRF?=$(MINISAT_PRF)' ; \ 36 echo 'MINISAT_FPIC?=$(MINISAT_FPIC)' ; \ 37 echo 'prefix?=$(prefix)' ) > config.mk 38 39## Configurable options end ####################################################################### 40 41INSTALL ?= install 42 43# GNU Standard Install Variables 44exec_prefix ?= $(prefix) 45includedir ?= $(prefix)/include 46bindir ?= $(exec_prefix)/bin 47libdir ?= $(exec_prefix)/lib 48datarootdir ?= $(prefix)/share 49mandir ?= $(datarootdir)/man 50 51# Target file names 52MINISAT = minisat# Name of MiniSat main executable. 53MINISAT_CORE = minisat_core# Name of simplified MiniSat executable (only core solver support). 54MINISAT_SLIB = lib$(MINISAT).a# Name of MiniSat static library. 55MINISAT_DLIB = lib$(MINISAT).so# Name of MiniSat shared library. 56 57# Shared Library Version 58SOMAJOR=2 59SOMINOR=1 60SORELEASE?=.0# Declare empty to leave out from library file name. 61 62MINISAT_CXXFLAGS = -I. -D __STDC_LIMIT_MACROS -D __STDC_FORMAT_MACROS -Wall -Wno-parentheses -Wextra 63MINISAT_LDFLAGS = -Wall -lz 64 65ECHO=@echo 66ifeq ($(VERB),) 67VERB=@ 68else 69VERB= 70endif 71 72SRCS = $(wildcard minisat/core/*.cc) $(wildcard minisat/simp/*.cc) $(wildcard minisat/utils/*.cc) 73HDRS = $(wildcard minisat/mtl/*.h) $(wildcard minisat/core/*.h) $(wildcard minisat/simp/*.h) $(wildcard minisat/utils/*.h) 74OBJS = $(filter-out %Main.o, $(SRCS:.cc=.o)) 75 76r: $(BUILD_DIR)/release/bin/$(MINISAT) 77d: $(BUILD_DIR)/debug/bin/$(MINISAT) 78p: $(BUILD_DIR)/profile/bin/$(MINISAT) 79sh: $(BUILD_DIR)/dynamic/bin/$(MINISAT) 80 81cr: $(BUILD_DIR)/release/bin/$(MINISAT_CORE) 82cd: $(BUILD_DIR)/debug/bin/$(MINISAT_CORE) 83cp: $(BUILD_DIR)/profile/bin/$(MINISAT_CORE) 84csh: $(BUILD_DIR)/dynamic/bin/$(MINISAT_CORE) 85 86lr: $(BUILD_DIR)/release/lib/$(MINISAT_SLIB) 87ld: $(BUILD_DIR)/debug/lib/$(MINISAT_SLIB) 88lp: $(BUILD_DIR)/profile/lib/$(MINISAT_SLIB) 89lsh: $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR).$(SOMINOR)$(SORELEASE) 90 91## Build-type Compile-flags: 92$(BUILD_DIR)/release/%.o: MINISAT_CXXFLAGS +=$(MINISAT_REL) $(MINISAT_RELSYM) 93$(BUILD_DIR)/debug/%.o: MINISAT_CXXFLAGS +=$(MINISAT_DEB) -g 94$(BUILD_DIR)/profile/%.o: MINISAT_CXXFLAGS +=$(MINISAT_PRF) -pg 95$(BUILD_DIR)/dynamic/%.o: MINISAT_CXXFLAGS +=$(MINISAT_REL) $(MINISAT_FPIC) 96 97## Build-type Link-flags: 98$(BUILD_DIR)/profile/bin/$(MINISAT): MINISAT_LDFLAGS += -pg 99$(BUILD_DIR)/release/bin/$(MINISAT): MINISAT_LDFLAGS += --static $(MINISAT_RELSYM) 100$(BUILD_DIR)/profile/bin/$(MINISAT_CORE): MINISAT_LDFLAGS += -pg 101$(BUILD_DIR)/release/bin/$(MINISAT_CORE): MINISAT_LDFLAGS += --static $(MINISAT_RELSYM) 102 103## Executable dependencies 104$(BUILD_DIR)/release/bin/$(MINISAT): $(BUILD_DIR)/release/minisat/simp/Main.o $(BUILD_DIR)/release/lib/$(MINISAT_SLIB) 105$(BUILD_DIR)/debug/bin/$(MINISAT): $(BUILD_DIR)/debug/minisat/simp/Main.o $(BUILD_DIR)/debug/lib/$(MINISAT_SLIB) 106$(BUILD_DIR)/profile/bin/$(MINISAT): $(BUILD_DIR)/profile/minisat/simp/Main.o $(BUILD_DIR)/profile/lib/$(MINISAT_SLIB) 107# need the main-file be compiled with fpic? 108$(BUILD_DIR)/dynamic/bin/$(MINISAT): $(BUILD_DIR)/dynamic/minisat/simp/Main.o $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB) 109 110## Executable dependencies (core-version) 111$(BUILD_DIR)/release/bin/$(MINISAT_CORE): $(BUILD_DIR)/release/minisat/core/Main.o $(BUILD_DIR)/release/lib/$(MINISAT_SLIB) 112$(BUILD_DIR)/debug/bin/$(MINISAT_CORE): $(BUILD_DIR)/debug/minisat/core/Main.o $(BUILD_DIR)/debug/lib/$(MINISAT_SLIB) 113$(BUILD_DIR)/profile/bin/$(MINISAT_CORE): $(BUILD_DIR)/profile/minisat/core/Main.o $(BUILD_DIR)/profile/lib/$(MINISAT_SLIB) 114# need the main-file be compiled with fpic? 115$(BUILD_DIR)/dynamic/bin/$(MINISAT_CORE): $(BUILD_DIR)/dynamic/minisat/core/Main.o $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB) 116 117## Library dependencies 118$(BUILD_DIR)/release/lib/$(MINISAT_SLIB): $(foreach o,$(OBJS),$(BUILD_DIR)/release/$(o)) 119$(BUILD_DIR)/debug/lib/$(MINISAT_SLIB): $(foreach o,$(OBJS),$(BUILD_DIR)/debug/$(o)) 120$(BUILD_DIR)/profile/lib/$(MINISAT_SLIB): $(foreach o,$(OBJS),$(BUILD_DIR)/profile/$(o)) 121$(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR).$(SOMINOR)$(SORELEASE)\ 122 $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR)\ 123 $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB): $(foreach o,$(OBJS),$(BUILD_DIR)/dynamic/$(o)) 124 125## Compile rules (these should be unified, buit I have not yet found a way which works in GNU Make) 126$(BUILD_DIR)/release/%.o: %.cc 127 $(ECHO) Compiling: $@ 128 $(VERB) mkdir -p $(dir $@) 129 $(VERB) $(CXX) $(MINISAT_CXXFLAGS) $(CXXFLAGS) -c -o $@ $< -MMD -MF $(BUILD_DIR)/release/$*.d 130 131$(BUILD_DIR)/profile/%.o: %.cc 132 $(ECHO) Compiling: $@ 133 $(VERB) mkdir -p $(dir $@) 134 $(VERB) $(CXX) $(MINISAT_CXXFLAGS) $(CXXFLAGS) -c -o $@ $< -MMD -MF $(BUILD_DIR)/profile/$*.d 135 136$(BUILD_DIR)/debug/%.o: %.cc 137 $(ECHO) Compiling: $@ 138 $(VERB) mkdir -p $(dir $@) 139 $(VERB) $(CXX) $(MINISAT_CXXFLAGS) $(CXXFLAGS) -c -o $@ $< -MMD -MF $(BUILD_DIR)/debug/$*.d 140 141$(BUILD_DIR)/dynamic/%.o: %.cc 142 $(ECHO) Compiling: $@ 143 $(VERB) mkdir -p $(dir $@) 144 $(VERB) $(CXX) $(MINISAT_CXXFLAGS) $(CXXFLAGS) -c -o $@ $< -MMD -MF $(BUILD_DIR)/dynamic/$*.d 145 146## Linking rule 147$(BUILD_DIR)/release/bin/$(MINISAT) $(BUILD_DIR)/debug/bin/$(MINISAT) $(BUILD_DIR)/profile/bin/$(MINISAT) $(BUILD_DIR)/dynamic/bin/$(MINISAT)\ 148$(BUILD_DIR)/release/bin/$(MINISAT_CORE) $(BUILD_DIR)/debug/bin/$(MINISAT_CORE) $(BUILD_DIR)/profile/bin/$(MINISAT_CORE) $(BUILD_DIR)/dynamic/bin/$(MINISAT_CORE): 149 $(ECHO) Linking Binary: $@ 150 $(VERB) mkdir -p $(dir $@) 151 $(VERB) $(CXX) $^ $(MINISAT_LDFLAGS) $(LDFLAGS) -o $@ 152 153## Static Library rule 154%/lib/$(MINISAT_SLIB): 155 $(ECHO) Linking Static Library: $@ 156 $(VERB) mkdir -p $(dir $@) 157 $(VERB) $(AR) -rcs $@ $^ 158 159## Shared Library rule 160$(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR).$(SOMINOR)$(SORELEASE)\ 161 $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR)\ 162 $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB): 163 $(ECHO) Linking Shared Library: $@ 164 $(VERB) mkdir -p $(dir $@) 165 $(VERB) $(CXX) $(MINISAT_LDFLAGS) $(LDFLAGS) -o $@ -shared -Wl,-soname,$(MINISAT_DLIB).$(SOMAJOR) $^ 166 $(VERB) ln -sf $(MINISAT_DLIB).$(SOMAJOR).$(SOMINOR)$(SORELEASE) $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR) 167 $(VERB) ln -sf $(MINISAT_DLIB).$(SOMAJOR) $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB) 168 169install: install-headers install-lib install-bin 170install-debug: install-headers install-lib-debug 171 172install-headers: 173# Create directories 174 $(INSTALL) -d $(DESTDIR)$(includedir)/minisat 175 for dir in mtl utils core simp; do \ 176 $(INSTALL) -d $(DESTDIR)$(includedir)/minisat/$$dir ; \ 177 done 178# Install headers 179 for h in $(HDRS) ; do \ 180 $(INSTALL) -m 644 $$h $(DESTDIR)$(includedir)/$$h ; \ 181 done 182 183install-lib-debug: $(BUILD_DIR)/debug/lib/$(MINISAT_SLIB) 184 $(INSTALL) -d $(DESTDIR)$(libdir) 185 $(INSTALL) -m 644 $(BUILD_DIR)/debug/lib/$(MINISAT_SLIB) $(DESTDIR)$(libdir) 186 187install-lib: $(BUILD_DIR)/release/lib/$(MINISAT_SLIB) $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR).$(SOMINOR)$(SORELEASE) 188 $(INSTALL) -d $(DESTDIR)$(libdir) 189 $(INSTALL) -m 644 $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR).$(SOMINOR)$(SORELEASE) $(DESTDIR)$(libdir) 190 ln -sf $(MINISAT_DLIB).$(SOMAJOR).$(SOMINOR)$(SORELEASE) $(DESTDIR)$(libdir)/$(MINISAT_DLIB).$(SOMAJOR) 191 ln -sf $(MINISAT_DLIB).$(SOMAJOR) $(DESTDIR)$(libdir)/$(MINISAT_DLIB) 192 $(INSTALL) -m 644 $(BUILD_DIR)/release/lib/$(MINISAT_SLIB) $(DESTDIR)$(libdir) 193 194install-bin: $(BUILD_DIR)/dynamic/bin/$(MINISAT) 195 $(INSTALL) -d $(DESTDIR)$(bindir) 196 $(INSTALL) -m 755 $(BUILD_DIR)/dynamic/bin/$(MINISAT) $(DESTDIR)$(bindir) 197 198clean: 199 rm -f $(foreach t, release debug profile dynamic, $(foreach o, $(SRCS:.cc=.o), $(BUILD_DIR)/$t/$o)) \ 200 $(foreach t, release debug profile dynamic, $(foreach d, $(SRCS:.cc=.d), $(BUILD_DIR)/$t/$d)) \ 201 $(foreach t, release debug profile dynamic, $(BUILD_DIR)/$t/bin/$(MINISAT_CORE) $(BUILD_DIR)/$t/bin/$(MINISAT)) \ 202 $(foreach t, release debug profile, $(BUILD_DIR)/$t/lib/$(MINISAT_SLIB)) \ 203 $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR).$(SOMINOR)$(SORELEASE)\ 204 $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB).$(SOMAJOR)\ 205 $(BUILD_DIR)/dynamic/lib/$(MINISAT_DLIB) 206 207distclean: clean 208 rm -f config.mk 209 210## Include generated dependencies 211-include $(foreach s, $(SRCS:.cc=.d), $(BUILD_DIR)/release/$s) 212-include $(foreach s, $(SRCS:.cc=.d), $(BUILD_DIR)/debug/$s) 213-include $(foreach s, $(SRCS:.cc=.d), $(BUILD_DIR)/profile/$s) 214-include $(foreach s, $(SRCS:.cc=.d), $(BUILD_DIR)/dynamic/$s) 215