blob: 1cd5f7b12da99f1fd95638c86df67b9642fe4959 [file] [log] [blame]
#
# 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)