1THE_OS := $(shell uname -s) 2 3default: 4 @echo "Detected OS: ${THE_OS}" 5 $(MAKE) CC=gcc CXX=g++ \ 6 CXXFLAGS='$(CXXFLAGS) -Wall -Wextra -Wno-ignored-attributes -pipe -O3 -g -ffast-math -flto -march=native -std=c++14 -DNDEBUG' \ 7 LDFLAGS='$(LDFLAGS) -flto -g' \ 8 leelaz 9 10debug: 11 @echo "Detected OS: ${THE_OS}" 12 $(MAKE) CC=gcc CXX=g++ \ 13 CXXFLAGS='$(CXXFLAGS) -Wall -Wextra -Wno-ignored-attributes -pipe -Og -g -std=c++14' \ 14 LDFLAGS='$(LDFLAGS) -g' \ 15 leelaz 16 17clang: 18 @echo "Detected OS: ${THE_OS}" 19 $(MAKE) CC=clang CXX=clang++ \ 20 CXXFLAGS='$(CXXFLAGS) -Wall -Wextra -Wno-missing-braces -Wno-mismatched-tags -O3 -ffast-math -flto -march=native -std=c++14 -DNDEBUG' \ 21 LDFLAGS='$(LDFLAGS) -flto -fuse-linker-plugin' \ 22 leelaz 23 24DYNAMIC_LIBS = -lboost_system -lboost_filesystem -lboost_program_options -lpthread -lz 25LIBS = 26 27ifeq ($(THE_OS),Linux) 28# for Linux with OpenBLAS 29 CXXFLAGS += -I/usr/include/openblas -I./Eigen 30 DYNAMIC_LIBS += -lopenblas 31 DYNAMIC_LIBS += -lOpenCL 32endif 33ifeq ($(THE_OS),Darwin) 34# for macOS (comment out the Linux part) 35 LIBS += -framework Accelerate 36 LIBS += -framework OpenCL 37 CXXFLAGS += -I./Eigen 38 CXXFLAGS += -I/System/Library/Frameworks/Accelerate.framework/Versions/Current/Headers 39endif 40 41# for MKL instead of OpenBLAS 42#DYNAMIC_LIBS += -lmkl_rt 43#CXXFLAGS += -I/opt/intel/mkl/include 44#LDFLAGS += -L/opt/intel/mkl/lib/intel64/ 45 46CXXFLAGS += -I. 47CPPFLAGS += -MD -MP 48 49sources = Network.cpp FullBoard.cpp KoState.cpp Training.cpp \ 50 TimeControl.cpp UCTSearch.cpp GameState.cpp Leela.cpp \ 51 SGFParser.cpp Timing.cpp Utils.cpp FastBoard.cpp \ 52 SGFTree.cpp Zobrist.cpp FastState.cpp GTP.cpp Random.cpp \ 53 SMP.cpp UCTNode.cpp UCTNodePointer.cpp UCTNodeRoot.cpp \ 54 OpenCL.cpp OpenCLScheduler.cpp NNCache.cpp Tuner.cpp CPUPipe.cpp 55 56objects = $(sources:.cpp=.o) 57deps = $(sources:%.cpp=%.d) 58 59-include $(deps) 60 61%.o: %.cpp 62 $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $< 63 64leelaz: $(objects) 65 $(CXX) $(LDFLAGS) -o $@ $^ $(LIBS) $(DYNAMIC_LIBS) 66 67clean: 68 -$(RM) leelaz $(objects) $(deps) 69 70.PHONY: clean default debug clang 71