1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
# Copyright 2005-2011 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 TBBROOT := $(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 ($(subst suncc,gcc,$(compiler)),gcc)
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
endif
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),xl)
# -qsuppress=1540-0198 suppresses warnings like "1540-0198 (W) The omitted keyword "private" is assumed for base class "no_copy"."
# -qsuppress=1540-1401 suppresses warnings like "1540-1401 (I) An unknown "pragma ivdep" is specified."
override CXXFLAGS += -I$(tbb_root)$(SLASH)include -qsuppress=1540-0198:1540-1401 -L$(work_dir)_release -L$(work_dir)_debug
ifeq ($(arch),intel64)
override CXXFLAGS += -q64
endif
ifeq ($(arch),ia32)
override CXXFLAGS += -q32
endif
ifeq ($(arch),ppc64)
override CXXFLAGS += -q64
endif
ifeq ($(arch),ppc32)
override CXXFLAGS += -q32
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
# -L necessary for non-native compilers which don't search $LIBRARY_PATH
override CXXFLAGS += -L$(work_dir)_release -L$(work_dir)_debug
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 perf_build perf_run
# 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)::
@echo --------------------------------------------------
-$(MAKE) SHELL=$(SHELL) -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
|