Newer
Older
Import / applications / MakePDF / Tests / exip-0.5.4 / build / gcc / Makefile
#/*==================================================================*\
#|                EXIP - Embeddable EXI Processor in C                |
#|--------------------------------------------------------------------|
#|          This work is licensed under BSD 3-Clause License          |
#|  The full license terms and conditions are located in LICENSE.txt  |
#\===================================================================*/
#
#/**
# * Makefile for the EXIP library
# * @date Oct 8, 2010
# * @author Rumen Kyusakov
# * @version 0.4
# * @par[Revision] $Id: Makefile 356 2014-11-27 11:29:23Z kjussakov $
# */

.PHONY : clean all dynlib check examples utils doc dist \
		 copy_headers test_sets_copy_examples test_sets_copy_utils

TARGET ?= pc

params ?= $(TARGET)/build-params.mk

include $(params)

CC = $(COMPILER)

CFLAGS += $(WARNING)
CFLAGS += $(DEBUGGING)
CFLAGS += $(ADDITIONAL_CFLAGS)

# Library version
EXIP_VERSION = 0.5.4

# The project root directory
PROJECT_ROOT = ../..

# The bin folder of the project 
BIN_DIR = $(PROJECT_ROOT)/bin

# The development documentation folder of the project
DEV_DOC_DIR = $(PROJECT_ROOT)/doc/dev

# Unit tests test data directory
TESTS_DATA_DIR = $(PROJECT_ROOT)/tests/test-set

# Unit tests bin directory
TESTS_BIN_DIR = $(BIN_DIR)/tests

# Static and dynamic library output directory
LIB_BIN_DIR = $(BIN_DIR)/lib

# Examples output directory
EXAMPLES_BIN_DIR = $(BIN_DIR)/examples

# Utils output directory
UTILS_BIN_DIR = $(BIN_DIR)/utils

# Public include directory
PUBLIC_INCLUDE_DIR = $(PROJECT_ROOT)/include

# All directories containing *.c files
VPATH = $(PROJECT_ROOT)/src/common/src
VPATH += $(PROJECT_ROOT)/src/contentIO/src
VPATH += $(PROJECT_ROOT)/src/grammar/src
VPATH += $(PROJECT_ROOT)/src/grammarGen/src
VPATH += $(PROJECT_ROOT)/src/streamIO/src
VPATH += $(PROJECT_ROOT)/src/stringTables/src
VPATH += $(PROJECT_ROOT)/examples/simpleDecoding
VPATH += $(PROJECT_ROOT)/examples/simpleEncoding
VPATH += $(PROJECT_ROOT)/utils/schemaHandling
VPATH += $(PROJECT_ROOT)/utils/schemaHandling/output
VPATH += $(PROJECT_ROOT)/tests
VPATH += $(TARGET)

# Source files for the common module
COMMON_SRC = $(notdir $(wildcard $(PROJECT_ROOT)/src/common/src/*.c))

# Source files for the contentIO module
CONTENT_IO_SRC = $(notdir $(wildcard $(PROJECT_ROOT)/src/contentIO/src/*.c))

# Source files for the grammar module		
GRAMMAR_SRC = $(notdir $(wildcard $(PROJECT_ROOT)/src/grammar/src/*.c))

# Source files for the grammar generation module
GRAMMAR_GEN_SRC = $(notdir $(wildcard $(PROJECT_ROOT)/src/grammarGen/src/*.c))

# Source files for the schema grammar generation module
GRAMMAR_GEN_SCHEMA_SRC = $(notdir $(wildcard $(PROJECT_ROOT)/src/grammarGen/xmlSchema/*.c))
		
STREAM_IO_SRC =	$(notdir $(wildcard $(PROJECT_ROOT)/src/streamIO/src/*.c))

# Source files for the string tables module
STRING_TABLES_SRC = $(notdir $(wildcard $(PROJECT_ROOT)/src/stringTables/src/*.c))

TESTS_SRC = $(notdir $(wildcard $(PROJECT_ROOT)/tests/*.c)) 

# Source files for the utils
EXIPG_UTIL_SRC = $(notdir $(wildcard $(PROJECT_ROOT)/utils/schemaHandling/*.c))
EXIPG_UTIL_SRC += $(notdir $(wildcard $(PROJECT_ROOT)/utils/schemaHandling/output/*.c))

# Source files for the examples
EXIPE_EXAMPLE_SRC = $(notdir $(wildcard $(PROJECT_ROOT)/examples/simpleEncoding/*.c))
EXIPD_EXAMPLE_SRC = $(notdir $(wildcard $(PROJECT_ROOT)/examples/simpleDecoding/*.c))

LIB_SOURCES = $(COMMON_SRC) $(CONTENT_IO_SRC) $(GRAMMAR_SRC) $(STREAM_IO_SRC) $(STRING_TABLES_SRC) $(notdir $(wildcard $(TARGET)/*.c))

ifeq ($(INCLUDE_GRAMMAR_GENERATION), true)
  LIB_SOURCES += $(GRAMMAR_GEN_SRC)
ifeq ($(INCLUDE_SCHEMA_EXI_GRAMMAR_GENERATION), true)
  LIB_SOURCES += $(GRAMMAR_GEN_SCHEMA_SRC)
  VPATH += $(PROJECT_ROOT)/src/grammarGen/xmlSchema
  CFLAGS += -DGRAMMAR_GEN_SCHEMA
endif
endif

EXIPE_OBJECTS=$(EXIPE_EXAMPLE_SRC:%.c=$(BIN_DIR)/%.o)
EXIPD_OBJECTS=$(EXIPD_EXAMPLE_SRC:%.c=$(BIN_DIR)/%.o)
EXIPG_OBJECTS=$(EXIPG_UTIL_SRC:%.c=$(BIN_DIR)/%.o)
LIB_OBJECTS=$(LIB_SOURCES:%.c=$(BIN_DIR)/%.o)

SOURCES_ALL = $(COMMON_SRC) $(CONTENT_IO_SRC) $(GRAMMAR_SRC) $(STREAM_IO_SRC) $(STRING_TABLES_SRC)\
	$(GRAMMAR_GEN_SRC) $(notdir $(wildcard $(TARGET)/*.c)) $(TESTS_SRC) $(EXIPG_UTIL_SRC) $(EXIPE_EXAMPLE_SRC) $(EXIPD_EXAMPLE_SRC)

# Compiler include flags
INCDIRS += -I$(PROJECT_ROOT)/src/common/include
INCDIRS += -I$(PROJECT_ROOT)/src/contentIO/include
INCDIRS += -I$(PROJECT_ROOT)/src/grammar/include
INCDIRS += -I$(PROJECT_ROOT)/src/grammarGen/include
INCDIRS += -I$(PROJECT_ROOT)/src/streamIO/include
INCDIRS += -I$(PROJECT_ROOT)/src/stringTables/include
INCDIRS += -I$(PUBLIC_INCLUDE_DIR)
INCDIRS += -I$(TARGET)
INCDIRS += -I$(PROJECT_ROOT)/examples/simpleEncoding
INCDIRS += -I$(PROJECT_ROOT)/examples/simpleDecoding
INCDIRS += -I$(PROJECT_ROOT)/tests
INCDIRS += -I$(PROJECT_ROOT)/utils/schemaHandling/include

LDFLAGS += -L$(LIB_BIN_DIR) 

# Tests all targets by default. May override in environment to specify checks to run, for example:
#   $make check CHECK_TARGETS="streamio strict_grammar"
CHECK_TARGETS ?= streamIO stringTables grammar contentIO exip builtin_grammar strict_grammar emptyType xsi_type profile
CHECK_BINS := $(foreach acheck, $(CHECK_TARGETS), $(TESTS_BIN_DIR)/test_$(acheck))

EXAMPLE_BINS := $(EXAMPLES_BIN_DIR)/exipd $(EXAMPLES_BIN_DIR)/exipe

UTILS_BINS := $(UTILS_BIN_DIR)/exipg

# Used by included Makefiles to compile; hides implementation.
COMPILE = $(CC) $(CFLAGS) $(INCDIRS)

# TARGET: (DEFAULT) Building the exip library
all: $(BIN_DIR) $(LIB_BIN_DIR) $(LIB_OBJECTS) $(LIB_BIN_DIR)/libexip.a copy_headers

# TARGET: Building exip as dynamic library
dynlib: COMPILE += -fPIC
dynlib: clean all $(LIB_BIN_DIR)/libexip.so

# TARGET: Exacute the unit tests
check: all $(TESTS_BIN_DIR) $(CHECK_BINS)
		for i in $(CHECK_BINS); do \
                   $$i $(TESTS_DATA_DIR); \
             done

# TARGET: Builds the example applications        
examples: all $(EXAMPLES_BIN_DIR) $(EXAMPLE_BINS) test_sets_copy_examples

# TARGET: Builds the utilities      
utils: all $(UTILS_BIN_DIR) $(UTILS_BINS) test_sets_copy_utils

# TARGET: Builds the developers documentation    
doc:
		cd $(DEV_DOC_DIR); doxygen Doxyfile

# TARGET: Clean the build	
clean:
		rm -f -r $(BIN_DIR)
		
# TARGET: Builds a library distribution/release		
dist:
		rm -f -r $(PROJECT_ROOT)/../../files/exip-$(EXIP_VERSION)
		svn export $(PROJECT_ROOT) $(PROJECT_ROOT)/../../files/exip-$(EXIP_VERSION)
		cd $(PROJECT_ROOT)/../../files && tar cvf - exip-$(EXIP_VERSION) | gzip > exip-$(EXIP_VERSION).tar.gz
		cd $(PROJECT_ROOT)/../../files && zip -lvr exip-$(EXIP_VERSION).zip exip-$(EXIP_VERSION)
		
# Generating Prerequisites Automatically
# for more information see: http://www.gnu.org/software/make/manual/make.html#Automatic-Prerequisites
$(BIN_DIR)/%.d: %.c
	@set -e; rm -f $@; mkdir -p $(BIN_DIR); \
	$(COMPILE) -MM $< > $@.$$$$; \
	sed 's,\($*\)\.o[ :]*,$(@D)/\1.o $@ : ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$		

include $(SOURCES_ALL:%.c=$(BIN_DIR)/%.d)

# A meta-rule for compiling any "C" source file.
$(BIN_DIR)/%.o: %.c
		$(COMPILE) -c $< -o $@

# Build the tests
$(TESTS_BIN_DIR)/test_%: $(BIN_DIR)/check_%.o
		$(COMPILE) $(LDFLAGS) $< -lcheck -lexip -o $@
		
# Build for the examples		
$(EXAMPLES_BIN_DIR)/exipe: $(EXIPE_OBJECTS)
		$(COMPILE) $(LDFLAGS) $^ -lexip -o $@
		
$(EXAMPLES_BIN_DIR)/exipd: $(EXIPD_OBJECTS)
		$(COMPILE) $(LDFLAGS) $^ -lexip -o $@	
		
# Build for the utils
$(UTILS_BIN_DIR)/exipg: $(EXIPG_OBJECTS)
		$(COMPILE) $(LDFLAGS) $^ -lexip -o $@
	
$(LIB_BIN_DIR)/libexip.a: $(LIB_OBJECTS)
		$(ARCHIVER) rcs $(LIB_BIN_DIR)/libexip.a $(LIB_OBJECTS)

$(LIB_BIN_DIR)/libexip.so: $(LIB_OBJECTS)
		$(CC) -shared -Wl,-soname,libexip.so.$(EXIP_VERSION) -o $(LIB_BIN_DIR)/libexip.so.$(EXIP_VERSION) $(LIB_OBJECTS)
		ln -sf $(LIB_BIN_DIR)/libexip.so.$(EXIP_VERSION) $(LIB_BIN_DIR)/libexip.so

$(BIN_DIR):
		mkdir -p $(BIN_DIR)
		
$(LIB_BIN_DIR):
		mkdir -p $(LIB_BIN_DIR)
		
$(EXAMPLES_BIN_DIR):
		mkdir -p $(EXAMPLES_BIN_DIR)
		
$(UTILS_BIN_DIR):
		mkdir -p $(UTILS_BIN_DIR)
		
$(TESTS_BIN_DIR):
		mkdir -p $(TESTS_BIN_DIR)
		
copy_headers: $(BIN_DIR)
		mkdir -p $(BIN_DIR)/headers
		cp $(PROJECT_ROOT)/include/*.h $(BIN_DIR)/headers
		cp $(TARGET)/*.h $(BIN_DIR)/headers

test_sets_copy_examples:
		cp $(PROJECT_ROOT)/examples/simpleEncoding/exipe-test-xsd.exi $(EXAMPLES_BIN_DIR)/exipe-test-xsd.exi
		cp $(PROJECT_ROOT)/examples/simpleEncoding/exipe-test-types-xsd.exi $(EXAMPLES_BIN_DIR)/exipe-test-types-xsd.exi
		cp $(PROJECT_ROOT)/examples/simpleEncoding/exipe-test-nested-xsd.exi $(EXAMPLES_BIN_DIR)/exipe-test-nested-xsd.exi
		cp $(PROJECT_ROOT)/examples/simpleDecoding/exipd-test-xsd.exi $(EXAMPLES_BIN_DIR)/exipd-test-xsd.exi
		cp $(PROJECT_ROOT)/examples/simpleDecoding/exipd-test-schema-xsd.exi $(EXAMPLES_BIN_DIR)/exipd-test-schema-xsd.exi
		cp $(PROJECT_ROOT)/examples/simpleDecoding/exipd-test.exi $(EXAMPLES_BIN_DIR)/exipd-test.exi
		cp $(PROJECT_ROOT)/examples/simpleDecoding/exipd-test-schema.exi $(EXAMPLES_BIN_DIR)/exipd-test-schema.exi
		
test_sets_copy_utils:		
		cp $(PROJECT_ROOT)/utils/schemaHandling/EXIOptions-xsd.exi $(UTILS_BIN_DIR)/EXIOptions-xsd.exi