1######################################################## 2# Copyright 2015 ARM Limited. All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without modification, 5# are permitted provided that the following conditions are met: 6# 7# 1. Redistributions of source code must retain the above copyright notice, 8# this list of conditions and the following disclaimer. 9# 10# 2. Redistributions in binary form must reproduce the above copyright notice, 11# this list of conditions and the following disclaimer in the documentation 12# and/or other materials provided with the distribution. 13# 14# 3. Neither the name of the copyright holder nor the names of its contributors 15# may be used to endorse or promote products derived from this software without 16# specific prior written permission. 17# 18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND 19# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 22# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28# 29################################################################################# 30# OpenCSD - common unix makefile-code for libraries and tests 31# 32 33# Set project root - relative to build makefile 34ifeq ($(OCSD_ROOT),) 35OCSD_ROOT := $(shell echo $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) | sed 's,/build/unix_common.*,,') 36export OCSD_ROOT 37endif 38 39# library names 40LIB_BASE_NAME=opencsd 41export LIB_BASE_NAME 42LIB_CAPI_NAME=$(LIB_BASE_NAME)_c_api 43export LIB_CAPI_NAME 44 45# source root directories 46export OCSD_LIB_ROOT=$(OCSD_ROOT)/lib 47 48export OCSD_INCLUDE=$(OCSD_ROOT)/include 49export OCSD_SOURCE=$(OCSD_ROOT)/source 50 51export OCSD_TESTS=$(OCSD_ROOT)/tests 52export LIB_UAPI_INC_DIR=opencsd 53 54# tools 55export MASTER_CC=$(CROSS_COMPILE)gcc 56export MASTER_CXX=$(CROSS_COMPILE)g++ 57export MASTER_LINKER=$(CROSS_COMPILE)g++ 58export MASTER_LIB=$(CROSS_COMPILE)ar 59export INSTALL=install 60 61 62# installation directory 63PREFIX ?=/usr 64LIB_PATH ?= lib 65INSTALL_LIB_DIR=$(DESTDIR)$(PREFIX)/$(LIB_PATH) 66INSTALL_BIN_DIR=$(DESTDIR)$(PREFIX)/bin 67export INSTALL_INCLUDE_DIR=$(DESTDIR)$(PREFIX)/include/ 68INSTALL_MAN_DIR=$(DESTDIR)$(PREFIX)/share/man/man1 69 70# compile flags 71CFLAGS += $(CPPFLAGS) -c -Wall -Wno-switch -fPIC $(PLATFORM_CFLAGS) 72CXXFLAGS += $(CPPFLAGS) -c -Wall -Wno-switch -fPIC -std=c++11 $(PLATFORM_CXXFLAGS) 73LDFLAGS += $(PLATFORM_LDFLAGS) 74ARFLAGS ?= rcs 75 76# debug variant 77ifdef DEBUG 78CFLAGS += -g -O0 -DDEBUG 79CXXFLAGS += -g -O0 -DDEBUG 80BUILD_VARIANT=dbg 81else 82CFLAGS += -O2 -DNDEBUG 83CXXFLAGS += -O2 -DNDEBUG 84BUILD_VARIANT=rel 85endif 86 87# export build flags 88export CFLAGS 89export CXXFLAGS 90export LDFLAGS 91export ARFLAGS 92 93# target directories - fixed for default packaging build 94PLAT_DIR ?= builddir 95export PLAT_DIR 96export LIB_TARGET_DIR=$(OCSD_LIB_ROOT)/$(PLAT_DIR) 97export LIB_TEST_TARGET_DIR=$(OCSD_TESTS)/lib/$(PLAT_DIR) 98export BIN_TEST_TARGET_DIR=$(OCSD_TESTS)/bin/$(PLAT_DIR) 99 100# Fish version out of header file (converting from hex) 101getver:=printf "%d" $$(awk '/\#define VARNAME/ { print $$3 }' $(OCSD_ROOT)/include/opencsd/ocsd_if_version.h) 102export SO_MAJOR_VER := $(shell $(subst VARNAME,OCSD_VER_MAJOR,$(getver))) 103SO_MINOR_VER := $(shell $(subst VARNAME,OCSD_VER_MINOR,$(getver))) 104SO_PATCH_VER := $(shell $(subst VARNAME,OCSD_VER_PATCH,$(getver))) 105export SO_VER := $(SO_MAJOR_VER).$(SO_MINOR_VER).$(SO_PATCH_VER) 106 107 108########################################################### 109# build targets 110 111all: libs tests 112 113libs: $(LIB_BASE_NAME)_lib $(LIB_CAPI_NAME)_lib 114 115DEF_SO_PERM ?= 644 116 117install: libs tests 118 mkdir -p $(INSTALL_LIB_DIR) $(INSTALL_INCLUDE_DIR) $(INSTALL_BIN_DIR) 119 cp -d $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).$(SHARED_LIB_SUFFIX) $(INSTALL_LIB_DIR)/ 120 cp -d $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).$(SHARED_LIB_SUFFIX).$(SO_MAJOR_VER) $(INSTALL_LIB_DIR)/ 121 $(INSTALL) --mode=$(DEF_SO_PERM) $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).$(SHARED_LIB_SUFFIX).$(SO_VER) $(INSTALL_LIB_DIR)/ 122 cp -d $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).$(SHARED_LIB_SUFFIX) $(INSTALL_LIB_DIR)/ 123 cp -d $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).$(SHARED_LIB_SUFFIX).$(SO_MAJOR_VER) $(INSTALL_LIB_DIR)/ 124 $(INSTALL) --mode=$(DEF_SO_PERM) $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).$(SHARED_LIB_SUFFIX).$(SO_VER) $(INSTALL_LIB_DIR)/ 125ifndef DISABLE_STATIC 126 $(INSTALL) --mode=644 $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a $(INSTALL_LIB_DIR)/ 127 $(INSTALL) --mode=644 $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).a $(INSTALL_LIB_DIR)/ 128endif 129 cd $(OCSD_ROOT)/build/unix_common/rctdl_c_api_lib && make install_inc 130 $(INSTALL) --mode=755 $(BIN_TEST_TARGET_DIR)/trc_pkt_lister $(INSTALL_BIN_DIR)/ 131 132install_man: 133 mkdir -p $(INSTALL_MAN_DIR) 134 $(INSTALL) --mode=644 $(OCSD_ROOT)/docs/man/trc_pkt_lister.1 $(INSTALL_MAN_DIR)/ 135 136 137################################ 138# build OpenCSD trace decode library 139# 140$(LIB_BASE_NAME)_lib: $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).$(SHARED_LIB_SUFFIX) 141 142$(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).$(SHARED_LIB_SUFFIX): $(LIB_BASE_NAME)_all 143$(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a: $(LIB_BASE_NAME)_all 144 145# single command builds both .a and .$(SHARED_LIB_SUFFIX) targets in sub-makefile 146$(LIB_BASE_NAME)_all: 147 mkdir -p $(LIB_TARGET_DIR) 148 cd $(OCSD_ROOT)/build/unix_common/ref_trace_decode_lib && $(MAKE) 149 150################################ 151# build OpenCSD trace decode C API library 152# 153$(LIB_CAPI_NAME)_lib: $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).a $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).$(SHARED_LIB_SUFFIX) 154 155$(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).$(SHARED_LIB_SUFFIX): $(LIB_CAPI_NAME)_all 156$(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).a: $(LIB_CAPI_NAME)_all 157 158# single command builds both .a and .$(SHARED_LIB_SUFFIX) targets in sub-makefile 159$(LIB_CAPI_NAME)_all: $(LIB_BASE_NAME)_lib 160 mkdir -p $(LIB_TARGET_DIR) 161 cd $(OCSD_ROOT)/build/unix_common/rctdl_c_api_lib && $(MAKE) 162 163################################# 164# build tests 165 166.PHONY: tests 167tests: libs 168 cd $(OCSD_ROOT)/tests/build/unix_common/echo_test_dcd_lib && $(MAKE) 169 cd $(OCSD_ROOT)/tests/build/unix_common/snapshot_parser_lib && $(MAKE) 170 cd $(OCSD_ROOT)/tests/build/unix_common/trc_pkt_lister && $(MAKE) 171 cd $(OCSD_ROOT)/tests/build/unix_common/c_api_pkt_print_test && $(MAKE) 172 cd $(OCSD_ROOT)/tests/build/unix_common/mem_buffer_eg && $(MAKE) 173 cd $(OCSD_ROOT)/tests/build/unix_common/frame_demux_test && $(MAKE) 174 cd $(OCSD_ROOT)/tests/build/unix_common/perr && $(MAKE) 175 cd $(OCSD_ROOT)/tests/build/unix_common/mem_acc_test && $(MAKE) 176 177# 178# build docs 179.PHONY: docs 180docs: 181 (cd $(OCSD_ROOT)/docs; doxygen doxygen_config.dox) 182 183 184############################################################# 185# clean targets 186# 187clean: clean_libs clean_tests clean_docs 188 189.PHONY: clean_libs clean_tests clean_docs clean_install 190 191clean_libs: 192 cd $(OCSD_ROOT)/build/unix_common/ref_trace_decode_lib && $(MAKE) clean 193 cd $(OCSD_ROOT)/build/unix_common/rctdl_c_api_lib && $(MAKE) clean 194 195clean_tests: 196 cd $(OCSD_ROOT)/tests/build/unix_common/echo_test_dcd_lib && $(MAKE) clean 197 cd $(OCSD_ROOT)/tests/build/unix_common/snapshot_parser_lib && $(MAKE) clean 198 cd $(OCSD_ROOT)/tests/build/unix_common/trc_pkt_lister && $(MAKE) clean 199 cd $(OCSD_ROOT)/tests/build/unix_common/c_api_pkt_print_test && $(MAKE) clean 200 cd $(OCSD_ROOT)/tests/build/unix_common/mem_buffer_eg && $(MAKE) clean 201 cd $(OCSD_ROOT)/tests/build/unix_common/frame_demux_test && $(MAKE) clean 202 cd $(OCSD_ROOT)/tests/build/unix_common/perr && $(MAKE) clean 203 cd $(OCSD_ROOT)/tests/build/unix_common/mem_acc_test && $(MAKE) clean 204 -rmdir $(OCSD_TESTS)/lib 205 206clean_docs: 207 -rm -r $(OCSD_ROOT)/docs/html 208 209clean_install: clean_man 210 -rm $(INSTALL_LIB_DIR)/lib$(LIB_BASE_NAME).* 211 -rm $(INSTALL_LIB_DIR)/lib$(LIB_CAPI_NAME).* 212 -rm -r $(INSTALL_INCLUDE_DIR)/$(LIB_UAPI_INC_DIR) 213 -rm $(INSTALL_BIN_DIR)/trc_pkt_lister 214 215clean_man: 216 -rm $(INSTALL_MAN_DIR)/trc_pkt_lister.1 217