3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-07 18:05:21 +00:00
z3/Makefile.in
Leonardo de Moura 659fe1e361 Removed release command from Makefile. Cleaned c++ example.
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2012-10-09 07:21:26 -07:00

375 lines
10 KiB
Makefile

SHELL=/bin/sh
SED=sed
AWK=awk
DOS2UNIX=@D2U@
@SET_MAKE@
##### Configuration #####
CXX=@CXX@
CPPFLAGS_CORE=@CPPFLAGS@ -I lib -fopenmp -msse -msse2 -mfpmath=sse
CXXFLAGS_CORE=@CXXFLAGS@
ifeq ($(MODE),)
Z3_BUILD_MODE=external
else
Z3_BUILD_MODE=$(MODE)
endif
LIBS=@LIBS@
## -lrt is for timer_create and timer_settime
LDFLAGS=@LDFLAGS@ -lpthread -fopenmp
LDFLAGS_EXTRA=
PREFIX=@prefix@
HAS_PYTHON=@HAS_PYTHON@
PYTHON_PACKAGE_DIR=@PYTHON_PACKAGE_DIR@
PYTHON=@PYTHON@
#########################
Z3=z3
TEST_CAPI=test_capi
TEST=test
BIN_DIR=bin/$(Z3_BUILD_MODE)
OBJ_DIR=obj/$(Z3_BUILD_MODE)
SED_OBJ_DIR=obj\/$(Z3_BUILD_MODE)
OBJ_TEST_DIR=obj-test/$(Z3_BUILD_MODE)
SED_OBJ_TEST_DIR=obj-test\/$(Z3_BUILD_MODE)
MAJ=$(shell grep 'Z3_MAJOR_VERSION' lib/version.h | cut -d ' ' -f 4)
MIN=$(shell grep 'Z3_MINOR_VERSION' lib/version.h | cut -d ' ' -f 4)
Z3_VERSION=$(MAJ).$(MIN)
PLATFORM=@PLATFORM@
ifeq ($(Z3_BUILD_MODE),release)
CPPFLAGS=$(CPPFLAGS_CORE) -DNDEBUG
CXXFLAGS=-O3 -fomit-frame-pointer $(CXXFLAGS_CORE)
else
ifeq ($(Z3_BUILD_MODE),smtcomp07)
CPPFLAGS=$(CPPFLAGS_CORE) -DNDEBUG -DSMTCOMP
CXXFLAGS=-O3 -fomit-frame-pointer $(CXXFLAGS_CORE)
# doesn't work on cygwin
LDFLAGS_EXTRA=@STATIC_FLAGS@
else
ifeq ($(Z3_BUILD_MODE),external)
CPPFLAGS=$(CPPFLAGS_CORE) -DNDEBUG -D_EXTERNAL_RELEASE
CXXFLAGS=-O3 -fomit-frame-pointer $(CXXFLAGS_CORE)
# doesn't work on cygwin
LDFLAGS_EXTRA=@STATIC_FLAGS@
else
ifeq ($(Z3_BUILD_MODE),debug)
CPPFLAGS=$(CPPFLAGS_CORE) -DZ3DEBUG -D_TRACE
CXXFLAGS=-g -Wall $(CXXFLAGS_CORE)
else
ifeq ($(Z3_BUILD_MODE),debugopt)
CPPFLAGS=$(CPPFLAGS_CORE) -DNDEBUG -DZ3DEBUG -D_TRACE
CXXFLAGS=-g -O1 $(CXXFLAGS_CORE)
else
ifeq ($(Z3_BUILD_MODE),trace)
CPPFLAGS=$(CPPFLAGS_CORE) -DNDEBUG -D_TRACE
CXXFLAGS=-g -O1 $(CXXFLAGS_CORE)
else
ifeq ($(Z3_BUILD_MODE),profile)
CPPFLAGS=$(CPPFLAGS_CORE) -DNDEBUG
CXXFLAGS=-g -pg -O2 $(CXXFLAGS_CORE)
LDFLAGS_EXTRA=-pg
else
ifeq ($(Z3_BUILD_MODE),gcov)
CPPFLAGS=$(CPPFLAGS_CORE) -DNDEBUG
CXXFLAGS=-g -fprofile-arcs -ftest-coverage -O2 $(CXXFLAGS_CORE)
LDFLAGS_EXTRA=-fprofile-arcs -ftest-coverage
else
ifeq ($(Z3_BUILD_MODE),external_parallel)
CPPFLAGS=$(CPPFLAGS_CORE) -DNDEBUG -D_EXTERNAL_RELEASE -D_Z3_BUILD_PARALLEL_SMT
CXXFLAGS=-O3 -fomit-frame-pointer $(CXXFLAGS_CORE)
# doesn't work on cygwin
LDFLAGS_EXTRA=@STATIC_FLAGS@
else
ifeq ($(Z3_BUILD_MODE),debug_parallel)
CPPFLAGS=$(CPPFLAGS_CORE) -DZ3DEBUG -D_TRACE -D_Z3_BUILD_PARALLEL_SMT
CXXFLAGS=-g -Wall $(CXXFLAGS_CORE)
else
$(error INVALID BUILD MODE = $(Z3_BUILD_MODE))
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
LIBFLAGS=@SLIBFLAGS@
################################
#
# Extract the source files from
# the MSVC++ project files.
#
# lib.vcproj ===> lib.srcs
# shell.vcproj ===> shell.srcs
#
################################
main: $(BIN_DIR)/$(Z3)
lib.srcs: lib/lib.vcxproj
@echo Making 'lib.srcs'...
@cp $< lib0.srcs
@chmod +rw lib0.srcs
@$(DOS2UNIX) lib0.srcs
@$(AWK) '/cpp\"/{ print $$0 }' lib0.srcs > lib1.srcs
@$(SED) 's|\"||g;s|<ClCompile||g;s|/>||g;s|Include=|lib/|g' lib1.srcs > lib2.srcs
@$(AWK) 'BEGIN { printf ("LIB_SRCS= "); } { printf($$1 " ") } END { print ""; }' lib2.srcs > $@
@rm -f lib0.srcs
@rm -f lib1.srcs
@rm -f lib2.srcs
shell.srcs: shell/shell.vcxproj
@echo Making 'shell.srcs'...
@cp $< shell0.srcs
@chmod +rw shell0.srcs
@$(DOS2UNIX) shell0.srcs
@$(AWK) '/cpp\"/{ print $$0 }' shell0.srcs > shell1.srcs
@$(SED) 's|\"||g;s|<ClCompile||g;s|/>||g;s|Include=|shell/|g' shell1.srcs > shell2.srcs
@$(AWK) 'BEGIN { printf ("SHELL_SRCS= "); } { printf($$1 " ") } END { print ""; }' shell2.srcs > $@
@rm -f shell0.srcs
@rm -f shell1.srcs
@rm -f shell2.srcs
test.srcs: test/test.vcxproj
@echo Making 'test.srcs'...
@cp $< test0.srcs
@chmod +rw test0.srcs
@$(DOS2UNIX) test0.srcs
@$(AWK) '/cpp\"/{ print $$0 }' test0.srcs > test1.srcs
@$(SED) 's|\"||g;s|<ClCompile||g;s|/>||g;s|Include=|test/|g' test1.srcs > test2.srcs
@$(AWK) 'BEGIN { printf ("TEST_SRCS= "); } { printf($$1 " ") } END { print ""; }' test2.srcs > $@
@rm -f test0.srcs
@rm -f test1.srcs
@rm -f test2.srcs
include lib.srcs
include shell.srcs
include test.srcs
LIB_SRCS+=@EXTRA_LIB_SRCS@
LIB_OBJS=$(LIB_SRCS:lib/%.cpp=$(OBJ_DIR)/%.o)
SHELL_OBJS=$(SHELL_SRCS:shell/%.cpp=$(OBJ_DIR)/%.o)
OBJS=$(LIB_OBJS) $(SHELL_OBJS)
TEST_CAPI_OBJS=$(OBJ_DIR)/test_capi.o $(LIB_OBJS)
TEST_OBJS=$(TEST_SRCS:test/%.cpp=$(OBJ_TEST_DIR)/%.o)
$(BIN_DIR)/$(Z3): $(OBJ_DIR) $(BIN_DIR) $(OBJS)
@mkdir -p $(BIN_DIR)
$(CXX) -o $(BIN_DIR)/$(Z3) $(OBJS) $(LDFLAGS) $(LDFLAGS_EXTRA) $(LIBS)
$(BIN_DIR)/$(TEST): $(OBJ_DIR) $(BIN_DIR) $(LIB_OBJS) $(TEST_OBJS)
@mkdir -p $(BIN_DIR)
$(CXX) -o $(BIN_DIR)/$(TEST) $(LIB_OBJS) $(TEST_OBJS) $(LDFLAGS) $(LDFLAGS_EXTRA) $(LIBS)
$(BIN_DIR)/$(TEST_CAPI): $(OBJ_DIR) $(BIN_DIR) $(TEST_CAPI_OBJS)
@mkdir -p $(BIN_DIR)
$(CXX) -o $(BIN_DIR)/$(TEST_CAPI) $(TEST_CAPI_OBJS) $(LDFLAGS) $(LDFLAGS_EXTRA) $(LIBS)
$(BIN_DIR)/lib$(Z3).@SO_EXT@: $(OBJ_DIR) $(BIN_DIR) $(LIB_OBJS)
@mkdir -p $(BIN_DIR)
$(CXX) -o $(BIN_DIR)/lib$(Z3).@SO_EXT@ $(LIB_OBJS) $(LIBFLAGS) $(LIBS) @COMP_VERSIONS@
$(BIN_DIR)/lib$(Z3).a: $(OBJ_DIR) $(BIN_DIR) $(LIB_OBJS)
@mkdir -p $(BIN_DIR)
ar -cvr $(BIN_DIR)/lib$(Z3).a $(LIB_OBJS)
$(BIN_DIR):
mkdir -p $(BIN_DIR)
$(OBJ_DIR):
mkdir -p $(OBJ_DIR)
$(OBJ_TEST_DIR):
mkdir -p $(OBJ_TEST_DIR)
smtcomp07: $(BIN_DIR)/$(Z3)
rm -r -f z3
mkdir z3
cp $(BIN_DIR)/$(Z3) z3/run
strip z3/run
cp doc/MAGIC_NUMBER z3/
cp doc/README-SMTCOMP07 z3/README
cp doc/NOTICES-SMTCOMP07 z3/NOTICES
cp doc/z3.pdf z3/
tar -czf z3.tar.gz z3
test_capi: $(BIN_DIR)/$(TEST_CAPI)
@SO_EXT@: $(BIN_DIR)/lib$(Z3).@SO_EXT@
a: $(BIN_DIR)/lib$(Z3).a
test: $(BIN_DIR)/$(TEST)
################################
#
# Grobner
#
################################
lib/grobner_main.cpp: test/igrobner.cpp
cp test/igrobner.cpp lib/grobner_main.cpp
chmod +rw lib/grobner_main.cpp
$(OBJ_DIR)/grobner_main.o: lib/grobner_main.cpp
@mkdir -p $(OBJ_DIR)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -DGB_APP -c -o $@ $<
################################
#
# .cpp ===> .o
#
################################
$(OBJ_DIR)/%.o : lib/%.cpp
@mkdir -p $(OBJ_DIR)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
$(OBJ_TEST_DIR)/%.o : test/%.cpp
@mkdir -p $(OBJ_TEST_DIR)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
$(OBJ_DIR)/%.o : shell/%.cpp
@mkdir -p $(OBJ_DIR)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
$(OBJ_DIR)/%.o : test_capi/%.c
@mkdir -p $(OBJ_DIR)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I ../lib -c -o $@ $<
################################
#
# Dependency files
#
# .cpp ===> .d
#
################################
$(OBJ_DIR)/%.d: lib/%.cpp
@echo Making dependency file \'$@\' ...
@mkdir -p $(OBJ_DIR)
@$(SHELL) -ec '$(CXX) -MM $(CPPFLAGS) $< | $(SED) '\''s/\($*\)\.o[ :]*/$(SED_OBJ_DIR)\/\1.o $(SED_OBJ_DIR)\/\1.d : /g'\'' > $@; [ -s $@ ] || rm -f $@'
$(OBJ_DIR)/%.d: shell/%.cpp
@echo Making dependency file \'$@\' ...
@mkdir -p $(OBJ_DIR)
@$(SHELL) -ec '$(CXX) -MM $(CPPFLAGS) $< | $(SED) '\''s/\($*\)\.o[ :]*/$(SED_OBJ_DIR)\/\1.o $(SED_OBJ_DIR)\/\1.d : /g'\'' > $@; [ -s $@ ] || rm -f $@'
$(OBJ_TEST_DIR)/%.d: test/%.cpp
@echo Making dependency file \'$@\' ...
@mkdir -p $(OBJ_TEST_DIR)
@$(SHELL) -ec '$(CXX) -MM $(CPPFLAGS) $< | $(SED) '\''s/\($*\)\.o[ :]*/$(SED_OBJ_TEST_DIR)\/\1.o $(SED_OBJ_TEST_DIR)\/\1.d : /g'\'' > $@; [ -s $@ ] || rm -f $@'
include $(LIB_SRCS:lib/%.cpp=$(OBJ_DIR)/%.d)
include $(SHELL_SRCS:shell/%.cpp=$(OBJ_DIR)/%.d)
include $(TEST_SRCS:test/%.cpp=$(OBJ_TEST_DIR)/%.d)
################################
#
# Cleanup
#
################################
.PHONY: clean
clean:
rm -f $(BIN_DIR)/$(Z3)
rm -f $(OBJ_DIR)/*
rm -f lib.srcs
rm -f shell.srcs
find . -name '*.bb' -exec rm -f '{}' ';'
find . -name '*.bbg' -exec rm -f '{}' ';'
find . -name '*.da' -exec rm -f '{}' ';'
find . -name '*.gcov' -exec rm -f '{}' ';'
find . -name 'cachegrind*' -exec rm -f '{}' ';'
find . -name 'a.out' -exec rm -f '{}' ';'
find . -name 'a.exe' -exec rm -f '{}' ';'
find . -name 'core' -exec rm -f '{}' ';'
################################
#
# Support
#
################################
Makefile: Makefile.in config.status
./config.status
make
config.status: configure
./config.status --recheck
################################
#
# checkgmake
#
################################
.PHONY: checkgmake
checkgmake:
@ ./gmaketest --make=$(MAKE) || \
(echo "Z3 needs GNU-Make to be built"; exit 1)
################################
#
# installation/uninstallation
#
################################
install: $(BIN_DIR)/$(Z3) $(BIN_DIR)/lib$(Z3).@SO_EXT@ $(BIN_DIR)/lib$(Z3).a
@mkdir -p $(PREFIX)/bin
@mkdir -p $(PREFIX)/lib
@mkdir -p $(PREFIX)/include
@cp $(BIN_DIR)/$(Z3) $(PREFIX)/bin
@cp $(BIN_DIR)/lib$(Z3).@SO_EXT@ $(PREFIX)/lib
@cp $(BIN_DIR)/lib$(Z3).a $(PREFIX)/lib
@cp lib/z3_api.h $(PREFIX)/include
@cp lib/z3.h $(PREFIX)/include
@cp lib/z3_v1.h $(PREFIX)/include
@cp lib/z3_macros.h $(PREFIX)/include
@cp c++/z3++.h $(PREFIX)/include
uninstall:
@rm -f $(PREFIX)/bin/$(Z3)
@rm -f $(PREFIX)/lib/lib$(Z3).@SO_EXT@
@rm -f $(PREFIX)/lib/lib$(Z3).a
@rm -f $(PREFIX)/include/z3_api.h
@rm -f $(PREFIX)/include/z3.h
@rm -f $(PREFIX)/include/z3_v1.h
@rm -f $(PREFIX)/include/z3_macros.h
@rm -f $(PREFIX)/include/z3++.h
install-python: $(BIN_DIR)/lib$(Z3).@SO_EXT@
@if test $(HAS_PYTHON) -eq 0; then echo "Python is not available in your system."; exit 1; fi
@echo "Installing Python bindings at $(PYTHON_PACKAGE_DIR)."
@$(PYTHON) python/example.py > /dev/null
@cp python/z3.pyc $(PYTHON_PACKAGE_DIR)
@cp python/z3core.pyc $(PYTHON_PACKAGE_DIR)
@cp python/z3types.pyc $(PYTHON_PACKAGE_DIR)
@cp python/z3consts.pyc $(PYTHON_PACKAGE_DIR)
@cp python/z3tactics.pyc $(PYTHON_PACKAGE_DIR)
@cp python/z3printer.pyc $(PYTHON_PACKAGE_DIR)
@cp $(BIN_DIR)/lib$(Z3).@SO_EXT@ $(PYTHON_PACKAGE_DIR)
uninstall-python:
@if test $(HAS_PYTHON) -eq 0; then echo "Python is not available in your system."; exit 1; fi
@echo "Uninstalling Python bindings from $(PYTHON_PACKAGE_DIR)."
@rm -f $(PYTHON_PACKAGE_DIR)/z3.pyc
@rm -f $(PYTHON_PACKAGE_DIR)/z3core.pyc
@rm -f $(PYTHON_PACKAGE_DIR)/z3types.pyc
@rm -f $(PYTHON_PACKAGE_DIR)/z3consts.pyc
@rm -f $(PYTHON_PACKAGE_DIR)/z3tactics.pyc
@rm -f $(PYTHON_PACKAGE_DIR)/z3printer.pyc
@rm -f $(PYTHON_PACKAGE_DIR)/$(BIN_DIR)/lib$(Z3).@SO_EXT@