You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							158 lines
						
					
					
						
							4.7 KiB
						
					
					
				
			
		
		
	
	
							158 lines
						
					
					
						
							4.7 KiB
						
					
					
				OS_SUPPORT = 
 | 
						|
MonetDB_LIB = 
 | 
						|
MonetDB_INC = 
 | 
						|
Defines = 
 | 
						|
CXXFLAGS = --std=c++2a
 | 
						|
ifeq ($(AQ_DEBUG), 1)
 | 
						|
	OPTFLAGS = -g3 -fsanitize=address -fsanitize=leak
 | 
						|
	LINKFLAGS = 
 | 
						|
else
 | 
						|
	OPTFLAGS = -O3 -DNDEBUG -fno-stack-protector 
 | 
						|
	LINKFLAGS = -flto -s
 | 
						|
endif
 | 
						|
SHAREDFLAGS = -shared  
 | 
						|
FPIC = -fPIC
 | 
						|
_COMPILER = $(shell $(CXX) --version | grep -q clang && echo clang|| echo gcc) 
 | 
						|
COMPILER = $(strip $(_COMPILER))
 | 
						|
LIBTOOL = ar rcs
 | 
						|
USELIB_FLAG = -Wl,--whole-archive,libaquery.a -Wl,-no-whole-archive
 | 
						|
LIBAQ_SRC = server/monetdb_conn.cpp server/libaquery.cpp 
 | 
						|
LIBAQ_OBJ = monetdb_conn.o libaquery.o
 | 
						|
SEMANTIC_INTERPOSITION = -fno-semantic-interposition
 | 
						|
RANLIB = ranlib
 | 
						|
_LINKER_BINARY = $(shell `$(CXX) -print-prog-name=ld` -v 2>&1 | grep -q LLVM && echo lld || echo ld)
 | 
						|
LINKER_BINARY = $(strip $(_LINKER_BINARY))
 | 
						|
ifeq ($(LINKER_BINARY), ld)
 | 
						|
	LINKER_FLAGS = -Wl,--allow-multiple-definition
 | 
						|
else
 | 
						|
	LINKER_FLAGS =
 | 
						|
endif
 | 
						|
 | 
						|
ifeq ($(COMPILER), clang)
 | 
						|
	CLANG_GE_10 = $(shell expr `$(CXX) -dumpversion | cut -f1 -d.` \>= 10)
 | 
						|
	ifneq ($(CLANG_GE_10), 1)
 | 
						|
		SEMANTIC_INTERPOSITION = 
 | 
						|
	endif
 | 
						|
	ifneq (, $(shell which llvm-ranlib))
 | 
						|
		RANLIB = llvm-ranlib
 | 
						|
	endif
 | 
						|
else 
 | 
						|
	RANLIB = echo
 | 
						|
	LIBTOOL = ar rcs
 | 
						|
	ifneq (, $(shell which gcc-ar))
 | 
						|
		LIBTOOL = gcc-ar rcs
 | 
						|
	endif
 | 
						|
endif
 | 
						|
OPTFLAGS += $(SEMANTIC_INTERPOSITION)
 | 
						|
 | 
						|
ifeq ($(PCH), 1)
 | 
						|
	PCHFLAGS = -include server/pch.hpp
 | 
						|
else
 | 
						|
	PCHFLAGS = 
 | 
						|
endif
 | 
						|
 | 
						|
ifeq ($(OS),Windows_NT)
 | 
						|
	NULL_DEVICE = NUL
 | 
						|
	OS_SUPPORT += server/winhelper.cpp
 | 
						|
	LIBAQ_OBJ += winhelper.o
 | 
						|
	MonetDB_LIB += msc-plugin/monetdbe.dll 
 | 
						|
	MonetDB_INC +=  -Imonetdb/msvc
 | 
						|
	LIBTOOL = gcc-ar rcs
 | 
						|
	ifeq ($(COMPILER), clang)
 | 
						|
		FPIC =
 | 
						|
	endif
 | 
						|
else
 | 
						|
	UNAME_S = $(shell uname -s)
 | 
						|
	UNAME_M = $(shell uname -m)
 | 
						|
	NULL_DEVICE = /dev/null
 | 
						|
	MonetDB_LIB = 
 | 
						|
	ifeq ($(UNAME_S),Darwin)
 | 
						|
		USELIB_FLAG = -Wl,-force_load
 | 
						|
		MonetDB_LIB += -L$(shell brew --prefix monetdb)/lib 
 | 
						|
		MonetDB_INC += -I$(shell brew --prefix monetdb)/include/monetdb
 | 
						|
		ifeq ($(COMPILER), clang)
 | 
						|
			LIBTOOL = libtool -static -o
 | 
						|
		endif
 | 
						|
		ifneq ($(UNAME_M),arm64)
 | 
						|
			OPTFLAGS += -march=native
 | 
						|
		endif
 | 
						|
	else
 | 
						|
		OPTFLAGS += -march=native
 | 
						|
		MonetDB_LIB += $(AQ_MONETDB_LIB)
 | 
						|
		MonetDB_INC += $(AQ_MONETDB_INC)
 | 
						|
		MonetDB_INC += -I/usr/local/include/monetdb -I/usr/include/monetdb 
 | 
						|
	endif
 | 
						|
	MonetDB_LIB += -lmonetdbe
 | 
						|
endif
 | 
						|
 | 
						|
ifeq ($(THREADING),1)
 | 
						|
	LIBAQ_SRC += server/threading.cpp
 | 
						|
	LIBAQ_OBJ += threading.o
 | 
						|
	Defines +=  -DTHREADING
 | 
						|
endif
 | 
						|
 | 
						|
ifeq ($(AQUERY_ITC_USE_SEMPH), 1)
 | 
						|
	Defines += -D__AQUERY_ITC_USE_SEMPH__
 | 
						|
endif
 | 
						|
 | 
						|
CXXFLAGS += $(OPTFLAGS) $(Defines) $(MonetDB_INC) 
 | 
						|
BINARYFLAGS = $(CXXFLAGS) $(LINKFLAGS) $(MonetDB_LIB)
 | 
						|
SHAREDFLAGS += $(FPIC) $(BINARYFLAGS)
 | 
						|
 | 
						|
info:
 | 
						|
	$(info This makefile script is used in AQuery to automatically build required libraries and executables.)
 | 
						|
	$(info Run it manually only for debugging purposes.)
 | 
						|
	$(info Targets (built by `make <target>`):)
 | 
						|
	$(info $"	pch: generate precompiled header)
 | 
						|
	$(info $"	libaquery.a: build static library)
 | 
						|
	$(info $"	server.so: build execution engine)
 | 
						|
	$(info $"	snippet: build generated query snippet)
 | 
						|
	$(info $"	server_uselib: build execution engine using shared library and pch)
 | 
						|
	$(info $"	snippet_uselib: build generated query snippet using shared library and pch)
 | 
						|
	$(info $"	docker: build docker image with name aquery)
 | 
						|
	$(info $"	launcher: build launcher for aquery ./aq)
 | 
						|
	$(info $"	clean: remove all generated binaraies and caches)
 | 
						|
	$(info )
 | 
						|
	$(info Variables:)
 | 
						|
	$(info $"	OPTFLAGS: $(OPTFLAGS))
 | 
						|
	$(info $"	OS_SUPPORT: $(OS_SUPPORT))
 | 
						|
	$(info $"	OS: $(OS)) 
 | 
						|
	$(info $"	Defines: $(Defines))
 | 
						|
	$(info $"	LIBTOOL: $(LIBTOOL))
 | 
						|
	$(info $"	MonetDB_INC: $(MonetDB_INC))
 | 
						|
	$(info $"	COMPILER: $(COMPILER))
 | 
						|
	$(info $"	CXX: $(CXX))
 | 
						|
	$(info $"	LINKER_BINARY: $(LINKER_BINARY))
 | 
						|
	$(info $"	LINKER_FLAGS: $(LINKER_FLAGS))
 | 
						|
pch:
 | 
						|
	$(CXX) -x c++-header server/pch.hpp $(FPIC) $(CXXFLAGS)
 | 
						|
libaquery:
 | 
						|
	$(CXX) -c $(FPIC) $(PCHFLAGS) $(LIBAQ_SRC) $(OS_SUPPORT) $(CXXFLAGS) &&\
 | 
						|
	$(LIBTOOL) libaquery.a $(LIBAQ_OBJ) &&\
 | 
						|
	$(RANLIB) libaquery.a
 | 
						|
 | 
						|
warmup:
 | 
						|
	$(CXX)  msc-plugin/dummy.cpp libaquery.a $(SHAREDFLAGS) -o dll.so
 | 
						|
server.bin:
 | 
						|
	$(CXX) $(LIBAQ_SRC) $(OS_SUPPORT) $(BINARYFLAGS) -o server.bin
 | 
						|
launcher:
 | 
						|
	$(CXX) -D__AQ_BUILD_LAUNCHER__ server/server.cpp $(LIBAQ_SRC) $(OS_SUPPORT) $(BINARYFLAGS) -o aq
 | 
						|
server.so:
 | 
						|
#	$(CXX) -z muldefs server/server.cpp server/monetdb_conn.cpp -fPIC -shared $(OS_SUPPORT) monetdb/msvc/monetdbe.dll --std=c++1z -O3 -march=native -o server.so -I./monetdb/msvc 
 | 
						|
	$(CXX) $(PCHFLAGS) $(LIBAQ_SRC) server/server.cpp $(OS_SUPPORT) $(SHAREDFLAGS) -o server.so 
 | 
						|
server_uselib:
 | 
						|
	$(CXX) $(LINKER_FLAGS) server/server.cpp libaquery.a $(SHAREDFLAGS) -o server.so
 | 
						|
 | 
						|
snippet:
 | 
						|
	$(CXX) $(PCHFLAGS) out.cpp $(LIBAQ_SRC) $(SHAREDFLAGS) -o dll.so
 | 
						|
snippet_uselib:
 | 
						|
	$(CXX) $(PCHFLAGS) out.cpp libaquery.a $(SHAREDFLAGS) -o dll.so
 | 
						|
 | 
						|
docker:
 | 
						|
	docker build -t aquery .
 | 
						|
 | 
						|
clean:
 | 
						|
	rm .cached *.shm *.o dll.so server.so server.bin libaquery.a libaquery.lib -rf 2> $(NULL_DEVICE) || true
 | 
						|
 | 
						|
.PHONY: clean
 |