blob: 824de32c3e7ba863800d297a667c1bedb9883782 [file] [log] [blame]
#############################################################################
# Makefile for UIMACPP components on UNIX
# using gcc/g++
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
#
# This file is included from specific makefiles to build
# UIMA C++ annotators and applications
#
# Change below to customize your platform
# For example, the extension for shared libraries specified by DLL_SUFFIX,
# and FORCE_32 to use a 32-bit UIMA SDK on a 64-bit OS
#
# Individual components can add custom compile and link controls
# such as USER_CFLAGS
#
# Variables which must have been previously set:
#
# UIMACPP_HOME for the base of the UIMA C++ tree
#
# TARGET_FILE=foo to create foo.$(DLL_SUFFIX) (shared lib)
# or foo (application)
# DEBUG=1 to build for debug
# DLL_BUILD=1 to build a shared library
# OBJS to specify the user's object files to include in the link
#
# Parent makefile optionally may set:
#
# USER_CLFAGS to specify additional compiler parameters
# USER_LINKFLAGS to specify additional linker parameters
# USER_XTARGET to specify extra user target to build
#
#############################################################################
ifeq ($(UIMACPP_HOME),)
$(error UIMACPP_HOME not set)
endif
ifeq ($(TARGET_FILE),)
$(error TARGET_FILE not set)
endif
# the suffix for shared libraries
DLL_SUFFIX=so
SHARED_FLAG=-shared
UNAME = $(shell uname -s)
ifeq ($(UNAME), Darwin)
DLL_SUFFIX=dylib
SHARED_FLAG=-dynamiclib
EXTRA_LINK_LIBS=-lapr-1.0
else
EXTRA_LINK_LIBS=-lapr-1
endif
# Uncomment the next line to build 32-bit annotators on a 64-bit OS
#FORCE_32=-m32
ifeq ($(DEBUG),1)
# compile flags for debug mode
BUILD_CFLAGS=-DDEBUG -g -fno-inline -fno-default-inline -fPIC $(FORCE_32)
BUILD_LFLAGS= $(FORCE_32)
else
# compile flags for ship mode:
# all optimization on, Multithreaded, dynamic link runtime
BUILD_CFLAGS=-DNDEBUG -DTRACEOFF -O3 -fPIC $(FORCE_32)
ifeq ($(UNAME), Darwin)
BUILD_LFLAGS= $(FORCE_32)
else
BUILD_LFLAGS= -Wl,--strip-debug $(FORCE_32)
endif
endif
# include directory for compile
INCLUDES=-I$(UIMACPP_HOME)/include -I$(UIMACPP_HOME)/include/apr-1
# compiler flags:
CFLAGS=-Wall -x c++ $(BUILD_CFLAGS) $(INCLUDES) $(USER_CFLAGS) \
-Wno-deprecated
ifeq ($(DLL_BUILD),1)
DLL_LINKFLAGS=$(SHARED_FLAG)
TARGET_FILE_NAME=$(TARGET_FILE).$(DLL_SUFFIX)
BIN_LINKFLAGS=
else
BIN_LINKFLAGS= -lxerces-c -licuuc -licuio -licui18n -licudata -ldl
TARGET_FILE_NAME=$(TARGET_FILE)
endif
LINKFLAGS= $(DLL_LINKFLAGS) $(BIN_LINKFLAGS) \
$(USER_LINKFLAGS) $(BUILD_LFLAGS) \
-L$(UIMACPP_HOME)/lib -luima $(EXTRA_LINK_LIBS)
# compiler to use
CC=g++
# rules to generate object files from c/c++ source files
.SUFFIXES : .o .c .cpp
.cpp.o :
$(CC) $(CFLAGS) -c $<
.c.o :
$(CC) $(CFLAGS) -c $<
all: $(TARGET_FILE_NAME) $(USER_XTARGET)
$(TARGET_FILE_NAME): $(OBJS)
$(CC) $(OBJS) \
$(LINKFLAGS) \
-o $(TARGET_FILE_NAME)
clean:
-rm -f $(OBJS)
-rm -f $(TARGET_FILE_NAME)
-rm -f $(USER_XTARGET)