• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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