212 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
| ########################################################
 | |
| # Copyright 2015 ARM Limited. All rights reserved.
 | |
| # 
 | |
| # Redistribution and use in source and binary forms, with or without modification, 
 | |
| # are permitted provided that the following conditions are met:
 | |
| # 
 | |
| # 1. Redistributions of source code must retain the above copyright notice, 
 | |
| # this list of conditions and the following disclaimer.
 | |
| # 
 | |
| # 2. Redistributions in binary form must reproduce the above copyright notice, 
 | |
| # this list of conditions and the following disclaimer in the documentation 
 | |
| # and/or other materials provided with the distribution. 
 | |
| # 
 | |
| # 3. Neither the name of the copyright holder nor the names of its contributors 
 | |
| # may be used to endorse or promote products derived from this software without 
 | |
| # specific prior written permission. 
 | |
| # 
 | |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND 
 | |
| # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
 | |
| # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
 | |
| # IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
 | |
| # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
 | |
| # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
 | |
| # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
 | |
| # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
 | |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
 | |
| # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 | |
| # 
 | |
| #################################################################################
 | |
| # OpenCSD - master makefile for libraries and tests
 | |
| #
 | |
| # command line options
 | |
| # DEBUG=1 	    create a debug build
 | |
| #
 | |
| 
 | |
| # Set project root - relative to build makefile
 | |
| ifeq ($(OCSD_ROOT),)
 | |
| OCSD_ROOT := $(shell echo $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) | sed 's,/build/linux.*,,')
 | |
| export OCSD_ROOT
 | |
| endif
 | |
| 
 | |
| # library names
 | |
| LIB_BASE_NAME=opencsd
 | |
| export LIB_BASE_NAME
 | |
| LIB_CAPI_NAME=$(LIB_BASE_NAME)_c_api
 | |
| export LIB_CAPI_NAME
 | |
| 
 | |
| # source root directories
 | |
| export OCSD_LIB_ROOT=$(OCSD_ROOT)/lib
 | |
| 
 | |
| export OCSD_INCLUDE=$(OCSD_ROOT)/include
 | |
| export OCSD_SOURCE=$(OCSD_ROOT)/source
 | |
| 
 | |
| export OCSD_TESTS=$(OCSD_ROOT)/tests
 | |
| export LIB_UAPI_INC_DIR=opencsd
 | |
| 
 | |
| # tools
 | |
| export MASTER_CC=$(CROSS_COMPILE)gcc
 | |
| export MASTER_CXX=$(CROSS_COMPILE)g++
 | |
| export MASTER_LINKER=$(CROSS_COMPILE)g++
 | |
| export MASTER_LIB=$(CROSS_COMPILE)ar
 | |
| export INSTALL=install
 | |
| 
 | |
| 
 | |
| # installation directory
 | |
| PREFIX ?=/usr
 | |
| LIB_PATH ?= lib
 | |
| INSTALL_LIB_DIR=$(DESTDIR)$(PREFIX)/$(LIB_PATH)
 | |
| INSTALL_BIN_DIR=$(DESTDIR)$(PREFIX)/bin
 | |
| export INSTALL_INCLUDE_DIR=$(DESTDIR)$(PREFIX)/include/
 | |
| INSTALL_MAN_DIR=$(DESTDIR)$(PREFIX)/share/man/man1
 | |
| 
 | |
| # compile flags
 | |
| CFLAGS += $(CPPFLAGS) -c -Wall -DLINUX -Wno-switch -Wlogical-op -fPIC
 | |
| CXXFLAGS += $(CPPFLAGS) -c -Wall -DLINUX -Wno-switch -Wlogical-op -fPIC -std=c++11
 | |
| LDFLAGS += -Wl,-z,defs
 | |
| ARFLAGS ?= rcs
 | |
| 
 | |
| # debug variant
 | |
| ifdef DEBUG
 | |
| CFLAGS += -g -O0 -DDEBUG
 | |
| CXXFLAGS += -g -O0 -DDEBUG
 | |
| BUILD_VARIANT=dbg
 | |
| else
 | |
| CFLAGS += -O2 -DNDEBUG
 | |
| CXXFLAGS += -O2 -DNDEBUG
 | |
| BUILD_VARIANT=rel
 | |
| endif
 | |
| 
 | |
| # export build flags
 | |
| export CFLAGS
 | |
| export CXXFLAGS
 | |
| export LDFLAGS
 | |
| export ARFLAGS
 | |
| 
 | |
| # target directories - fixed for default packaging build
 | |
| PLAT_DIR ?= builddir
 | |
| export PLAT_DIR
 | |
| export LIB_TARGET_DIR=$(OCSD_LIB_ROOT)/$(PLAT_DIR)
 | |
| export LIB_TEST_TARGET_DIR=$(OCSD_TESTS)/lib/$(PLAT_DIR)
 | |
| export BIN_TEST_TARGET_DIR=$(OCSD_TESTS)/bin/$(PLAT_DIR)
 | |
| 
 | |
| # Fish version out of header file (converting from hex)
 | |
| getver:=printf "%d" $$(awk '/\#define VARNAME/ { print $$3 }' $(OCSD_ROOT)/include/opencsd/ocsd_if_version.h)
 | |
| export SO_MAJOR_VER := $(shell $(subst VARNAME,OCSD_VER_MAJOR,$(getver)))
 | |
| SO_MINOR_VER := $(shell $(subst VARNAME,OCSD_VER_MINOR,$(getver)))
 | |
| SO_PATCH_VER := $(shell $(subst VARNAME,OCSD_VER_PATCH,$(getver)))
 | |
| export SO_VER := $(SO_MAJOR_VER).$(SO_MINOR_VER).$(SO_PATCH_VER)
 | |
| 
 | |
| 
 | |
| ###########################################################
 | |
| # build targets
 | |
| 
 | |
| all: libs tests
 | |
| 
 | |
| libs: $(LIB_BASE_NAME)_lib  $(LIB_CAPI_NAME)_lib
 | |
| 
 | |
| DEF_SO_PERM ?= 644
 | |
| 
 | |
| install: libs tests
 | |
| 	mkdir -p $(INSTALL_LIB_DIR) $(INSTALL_INCLUDE_DIR) $(INSTALL_BIN_DIR)
 | |
| 	cp -d $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so $(INSTALL_LIB_DIR)/
 | |
| 	cp -d $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so.$(SO_MAJOR_VER) $(INSTALL_LIB_DIR)/
 | |
| 	$(INSTALL) --mode=$(DEF_SO_PERM) $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so.$(SO_VER) $(INSTALL_LIB_DIR)/
 | |
| 	cp -d $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so $(INSTALL_LIB_DIR)/
 | |
| 	cp -d $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so.$(SO_MAJOR_VER) $(INSTALL_LIB_DIR)/
 | |
| 	$(INSTALL) --mode=$(DEF_SO_PERM) $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so.$(SO_VER) $(INSTALL_LIB_DIR)/
 | |
| ifndef DISABLE_STATIC
 | |
| 	$(INSTALL) --mode=644 $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a $(INSTALL_LIB_DIR)/
 | |
| 	$(INSTALL) --mode=644 $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).a $(INSTALL_LIB_DIR)/
 | |
| endif
 | |
| 	cd $(OCSD_ROOT)/build/linux/rctdl_c_api_lib && make install_inc
 | |
| 	$(INSTALL) --mode=755 $(BIN_TEST_TARGET_DIR)/trc_pkt_lister $(INSTALL_BIN_DIR)/ 
 | |
| 
 | |
| install_man:
 | |
| 	mkdir -p $(INSTALL_MAN_DIR)
 | |
| 	$(INSTALL) --mode=644 $(OCSD_ROOT)/docs/man/trc_pkt_lister.1 $(INSTALL_MAN_DIR)/
 | |
| 
 | |
| 
 | |
| ################################
 | |
| # build  OpenCSD trace decode library
 | |
| #
 | |
| $(LIB_BASE_NAME)_lib: $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so
 | |
| 
 | |
| $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so: $(LIB_BASE_NAME)_all
 | |
| $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a: $(LIB_BASE_NAME)_all
 | |
| 
 | |
| # single command builds both .a and .so targets in sub-makefile
 | |
| $(LIB_BASE_NAME)_all:
 | |
| 	mkdir -p $(LIB_TARGET_DIR)
 | |
| 	cd $(OCSD_ROOT)/build/linux/ref_trace_decode_lib && $(MAKE)
 | |
| 
 | |
| ################################
 | |
| # build OpenCSD trace decode C API library 
 | |
| #
 | |
| $(LIB_CAPI_NAME)_lib: $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).a $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so
 | |
| 
 | |
| $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so: $(LIB_CAPI_NAME)_all
 | |
| $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).a:  $(LIB_CAPI_NAME)_all
 | |
| 
 | |
| # single command builds both .a and .so targets in sub-makefile
 | |
| $(LIB_CAPI_NAME)_all:  $(LIB_BASE_NAME)_lib
 | |
| 	mkdir -p $(LIB_TARGET_DIR)
 | |
| 	cd $(OCSD_ROOT)/build/linux/rctdl_c_api_lib && $(MAKE)
 | |
| 
 | |
| #################################
 | |
| # build tests
 | |
| 
 | |
| .PHONY: tests
 | |
| tests: libs
 | |
| 	cd $(OCSD_ROOT)/tests/build/linux/echo_test_dcd_lib && $(MAKE)
 | |
| 	cd $(OCSD_ROOT)/tests/build/linux/snapshot_parser_lib && $(MAKE)
 | |
| 	cd $(OCSD_ROOT)/tests/build/linux/trc_pkt_lister && $(MAKE)
 | |
| 	cd $(OCSD_ROOT)/tests/build/linux/c_api_pkt_print_test && $(MAKE)
 | |
| 	cd $(OCSD_ROOT)/tests/build/linux/mem_buffer_eg && $(MAKE)
 | |
| 
 | |
| #
 | |
| # build docs
 | |
| .PHONY: docs
 | |
| docs:
 | |
| 	(cd $(OCSD_ROOT)/docs; doxygen doxygen_config.dox)
 | |
| 
 | |
| 
 | |
| #############################################################
 | |
| # clean targets
 | |
| #
 | |
| clean: clean_libs clean_tests clean_docs
 | |
| 
 | |
| .PHONY: clean_libs clean_tests clean_docs clean_install
 | |
| 
 | |
| clean_libs:
 | |
| 	cd $(OCSD_ROOT)/build/linux/ref_trace_decode_lib && $(MAKE) clean
 | |
| 	cd $(OCSD_ROOT)/build/linux/rctdl_c_api_lib && $(MAKE) clean
 | |
| 
 | |
| clean_tests:
 | |
| 	cd $(OCSD_ROOT)/tests/build/linux/echo_test_dcd_lib && $(MAKE) clean
 | |
| 	cd $(OCSD_ROOT)/tests/build/linux/snapshot_parser_lib && $(MAKE) clean
 | |
| 	cd $(OCSD_ROOT)/tests/build/linux/trc_pkt_lister && $(MAKE) clean
 | |
| 	cd $(OCSD_ROOT)/tests/build/linux/c_api_pkt_print_test && $(MAKE) clean
 | |
| 	cd $(OCSD_ROOT)/tests/build/linux/mem_buffer_eg && $(MAKE) clean
 | |
| 	-rmdir $(OCSD_TESTS)/lib
 | |
| 
 | |
| clean_docs:
 | |
| 	-rm -r $(OCSD_ROOT)/docs/html
 | |
| 
 | |
| clean_install:
 | |
| 	-rm    $(INSTALL_LIB_DIR)/lib$(LIB_BASE_NAME).*
 | |
| 	-rm    $(INSTALL_LIB_DIR)/lib$(LIB_CAPI_NAME).*
 | |
| 	-rm -r $(INSTALL_INCLUDE_DIR)/$(LIB_UAPI_INC_DIR)
 | |
| 	-rm    $(INSTALL_BIN_DIR)/trc_pkt_lister
 | |
| 	-rm    $(INSTALL_MAN_DIR)/trc_pkt_lister.1
 |