# # Copyright 2005 The Apache Software Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # # Note: This makefile depends on 5 environment variables to funtion correctly: # a) WORD_SIZE # b) THRIFT_HOME # c) HIVE_ROOT # d) BASE_DIR # e) BOOST_HOME # All these are passed by build.xml. # WORD_SIZE ?= 64 ifeq ($(WORD_SIZE),32) ARCH_FLAGS = -m32 -DARCH32 else ARCH_FLAGS = -m64 -DARCH64 endif OS=$(shell uname -s) ifeq ($(OS),Darwin) LDFLAGS = -dynamiclib else LDFLAGS = -shared endif AR = ar ARFLAGS = rcs ARXFLAGS = -x CC = gcc CFLAGS = -Wall -g -fPIC CXX = g++ CXXFLAGS = -Wall -g -fPIC LD = g++ INSTALL = /usr/bin/install -c SHELL = /bin/sh LIBTOOL = $(SHELL) /usr/bin/libtool LINK = ln -sf BUILD_DIR = $(BASE_DIR)/target ODBC_BUILD_DIR = $(BUILD_DIR)/odbc OBJ_SERVICE_BUILD_DIR = $(BUILD_DIR)/service/objs OBJ_QL_BUILD_DIR = $(BUILD_DIR)/ql/objs OBJ_METASTORE_BUILD_DIR = $(BUILD_DIR)/metastore/objs OBJ_ODBC_BUILD_DIR = $(ODBC_BUILD_DIR)/objs LIB_ODBC_BUILD_DIR = $(ODBC_BUILD_DIR)/lib TEST_ODBC_BUILD_DIR = $(ODBC_BUILD_DIR)/test THRIFT_INCLUDE_PATH=$(THRIFT_HOME)/include/thrift FB303_INCLUDE_PATH=$(THRIFT_INCLUDE_PATH)/fb303 INSTALL_PATH = /usr/local INSTALL_LIB_PATH = $(INSTALL_PATH)/lib INSTALL_INCLUDE_PATH = $(INSTALL_PATH)/include BOOST_INCLUDE_PATH = $(BOOST_HOME)/include LIB_NAME = hiveclient SHLIB_VERSION = 1.0.0 SO_LINK_NAME = lib$(LIB_NAME).so SO_NAME = $(SO_LINK_NAME).$(SHLIB_VERSION) SO_LINK_TARGET = $(LIB_ODBC_BUILD_DIR)/$(SO_LINK_NAME) SO_TARGET = $(LIB_ODBC_BUILD_DIR)/$(SO_NAME) SO_INSTALL_LINK_TARGET = $(INSTALL_LIB_PATH)/$(SO_LINK_NAME) SO_INSTALL_TARGET = $(INSTALL_LIB_PATH)/$(SO_NAME) AR_NAME = lib$(LIB_NAME).a AR_TARGET = $(LIB_ODBC_BUILD_DIR)/$(AR_NAME) AR_INSTALL_TARGET = $(INSTALL_LIB_PATH)/$(AR_NAME) SERVICE_SRC_DIR = $(HIVE_ROOT)/service/src/gen/thrift/gen-cpp SERVICE_SOURCES = ThriftHive.cpp \ hive_service_constants.cpp \ hive_service_types.cpp SERVICE_OBJS = $(addprefix $(OBJ_SERVICE_BUILD_DIR)/,$(patsubst %,%.o,$(basename $(SERVICE_SOURCES)))) QL_SRC_DIR = $(HIVE_ROOT)/ql/src/gen/thrift/gen-cpp QL_SOURCES = queryplan_types.cpp queryplan_constants.cpp QL_OBJS = $(addprefix $(OBJ_QL_BUILD_DIR)/,$(patsubst %,%.o,$(basename $(QL_SOURCES)))) METASTORE_SRC_DIR = $(HIVE_ROOT)/metastore/src/gen/thrift/gen-cpp METASTORE_SOURCES = ThriftHiveMetastore.cpp \ hive_metastore_constants.cpp \ hive_metastore_types.cpp METASTORE_OBJS = $(addprefix $(OBJ_METASTORE_BUILD_DIR)/,$(patsubst %,%.o,$(basename $(METASTORE_SOURCES)))) ODBC_SRC_DIR = $(BASE_DIR)/src/cpp ODBC_SOURCES = hiveclient.cpp \ HiveResultSet.cpp \ HiveColumnDesc.cpp \ HiveRowSet.cpp \ hiveclienthelper.cpp ODBC_OBJS = $(addprefix $(OBJ_ODBC_BUILD_DIR)/,$(patsubst %,%.o,$(basename $(ODBC_SOURCES)))) ODBC_TEST_SRC_DIR = $(BASE_DIR)/src/test ODBC_TEST_DATA_DIR = $(BASE_DIR)/testdata TEST_FLAGS = -DTEST_DATA_DIR=$(ODBC_TEST_DATA_DIR) HIVE_CLIENT_TEST = $(TEST_ODBC_BUILD_DIR)/HiveClientTestC INCLUDE_PATHS = -I$(THRIFT_INCLUDE_PATH) \ -I$(FB303_INCLUDE_PATH) \ -I$(BOOST_INCLUDE_PATH) \ -I$(SERVICE_SRC_DIR) \ -I$(QL_SRC_DIR) \ -I$(METASTORE_SRC_DIR) \ -I$(ODBC_SRC_DIR) INSTALL_HEADERS = hiveclient.h \ hiveconstants.h HEADER_SOURCES = $(addprefix $(ODBC_SRC_DIR)/, $(INSTALL_HEADERS)) HEADER_TARGETS = $(INSTALL_INCLUDE_PATH)/hiveclient.h \ $(INSTALL_INCLUDE_PATH)/hiveconstants.h LIB_THRIFT_DIR = $(THRIFT_HOME)/lib LIB_THRIFT_ADD = -L$(LIB_THRIFT_DIR) -lthrift LIB_THRIFT_AR = $(LIB_THRIFT_DIR)/libthrift.a LIB_FB303_DIR = $(THRIFT_HOME)/lib LIB_FB303_ADD = -L$(LIB_FB303_DIR) -lfb303 LIB_FB303_AR = $(LIB_FB303_DIR)/libfb303.a all:: $(AR_TARGET) $(SO_TARGET) $(HIVE_CLIENT_TEST) $(AR_TARGET): $(METASTORE_OBJS) $(SERVICE_OBJS) $(QL_OBJS) $(ODBC_OBJS) if test -z '$(THRIFT_HOME)'; then echo 'THRIFT_HOME directory?'; exit 1; else exit 0; fi mkdir -p $(LIB_ODBC_BUILD_DIR) $(AR) $(ARXFLAGS) $(LIB_THRIFT_AR) #Extract thrift archive $(AR) $(ARXFLAGS) $(LIB_FB303_AR) #Extract fb303 archive $(AR) $(ARFLAGS) $@ $+ *.o #Include all object files into new archive rm *.o #Remove extracted archive object files $(SO_TARGET): $(METASTORE_OBJS) $(SERVICE_OBJS) $(QL_OBJS) $(ODBC_OBJS) if test -z '$(THRIFT_HOME)'; then echo 'THRIFT_HOME directory?'; exit 1; else exit 0; fi mkdir -p $(LIB_ODBC_BUILD_DIR) $(LD) $(ARCH_FLAGS) $(LDFLAGS) $+ $(LIB_THRIFT_ADD) $(LIB_FB303_ADD) -o $@ \ && $(LINK) $(SO_NAME) $(SO_LINK_TARGET) $(OBJ_SERVICE_BUILD_DIR)/%.o: $(SERVICE_SRC_DIR)/%.cpp mkdir -p $(OBJ_SERVICE_BUILD_DIR) $(CXX) $(CXXFLAGS) $(ARCH_FLAGS) $(INCLUDE_PATHS) -c $< -o $@ $(OBJ_QL_BUILD_DIR)/%.o: $(QL_SRC_DIR)/%.cpp mkdir -p $(OBJ_QL_BUILD_DIR) $(CXX) $(CXXFLAGS) $(ARCH_FLAGS) $(INCLUDE_PATHS) -c $< -o $@ $(OBJ_METASTORE_BUILD_DIR)/%.o: $(METASTORE_SRC_DIR)/%.cpp mkdir -p $(OBJ_METASTORE_BUILD_DIR) $(CXX) $(CXXFLAGS) $(ARCH_FLAGS) $(INCLUDE_PATHS) -c $< -o $@ $(OBJ_ODBC_BUILD_DIR)/%.o: $(ODBC_SRC_DIR)/%.cpp mkdir -p $(OBJ_ODBC_BUILD_DIR) $(CXX) $(CXXFLAGS) $(ARCH_FLAGS) $(INCLUDE_PATHS) -c $< -o $@ $(HIVE_CLIENT_TEST): $(SO_TARGET) $(ODBC_TEST_SRC_DIR)/hiveclienttest.c mkdir -p $(TEST_ODBC_BUILD_DIR) $(CC) $(CFLAGS) $(ARCH_FLAGS) $(TEST_FLAGS) $(INCLUDE_PATHS) $(ODBC_TEST_SRC_DIR)/hiveclienttest.c -L$(LIB_ODBC_BUILD_DIR) -L$(LIB_THRIFT_DIR) -l$(LIB_NAME) -lthrift $(LIB_FB303_ADD) -o $@ install: $(AR_TARGET) $(SO_TARGET) test -z "$(INSTALL_LIB_PATH)" || mkdir -p -- "$(INSTALL_LIB_PATH)" $(LIBTOOL) --mode=install $(INSTALL) '$(AR_TARGET)' '$(AR_INSTALL_TARGET)' $(LIBTOOL) --mode=install $(INSTALL) '$(SO_TARGET)' '$(SO_INSTALL_TARGET)' \ && $(LINK) $(SO_NAME) $(SO_INSTALL_LINK_TARGET) PATH="$PATH:/sbin" ldconfig -n $(INSTALL_LIB_PATH) test -z "$(INSTALL_INCLUDE_PATH)" || mkdir -p -- "$(INSTALL_INCLUDE_PATH)" $(INSTALL) -m 644 $(HEADER_SOURCES) $(INSTALL_INCLUDE_PATH) uninstall: $(LIBTOOL) --mode=uninstall rm -f '$(AR_INSTALL_TARGET)' '$(SO_INSTALL_LINK_TARGET)' '$(SO_INSTALL_TARGET)' rm -f $(HEADER_TARGETS) clean: rm -rf $(ODBC_BUILD_DIR) $(OBJ_SERVICE_BUILD_DIR) $(OBJ_QL_BUILD_DIR) $(OBJ_METASTORE_BUILD_DIR) test: $(AR_TARGET) $(SO_TARGET) $(HIVE_CLIENT_TEST) LD_LIBRARY_PATH=$(LIB_ODBC_BUILD_DIR):$(LIB_THRIFT_DIR):$(LIB_FB303_DIR):$(LD_LIBRARY_PATH) $(HIVE_CLIENT_TEST)