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 - master makefile for libraries and tests 31# 32# command line options 33# DEBUG=1 create a debug build 34# 35 36# Set project root - relative to build makefile 37ifeq ($(OCSD_ROOT),) 38OCSD_ROOT := $(shell echo $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) | sed 's,/build/linux.*,,') 39export OCSD_ROOT 40endif 41 42# library names 43LIB_BASE_NAME=opencsd 44export LIB_BASE_NAME 45LIB_CAPI_NAME=$(LIB_BASE_NAME)_c_api 46export LIB_CAPI_NAME 47 48# source root directories 49export OCSD_LIB_ROOT=$(OCSD_ROOT)/lib 50 51export OCSD_INCLUDE=$(OCSD_ROOT)/include 52export OCSD_SOURCE=$(OCSD_ROOT)/source 53 54export OCSD_TESTS=$(OCSD_ROOT)/tests 55export LIB_UAPI_INC_DIR=opencsd 56 57# tools 58export MASTER_CC=$(CROSS_COMPILE)gcc 59export MASTER_CXX=$(CROSS_COMPILE)g++ 60export MASTER_LINKER=$(CROSS_COMPILE)g++ 61export MASTER_LIB=$(CROSS_COMPILE)ar 62export INSTALL=install 63 64 65# installation directory 66PREFIX ?=/usr 67LIB_PATH ?= lib 68INSTALL_LIB_DIR=$(DESTDIR)$(PREFIX)/$(LIB_PATH) 69INSTALL_BIN_DIR=$(DESTDIR)$(PREFIX)/bin 70export INSTALL_INCLUDE_DIR=$(DESTDIR)$(PREFIX)/include/ 71INSTALL_MAN_DIR=$(DESTDIR)$(PREFIX)/share/man/man1 72 73# compile flags 74CFLAGS += $(CPPFLAGS) -c -Wall -DLINUX -Wno-switch -Wlogical-op -fPIC 75CXXFLAGS += $(CPPFLAGS) -c -Wall -DLINUX -Wno-switch -Wlogical-op -fPIC -std=c++11 76LDFLAGS += -Wl,-z,defs 77ARFLAGS ?= rcs 78 79# debug variant 80ifdef DEBUG 81CFLAGS += -g -O0 -DDEBUG 82CXXFLAGS += -g -O0 -DDEBUG 83BUILD_VARIANT=dbg 84else 85CFLAGS += -O2 -DNDEBUG 86CXXFLAGS += -O2 -DNDEBUG 87BUILD_VARIANT=rel 88endif 89 90# export build flags 91export CFLAGS 92export CXXFLAGS 93export LDFLAGS 94export ARFLAGS 95 96# target directories - fixed for default packaging build 97PLAT_DIR ?= builddir 98export PLAT_DIR 99export LIB_TARGET_DIR=$(OCSD_LIB_ROOT)/$(PLAT_DIR) 100export LIB_TEST_TARGET_DIR=$(OCSD_TESTS)/lib/$(PLAT_DIR) 101export BIN_TEST_TARGET_DIR=$(OCSD_TESTS)/bin/$(PLAT_DIR) 102 103# Fish version out of header file (converting from hex) 104getver:=printf "%d" $$(awk '/\#define VARNAME/ { print $$3 }' $(OCSD_ROOT)/include/opencsd/ocsd_if_version.h) 105export SO_MAJOR_VER := $(shell $(subst VARNAME,OCSD_VER_MAJOR,$(getver))) 106SO_MINOR_VER := $(shell $(subst VARNAME,OCSD_VER_MINOR,$(getver))) 107SO_PATCH_VER := $(shell $(subst VARNAME,OCSD_VER_PATCH,$(getver))) 108export SO_VER := $(SO_MAJOR_VER).$(SO_MINOR_VER).$(SO_PATCH_VER) 109 110 111########################################################### 112# build targets 113 114all: libs tests 115 116libs: $(LIB_BASE_NAME)_lib $(LIB_CAPI_NAME)_lib 117 118DEF_SO_PERM ?= 644 119 120install: libs tests 121 mkdir -p $(INSTALL_LIB_DIR) $(INSTALL_INCLUDE_DIR) $(INSTALL_BIN_DIR) 122 cp -d $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so $(INSTALL_LIB_DIR)/ 123 cp -d $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so.$(SO_MAJOR_VER) $(INSTALL_LIB_DIR)/ 124 $(INSTALL) --mode=$(DEF_SO_PERM) $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so.$(SO_VER) $(INSTALL_LIB_DIR)/ 125 cp -d $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so $(INSTALL_LIB_DIR)/ 126 cp -d $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so.$(SO_MAJOR_VER) $(INSTALL_LIB_DIR)/ 127 $(INSTALL) --mode=$(DEF_SO_PERM) $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so.$(SO_VER) $(INSTALL_LIB_DIR)/ 128ifndef DISABLE_STATIC 129 $(INSTALL) --mode=644 $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a $(INSTALL_LIB_DIR)/ 130 $(INSTALL) --mode=644 $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).a $(INSTALL_LIB_DIR)/ 131endif 132 cd $(OCSD_ROOT)/build/linux/rctdl_c_api_lib && make install_inc 133 $(INSTALL) --mode=755 $(BIN_TEST_TARGET_DIR)/trc_pkt_lister $(INSTALL_BIN_DIR)/ 134 135install_man: 136 $(INSTALL) --mode=644 $(OCSD_ROOT)/docs/man/trc_pkt_lister.1 $(INSTALL_MAN_DIR)/ 137 138 139################################ 140# build OpenCSD trace decode library 141# 142$(LIB_BASE_NAME)_lib: $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so 143 144$(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so: $(LIB_BASE_NAME)_all 145$(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a: $(LIB_BASE_NAME)_all 146 147# single command builds both .a and .so targets in sub-makefile 148$(LIB_BASE_NAME)_all: 149 mkdir -p $(LIB_TARGET_DIR) 150 cd $(OCSD_ROOT)/build/linux/ref_trace_decode_lib && $(MAKE) 151 152################################ 153# build OpenCSD trace decode C API library 154# 155$(LIB_CAPI_NAME)_lib: $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).a $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so 156 157$(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so: $(LIB_CAPI_NAME)_all 158$(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).a: $(LIB_CAPI_NAME)_all 159 160# single command builds both .a and .so targets in sub-makefile 161$(LIB_CAPI_NAME)_all: $(LIB_BASE_NAME)_lib 162 mkdir -p $(LIB_TARGET_DIR) 163 cd $(OCSD_ROOT)/build/linux/rctdl_c_api_lib && $(MAKE) 164 165################################# 166# build tests 167 168.PHONY: tests 169tests: libs 170 cd $(OCSD_ROOT)/tests/build/linux/echo_test_dcd_lib && $(MAKE) 171 cd $(OCSD_ROOT)/tests/build/linux/snapshot_parser_lib && $(MAKE) 172 cd $(OCSD_ROOT)/tests/build/linux/trc_pkt_lister && $(MAKE) 173 cd $(OCSD_ROOT)/tests/build/linux/c_api_pkt_print_test && $(MAKE) 174 cd $(OCSD_ROOT)/tests/build/linux/mem_buffer_eg && $(MAKE) 175 176# 177# build docs 178.PHONY: docs 179docs: 180 (cd $(OCSD_ROOT)/docs; doxygen doxygen_config.dox) 181 182 183############################################################# 184# clean targets 185# 186clean: clean_libs clean_tests clean_docs 187 188.PHONY: clean_libs clean_tests clean_docs clean_install 189 190clean_libs: 191 cd $(OCSD_ROOT)/build/linux/ref_trace_decode_lib && $(MAKE) clean 192 cd $(OCSD_ROOT)/build/linux/rctdl_c_api_lib && $(MAKE) clean 193 194clean_tests: 195 cd $(OCSD_ROOT)/tests/build/linux/echo_test_dcd_lib && $(MAKE) clean 196 cd $(OCSD_ROOT)/tests/build/linux/snapshot_parser_lib && $(MAKE) clean 197 cd $(OCSD_ROOT)/tests/build/linux/trc_pkt_lister && $(MAKE) clean 198 cd $(OCSD_ROOT)/tests/build/linux/c_api_pkt_print_test && $(MAKE) clean 199 cd $(OCSD_ROOT)/tests/build/linux/mem_buffer_eg && $(MAKE) clean 200 -rmdir $(OCSD_TESTS)/lib 201 202clean_docs: 203 -rm -r $(OCSD_ROOT)/docs/html 204 205clean_install: 206 -rm $(INSTALL_LIB_DIR)/lib$(LIB_BASE_NAME).* 207 -rm $(INSTALL_LIB_DIR)/lib$(LIB_CAPI_NAME).* 208 -rm -r $(INSTALL_INCLUDE_DIR)/$(LIB_UAPI_INC_DIR) 209 -rm $(INSTALL_BIN_DIR)/trc_pkt_lister 210 -rm $(INSTALL_MAN_DIR)/trc_pkt_lister.1 211