diff --git a/.gitignore b/.gitignore index 4e1c2ee140704d94ff3dd073dfd66c16f33ba10c..dc20a3b598478ac8598ca98537ed0c9ff0a77c17 100644 --- a/.gitignore +++ b/.gitignore @@ -33,25 +33,53 @@ bin/* bin-release/* bin-debug/* +bin-gcc-release/* +bin-gcc-debug/* +bin-llvm-release/* +bin-llvm-debug/* lib/* lib-release/* lib-debug/* +lib-gcc-release/* +lib-gcc-debug/* +lib-llvm-release/* +lib-llvm-debug/* doc/* **/bin **/bin-release **/bin-debug +**/bin-gcc-release +**/bin-gcc-debug +**/bin-llvm-release +**/bin-llvm-debug **/doc **/obj **/obj-release **/obj-debug +**/obj-gcc-release +**/obj-gcc-debug +**/obj-llvm-release +**/obj-llvm-debug **/lib **/lib-release **/lib-debug +**/lib-gcc-release +**/lib-gcc-debug +**/lib-llvm-release +**/lib-llvm-debug **/test-bin **/test-bin-release **/test-bin-debug +**/test-bin-gcc-release +**/test-bin-gcc-debug +**/test-bin-llvm-release +**/test-bin-llvm-debug **/test-obj -**/test-obj-release +**/test-obV-release **/test-obj-debug +**/test-obj-gcc-release +**/test-obj-gcc-debug +**/test-obj-llvm-release +**/test-obj-llvm-debug **/CppUnitTestResults.xml diff --git a/acompaction2/makefile b/acompaction2/makefile index 315605dc16c3b1cd733d267b873063112ae89b8f..df7b77b30b73d8d92b016fdc9c98e2ccf8dfef10 100644 --- a/acompaction2/makefile +++ b/acompaction2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/acompare2/makefile b/acompare2/makefile index 8fc31a2adc5703972a1662ee229ae5399dc5a82f..c38fa2975e289e734401c69f6e305bbe2f53b2ec 100644 --- a/acompare2/makefile +++ b/acompare2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/aconversions2/makefile b/aconversions2/makefile index 2ce98f605a571fece81a5cdb5464eba7d20b1717..aa216567dea4f24661d1d9ec043ce19195632873 100644 --- a/aconversions2/makefile +++ b/aconversions2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/aconvert2/makefile b/aconvert2/makefile index ed1f3be065f9b666d9fff2ac01e0e6e9720a550e..6fd37b70af964c595f1790fac43831a0748e368d 100644 --- a/aconvert2/makefile +++ b/aconvert2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/aderivation2/makefile b/aderivation2/makefile index 5c81cf99d64d884c8cb346b1bacd89203e3f555f..bb51940d14d834afda310e190a473b35677630dd 100644 --- a/aderivation2/makefile +++ b/aderivation2/makefile @@ -1,5 +1,5 @@ SHELL:=/bin/bash -EXECUTABLE:=aderivations2 +EXECUTABLE:=aderivation2 define NEW_LINE @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -52,7 +66,7 @@ obj%/makefile: makefile $${NEW_LINE}\ %.d: makefile$${NEW_LINE}\ @echo \"\\$${NEW_LINE}\ - \$$(shell sha1sum <<< \"\$$@\" | sed \"s/ -//g\") = \\$$\$$(shell (\\$$\$$(CXX) - \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\$$\$${NEW_LINE}\\$${NEW_LINE}\ + \$$(shell sha1sum <<< \"\$$@\" | sed \"s/ -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -M \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\$$\$${NEW_LINE}\\$${NEW_LINE}\ \$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/ -//g\")) makefile\$$\$${NEW_LINE}\\$${NEW_LINE}\ \\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\$$\$${NEW_LINE}\\$${NEW_LINE}\ \" > \$$@$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/adeterminize2/makefile b/adeterminize2/makefile index f149733ccbc2e12deccbdc68d348bf14d9926dbb..0e7938c28e9a4cf465b022fde8ee6ea273a1df2e 100644 --- a/adeterminize2/makefile +++ b/adeterminize2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/aecho2/makefile b/aecho2/makefile index 3276d52e881f3a08f4d5dfe3e7f9e9ff6453bfe7..24f166d2bdd8c95239ce30021b7ea2fcf0003b96 100644 --- a/aecho2/makefile +++ b/aecho2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/aepsilon2/makefile b/aepsilon2/makefile index 7e0647cb06f1f34345c498c47a99e922db150a3d..972737fed572e824039a7fe037791fd4d142a827 100644 --- a/aepsilon2/makefile +++ b/aepsilon2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/agenerate2/makefile b/agenerate2/makefile index 22d8da9402b611066b1b9f08a895de9a98872edf..93c161f1f9f91c8705237bee59f8a765ce29d555 100644 --- a/agenerate2/makefile +++ b/agenerate2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/aintegral2/makefile b/aintegral2/makefile index 6a47f8921e37c8ccbb14b83123282276b66a05cf..c10f5bdf45bf1f6a2f7d7a43270322ffa28fcb7e 100644 --- a/aintegral2/makefile +++ b/aintegral2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/alangop2/makefile b/alangop2/makefile index 81e29f0025c5f1e5c6be52011fd2666813f18d41..56e8d06dcbca2cf4690589f73f354ececbb83854 100644 --- a/alangop2/makefile +++ b/alangop2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/alib2algo/makefile b/alib2algo/makefile index 4022bc70022936ecbdc4eca1c79611034f37444f..844c8863c09bbb1ada64ffb95c30f6d80068bdac 100644 --- a/alib2algo/makefile +++ b/alib2algo/makefile @@ -9,21 +9,27 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -rdynamic -shared -lxml2 -TEST_LDFLAGS_DEBUG:= -Llib-debug -L../alib2std/lib-debug -L../alib2data/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lcppunit -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-lbfd -liberty -lz -ldl -L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -rdynamic -shared -lxml2 +LLVM_LDFLAGS_DEBUG:=-lbfd -liberty -lz -ldl -L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -rdynamic -shared -lxml2 +TEST_GCC_LDFLAGS_DEBUG:= -Llib-gcc-debug -L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lcppunit -Wl,-rpath,. +TEST_LLVM_LDFLAGS_DEBUG:= -Llib-llvm-debug -L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lcppunit -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -rdynamic -shared -lxml2 -TEST_LDFLAGS_RELEASE:= -Llib-release -L../alib2std/lib-release -L../alib2data/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lcppunit -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -rdynamic -shared -lxml2 +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -rdynamic -shared -lxml2 +TEST_GCC_LDFLAGS_RELEASE:= -Llib-gcc-release -L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lcppunit -Wl,-rpath,. +TEST_LLVM_LDFLAGS_RELEASE:= -Llib-llvm-release -L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lcppunit -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) -TEST_OBJECTS_DEBUG:=$(patsubst test-src/%.cpp, test-obj-debug/%.o, $(shell find test-src/ -name *cpp)) - -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) -TEST_OBJECTS_RELEASE:=$(patsubst test-src/%.cpp, test-obj-release/%.o, $(shell find test-src/ -name *cpp)) - -.PHONY: all build-debug build-tests-debug clean-debug doc +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) +TEST_OBJECTS_GCC_DEBUG:=$(patsubst test-src/%.cpp, test-obj-gcc-debug/%.o, $(shell find test-src/ -name *cpp)) +TEST_OBJECTS_LLVM_DEBUG:=$(patsubst test-src/%.cpp, test-obj-llvm-debug/%.o, $(shell find test-src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) +TEST_OBJECTS_GCC_RELEASE:=$(patsubst test-src/%.cpp, test-obj-gcc-release/%.o, $(shell find test-src/ -name *cpp)) +TEST_OBJECTS_LLVM_RELEASE:=$(patsubst test-src/%.cpp, test-obj-llvm-release/%.o, $(shell find test-src/ -name *cpp)) +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release build-tests-gcc-debug build-tests-llvm-debug build-tests-gcc-release build-tests-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -32,6 +38,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -84,6 +100,16 @@ test-obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst test-obj-%-release/,%,$(patsubst test-obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -95,7 +121,7 @@ test-obj%/makefile: makefile $${NEW_LINE}\ export NEW_LINE$${NEW_LINE}\ $${NEW_LINE}\ - CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -Werror -fPIC -I/usr/include/libxml2/ -I../\$$(DEPTH)src/ -I../../\$$(DEPTH)alib2std/src/ -I../../\$$(DEPTH)alib2data/src/$${NEW_LINE}\ + CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -Werror -fPIC -I/usr/include/libxml2/ -I../../\$$(DEPTH)alib2std/src/ -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/$${NEW_LINE}\ $${NEW_LINE}\ SOURCES:= \$$(shell find ../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")$${NEW_LINE}\ DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))$${NEW_LINE}\ @@ -132,89 +158,153 @@ test-obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: unit-test-debug +gcc-debug: unit-test-gcc-debug + +llvm-debug: unit-test-llvm-debug + +gcc-release: unit-test-gcc-release -release: unit-test-release +llvm-release: unit-test-llvm-release -clean: clean-debug clean-release +gcc-clean: clean-gcc-debug clean-gcc-release $(RM) -r doc -test: unit-test-debug unit-test-release +llvm-clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc + +gcc-test: unit-test-gcc-debug unit-test-gcc-release +llvm-test: unit-test-llvm-debug unit-test-llvm-release -lib-debug/$(LIBRARY): $(OBJECTS_DEBUG) obj-debug/ + +lib-gcc-debug/$(LIBRARY): $(OBJECTS_GCC_DEBUG) obj-gcc-debug/ mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -lib-release/$(LIBRARY): $(OBJECTS_RELEASE) obj-release/ +lib-llvm-debug/$(LIBRARY): $(OBJECTS_LLVM_DEBUG) obj-llvm-debug/ mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clang++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +lib-gcc-release/$(LIBRARY): $(OBJECTS_GCC_RELEASE) obj-gcc-release/ + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +lib-llvm-release/$(LIBRARY): $(OBJECTS_LLVM_RELEASE) obj-llvm-release/ + mkdir -p $(dir $@) + clang++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +obj-llvm-debug/: FORCE obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" +obj-gcc-release/: FORCE obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" +obj-llvm-release/: FORCE obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ -$(OBJECTS_DEBUG): obj-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -$(OBJECTS_RELEASE): obj-release/ +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -build-debug: lib-debug/$(LIBRARY) +build-gcc-debug: lib-gcc-debug/$(LIBRARY) -build-release: lib-release/$(LIBRARY) +build-llvm-debug: lib-llvm-debug/$(LIBRARY) +build-gcc-release: lib-gcc-release/$(LIBRARY) +build-llvm-release: lib-llvm-release/$(LIBRARY) -test-bin-debug/$(TESTBIN): lib-debug/$(LIBRARY) $(TEST_OBJECTS_DEBUG) test-obj-debug/ + + +test-bin-gcc-debug/$(TESTBIN): lib-gcc-debug/$(LIBRARY) $(TEST_OBJECTS_GCC_DEBUG) test-obj-gcc-debug/ + mkdir -p $(dir $@) + g++ $(TEST_OBJECTS_GCC_DEBUG) -o $@ $(TEST_GCC_LDFLAGS_DEBUG) + +test-bin-llvm-debug/$(TESTBIN): lib-llvm-debug/$(LIBRARY) $(TEST_OBJECTS_LLVM_DEBUG) test-obj-llvm-debug/ mkdir -p $(dir $@) - $(CXX) $(TEST_OBJECTS_DEBUG) -o $@ $(TEST_LDFLAGS_DEBUG) + g++ $(TEST_OBJECTS_LLVM_DEBUG) -o $@ $(TEST_LLVM_LDFLAGS_DEBUG) -test-bin-release/$(TESTBIN): lib-release/$(LIBRARY) $(TEST_OBJECTS_RELEASE) test-obj-release/ +test-bin-gcc-release/$(TESTBIN): lib-gcc-release/$(LIBRARY) $(TEST_OBJECTS_GCC_RELEASE) test-obj-gcc-release/ mkdir -p $(dir $@) - $(CXX) $(TEST_OBJECTS_RELEASE) -o $@ $(TEST_LDFLAGS_RELEASE) + g++ $(TEST_OBJECTS_GCC_RELEASE) -o $@ $(TEST_GCC_LDFLAGS_RELEASE) + +test-bin-llvm-release/$(TESTBIN): lib-llvm-release/$(LIBRARY) $(TEST_OBJECTS_LLVM_RELEASE) test-obj-llvm-release/ + mkdir -p $(dir $@) + g++ $(TEST_OBJECTS_LLVM_RELEASE) -o $@ $(TEST_LLVM_LDFLAGS_RELEASE) + + + +test-obj-gcc-debug/: FORCE test-obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-gcc-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +test-obj-llvm-debug/: FORCE test-obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-llvm-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +test-obj-gcc-release/: FORCE test-obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-gcc-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" + +test-obj-llvm-release/: FORCE test-obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-llvm-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" + + +$(TEST_OBJECTS_GCC_DEBUG): test-obj-gcc-debug/ + +$(TEST_OBJECTS_LLVM_DEBUG): test-obj-llvm-debug/ +$(TEST_OBJECTS_GCC_RELEASE): test-obj-gcc-release/ +$(TEST_OBJECTS_LLVM_RELEASE): test-obj-llvm-release/ -test-obj-debug/: FORCE | test-obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" -test-obj-release/: FORCE | test-obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" +build-tests-gcc-debug: test-bin-gcc-debug/$(TESTBIN) +build-tests-llvm-debug: test-bin-llvm-debug/$(TESTBIN) -$(TEST_OBJECTS_DEBUG): test-obj-debug/ +build-tests-gcc-release: test-bin-gcc-release/$(TESTBIN) -$(TEST_OBJECTS_RELEASE): test-obj-release/ +build-tests-llvm-release: test-bin-llvm-release/$(TESTBIN) -build-tests-debug: test-bin-debug/$(TESTBIN) +unit-test-gcc-debug: build-tests-gcc-debug + LD_LIBRARY_PATH="../alib2std/lib-gcc-debug;../alib2data/lib-gcc-debug;lib-gcc-debug" test-bin-gcc-debug/$(TESTBIN) -build-tests-release: test-bin-release/$(TESTBIN) +unit-test-llvm-debug: build-tests-llvm-debug + LD_LIBRARY_PATH="../alib2std/lib-llvm-debug;../alib2data/lib-llvm-debug;lib-llvm-debug" test-bin-llvm-debug/$(TESTBIN) +unit-test-gcc-release: build-tests-gcc-release + LD_LIBRARY_PATH="../alib2std/lib-gcc-release;../alib2data/lib-gcc-release;lib-gcc-release" test-bin-gcc-release/$(TESTBIN) +unit-test-llvm-release: build-tests-llvm-release + LD_LIBRARY_PATH="../alib2std/lib-llvm-release;../alib2data/lib-llvm-release;lib-llvm-release" test-bin-llvm-release/$(TESTBIN) -unit-test-debug: build-tests-debug - LD_LIBRARY_PATH="../alib2std/lib-debug;../alib2data/lib-debug;lib-debug" test-bin-debug/$(TESTBIN) -unit-test-release: build-tests-release - LD_LIBRARY_PATH="../alib2std/lib-release;../alib2data/lib-release;lib-release" test-bin-release/$(TESTBIN) +clean-gcc-debug: + $(RM) -r *.o *.d lib-gcc-debug obj-gcc-debug test-bin-gcc-debug test-obj-gcc-debug CppUnitTestResults.xml +clean-llvm-debug: + $(RM) -r *.o *.d lib-llvm-debug obj-llvm-debug test-bin-llvm-debug test-obj-llvm-debug CppUnitTestResults.xml -clean-debug: - $(RM) -r *.o *.d lib-debug obj-debug test-bin-debug test-obj-debug CppUnitTestResults.xml +clean-gcc-release: + $(RM) -r *.o *.d lib-gcc-release obj-gcc-release test-bin-gcc-release test-obj-gcc-release CppUnitTestResults.xml -clean-release: - $(RM) -r *.o *.d lib-release obj-release test-bin-release test-obj-release CppUnitTestResults.xml +clean-llvm-release: + $(RM) -r *.o *.d lib-llvm-release obj-llvm-release test-bin-llvm-release test-obj-llvm-release CppUnitTestResults.xml diff --git a/alib2data/makefile b/alib2data/makefile index 840b6ee040b858f646816f2f1f184d24bb2204ce..d2b0ee7fbd9364378718d966b29353f471bd14db 100644 --- a/alib2data/makefile +++ b/alib2data/makefile @@ -9,19 +9,27 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-lbfd -liberty -lz -ldl -L../alib2std/lib-debug -rdynamic -shared -lxml2 -TEST_LDFLAGS_DEBUG:= -Llib-debug -L../alib2std/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lcppunit -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-lbfd -liberty -lz -ldl -L../alib2std/lib-gcc-debug -rdynamic -shared -lxml2 +LLVM_LDFLAGS_DEBUG:=-lbfd -liberty -lz -ldl -L../alib2std/lib-llvm-debug -rdynamic -shared -lxml2 +TEST_GCC_LDFLAGS_DEBUG:= -Llib-gcc-debug -L../alib2std/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lcppunit -Wl,-rpath,. +TEST_LLVM_LDFLAGS_DEBUG:= -Llib-llvm-debug -L../alib2std/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lcppunit -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -rdynamic -shared -lxml2 -TEST_LDFLAGS_RELEASE:= -Llib-release -L../alib2std/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lcppunit -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -rdynamic -shared -lxml2 +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -rdynamic -shared -lxml2 +TEST_GCC_LDFLAGS_RELEASE:= -Llib-gcc-release -L../alib2std/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lcppunit -Wl,-rpath,. +TEST_LLVM_LDFLAGS_RELEASE:= -Llib-llvm-release -L../alib2std/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lcppunit -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) -TEST_OBJECTS_DEBUG:=$(patsubst test-src/%.cpp, test-obj-debug/%.o, $(shell find test-src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) +TEST_OBJECTS_GCC_DEBUG:=$(patsubst test-src/%.cpp, test-obj-gcc-debug/%.o, $(shell find test-src/ -name *cpp)) +TEST_OBJECTS_LLVM_DEBUG:=$(patsubst test-src/%.cpp, test-obj-llvm-debug/%.o, $(shell find test-src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) -TEST_OBJECTS_RELEASE:=$(patsubst test-src/%.cpp, test-obj-release/%.o, $(shell find test-src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) +TEST_OBJECTS_GCC_RELEASE:=$(patsubst test-src/%.cpp, test-obj-gcc-release/%.o, $(shell find test-src/ -name *cpp)) +TEST_OBJECTS_LLVM_RELEASE:=$(patsubst test-src/%.cpp, test-obj-llvm-release/%.o, $(shell find test-src/ -name *cpp)) -.PHONY: all build-debug build-tests-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release build-tests-gcc-debug build-tests-llvm-debug build-tests-gcc-release build-tests-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -30,6 +38,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -82,6 +100,16 @@ test-obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst test-obj-%-release/,%,$(patsubst test-obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -130,90 +158,154 @@ test-obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: unit-test-debug +gcc-debug: unit-test-gcc-debug -release: unit-test-release +llvm-debug: unit-test-llvm-debug -clean: clean-debug clean-release +gcc-release: unit-test-gcc-release + +llvm-release: unit-test-llvm-release + +gcc-clean: clean-gcc-debug clean-gcc-release + $(RM) -r doc + +llvm-clean: clean-llvm-debug clean-llvm-release $(RM) -r doc -test: unit-test-debug unit-test-release +gcc-test: unit-test-gcc-debug unit-test-gcc-release + +llvm-test: unit-test-llvm-debug unit-test-llvm-release + + +lib-gcc-debug/$(LIBRARY): $(OBJECTS_GCC_DEBUG) obj-gcc-debug/ + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) +lib-llvm-debug/$(LIBRARY): $(OBJECTS_LLVM_DEBUG) obj-llvm-debug/ + mkdir -p $(dir $@) + clang++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) -lib-debug/$(LIBRARY): $(OBJECTS_DEBUG) obj-debug/ +lib-gcc-release/$(LIBRARY): $(OBJECTS_GCC_RELEASE) obj-gcc-release/ mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) -lib-release/$(LIBRARY): $(OBJECTS_RELEASE) obj-release/ +lib-llvm-release/$(LIBRARY): $(OBJECTS_LLVM_RELEASE) obj-llvm-release/ mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +obj-llvm-debug/: FORCE obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +obj-gcc-release/: FORCE obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" +obj-llvm-release/: FORCE obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" -obj-debug/: FORCE obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" -obj-release/: FORCE obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -$(OBJECTS_DEBUG): obj-debug/ +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -$(OBJECTS_RELEASE): obj-release/ +build-gcc-debug: lib-gcc-debug/$(LIBRARY) -build-debug: lib-debug/$(LIBRARY) +build-llvm-debug: lib-llvm-debug/$(LIBRARY) -build-release: lib-release/$(LIBRARY) +build-gcc-release: lib-gcc-release/$(LIBRARY) +build-llvm-release: lib-llvm-release/$(LIBRARY) -test-bin-debug/$(TESTBIN): lib-debug/$(LIBRARY) $(TEST_OBJECTS_DEBUG) test-obj-debug/ + +test-bin-gcc-debug/$(TESTBIN): lib-gcc-debug/$(LIBRARY) $(TEST_OBJECTS_GCC_DEBUG) test-obj-gcc-debug/ + mkdir -p $(dir $@) + g++ $(TEST_OBJECTS_GCC_DEBUG) -o $@ $(TEST_GCC_LDFLAGS_DEBUG) + +test-bin-llvm-debug/$(TESTBIN): lib-llvm-debug/$(LIBRARY) $(TEST_OBJECTS_LLVM_DEBUG) test-obj-llvm-debug/ mkdir -p $(dir $@) - $(CXX) $(TEST_OBJECTS_DEBUG) -o $@ $(TEST_LDFLAGS_DEBUG) + clang++ $(TEST_OBJECTS_LLVM_DEBUG) -o $@ $(TEST_LLVM_LDFLAGS_DEBUG) -test-bin-release/$(TESTBIN): lib-release/$(LIBRARY) $(TEST_OBJECTS_RELEASE) test-obj-release/ +test-bin-gcc-release/$(TESTBIN): lib-gcc-release/$(LIBRARY) $(TEST_OBJECTS_GCC_RELEASE) test-obj-gcc-release/ mkdir -p $(dir $@) - $(CXX) $(TEST_OBJECTS_RELEASE) -o $@ $(TEST_LDFLAGS_RELEASE) + g++ $(TEST_OBJECTS_GCC_RELEASE) -o $@ $(TEST_GCC_LDFLAGS_RELEASE) + +test-bin-llvm-release/$(TESTBIN): lib-llvm-release/$(LIBRARY) $(TEST_OBJECTS_LLVM_RELEASE) test-obj-llvm-release/ + mkdir -p $(dir $@) + clang++ $(TEST_OBJECTS_LLVM_RELEASE) -o $@ $(TEST_LLVM_LDFLAGS_RELEASE) + + + +test-obj-gcc-debug/: FORCE test-obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-gcc-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +test-obj-llvm-debug/: FORCE test-obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-llvm-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +test-obj-gcc-release/: FORCE test-obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-gcc-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" + +test-obj-llvm-release/: FORCE test-obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-llvm-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" + + + +$(TEST_OBJECTS_GCC_DEBUG): test-obj-gcc-debug/ +$(TEST_OBJECTS_LLVM_DEBUG): test-obj-llvm-debug/ +$(TEST_OBJECTS_GCC_RELEASE): test-obj-gcc-release/ -test-obj-debug/: FORCE test-obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" +$(TEST_OBJECTS_LLVM_RELEASE): test-obj-llvm-release/ -test-obj-release/: FORCE test-obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" +build-tests-gcc-debug: test-bin-gcc-debug/$(TESTBIN) -$(TEST_OBJECTS_DEBUG): test-obj-debug/ +build-tests-llvm-debug: test-bin-llvm-debug/$(TESTBIN) -$(TEST_OBJECTS_RELEASE): test-obj-release/ +build-tests-gcc-release: test-bin-gcc-release/$(TESTBIN) +build-tests-llvm-release: test-bin-llvm-release/$(TESTBIN) -build-tests-debug: test-bin-debug/$(TESTBIN) -build-tests-release: test-bin-release/$(TESTBIN) +unit-test-gcc-debug: build-tests-gcc-debug + LD_LIBRARY_PATH="../alib2std/lib-gcc-debug;lib-gcc-debug" test-bin-gcc-debug/$(TESTBIN) +unit-test-llvm-debug: build-tests-llvm-debug + LD_LIBRARY_PATH="../alib2std/lib-llvm-debug;lib-llvm-debug" test-bin-llvm-debug/$(TESTBIN) +unit-test-gcc-release: build-tests-gcc-release + LD_LIBRARY_PATH="../alib2std/lib-gcc-release;lib-gcc-release" test-bin-gcc-release/$(TESTBIN) -unit-test-debug: build-tests-debug - LD_LIBRARY_PATH="../alib2std/lib-debug;lib-debug" test-bin-debug/$(TESTBIN) +unit-test-llvm-release: build-tests-llvm-release + LD_LIBRARY_PATH="../alib2std/lib-llvm-release;lib-llvm-release" test-bin-llvm-release/$(TESTBIN) -unit-test-release: build-tests-release - LD_LIBRARY_PATH="../alib2std/lib-release;lib-release" test-bin-release/$(TESTBIN) +clean-gcc-debug: + $(RM) -r *.o *.d lib-gcc-debug obj-gcc-debug test-bin-gcc-debug test-obj-gcc-debug CppUnitTestResults.xml -clean-debug: - $(RM) -r *.o *.d lib-debug obj-debug test-bin-debug test-obj-debug CppUnitTestResults.xml +clean-llvm-debug: + $(RM) -r *.o *.d lib-llvm-debug obj-llvm-debug test-bin-llvm-debug test-obj-llvm-debug CppUnitTestResults.xml -clean-release: - $(RM) -r *.o *.d lib-release obj-release test-bin-release test-obj-release CppUnitTestResults.xml +clean-gcc-release: + $(RM) -r *.o *.d lib-gcc-release obj-gcc-release test-bin-gcc-release test-obj-gcc-release CppUnitTestResults.xml +clean-llvm-release: + $(RM) -r *.o *.d lib-llvm-release obj-llvm-release test-bin-llvm-release test-obj-llvm-release CppUnitTestResults.xml FORCE: diff --git a/alib2elgo/makefile b/alib2elgo/makefile index ea4fe4686d5f06eada1b434ef895ba500d70d90a..ab6087cd90b677149d78db711f4e65d1443ec892 100644 --- a/alib2elgo/makefile +++ b/alib2elgo/makefile @@ -9,21 +9,27 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -shared -lxml2 -TEST_LDFLAGS_DEBUG:= -Llib-debug -L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -lcppunit -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-lbfd -liberty -lz -ldl -L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -rdynamic -shared -lxml2 +LLVM_LDFLAGS_DEBUG:=-lbfd -liberty -lz -ldl -L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -rdynamic -shared -lxml2 +TEST_GCC_LDFLAGS_DEBUG:= -Llib-gcc-debug -L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -lcppunit -Wl,-rpath,. +TEST_LLVM_LDFLAGS_DEBUG:= -Llib-llvm-debug -L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -lcppunit -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-debug -rdynamic -shared -lxml2 -TEST_LDFLAGS_RELEASE:= -Llib-release -L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -lcppunit -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -rdynamic -shared -lxml2 +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -rdynamic -shared -lxml2 +TEST_GCC_LDFLAGS_RELEASE:= -Llib-gcc-release -L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -lcppunit -Wl,-rpath,. +TEST_LLVM_LDFLAGS_RELEASE:= -Llib-llvm-release -L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -lcppunit -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) -TEST_OBJECTS_DEBUG:=$(patsubst test-src/%.cpp, test-obj-debug/%.o, $(shell find test-src/ -name *cpp)) - -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) -TEST_OBJECTS_RELEASE:=$(patsubst test-src/%.cpp, test-obj-release/%.o, $(shell find test-src/ -name *cpp)) - -.PHONY: all build-debug build-tests-debug clean-debug doc +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) +TEST_OBJECTS_GCC_DEBUG:=$(patsubst test-src/%.cpp, test-obj-gcc-debug/%.o, $(shell find test-src/ -name *cpp)) +TEST_OBJECTS_LLVM_DEBUG:=$(patsubst test-src/%.cpp, test-obj-llvm-debug/%.o, $(shell find test-src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) +TEST_OBJECTS_GCC_RELEASE:=$(patsubst test-src/%.cpp, test-obj-gcc-release/%.o, $(shell find test-src/ -name *cpp)) +TEST_OBJECTS_LLVM_RELEASE:=$(patsubst test-src/%.cpp, test-obj-llvm-release/%.o, $(shell find test-src/ -name *cpp)) +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release build-tests-gcc-debug build-tests-llvm-debug build-tests-gcc-release build-tests-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -32,6 +38,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -84,6 +100,16 @@ test-obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst test-obj-%-release/,%,$(patsubst test-obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -95,7 +121,7 @@ test-obj%/makefile: makefile $${NEW_LINE}\ export NEW_LINE$${NEW_LINE}\ $${NEW_LINE}\ - CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -Werror -fPIC -I/usr/include/libxml2/ -I../\$$(DEPTH)src/ -I../../\$$(DEPTH)alib2std/src/ -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/$${NEW_LINE}\ + CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -Werror -fPIC -I/usr/include/libxml2/ -I../../\$$(DEPTH)alib2std/src/ -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/ -I../../\$$(DEPTH)alib2elgo/src/$${NEW_LINE}\ $${NEW_LINE}\ SOURCES:= \$$(shell find ../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")$${NEW_LINE}\ DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))$${NEW_LINE}\ @@ -132,89 +158,154 @@ test-obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: unit-test-debug +gcc-debug: unit-test-gcc-debug + +llvm-debug: unit-test-llvm-debug + +gcc-release: unit-test-gcc-release -release: unit-test-release +llvm-release: unit-test-llvm-release -clean: clean-debug clean-release +gcc-clean: clean-gcc-debug clean-gcc-release $(RM) -r doc -test: unit-test-debug unit-test-release +llvm-clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc + +gcc-test: unit-test-gcc-debug unit-test-gcc-release + +llvm-test: unit-test-llvm-debug unit-test-llvm-release + +lib-gcc-debug/$(LIBRARY): $(OBJECTS_GCC_DEBUG) obj-gcc-debug/ + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) + +lib-llvm-debug/$(LIBRARY): $(OBJECTS_LLVM_DEBUG) obj-llvm-debug/ + mkdir -p $(dir $@) + clang++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) -lib-debug/$(LIBRARY): $(OBJECTS_DEBUG) obj-debug/ +lib-gcc-release/$(LIBRARY): $(OBJECTS_GCC_RELEASE) obj-gcc-release/ mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) -lib-release/$(LIBRARY): $(OBJECTS_RELEASE) obj-release/ +lib-llvm-release/$(LIBRARY): $(OBJECTS_LLVM_RELEASE) obj-llvm-release/ mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clang++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +obj-llvm-debug/: FORCE obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +obj-gcc-release/: FORCE obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" +obj-llvm-release/: FORCE obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -$(OBJECTS_DEBUG): obj-debug/ +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -$(OBJECTS_RELEASE): obj-release/ +build-gcc-debug: lib-gcc-debug/$(LIBRARY) -build-debug: lib-debug/$(LIBRARY) +build-llvm-debug: lib-llvm-debug/$(LIBRARY) -build-release: lib-release/$(LIBRARY) +build-gcc-release: lib-gcc-release/$(LIBRARY) +build-llvm-release: lib-llvm-release/$(LIBRARY) -test-bin-debug/$(TESTBIN): lib-debug/$(LIBRARY) $(TEST_OBJECTS_DEBUG) test-obj-debug/ + +test-bin-gcc-debug/$(TESTBIN): lib-gcc-debug/$(LIBRARY) $(TEST_OBJECTS_GCC_DEBUG) test-obj-gcc-debug/ + mkdir -p $(dir $@) + g++ $(TEST_OBJECTS_GCC_DEBUG) -o $@ $(TEST_GCC_LDFLAGS_DEBUG) + +test-bin-llvm-debug/$(TESTBIN): lib-llvm-debug/$(LIBRARY) $(TEST_OBJECTS_LLVM_DEBUG) test-obj-llvm-debug/ + mkdir -p $(dir $@) + clang++ $(TEST_OBJECTS_LLVM_DEBUG) -o $@ $(TEST_LLVM_LDFLAGS_DEBUG) + +test-bin-gcc-release/$(TESTBIN): lib-gcc-release/$(LIBRARY) $(TEST_OBJECTS_GCC_RELEASE) test-obj-gcc-release/ mkdir -p $(dir $@) - $(CXX) $(TEST_OBJECTS_DEBUG) -o $@ $(TEST_LDFLAGS_DEBUG) + g++ $(TEST_OBJECTS_GCC_RELEASE) -o $@ $(TEST_GCC_LDFLAGS_RELEASE) -test-bin-release/$(TESTBIN): lib-release/$(LIBRARY) $(TEST_OBJECTS_RELEASE) test-obj-release/ +test-bin-llvm-release/$(TESTBIN): lib-llvm-release/$(LIBRARY) $(TEST_OBJECTS_LLVM_RELEASE) test-obj-llvm-release/ mkdir -p $(dir $@) - $(CXX) $(TEST_OBJECTS_RELEASE) -o $@ $(TEST_LDFLAGS_RELEASE) + clang++ $(TEST_OBJECTS_LLVM_RELEASE) -o $@ $(TEST_LLVM_LDFLAGS_RELEASE) + + + +test-obj-gcc-debug/: FORCE test-obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-gcc-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +test-obj-llvm-debug/: FORCE test-obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-llvm-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +test-obj-gcc-release/: FORCE test-obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-gcc-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" + +test-obj-llvm-release/: FORCE test-obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-llvm-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" + + + +$(TEST_OBJECTS_GCC_DEBUG): test-obj-gcc-debug/ + +$(TEST_OBJECTS_LLVM_DEBUG): test-obj-llvm-debug/ +$(TEST_OBJECTS_GCC_RELEASE): test-obj-gcc-release/ +$(TEST_OBJECTS_LLVM_RELEASE): test-obj-llvm-release/ -test-obj-debug/: FORCE | test-obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" -test-obj-release/: FORCE | test-obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" +build-tests-gcc-debug: test-bin-gcc-debug/$(TESTBIN) +build-tests-llvm-debug: test-bin-llvm-debug/$(TESTBIN) -$(TEST_OBJECTS_DEBUG): test-obj-debug/ +build-tests-gcc-release: test-bin-gcc-release/$(TESTBIN) -$(TEST_OBJECTS_RELEASE): test-obj-release/ +build-tests-llvm-release: test-bin-llvm-release/$(TESTBIN) -build-tests-debug: test-bin-debug/$(TESTBIN) +unit-test-gcc-debug: build-tests-gcc-debug + LD_LIBRARY_PATH="../alib2std/lib-gcc-debug;../alib2data/lib-gcc-debug;../alib2algo/lib-gcc-debug;lib-gcc-debug" test-bin-gcc-debug/$(TESTBIN) -build-tests-release: test-bin-release/$(TESTBIN) +unit-test-llvm-debug: build-tests-llvm-debug + LD_LIBRARY_PATH="../alib2std/lib-llvm-debug;../alib2data/lib-llvm-debug;../alib2algo/lib-llvm-debug;lib-llvm-debug" test-bin-llvm-debug/$(TESTBIN) +unit-test-gcc-release: build-tests-gcc-release + LD_LIBRARY_PATH="../alib2std/lib-gcc-release;../alib2data/lib-gcc-release;../alib2algo/lib-gcc-release;lib-gcc-release" test-bin-gcc-release/$(TESTBIN) +unit-test-llvm-release: build-tests-llvm-release + LD_LIBRARY_PATH="../alib2std/lib-llvm-release;../alib2data/lib-llvm-release;../alib2algo/lib-llvm-release;lib-llvm-release" test-bin-llvm-release/$(TESTBIN) -unit-test-debug: build-tests-debug - LD_LIBRARY_PATH="../alib2std/lib-debug;../alib2data/lib-debug;../alib2algo/lib-debug;lib-debug" test-bin-debug/$(TESTBIN) -unit-test-release: build-tests-release - LD_LIBRARY_PATH="../alib2std/lib-release;../alib2data/lib-release;../alib2algo/lib-release;lib-release" test-bin-release/$(TESTBIN) +clean-gcc-debug: + $(RM) -r *.o *.d lib-gcc-debug obj-gcc-debug test-bin-gcc-debug test-obj-gcc-debug CppUnitTestResults.xml +clean-llvm-debug: + $(RM) -r *.o *.d lib-llvm-debug obj-llvm-debug test-bin-llvm-debug test-obj-llvm-debug CppUnitTestResults.xml -clean-debug: - $(RM) -r *.o *.d lib-debug obj-debug test-bin-debug test-obj-debug CppUnitTestResults.xml +clean-gcc-release: + $(RM) -r *.o *.d lib-gcc-release obj-gcc-release test-bin-gcc-release test-obj-gcc-release CppUnitTestResults.xml -clean-release: - $(RM) -r *.o *.d lib-release obj-release test-bin-release test-obj-release CppUnitTestResults.xml +clean-llvm-release: + $(RM) -r *.o *.d lib-llvm-release obj-llvm-release test-bin-llvm-release test-obj-llvm-release CppUnitTestResults.xml diff --git a/alib2std/makefile b/alib2std/makefile index 7e3d50ef418b56ea6372c6af6daa13dac32218e6..f8dce3f3c6d6a194fd71cd5561153be6b0ab3453 100644 --- a/alib2std/makefile +++ b/alib2std/makefile @@ -9,19 +9,27 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-lbfd -liberty -lz -ldl -rdynamic -shared -lxml2 -TEST_LDFLAGS_DEBUG:= -Llib-debug -rdynamic -lxml2 -lalib2std -lcppunit -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-lbfd -liberty -lz -ldl -rdynamic -shared -lxml2 +LLVM_LDFLAGS_DEBUG:=-lbfd -liberty -lz -ldl -rdynamic -shared -lxml2 +TEST_GCC_LDFLAGS_DEBUG:= -Llib-gcc-debug -rdynamic -lxml2 -lalib2std -lcppunit -Wl,-rpath,. +TEST_LLVM_LDFLAGS_DEBUG:= -Llib-gcc-debug -rdynamic -lxml2 -lalib2std -lcppunit -Wl,-rpath,. -LDFLAGS_RELEASE:=-rdynamic -shared -lxml2 -TEST_LDFLAGS_RELEASE:= -Llib-release -rdynamic -lxml2 -lalib2std -lcppunit -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-rdynamic -shared -lxml2 +LLVM_LDFLAGS_RELEASE:=-rdynamic -shared -lxml2 +TEST_GCC_LDFLAGS_RELEASE:= -Llib-gcc-release -rdynamic -lxml2 -lalib2std -lcppunit -Wl,-rpath,. +TEST_LLVM_LDFLAGS_RELEASE:= -Llib-gcc-release -rdynamic -lxml2 -lalib2std -lcppunit -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) -TEST_OBJECTS_DEBUG:=$(patsubst test-src/%.cpp, test-obj-debug/%.o, $(shell find test-src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) +TEST_OBJECTS_GCC_DEBUG:=$(patsubst test-src/%.cpp, test-obj-gcc-debug/%.o, $(shell find test-src/ -name *cpp)) +TEST_OBJECTS_LLVM_DEBUG:=$(patsubst test-src/%.cpp, test-obj-llvm-debug/%.o, $(shell find test-src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) -TEST_OBJECTS_RELEASE:=$(patsubst test-src/%.cpp, test-obj-release/%.o, $(shell find test-src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp))) +TEST_OBJECTS_GCC_RELEASE:=$(patsubst test-src/%.cpp, test-obj-gcc-release/%.o, $(shell find test-src/ -name *cpp)) +TEST_OBJECTS_LLVM_RELEASE:=$(patsubst test-src/%.cpp, test-obj-llvm-release/%.o, $(shell find test-src/ -name *cpp)) -.PHONY: all build-debug build-tests-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release build-tests-gcc-debug build-tests-llvm-debug build-tests-gcc-release build-tests-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -30,6 +38,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -82,6 +100,16 @@ test-obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst test-obj-%-release/,%,$(patsubst test-obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -130,89 +158,154 @@ test-obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: unit-test-debug +gcc-debug: unit-test-gcc-debug -release: unit-test-release +llvm-debug: unit-test-llvm-debug -clean: clean-debug clean-release +gcc-release: unit-test-gcc-release + +llvm-release: unit-test-llvm-release + +gcc-clean: clean-gcc-debug clean-gcc-release + $(RM) -r doc + +llvm-clean: clean-llvm-debug clean-llvm-release $(RM) -r doc -test: unit-test-debug unit-test-release +gcc-test: unit-test-gcc-debug unit-test-gcc-release +llvm-test: unit-test-llvm-debug unit-test-llvm-release -lib-debug/$(LIBRARY): $(OBJECTS_DEBUG) obj-debug/ + +lib-gcc-debug/$(LIBRARY): $(OBJECTS_GCC_DEBUG) obj-gcc-debug/ + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) + +lib-llvm-debug/$(LIBRARY): $(OBJECTS_LLVM_DEBUG) obj-llvm-debug/ mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + clang++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) -lib-release/$(LIBRARY): $(OBJECTS_RELEASE) obj-release/ +lib-gcc-release/$(LIBRARY): $(OBJECTS_GCC_RELEASE) obj-gcc-release/ mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +lib-llvm-release/$(LIBRARY): $(OBJECTS_LLVM_RELEASE) obj-llvm-release/ + mkdir -p $(dir $@) + clang++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +obj-llvm-debug/: FORCE obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +obj-gcc-release/: FORCE obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" + +obj-llvm-release/: FORCE obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" -obj-debug/: FORCE obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ -obj-release/: FORCE obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3 -DRELEASE" +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -$(OBJECTS_DEBUG): obj-debug/ -$(OBJECTS_RELEASE): obj-release/ +build-gcc-debug: lib-gcc-debug/$(LIBRARY) +build-llvm-debug: lib-llvm-debug/$(LIBRARY) -build-debug: lib-debug/$(LIBRARY) +build-gcc-release: lib-gcc-release/$(LIBRARY) -build-release: lib-release/$(LIBRARY) +build-llvm-release: lib-llvm-release/$(LIBRARY) -test-bin-debug/$(TESTBIN): lib-debug/$(LIBRARY) $(TEST_OBJECTS_DEBUG) test-obj-debug/ +test-bin-gcc-debug/$(TESTBIN): lib-gcc-debug/$(LIBRARY) $(TEST_OBJECTS_GCC_DEBUG) test-obj-gcc-debug/ mkdir -p $(dir $@) - $(CXX) $(TEST_OBJECTS_DEBUG) -o $@ $(TEST_LDFLAGS_DEBUG) + g++ $(TEST_OBJECTS_GCC_DEBUG) -o $@ $(TEST_GCC_LDFLAGS_DEBUG) -test-bin-release/$(TESTBIN): lib-release/$(LIBRARY) $(TEST_OBJECTS_RELEASE) test-obj-release/ +test-bin-llvm-debug/$(TESTBIN): lib-llvm-debug/$(LIBRARY) $(TEST_OBJECTS_LLVM_DEBUG) test-obj-llvm-debug/ mkdir -p $(dir $@) - $(CXX) $(TEST_OBJECTS_RELEASE) -o $@ $(TEST_LDFLAGS_RELEASE) + clang++ $(TEST_OBJECTS_LLVM_DEBUG) -o $@ $(TEST_LLVM_LDFLAGS_DEBUG) + +test-bin-gcc-release/$(TESTBIN): lib-gcc-release/$(LIBRARY) $(TEST_OBJECTS_GCC_RELEASE) test-obj-gcc-release/ + mkdir -p $(dir $@) + g++ $(TEST_OBJECTS_GCC_RELEASE) -o $@ $(TEST_GCC_LDFLAGS_RELEASE) + +test-bin-llvm-release/$(TESTBIN): lib-llvm-release/$(LIBRARY) $(TEST_OBJECTS_LLVM_RELEASE) test-obj-llvm-release/ + mkdir -p $(dir $@) + clang++ $(TEST_OBJECTS_LLVM_RELEASE) -o $@ $(TEST_LLVM_LDFLAGS_RELEASE) + + + +test-obj-gcc-debug/: FORCE test-obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-gcc-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +test-obj-llvm-debug/: FORCE test-obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-llvm-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" + +test-obj-gcc-release/: FORCE test-obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-gcc-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" + +test-obj-llvm-release/: FORCE test-obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-llvm-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" + + + +$(TEST_OBJECTS_GCC_DEBUG): test-obj-gcc-debug/ + +$(TEST_OBJECTS_LLVM_DEBUG): test-obj-llvm-debug/ +$(TEST_OBJECTS_GCC_RELEASE): test-obj-gcc-release/ +$(TEST_OBJECTS_LLVM_RELEASE): test-obj-llvm-release/ -test-obj-debug/: FORCE test-obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-debug SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-g -O0 -DDEBUG" -test-obj-release/: FORCE test-obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-release SOURCES_BASE_DIR=test-src CXX_OTHER_FLAGS="-O3 -DRELEASE" +build-tests-gcc-debug: test-bin-gcc-debug/$(TESTBIN) +build-tests-llvm-debug: test-bin-llvm-debug/$(TESTBIN) -$(TEST_OBJECTS_DEBUG): test-obj-debug/ +build-tests-gcc-release: test-bin-gcc-release/$(TESTBIN) -$(TEST_OBJECTS_RELEASE): test-obj-release/ +build-tests-llvm-release: test-bin-llvm-release/$(TESTBIN) -build-tests-debug: test-bin-debug/$(TESTBIN) +unit-test-gcc-debug: build-tests-gcc-debug + LD_LIBRARY_PATH="lib-gcc-debug" test-bin-gcc-debug/$(TESTBIN) -build-tests-release: test-bin-release/$(TESTBIN) +unit-test-llvm-debug: build-tests-llvm-debug + LD_LIBRARY_PATH="lib-llvm-debug" test-bin-llvm-debug/$(TESTBIN) +unit-test-gcc-release: build-tests-gcc-release + LD_LIBRARY_PATH="lib-gcc-release" test-bin-gcc-release/$(TESTBIN) +unit-test-llvm-release: build-tests-llvm-release + LD_LIBRARY_PATH="lib-llvm-release" test-bin-llvm-release/$(TESTBIN) -unit-test-debug: build-tests-debug - LD_LIBRARY_PATH="lib-debug" test-bin-debug/$(TESTBIN) -unit-test-release: build-tests-release - LD_LIBRARY_PATH="lib-release" test-bin-release/$(TESTBIN) +clean-gcc-debug: + $(RM) -r *.o *.d lib-gcc-debug obj-gcc-debug test-bin-gcc-debug test-obj-gcc-debug CppUnitTestResults.xml +clean-llvm-debug: + $(RM) -r *.o *.d lib-llvm-debug obj-llvm-debug test-bin-llvm-debug test-obj-llvm-debug CppUnitTestResults.xml -clean-debug: - $(RM) -r *.o *.d lib-debug obj-debug test-bin-debug test-obj-debug CppUnitTestResults.xml +clean-gcc-release: + $(RM) -r *.o *.d lib-gcc-release obj-gcc-release test-bin-gcc-release test-obj-gcc-release CppUnitTestResults.xml -clean-release: - $(RM) -r *.o *.d lib-release obj-release test-bin-release test-obj-release CppUnitTestResults.xml +clean-llvm-release: + $(RM) -r *.o *.d lib-llvm-release obj-llvm-release test-bin-llvm-release test-obj-llvm-release CppUnitTestResults.xml diff --git a/aminimize2/makefile b/aminimize2/makefile index 4a183bfd5def68c5b03ec908f6ffead1ebce3ebd..b3ae8123e94c1190ec5ae02735a30e1132bf59b1 100644 --- a/aminimize2/makefile +++ b/aminimize2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/anormalize2/makefile b/anormalize2/makefile index b556a14005e30a03538e0d2c73daba9fb64017b4..7a40886a1d2db8003e834f40ac496ab1259bc28e 100644 --- a/anormalize2/makefile +++ b/anormalize2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/arand2/makefile b/arand2/makefile index 46bf63d29ae06af96bbe553468ed8df74ad40f65..be0908303706e01473245289711a841aef44366a 100644 --- a/arand2/makefile +++ b/arand2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/arename2/makefile b/arename2/makefile index c4f7d254db90d94fda2095da7574cd6ace41df5b..d919438febf335528316a7894183ec2ba675fdbb 100644 --- a/arename2/makefile +++ b/arename2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/areverse2/makefile b/areverse2/makefile index d53a86671cc94895a4228f7555f5f5fa11758b0c..9a1fed50ba45ae3bbb4f10cb9ce88fba63ea270e 100644 --- a/areverse2/makefile +++ b/areverse2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/arun2/makefile b/arun2/makefile index 2792bacaa85f32d9686ccae88bb0358e650341a3..5b6fad53a440796b78cd283572d3273949be13fc 100644 --- a/arun2/makefile +++ b/arun2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/astat2/makefile b/astat2/makefile index 625440458a1150d5098dad0d679dfcb9b6cf9ad7..ffb05e6845dfadbaba0cee0f7a482819ff0cb574 100644 --- a/astat2/makefile +++ b/astat2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/astringology2/makefile b/astringology2/makefile index cebf60b4ec9dc4f4b9d903c620dfb7d7eba3bb95..fbfd38d0c3e70a777e805a0c7b14f1d8de7dc43f 100644 --- a/astringology2/makefile +++ b/astringology2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/atrim2/makefile b/atrim2/makefile index e3827ed2f4dc0bc757218f54e9c36c79a2a6076b..ba1981de901a67ecaedd1b6a2bf0e3e198faa050 100644 --- a/atrim2/makefile +++ b/atrim2/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release diff --git a/makefile b/makefile index 43a811f4dab8cf60555ee763c1bfe1ba787a132c..7423b9e15e2e7d4a94b636b3db3c7f9e70fc6f72 100644 --- a/makefile +++ b/makefile @@ -53,196 +53,359 @@ endif SUBDIRS_WITH_MAKE = $(dir $(wildcard */makefile)) -.PHONY: $(addsuffix .all-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) \ - $(addsuffix .all-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS))\ - $(addsuffix .build-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) \ - $(addsuffix .build-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS))\ - $(addsuffix .build-debug-tests , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) \ - $(addsuffix .build-release-tests, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS))\ - all-debug build-debug build-test-debug unit-test-debug clean-debug \ - all-release build-release build-test-release unit-test-release clean-release \ - debug release clean doc all +.PHONY: $(addsuffix .all-gcc-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) \ + $(addsuffix .all-llvm-debug, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) \ + $(addsuffix .all-gcc-release , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS))\ + $(addsuffix .all-llvm-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS))\ + $(addsuffix .build-gcc-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) \ + $(addsuffix .build-llvm-debug, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) \ + $(addsuffix .build-gcc-release , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS))\ + $(addsuffix .build-llvm-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS))\ + $(addsuffix .build-gcc-debug-tests , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) \ + $(addsuffix .build-llvm-debug-tests, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) \ + $(addsuffix .build-gcc-release-tests , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS))\ + $(addsuffix .build-llvm-release-tests, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS))\ + all-gcc-debug build-gcc-debug build-test-gcc-debug unit-test-gcc-debug clean-gcc-debug \ + all-llvm-debug build-llvm-debug build-test-llvm-debug unit-test-llvm-debug clean-llvm-debug \ + all-gcc-release build-gcc-release build-test-gcc-release unit-test-gcc-release clean-gcc-release \ + all-llvm-release build-llvm-release build-test-llvm-release unit-test-llvm-release clean-llvm-release \ + gcc-debug gcc-release llvm-debug llvm-release clean doc all all: @echo "What to do master?" +debug: gcc-debug FORCE -debug: all-debug - mkdir -p $(addsuffix -debug, $(BINFOLDER)) - rm -rf $(addsuffix -debug, $(BINFOLDER))/* +gcc-debug: all-gcc-debug + mkdir -p $(addsuffix -gcc-debug, $(BINFOLDER)) + rm -rf $(addsuffix -gcc-debug, $(BINFOLDER))/* for dir in $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB); do \ - cp $$dir/lib-debug/* $(addsuffix -debug, $(BINFOLDER)); \ + cp $$dir/lib-gcc-debug/* $(addsuffix -gcc-debug, $(BINFOLDER)); \ done for dir in $(SUBDIRS_BINS); do \ - cp $$dir/bin-debug/* $(addsuffix -debug, $(BINFOLDER)); \ - done - ./tests.examples.sh debug - ./tests.adeterminize.sh debug - ./tests.aconversion.sh debug - ./tests.aderivation.aintegral.sh debug - ./tests.astringology.sh debug - ./tests.anormalize.sh debug - -release: all-release - mkdir -p $(addsuffix -release, $(BINFOLDER)) - rm -rf $(addsuffix -release, $(BINFOLDER))/* + cp $$dir/bin-gcc-debug/* $(addsuffix -gcc-debug, $(BINFOLDER)); \ + done + ./tests.examples.sh gcc-debug + ./tests.adeterminize.sh gcc-debug + ./tests.aconversion.sh gcc-debug + ./tests.aderivation.aintegral.sh gcc-debug + ./tests.astringology.sh gcc-debug + ./tests.anormalize.sh gcc-debug + +llvm-debug: all-llvm-debug + mkdir -p $(addsuffix -llvm-debug, $(BINFOLDER)) + rm -rf $(addsuffix -llvm-debug, $(BINFOLDER))/* + for dir in $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB); do \ + cp $$dir/lib-llvm-debug/* $(addsuffix -llvm-debug, $(BINFOLDER)); \ + done + for dir in $(SUBDIRS_BINS); do \ + cp $$dir/bin-llvm-debug/* $(addsuffix -llvm-debug, $(BINFOLDER)); \ + done + ./tests.examples.sh llvm-debug + ./tests.adeterminize.sh llvm-debug + ./tests.aconversion.sh llvm-debug + ./tests.aderivation.aintegral.sh llvm-debug + ./tests.astringology.sh llvm-debug + ./tests.anormalize.sh llvm-debug + +release: gcc-release FORCE + +gcc-release: all-gcc-release + mkdir -p $(addsuffix -gcc-release, $(BINFOLDER)) + rm -rf $(addsuffix -gcc-release, $(BINFOLDER))/* for dir in $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB); do \ - cp $$dir/lib-release/* $(addsuffix -release, $(BINFOLDER)); \ + cp $$dir/lib-gcc-release/* $(addsuffix -gcc-release, $(BINFOLDER)); \ done for dir in $(SUBDIRS_BINS); do \ - cp $$dir/bin-release/* $(addsuffix -release, $(BINFOLDER)); \ + cp $$dir/bin-gcc-release/* $(addsuffix -gcc-release, $(BINFOLDER)); \ + done + ./tests.examples.sh gcc-release + ./tests.adeterminize.sh gcc-release + ./tests.aconversion.sh gcc-release + ./tests.aderivation.aintegral.sh gcc-release + ./tests.astringology.sh gcc-release + ./tests.anormalize.sh gcc-release + +llvm-release: all-llvm-release + mkdir -p $(addsuffix -llvm-release, $(BINFOLDER)) + rm -rf $(addsuffix -llvm-release, $(BINFOLDER))/* + for dir in $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB); do \ + cp $$dir/lib-llvm-release/* $(addsuffix -llvm-release, $(BINFOLDER)); \ done - ./tests.examples.sh release - ./tests.adeterminize.sh release - ./tests.aconversion.sh release - ./tests.aderivation.aintegral.sh release - ./tests.astringology.sh release - ./tests.anormalize.sh release + for dir in $(SUBDIRS_BINS); do \ + cp $$dir/bin-llvm-release/* $(addsuffix -llvm-release, $(BINFOLDER)); \ + done + ./tests.examples.sh llvm-release + ./tests.adeterminize.sh llvm-release + ./tests.aconversion.sh llvm-release + ./tests.aderivation.aintegral.sh llvm-release + ./tests.astringology.sh llvm-release + ./tests.anormalize.sh llvm-release + +clean : clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release + $(RM) -r bin-gcc-debug bin-llvm-debug bin-gcc-release bin-llvm-release + + + +all-gcc-debug : $(addsuffix .all-gcc-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) + +all-llvm-debug : $(addsuffix .all-llvm-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) + +all-gcc-release : $(addsuffix .all-gcc-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) + +all-llvm-release : $(addsuffix .all-llvm-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) + + + +build-gcc-debug : $(addsuffix .build-gcc-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) + +build-llvm-debug : $(addsuffix .build-llvm-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) + +build-gcc-release: $(addsuffix .build-gcc-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) + +build-llvm-release: $(addsuffix .build-llvm-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) + + + +build-tests-gcc-debug : $(addsuffix .build-tests-gcc-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB)) + +build-tests-llvm-debug : $(addsuffix .build-tests-llvm-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB)) + +build-tests-gcc-release: $(addsuffix .build-tests-gcc-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB)) + +build-tests-llvm-release: $(addsuffix .build-tests-llvm-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB)) + -clean : clean-debug clean-release - $(RM) -r bin-debug bin-release +$(addsuffix .all-gcc-debug, $(STD_LIB)): + $(MAKE) gcc-debug -C $(basename $@) +$(addsuffix .all-gcc-debug, $(CORE_LIB)): $(addsuffix .all-gcc-debug, $(STD_LIB)) + $(MAKE) gcc-debug -C $(basename $@) -all-debug : $(addsuffix .all-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) +$(addsuffix .all-gcc-debug, $(ALGO_LIB)): $(addsuffix .all-gcc-debug, $(CORE_LIB)) + $(MAKE) gcc-debug -C $(basename $@) -all-release : $(addsuffix .all-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) +$(addsuffix .all-gcc-debug, $(ELGO_LIB)): $(addsuffix .all-gcc-debug, $(ALGO_LIB)) + $(MAKE) gcc-debug -C $(basename $@) +$(addsuffix .all-gcc-debug, $(SUBDIRS_BINS)): $(addsuffix .all-gcc-debug, $(ELGO_LIB)) + $(MAKE) gcc-debug -C $(basename $@) +$(addsuffix .all-llvm-debug, $(STD_LIB)): + $(MAKE) llvm-debug -C $(basename $@) -build-debug : $(addsuffix .build-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) +$(addsuffix .all-llvm-debug, $(CORE_LIB)): $(addsuffix .all-llvm-debug, $(STD_LIB)) + $(MAKE) llvm-debug -C $(basename $@) -build-release: $(addsuffix .build-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB) $(SUBDIRS_BINS)) +$(addsuffix .all-llvm-debug, $(ALGO_LIB)): $(addsuffix .all-llvm-debug, $(CORE_LIB)) + $(MAKE) llvm-debug -C $(basename $@) +$(addsuffix .all-llvm-debug, $(ELGO_LIB)): $(addsuffix .all-llvm-debug, $(ALGO_LIB)) + $(MAKE) llvm-debug -C $(basename $@) +$(addsuffix .all-llvm-debug, $(SUBDIRS_BINS)): $(addsuffix .all-llvm-debug, $(ELGO_LIB)) + $(MAKE) llvm-debug -C $(basename $@) -build-tests-debug : $(addsuffix .build-tests-debug , $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB)) -build-tests-release: $(addsuffix .build-tests-release, $(STD_LIB) $(CORE_LIB) $(ALGO_LIB) $(ELGO_LIB)) +$(addsuffix .all-gcc-release, $(STD_LIB)): + $(MAKE) gcc-release -C $(basename $@) +$(addsuffix .all-gcc-release, $(CORE_LIB)): $(addsuffix .all-gcc-release, $(STD_LIB)) + $(MAKE) gcc-release -C $(basename $@) -$(addsuffix .all-debug, $(STD_LIB)): - $(MAKE) debug -C $(basename $@) +$(addsuffix .all-gcc-release, $(ALGO_LIB)): $(addsuffix .all-gcc-release, $(CORE_LIB)) + $(MAKE) gcc-release -C $(basename $@) -$(addsuffix .all-debug, $(CORE_LIB)): $(addsuffix .all-debug, $(STD_LIB)) - $(MAKE) debug -C $(basename $@) +$(addsuffix .all-gcc-release, $(ELGO_LIB)): $(addsuffix .all-gcc-release, $(ALGO_LIB)) + $(MAKE) gcc-release -C $(basename $@) -$(addsuffix .all-debug, $(ALGO_LIB)): $(addsuffix .all-debug, $(CORE_LIB)) - $(MAKE) debug -C $(basename $@) +$(addsuffix .all-gcc-release, $(SUBDIRS_BINS)): $(addsuffix .all-gcc-release, $(ELGO_LIB)) + $(MAKE) gcc-release -C $(basename $@) -$(addsuffix .all-debug, $(ELGO_LIB)): $(addsuffix .all-debug, $(ALGO_LIB)) - $(MAKE) debug -C $(basename $@) +$(addsuffix .all-llvm-release, $(STD_LIB)): + $(MAKE) llvm-release -C $(basename $@) -$(addsuffix .all-debug, $(SUBDIRS_BINS)): $(addsuffix .all-debug, $(ELGO_LIB)) - $(MAKE) debug -C $(basename $@) +$(addsuffix .all-llvm-release, $(CORE_LIB)): $(addsuffix .all-llvm-release, $(STD_LIB)) + $(MAKE) llvm-release -C $(basename $@) +$(addsuffix .all-llvm-release, $(ALGO_LIB)): $(addsuffix .all-llvm-release, $(CORE_LIB)) + $(MAKE) llvm-release -C $(basename $@) +$(addsuffix .all-llvm-release, $(ELGO_LIB)): $(addsuffix .all-llvm-release, $(ALGO_LIB)) + $(MAKE) llvm-release -C $(basename $@) -$(addsuffix .all-release, $(STD_LIB)): - $(MAKE) release -C $(basename $@) +$(addsuffix .all-llvm-release, $(SUBDIRS_BINS)): $(addsuffix .all-llvm-release, $(ELGO_LIB)) + $(MAKE) llvm-release -C $(basename $@) -$(addsuffix .all-release, $(CORE_LIB)): $(addsuffix .all-release, $(STD_LIB)) - $(MAKE) release -C $(basename $@) -$(addsuffix .all-release, $(ALGO_LIB)): $(addsuffix .all-release, $(CORE_LIB)) - $(MAKE) release -C $(basename $@) -$(addsuffix .all-release, $(ELGO_LIB)): $(addsuffix .all-release, $(ALGO_LIB)) - $(MAKE) release -C $(basename $@) +$(addsuffix .build-gcc-debug, $(STD_LIB)): + $(MAKE) build-gcc-debug -C $(basename $@) -$(addsuffix .all-release, $(SUBDIRS_BINS)): $(addsuffix .all-release, $(ELGO_LIB)) - $(MAKE) release -C $(basename $@) +$(addsuffix .build-gcc-debug, $(CORE_LIB)): $(addsuffix .build-gcc-debug, $(STD_LIB)) + $(MAKE) build-gcc-debug -C $(basename $@) +$(addsuffix .build-gcc-debug, $(ALGO_LIB)): $(addsuffix .build-gcc-debug, $(CORE_LIB)) + $(MAKE) build-gcc-debug -C $(basename $@) +$(addsuffix .build-gcc-debug, $(ELGO_LIB)): $(addsuffix .build-gcc-debug, $(ALGO_LIB)) + $(MAKE) build-gcc-debug -C $(basename $@) -$(addsuffix .build-debug, $(STD_LIB)): - $(MAKE) build-debug -C $(basename $@) +$(addsuffix .build-gcc-debug, $(SUBDIRS_BINS)): $(addsuffix .build-gcc-debug, $(ELGO_LIB)) + $(MAKE) build-gcc-debug -C $(basename $@) -$(addsuffix .build-debug, $(CORE_LIB)): $(addsuffix .build-debug, $(STD_LIB)) - $(MAKE) build-debug -C $(basename $@) +$(addsuffix .build-llvm-debug, $(STD_LIB)): + $(MAKE) build-llvm-debug -C $(basename $@) -$(addsuffix .build-debug, $(ALGO_LIB)): $(addsuffix .build-debug, $(CORE_LIB)) - $(MAKE) build-debug -C $(basename $@) +$(addsuffix .build-llvm-debug, $(CORE_LIB)): $(addsuffix .build-llvm-debug, $(STD_LIB)) + $(MAKE) build-llvm-debug -C $(basename $@) -$(addsuffix .build-debug, $(ELGO_LIB)): $(addsuffix .build-debug, $(ALGO_LIB)) - $(MAKE) build-debug -C $(basename $@) +$(addsuffix .build-llvm-debug, $(ALGO_LIB)): $(addsuffix .build-llvm-debug, $(CORE_LIB)) + $(MAKE) build-llvm-debug -C $(basename $@) -$(addsuffix .build-debug, $(SUBDIRS_BINS)): $(addsuffix .build-debug, $(ELGO_LIB)) - $(MAKE) build-debug -C $(basename $@) +$(addsuffix .build-llvm-debug, $(ELGO_LIB)): $(addsuffix .build-llvm-debug, $(ALGO_LIB)) + $(MAKE) build-llvm-debug -C $(basename $@) +$(addsuffix .build-llvm-debug, $(SUBDIRS_BINS)): $(addsuffix .build-llvm-debug, $(ELGO_LIB)) + $(MAKE) build-llvm-debug -C $(basename $@) -$(addsuffix .build-release, $(STD_LIB)): - $(MAKE) build-release -C $(basename $@) -$(addsuffix .build-release, $(CORE_LIB)): $(addsuffix .build-release, $(STD_LIB)) - $(MAKE) build-release -C $(basename $@) +$(addsuffix .build-gcc-release, $(STD_LIB)): + $(MAKE) build-gcc-release -C $(basename $@) -$(addsuffix .build-release, $(ALGO_LIB)): $(addsuffix .build-release, $(CORE_LIB)) - $(MAKE) build-release -C $(basename $@) +$(addsuffix .build-gcc-release, $(CORE_LIB)): $(addsuffix .build-gcc-release, $(STD_LIB)) + $(MAKE) build-gcc-release -C $(basename $@) -$(addsuffix .build-release, $(ELGO_LIB)): $(addsuffix .build-release, $(ALGO_LIB)) - $(MAKE) build-release -C $(basename $@) +$(addsuffix .build-gcc-release, $(ALGO_LIB)): $(addsuffix .build-gcc-release, $(CORE_LIB)) + $(MAKE) build-gcc-release -C $(basename $@) -$(addsuffix .build-release, $(SUBDIRS_BINS)): $(addsuffix .build-release, $(ELGO_LIB)) - $(MAKE) build-release -C $(basename $@) +$(addsuffix .build-gcc-release, $(ELGO_LIB)): $(addsuffix .build-gcc-release, $(ALGO_LIB)) + $(MAKE) build-gcc-release -C $(basename $@) +$(addsuffix .build-gcc-release, $(SUBDIRS_BINS)): $(addsuffix .build-gcc-release, $(ELGO_LIB)) + $(MAKE) build-gcc-release -C $(basename $@) +$(addsuffix .build-llvm-release, $(STD_LIB)): + $(MAKE) build-llvm-release -C $(basename $@) -$(addsuffix .build-tests-debug, $(STD_LIB)): $(addsuffix .build-debug, $(STD_LIB)) - $(MAKE) build-tests-debug -C $(basename $@) +$(addsuffix .build-llvm-release, $(CORE_LIB)): $(addsuffix .build-llvm-release, $(STD_LIB)) + $(MAKE) build-llvm-release -C $(basename $@) -$(addsuffix .build-tests-debug, $(CORE_LIB)): $(addsuffix .build-tests-debug, $(STD_LIB)) $(addsuffix .build-debug, $(CORE_LIB)) - $(MAKE) build-tests-debug -C $(basename $@) +$(addsuffix .build-llvm-release, $(ALGO_LIB)): $(addsuffix .build-llvm-release, $(CORE_LIB)) + $(MAKE) build-llvm-release -C $(basename $@) -$(addsuffix .build-tests-debug, $(ALGO_LIB)): $(addsuffix .build-tests-debug, $(CORE_LIB)) $(addsuffix .build-debug, $(ALGO_LIB)) - $(MAKE) build-tests-debug -C $(basename $@) +$(addsuffix .build-llvm-release, $(ELGO_LIB)): $(addsuffix .build-llvm-release, $(ALGO_LIB)) + $(MAKE) build-llvm-release -C $(basename $@) -$(addsuffix .build-tests-debug, $(ELGO_LIB)): $(addsuffix .build-tests-debug, $(ALGO_LIB)) $(addsuffix .build-debug, $(ELGO_LIB)) - $(MAKE) build-tests-debug -C $(basename $@) +$(addsuffix .build-llvm-release, $(SUBDIRS_BINS)): $(addsuffix .build-llvm-release, $(ELGO_LIB)) + $(MAKE) build-llvm-release -C $(basename $@) -$(addsuffix .build-tests-release, $(STD_LIB)): $(addsuffix .build-release, $(STD_LIB)) - $(MAKE) build-tests-release -C $(basename $@) +$(addsuffix .build-tests-gcc-debug, $(STD_LIB)): $(addsuffix .build-gcc-debug, $(STD_LIB)) + $(MAKE) build-tests-gcc-debug -C $(basename $@) -$(addsuffix .build-tests-release, $(CORE_LIB)): $(addsuffix .build-tests-release, $(STD_LIB)) $(addsuffix .build-release, $(CORE_LIB)) - $(MAKE) build-tests-release -C $(basename $@) +$(addsuffix .build-tests-gcc-debug, $(CORE_LIB)): $(addsuffix .build-tests-gcc-debug, $(STD_LIB)) $(addsuffix .build-gcc-debug, $(CORE_LIB)) + $(MAKE) build-tests-gcc-debug -C $(basename $@) -$(addsuffix .build-tests-release, $(ALGO_LIB)): $(addsuffix .build-tests-release, $(CORE_LIB)) $(addsuffix .build-release, $(ALGO_LIB)) - $(MAKE) build-tests-release -C $(basename $@) +$(addsuffix .build-tests-gcc-debug, $(ALGO_LIB)): $(addsuffix .build-tests-gcc-debug, $(CORE_LIB)) $(addsuffix .build-gcc-debug, $(ALGO_LIB)) + $(MAKE) build-tests-gcc-debug -C $(basename $@) -$(addsuffix .build-tests-release, $(ELGO_LIB)): $(addsuffix .build-tests-release, $(ALGO_LIB)) $(addsuffix .build-release, $(ELGO_LIB)) - $(MAKE) build-tests-release -C $(basename $@) +$(addsuffix .build-tests-gcc-debug, $(ELGO_LIB)): $(addsuffix .build-tests-gcc-debug, $(ALGO_LIB)) $(addsuffix .build-gcc-debug, $(ELGO_LIB)) + $(MAKE) build-tests-gcc-debug -C $(basename $@) +$(addsuffix .build-tests-llvm-debug, $(STD_LIB)): $(addsuffix .build-llvm-debug, $(STD_LIB)) + $(MAKE) build-tests-llvm-debug -C $(basename $@) +$(addsuffix .build-tests-llvm-debug, $(CORE_LIB)): $(addsuffix .build-tests-llvm-debug, $(STD_LIB)) $(addsuffix .build-llvm-debug, $(CORE_LIB)) + $(MAKE) build-tests-llvm-debug -C $(basename $@) -clean-debug: +$(addsuffix .build-tests-llvm-debug, $(ALGO_LIB)): $(addsuffix .build-tests-llvm-debug, $(CORE_LIB)) $(addsuffix .build-llvm-debug, $(ALGO_LIB)) + $(MAKE) build-tests-llvm-debug -C $(basename $@) + +$(addsuffix .build-tests-llvm-debug, $(ELGO_LIB)): $(addsuffix .build-tests-llvm-debug, $(ALGO_LIB)) $(addsuffix .build-llvm-debug, $(ELGO_LIB)) + $(MAKE) build-tests-llvm-debug -C $(basename $@) + + + +$(addsuffix .build-tests-gcc-release, $(STD_LIB)): $(addsuffix .build-gcc-release, $(STD_LIB)) + $(MAKE) build-tests-gcc-release -C $(basename $@) + +$(addsuffix .build-tests-gcc-release, $(CORE_LIB)): $(addsuffix .build-tests-gcc-release, $(STD_LIB)) $(addsuffix .build-gcc-release, $(CORE_LIB)) + $(MAKE) build-tests-gcc-release -C $(basename $@) + +$(addsuffix .build-tests-gcc-release, $(ALGO_LIB)): $(addsuffix .build-tests-gcc-release, $(CORE_LIB)) $(addsuffix .build-gcc-release, $(ALGO_LIB)) + $(MAKE) build-tests-gcc-release -C $(basename $@) + +$(addsuffix .build-tests-gcc-release, $(ELGO_LIB)): $(addsuffix .build-tests-gcc-release, $(ALGO_LIB)) $(addsuffix .build-gcc-release, $(ELGO_LIB)) + $(MAKE) build-tests-gcc-release -C $(basename $@) + +$(addsuffix .build-tests-llvm-release, $(STD_LIB)): $(addsuffix .build-llvm-release, $(STD_LIB)) + $(MAKE) build-tests-llvm-release -C $(basename $@) + +$(addsuffix .build-tests-llvm-release, $(CORE_LIB)): $(addsuffix .build-tests-llvm-release, $(STD_LIB)) $(addsuffix .build-llvm-release, $(CORE_LIB)) + $(MAKE) build-tests-llvm-release -C $(basename $@) + +$(addsuffix .build-tests-llvm-release, $(ALGO_LIB)): $(addsuffix .build-tests-llvm-release, $(CORE_LIB)) $(addsuffix .build-llvm-release, $(ALGO_LIB)) + $(MAKE) build-tests-llvm-release -C $(basename $@) + +$(addsuffix .build-tests-llvm-release, $(ELGO_LIB)): $(addsuffix .build-tests-llvm-release, $(ALGO_LIB)) $(addsuffix .build-llvm-release, $(ELGO_LIB)) + $(MAKE) build-tests-llvm-release -C $(basename $@) + + + +clean-gcc-debug: for dir in $(SUBDIRS_WITH_MAKE); do \ - $(MAKE) clean-debug -C $$dir; \ + $(MAKE) clean-gcc-debug -C $$dir; \ done -clean-release: +clean-llvm-debug: for dir in $(SUBDIRS_WITH_MAKE); do \ - $(MAKE) clean-release -C $$dir; \ + $(MAKE) clean-llvm-debug -C $$dir; \ done +clean-gcc-release: + for dir in $(SUBDIRS_WITH_MAKE); do \ + $(MAKE) clean-gcc-release -C $$dir; \ + done + +clean-llvm-release: + for dir in $(SUBDIRS_WITH_MAKE); do \ + $(MAKE) clean-llvm-release -C $$dir; \ + done + + + +unit-test-gcc-debug: + for dir in $(CORE_LIB) $(ALGO_LIB); do \ + $(MAKE) unit-test-gcc-debug -C $$dir; \ + done +unit-test-llvm-debug: + for dir in $(CORE_LIB) $(ALGO_LIB); do \ + $(MAKE) unit-test-llvm-debug -C $$dir; \ + done -unit-test-debug: +unit-test-gcc-release: for dir in $(CORE_LIB) $(ALGO_LIB); do \ - $(MAKE) unit-test-debug -C $$dir; \ + $(MAKE) unit-test-gcc-release -C $$dir; \ done -unit-test-verbose: +unit-test-llvm-release: for dir in $(CORE_LIB) $(ALGO_LIB); do \ - $(MAKE) unit-test-release -C $$dir; \ + $(MAKE) unit-test-llvm-release -C $$dir; \ done +FORCE: + + + doc: $(MAKE) doc -C alib2data $(MAKE) doc -C alib2algo diff --git a/tniceprint/makefile b/tniceprint/makefile index a3069467e1208c8ef1c2f62f0a15773bb6e0a225..a880042677397eec1da08b786e5ce71f939e5952 100644 --- a/tniceprint/makefile +++ b/tniceprint/makefile @@ -8,15 +8,19 @@ endef export NEW_LINE -LDFLAGS_DEBUG:=-L../alib2std/lib-debug -L../alib2data/lib-debug -L../alib2algo/lib-debug -L../alib2elgo/lib-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_DEBUG:=-L../alib2std/lib-gcc-debug -L../alib2data/lib-gcc-debug -L../alib2algo/lib-gcc-debug -L../alib2elgo/lib-gcc-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_DEBUG:=-L../alib2std/lib-llvm-debug -L../alib2data/lib-llvm-debug -L../alib2algo/lib-llvm-debug -L../alib2elgo/lib-llvm-debug -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -LDFLAGS_RELEASE:=-L../alib2std/lib-release -L../alib2data/lib-release -L../alib2algo/lib-release -L../alib2elgo/lib-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +GCC_LDFLAGS_RELEASE:=-L../alib2std/lib-gcc-release -L../alib2data/lib-gcc-release -L../alib2algo/lib-gcc-release -L../alib2elgo/lib-gcc-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. +LLVM_LDFLAGS_RELEASE:=-L../alib2std/lib-llvm-release -L../alib2data/lib-llvm-release -L../alib2algo/lib-llvm-release -L../alib2elgo/lib-llvm-release -rdynamic -lxml2 -lalib2std -lalib2data -lalib2algo -lalib2elgo -Wl,-rpath,. -OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_DEBUG:=$(patsubst src/%.cpp, obj-gcc-debug/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_DEBUG:=$(patsubst src/%.cpp, obj-llvm-debug/%.o, $(shell find src/ -name *cpp)) -OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_GCC_RELEASE:=$(patsubst src/%.cpp, obj-gcc-release/%.o, $(shell find src/ -name *cpp)) +OBJECTS_LLVM_RELEASE:=$(patsubst src/%.cpp, obj-llvm-release/%.o, $(shell find src/ -name *cpp)) -.PHONY: all build-debug clean-debug doc +.PHONY: all build-gcc-debug build-llvm-debug build-gcc-release build-llvm-release clean-gcc-debug clean-llvm-debug clean-gcc-release clean-llvm-release doc all: @echo "What to do master?" @@ -25,6 +29,16 @@ obj%/makefile: makefile mkdir -p $(dir $@) echo "\ SHELL:=/bin/bash$${NEW_LINE}\ + CXXX:=$(patsubst obj-%-release/,%,$(patsubst obj-%-debug/,%,$(dir $@)))$${NEW_LINE}\ + ifeq (gcc, \$$(CXXX))$${NEW_LINE}\ + CXX:=g++$${NEW_LINE}\ + else$${NEW_LINE}\ + ifeq (llvm, \$$(CXXX))$${NEW_LINE}\ + CXX:=clang++$${NEW_LINE}\ + else$${NEW_LINE}\ + \$$(error \"invalid compiler\")$${NEW_LINE}\ + endif$${NEW_LINE}\ + endif$${NEW_LINE}\ SRCDIR:=$${NEW_LINE}\ DEPTH:=$${NEW_LINE}\ OBJECTS_BASE_DIR:=$${NEW_LINE}\ @@ -73,49 +87,85 @@ obj%/makefile: makefile $${NEW_LINE}\ -include \$$(DEPENDENCIES)" > $@ -debug: build-debug +gcc-debug: build-gcc-debug -release: build-release +llvm-debug: build-llvm-debug -clean: clean-debug clean-release +gcc-release: build-gcc-release + +llvm-release: build-llvm-release + +clean: clean-gcc-debug clean-gcc-release $(RM) -r doc +clean: clean-llvm-debug clean-llvm-release + $(RM) -r doc -bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + +bin-gcc-debug/$(EXECUTABLE): obj-gcc-debug/ $(OBJECTS_GCC_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + g++ $(OBJECTS_GCC_DEBUG) -o $@ $(GCC_LDFLAGS_DEBUG) -bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) +bin-llvm-debug/$(EXECUTABLE): obj-llvm-debug/ $(OBJECTS_LLVM_DEBUG) mkdir -p $(dir $@) - $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + clangg++ $(OBJECTS_LLVM_DEBUG) -o $@ $(LLVM_LDFLAGS_DEBUG) + +bin-gcc-release/$(EXECUTABLE): obj-gcc-release/ $(OBJECTS_GCC_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_GCC_RELEASE) -o $@ $(GCC_LDFLAGS_RELEASE) + +bin-llvm-release/$(EXECUTABLE): obj-llvm-release/ $(OBJECTS_LLVM_RELEASE) + mkdir -p $(dir $@) + g++ $(OBJECTS_LLVM_RELEASE) -o $@ $(LLVM_LDFLAGS_RELEASE) + + + +obj-gcc-debug/: FORCE | obj-gcc-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-llvm-debug/: FORCE | obj-llvm-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" + +obj-gcc-release/: FORCE | obj-gcc-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-gcc-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + +obj-llvm-release/: FORCE | obj-llvm-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-llvm-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_GCC_DEBUG): obj-gcc-debug/ +$(OBJECTS_LLVM_DEBUG): obj-llvm-debug/ +$(OBJECTS_GCC_RELEASE): obj-gcc-release/ -obj-debug/: FORCE | obj-debug/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-g -O0" +$(OBJECTS_LLVM_RELEASE): obj-llvm-release/ -obj-release/: FORCE | obj-release/makefile - $(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release SOURCES_BASE_DIR=src CXX_OTHER_FLAGS="-O3" +build-gcc-debug: bin-gcc-debug/$(EXECUTABLE) -$(OBJECTS_DEBUG): obj-debug/ +build-llvm-debug: bin-llvm-debug/$(EXECUTABLE) -$(OBJECTS_RELEASE): obj-release/ +build-gcc-release: bin-gcc-release/$(EXECUTABLE) +build-llvm-release: bin-llvm-release/$(EXECUTABLE) -build-debug: bin-debug/$(EXECUTABLE) -build-release: bin-release/$(EXECUTABLE) +clean-gcc-debug: + $(RM) -r *.o *.d bin-gcc-debug obj-gcc-debug +clean-llvm-debug: + $(RM) -r *.o *.d bin-llvm-debug obj-llvm-debug -clean-debug: - $(RM) -r *.o *.d bin-debug obj-debug +clean-gcc-release: + $(RM) -r *.o *.d bin-gcc-release obj-gcc-release -clean-release: - $(RM) -r *.o *.d bin-release obj-release +clean-llvm-release: + $(RM) -r *.o *.d bin-llvm-release obj-llvm-release