blob: 31e2f66f917c5ef9ecc0197369e827a4ed32642d [file] [log] [blame]
########################################################
# 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
# LINUX64=1 create a 64 bit build
# Set project root - relative to build directory
ifeq ($(RCTDL_ROOT),)
RCTDL_ROOT := $(shell pwd | sed 's,/build/linux.*,,')
export RCTDL_ROOT
endif
# library names
LIB_BASE_NAME=cstraced
export LIB_BASE_NAME
LIB_CAPI_NAME=$(LIB_BASE_NAME)_c_api
export LIB_CAPI_NAME
# determine base architecture, heavily borrowed from the Linux kernel v4.4's
# tools/perf/config/Makefile.arch
ARCH := $(shell uname -m 2>/dev/null || echo not)
# source root directories
export RCTDL_LIB_ROOT=$(RCTDL_ROOT)/lib
export RCTDL_INCLUDE=$(RCTDL_ROOT)/include
export RCTDL_SOURCE=$(RCTDL_ROOT)/source
export RCTDL_TESTS=$(RCTDL_ROOT)/tests
# tools
export MASTER_CC=gcc
export MASTER_CPP=g++
export MASTER_LINKER=g++
export MASTER_LIB=ar
# compile flags
MASTER_CC_FLAGS := -c -Wall -DLINUX
MASTER_CPP_FLAGS := -c -Wall -DLINUX -std=c++11
MASTER_LINKER_FLAGS := -Wl,-z,defs
MASTER_LIB_FLAGS := rcs
# debug variant
ifdef DEBUG
MASTER_CC_FLAGS += -g -O0 -DDEBUG
MASTER_CPP_FLAGS += -g -O0 -DDEBUG
BUILD_VARIANT=dbg
else
MASTER_CC_FLAGS += -g -O2 -DNDEBUG
MASTER_CPP_FLAGS += -g -O2 -DNDEBUG
BUILD_VARIANT=rel
endif
# platform bit size variant
ifeq ($(ARCH),x86)
MFLAG:="-m32"
BIT_VARIANT=32
else ifeq ($(ARCH),x86_64)
MFLAG:="-m64"
BIT_VARIANT=64
endif
MASTER_CC_FLAGS += $(MFLAG)
MASTER_CPP_FLAGS += $(MFLAG)
MASTER_LINKER_FLAGS += $(MFLAG)
# export build flags
export MASTER_CC_FLAGS
export MASTER_CPP_FLAGS
export MASTER_LINKER_FLAGS
export MASTER_LIB_FLAGS
# target directories
export PLAT_DIR=linux$(BIT_VARIANT)/$(BUILD_VARIANT)
export LIB_TARGET_DIR=$(RCTDL_LIB_ROOT)/$(PLAT_DIR)
export LIB_TEST_TARGET_DIR=$(RCTDL_TESTS)/lib/$(PLAT_DIR)
export BIN_TEST_TARGET_DIR=$(RCTDL_TESTS)/bin/$(PLAT_DIR)
###########################################################
# build targets
all: libs tests
libs: $(LIB_BASE_NAME)_lib $(LIB_BASE_NAME)_so $(LIB_CAPI_NAME)_lib $(LIB_CAPI_NAME)_so
################################
# build static OpenCSD trace decode library
#
$(LIB_BASE_NAME)_lib: $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a
$(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a:
mkdir -p $(LIB_TARGET_DIR)
cd $(RCTDL_ROOT)/build/linux/ref_trace_decode_lib && make
################################
# build shared OpenCSD trace decode library
#
$(LIB_BASE_NAME)_so: $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so
$(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so:
mkdir -p $(LIB_TARGET_DIR)
cd $(RCTDL_ROOT)/build/linux/ref_trace_decode_lib && make
################################
# build static 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).a:
mkdir -p $(LIB_TARGET_DIR)
cd $(RCTDL_ROOT)/build/linux/rctdl_c_api_lib && make
################################
# build shared OpenCSD trace decode C API library
#
$(LIB_CAPI_NAME)_so: $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so
$(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so: $(LIB_BASE_NAME)_lib
mkdir -p $(LIB_TARGET_DIR)
cd $(RCTDL_ROOT)/build/linux/rctdl_c_api_lib && make
#################################
# build tests
.PHONY: tests
tests: libs
cd $(RCTDL_ROOT)/tests/build/linux/snapshot_parser_lib && make
cd $(RCTDL_ROOT)/tests/build/linux/trc_pkt_lister && make
cd $(RCTDL_ROOT)/tests/build/linux/simple_pkt_print_c_api && make
#############################################################
# clean targets
#
clean: clean_libs clean_tests
.PHONY: clean_libs clean_tests
clean_libs:
cd $(RCTDL_ROOT)/build/linux/ref_trace_decode_lib && make clean
cd $(RCTDL_ROOT)/build/linux/rctdl_c_api_lib && make clean
clean_tests:
cd $(RCTDL_ROOT)/tests/build/linux/snapshot_parser_lib && make clean
cd $(RCTDL_ROOT)/tests/build/linux/trc_pkt_lister && make clean
cd $(RCTDL_ROOT)/tests/build/linux/simple_pkt_print_c_api && make clean