blob: 48d146fcd93e66810bba1b0f3cd741f75e6dd45d [file] [log] [blame]
# Copyright 2005-2010 Intel Corporation. All Rights Reserved.
#
# This file is part of Threading Building Blocks.
#
# Threading Building Blocks is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# version 2 as published by the Free Software Foundation.
#
# Threading Building Blocks is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Threading Building Blocks; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# As a special exception, you may use this file as part of a free software
# library without restriction. Specifically, if other files instantiate
# templates or use macros or inline functions from this file, or you compile
# this file and link it with other files to produce an executable, this
# file does not by itself cause the resulting executable to be covered by
# the GNU General Public License. This exception does not however
# invalidate any other reasons why the executable file might be covered by
# the GNU General Public License.
# This file should be always located and called in $(tbb_root)/examples
# Usage:
# make [all] [clean] [release] [debug] [test]
# executes specified targets for all examples.
# make {example's dir}/{target}
# calls specified example with specified target.
# For instance: make task/tree_sum/all
tbb_root?=..
BUILDING_PHASE:=0
include ../build/common.inc
#check, if tbb_root is not absolute path (the filter keeps only /* paths)
ifeq ($(filter /% $(SLASH)%, $(subst :, ,$(tbb_root)) ),)
# also changes related variables like work_dir
override tbb_root := $(CWD)$(SLASH)..
export TBB30_INSTALL_DIR := $(tbb_root)
endif
ifeq ($(tbb_os),windows)
ifeq ($(UNIXMODE),1)
EXAMPLE_MAKEFILE = Makefile
EXAMPLES = $(wildcard */*/$(EXAMPLE_MAKEFILE))
ifeq ($(compiler),gcc)
override CXXFLAGS += -Wl,--enable-auto-import
endif
export CPATH := $(CPATH);$(tbb_root)/include
export LIBRARY_PATH := $(LIBRARY_PATH);$(work_dir)_release;$(work_dir)_debug
export RM = cmd /C del /Q /F
else
EXAMPLE_MAKEFILE = Makefile.windows
EXAMPLES = $(wildcard */*/$(EXAMPLE_MAKEFILE))
EXAMPLE_MAKEFILE := $(if $(EXAMPLES),Makefile.windows,Makefile)
export INCLUDE := $(tbb_root)$(SLASH)include;$(INCLUDE)
export LIB := $(work_dir)_release;$(work_dir)_debug;$(LIB)
endif
work_dir := $(subst /,$(SLASH),$(work_dir))
export PATH := $(work_dir)_release;$(work_dir)_debug;$(PATH)
export TBB_ARCH_PLATFORM = $(arch)\$(runtime)
export TBB_TARGET_ARCH = $(arch)
else
EXAMPLE_MAKEFILE = Makefile
EXAMPLES := $(wildcard */*/$(EXAMPLE_MAKEFILE))
# platform-specific settings
ifeq ($(arch),ia64)
override CXXFLAGS += $(PIC_KEY)
endif
ifeq ($(compiler),gcc)
ifeq ($(arch),intel64)
override CXXFLAGS += -m64
endif
ifeq ($(arch),ia32)
override CXXFLAGS += -m32
endif
ifeq ($(arch),ppc64)
override CXXFLAGS += -m64
endif
ifeq ($(arch),ppc32)
override CXXFLAGS += -m32
endif
ifeq ($(arch),sparc)
override CXXFLAGS += -mcpu=v9 -m64
endif
endif
ifeq ($(compiler),suncc)
override CXXFLAGS += -I$(tbb_root)$(SLASH)include -library=stlport4 -M$(tbb_root)/build/suncc.map.pause -erroff=unassigned,attrskipunsup,badargtype2w,badbinaryopw,wbadasg,wvarhidemem,wbadinit
ifeq ($(arch),intel64)
override CXXFLAGS += -m64
endif
ifeq ($(arch),ia32)
override CXXFLAGS += -m32
endif
ifeq ($(arch),sparc)
override CXXFLAGS += -m64
endif
endif
ifeq ($(tbb_os),macos)
# GUI for examples does not support 64-bit platforms
ifeq ($(arch),intel64)
export UI=con
endif
ifeq ($(arch),ppc64)
export UI=con
endif
export DYLD_LIBRARY_PATH := $(DYLD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
else
export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
endif
export LIBS
export LIBRARY_PATH := $(LIBRARY_PATH):$(work_dir)_release:$(work_dir)_debug
export CPATH := $(CPATH):$(tbb_root)/include
endif
COMMON_TARGETS := all clean release debug test
# list of directories of examples
EXAMPLES_DIRS := $(foreach T,$(EXAMPLES),$(dir $(T)))
# targets to explicitly call example have format: {example's dir}/{example's target}
EXAMPLES_TARGETS := $(foreach T,$(COMMON_TARGETS),$(addsuffix $(T),$(EXAMPLES_DIRS)))
.PHONY: $(COMMON_TARGETS) $(EXAMPLES_TARGETS)
.DEFAULT: all
# execute standard targets for all examples
$(COMMON_TARGETS):: % : $(addsuffix %,$(EXAMPLES_DIRS))
# proxy rule for calling appropriate example
$(EXAMPLES_TARGETS)::
-$(MAKE) -C $(@D) -f $(EXAMPLE_MAKEFILE) $(notdir $@) CXX="$(CPLUS)" CXXFLAGS="$(CXXFLAGS)"
printenv:
ifeq ($(tbb_os),windows)
@cmd /C set PATH
@cmd /C set LIB
@cmd /C set INCLUDE
else
@env | grep PATH
endif