302 lines
12 KiB
Makefile
302 lines
12 KiB
Makefile
|
# Copyright (c) 2005-2016 Intel Corporation
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
#
|
||
|
#
|
||
|
#
|
||
|
#
|
||
|
|
||
|
#------------------------------------------------------------------------------
|
||
|
# Define rules for making the TBB tests.
|
||
|
#------------------------------------------------------------------------------
|
||
|
.PHONY: default test_tbb_plain test_tbb_openmp test_tbb_cilk test_tbb_old clean
|
||
|
|
||
|
default: test_tbb_plain test_tbb_openmp test_tbb_cilk test_tbb_old
|
||
|
|
||
|
tbb_root ?= $(TBBROOT)
|
||
|
BUILDING_PHASE=1
|
||
|
TEST_RESOURCE = $(TBB.RES)
|
||
|
TESTFILE=test
|
||
|
include $(tbb_root)/build/common.inc
|
||
|
DEBUG_SUFFIX=$(findstring _debug,$(call cross_cfg,_$(cfg)))
|
||
|
|
||
|
#------------------------------------------------------------
|
||
|
# Define static pattern rules dealing with .cpp source files
|
||
|
#------------------------------------------------------------
|
||
|
|
||
|
VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/rml/client $(tbb_root)/src/old $(tbb_root)/src/test $(tbb_root)/src/perf
|
||
|
CPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1) $(if $(LINK_TBB.LIB),$(DEFINE_KEY)TEST_USES_TBB=1)
|
||
|
|
||
|
TEST_PREREQUISITE+=$(TBB.LIB)
|
||
|
LINK_FILES+=$(LINK_TBB.LIB)
|
||
|
|
||
|
ifdef use_proxy
|
||
|
USE_PROXY_FLAG = $(DEFINE_KEY)HARNESS_USE_RUNTIME_LOADER
|
||
|
CPLUS_FLAGS += $(USE_PROXY_FLAG)
|
||
|
LINK_TBB.LIB = $(PROXY.LIB)
|
||
|
LIBS += $(LIBDL)
|
||
|
endif
|
||
|
|
||
|
TEST_SUFFIXES=secondary compiler_builtins pic
|
||
|
include $(tbb_root)/build/common_rules.inc
|
||
|
|
||
|
# Rules for the tests, which use TBB in a dynamically loadable library
|
||
|
test_model_plugin.$(TEST_EXT): LINK_TBB.LIB =
|
||
|
test_model_plugin.$(TEST_EXT): CPLUS_FLAGS := $(CPLUS_FLAGS:$(USE_PROXY_FLAG)=)
|
||
|
test_model_plugin.$(TEST_EXT): LIBS += $(LIBDL)
|
||
|
ifneq (,$(DYLIB_KEY))
|
||
|
test_model_plugin.$(TEST_EXT): test_model_plugin_dll.$(DLL)
|
||
|
endif
|
||
|
|
||
|
# tbb_misc.$(OBJ) has to be specified here (instead of harness_inject_scheduler.h) because it carries dependency on version_string.ver
|
||
|
SCHEDULER_DEPENDENCIES = $(TBB_ASM.OBJ) tbb_misc.$(OBJ)
|
||
|
|
||
|
# These executables don't depend on the TBB library, but include core .cpp files directly
|
||
|
SCHEDULER_DIRECTLY_INCLUDED = test_task_leaks.$(TEST_EXT) \
|
||
|
test_task_assertions.$(TEST_EXT) \
|
||
|
test_fast_random.$(TEST_EXT) \
|
||
|
test_global_control_whitebox.$(TEST_EXT) \
|
||
|
test_concurrent_queue_whitebox.$(TEST_EXT)
|
||
|
|
||
|
# Necessary to locate version_string.ver referenced from directly included tbb_misc.cpp
|
||
|
INCLUDES += $(INCLUDE_KEY). $(INCLUDE_TEST_HEADERS)
|
||
|
|
||
|
$(SCHEDULER_DIRECTLY_INCLUDED): WARNING_KEY += $(WARNING_SUPPRESS)
|
||
|
$(SCHEDULER_DIRECTLY_INCLUDED): LIBS += $(LIBDL)
|
||
|
#tbb.lib must not be linked to scheduler white box tests in order to not violate ODR
|
||
|
$(SCHEDULER_DIRECTLY_INCLUDED): LINK_TBB.LIB =
|
||
|
$(SCHEDULER_DIRECTLY_INCLUDED): LINK_FILES += $(SCHEDULER_DEPENDENCIES)
|
||
|
$(SCHEDULER_DIRECTLY_INCLUDED): $(SCHEDULER_DEPENDENCIES)
|
||
|
|
||
|
# test_tbb_header detects "multiple definition" linker error using the test that covers the whole library
|
||
|
TWICE_LINKED_TESTS = test_tbb_header.$(TEST_EXT) \
|
||
|
test_concurrent_unordered_set.$(TEST_EXT)
|
||
|
|
||
|
%_secondary.$(OBJ): CPLUS_FLAGS+=$(DEFINE_KEY)__TBB_TEST_SECONDARY=1
|
||
|
|
||
|
# Detecting "multiple definition" linker error using the test that covers the whole library
|
||
|
$(TWICE_LINKED_TESTS): %.$(TEST_EXT): %.$(OBJ) %_secondary.$(OBJ)
|
||
|
$(TWICE_LINKED_TESTS): LINK_FILES+=$(@:.$(TEST_EXT)=_secondary.$(OBJ))
|
||
|
|
||
|
# Checks that TBB works correctly in position independent code
|
||
|
%_pic.$(OBJ): CPLUS_FLAGS+=$(PIC_KEY)
|
||
|
%_pic.$(OBJ): CPLUS_FLAGS+=$(DEFINE_KEY)__TBB_TEST_PIC=1
|
||
|
|
||
|
# Test of generic gcc port and icc intrinsics port
|
||
|
%_compiler_builtins.$(TEST_EXT): LINK_TBB.LIB =
|
||
|
%_compiler_builtins.$(OBJ): CPLUS_FLAGS+=$(DEFINE_KEY)__TBB_TEST_BUILTINS=1 $(DEFINE_KEY)TBB_USE_ASSERT=0
|
||
|
|
||
|
# dynamic_link tests don't depend on the TBB library
|
||
|
test_dynamic_link%.$(TEST_EXT): LINK_TBB.LIB =
|
||
|
test_dynamic_link.$(TEST_EXT): LIBS += $(LIBDL)
|
||
|
|
||
|
TEST_BIG_OBJ = test_opencl_node.$(TEST_EXT) test_join_node.$(TEST_EXT) test_atomic.$(TEST_EXT)
|
||
|
|
||
|
ifeq (windows_windows,$(tbb_os)_$(target))
|
||
|
ifneq (gcc,$(compiler))
|
||
|
$(TEST_BIG_OBJ): override CXXFLAGS += /bigobj
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
# TODO: remove repetition of .$(TEST_EXT) in the list bellow
|
||
|
# The main list of TBB tests
|
||
|
TEST_TBB_PLAIN.EXE = test_assembly.$(TEST_EXT) \
|
||
|
test_global_control.$(TEST_EXT) \
|
||
|
test_tbb_fork.$(TEST_EXT) \
|
||
|
test_assembly_compiler_builtins.$(TEST_EXT) \
|
||
|
test_aligned_space.$(TEST_EXT) \
|
||
|
test_atomic.$(TEST_EXT) \
|
||
|
test_atomic_pic.$(TEST_EXT) \
|
||
|
test_atomic_compiler_builtins.$(TEST_EXT) \
|
||
|
test_blocked_range.$(TEST_EXT) \
|
||
|
test_blocked_range2d.$(TEST_EXT) \
|
||
|
test_blocked_range3d.$(TEST_EXT) \
|
||
|
test_concurrent_queue.$(TEST_EXT) \
|
||
|
test_concurrent_vector.$(TEST_EXT) \
|
||
|
test_concurrent_unordered_set.$(TEST_EXT) \
|
||
|
test_concurrent_unordered_map.$(TEST_EXT) \
|
||
|
test_concurrent_hash_map.$(TEST_EXT) \
|
||
|
test_enumerable_thread_specific.$(TEST_EXT) \
|
||
|
test_handle_perror.$(TEST_EXT) \
|
||
|
test_halt.$(TEST_EXT) \
|
||
|
test_model_plugin.$(TEST_EXT) \
|
||
|
test_mutex.$(TEST_EXT) \
|
||
|
test_mutex_native_threads.$(TEST_EXT) \
|
||
|
test_rwm_upgrade_downgrade.$(TEST_EXT) \
|
||
|
test_cache_aligned_allocator.$(TEST_EXT) \
|
||
|
test_cache_aligned_allocator_STL.$(TEST_EXT) \
|
||
|
test_parallel_for.$(TEST_EXT) \
|
||
|
test_parallel_reduce.$(TEST_EXT) \
|
||
|
test_parallel_sort.$(TEST_EXT) \
|
||
|
test_parallel_scan.$(TEST_EXT) \
|
||
|
test_parallel_while.$(TEST_EXT) \
|
||
|
test_parallel_do.$(TEST_EXT) \
|
||
|
test_pipeline.$(TEST_EXT) \
|
||
|
test_pipeline_with_tbf.$(TEST_EXT) \
|
||
|
test_parallel_pipeline.$(TEST_EXT) \
|
||
|
test_lambda.$(TEST_EXT) \
|
||
|
test_task_scheduler_init.$(TEST_EXT) \
|
||
|
test_task_scheduler_observer.$(TEST_EXT) \
|
||
|
test_task.$(TEST_EXT) \
|
||
|
test_tbb_thread.$(TEST_EXT) \
|
||
|
test_std_thread.$(TEST_EXT) \
|
||
|
test_tick_count.$(TEST_EXT) \
|
||
|
test_inits_loop.$(TEST_EXT) \
|
||
|
test_yield.$(TEST_EXT) \
|
||
|
test_eh_tasks.$(TEST_EXT) \
|
||
|
test_eh_algorithms.$(TEST_EXT) \
|
||
|
test_eh_flow_graph.$(TEST_EXT) \
|
||
|
test_parallel_invoke.$(TEST_EXT) \
|
||
|
test_task_group.$(TEST_EXT) \
|
||
|
test_ittnotify.$(TEST_EXT) \
|
||
|
test_parallel_for_each.$(TEST_EXT) \
|
||
|
test_tbb_header.$(TEST_EXT) \
|
||
|
test_combinable.$(TEST_EXT) \
|
||
|
test_task_auto_init.$(TEST_EXT) \
|
||
|
test_task_arena.$(TEST_EXT) \
|
||
|
test_concurrent_monitor.$(TEST_EXT) \
|
||
|
test_semaphore.$(TEST_EXT) \
|
||
|
test_critical_section.$(TEST_EXT) \
|
||
|
test_reader_writer_lock.$(TEST_EXT) \
|
||
|
test_tbb_condition_variable.$(TEST_EXT) \
|
||
|
test_intrusive_list.$(TEST_EXT) \
|
||
|
test_concurrent_priority_queue.$(TEST_EXT) \
|
||
|
test_task_priority.$(TEST_EXT) \
|
||
|
test_task_enqueue.$(TEST_EXT) \
|
||
|
test_task_steal_limit.$(TEST_EXT) \
|
||
|
test_hw_concurrency.$(TEST_EXT) \
|
||
|
test_fp.$(TEST_EXT) \
|
||
|
test_tuple.$(TEST_EXT) \
|
||
|
test_flow_graph.$(TEST_EXT) \
|
||
|
test_broadcast_node.$(TEST_EXT) \
|
||
|
test_continue_node.$(TEST_EXT) \
|
||
|
test_function_node.$(TEST_EXT) \
|
||
|
test_limiter_node.$(TEST_EXT) \
|
||
|
test_join_node.$(TEST_EXT) \
|
||
|
test_buffer_node.$(TEST_EXT) \
|
||
|
test_queue_node.$(TEST_EXT) \
|
||
|
test_priority_queue_node.$(TEST_EXT) \
|
||
|
test_sequencer_node.$(TEST_EXT) \
|
||
|
test_source_node.$(TEST_EXT) \
|
||
|
test_overwrite_node.$(TEST_EXT) \
|
||
|
test_write_once_node.$(TEST_EXT) \
|
||
|
test_indexer_node.$(TEST_EXT) \
|
||
|
test_multifunction_node.$(TEST_EXT) \
|
||
|
test_split_node.$(TEST_EXT) \
|
||
|
test_static_assert.$(TEST_EXT) \
|
||
|
test_aggregator.$(TEST_EXT) \
|
||
|
test_concurrent_lru_cache.$(TEST_EXT) \
|
||
|
test_examples_common_utility.$(TEST_EXT) \
|
||
|
test_dynamic_link.$(TEST_EXT) \
|
||
|
test_parallel_for_vectorization.$(TEST_EXT) \
|
||
|
test_tagged_msg.$(TEST_EXT) \
|
||
|
test_partitioner_whitebox.$(TEST_EXT) \
|
||
|
test_flow_graph_whitebox.$(TEST_EXT) \
|
||
|
test_composite_node.$(TEST_EXT) \
|
||
|
test_async_node.$(TEST_EXT) \
|
||
|
test_async_msg.$(TEST_EXT) \
|
||
|
test_tbb_version.$(TEST_EXT) # insert new files right above
|
||
|
|
||
|
# skip mode_plugin for now
|
||
|
skip_tests += test_model_plugin
|
||
|
|
||
|
ifdef OPENMP_FLAG
|
||
|
test_openmp.$(TEST_EXT): CPLUS_FLAGS += $(OPENMP_FLAG)
|
||
|
|
||
|
test_tbb_openmp: $(TEST_PREREQUISITE) test_openmp.$(TEST_EXT)
|
||
|
$(run_cmd) ./test_openmp.$(TEST_EXT) 1:4
|
||
|
else
|
||
|
test_tbb_openmp:
|
||
|
@echo "OpenMP is not available"
|
||
|
endif
|
||
|
|
||
|
ifdef CILK_AVAILABLE
|
||
|
# Workaround on cilkrts linkage known issue (see Intel(R) C++ Composer XE 2011 Release Notes)
|
||
|
# The issue reveals itself if a version of binutils is prior to 2.17
|
||
|
ifeq (linux_icc,$(tbb_os)_$(compiler))
|
||
|
test_cilk_interop.$(TEST_EXT): LIBS += -lcilkrts
|
||
|
endif
|
||
|
test_tbb_cilk: test_cilk_interop.$(TEST_EXT)
|
||
|
$(run_cmd) ./test_cilk_interop.$(TEST_EXT) $(args)
|
||
|
else
|
||
|
test_tbb_cilk:
|
||
|
@echo "Intel(R) Cilk(TM) Plus is not available"
|
||
|
endif
|
||
|
|
||
|
test_opencl_node.$(TEST_EXT): LIBS += $(OPENCL.LIB)
|
||
|
|
||
|
$(TEST_TBB_PLAIN.EXE): WARNING_KEY += $(TEST_WARNING_KEY)
|
||
|
|
||
|
# Run tests that are in SCHEDULER_DIRECTLY_INCLUDED and TEST_TBB_PLAIN.EXE but not in skip_tests (which is specified by user)
|
||
|
TESTS_TO_RUN := $(filter-out $(addsuffix .$(TEST_EXT),$(skip_tests)),$(TEST_TBB_PLAIN.EXE) $(SCHEDULER_DIRECTLY_INCLUDED))
|
||
|
|
||
|
# This definition intentionally consists of two blank lines
|
||
|
define eol
|
||
|
|
||
|
|
||
|
endef
|
||
|
|
||
|
# First build the targets, then run them
|
||
|
# Form a list of commands separated with end of line
|
||
|
# Note that usually run_cmd is empty, and tests run directly
|
||
|
|
||
|
test_tbb_plain: $(TEST_PREREQUISITE) $(TESTS_TO_RUN)
|
||
|
$(foreach test, $(TESTS_TO_RUN), $(run_cmd) ./$(test) $(args) $(eol))
|
||
|
|
||
|
|
||
|
# For deprecated files, we don't mind warnings etc., thus compilation rules are most relaxed
|
||
|
CPLUS_FLAGS_DEPRECATED = $(DEFINE_KEY)TBB_DEPRECATED=1 $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(WARNING_SUPPRESS) $(INCLUDE_KEY)$(tbb_root)/src/test
|
||
|
TEST_TBB_OLD.OBJ = test_concurrent_vector_v2.$(OBJ) test_concurrent_queue_v2.$(OBJ) test_mutex_v2.$(OBJ) test_task_scheduler_observer_v3.$(OBJ)
|
||
|
|
||
|
$(TEST_TBB_OLD.OBJ): CPLUS_FLAGS := $(CPLUS_FLAGS_DEPRECATED)
|
||
|
|
||
|
TEST_TBB_OLD.EXE = $(subst .$(OBJ),.$(TEST_EXT),$(TEST_TBB_OLD.OBJ))
|
||
|
|
||
|
ifeq (,$(NO_LEGACY_TESTS))
|
||
|
test_tbb_old: $(TEST_PREREQUISITE) $(TEST_TBB_OLD.EXE)
|
||
|
$(run_cmd) ./test_concurrent_vector_v2.$(TEST_EXT) $(args) 1:4
|
||
|
$(run_cmd) ./test_concurrent_queue_v2.$(TEST_EXT) $(args) 1:4
|
||
|
$(run_cmd) ./test_mutex_v2.$(TEST_EXT) $(args) 1
|
||
|
$(run_cmd) ./test_mutex_v2.$(TEST_EXT) $(args) 2
|
||
|
$(run_cmd) ./test_mutex_v2.$(TEST_EXT) $(args) 4
|
||
|
$(run_cmd) ./test_task_scheduler_observer_v3.$(TEST_EXT) $(args) 1:4
|
||
|
else
|
||
|
test_tbb_old:
|
||
|
@echo Legacy tests skipped
|
||
|
endif
|
||
|
|
||
|
ifneq (,$(codecov))
|
||
|
codecov_gen:
|
||
|
profmerge
|
||
|
codecov $(if $(findstring -,$(codecov)),$(codecov),) -demang -comp $(tbb_root)/build/codecov.txt
|
||
|
endif
|
||
|
|
||
|
time_%: time_%.$(TEST_EXT) $(TEST_PREREQUISITE)
|
||
|
$(run_cmd) ./$< $(args)
|
||
|
|
||
|
|
||
|
# for some reason, "perf_%.$(TEST_EXT): perf_dll.$(DLL)" does not work TODO: find out how to apply pattern here
|
||
|
perf_sched.$(TEST_EXT): perf_dll.$(DLL)
|
||
|
perf_%.$(TEST_EXT): TEST_LIBS = perf_dll.$(LIBEXT)
|
||
|
perf_%: perf_%.$(TEST_EXT) $(TEST_PREREQUISITE)
|
||
|
$(run_cmd) ./$< $(args)
|
||
|
|
||
|
clean_%:
|
||
|
$(RM) $*.$(OBJ) $*.exe $*.$(DLL) $*.$(LIBEXT) $*.res $*.map $*.ilk $*.pdb $*.exp $*.*manifest $*.tmp $*.d *.ver
|
||
|
|
||
|
clean:
|
||
|
$(RM) *.$(OBJ) *.exe *.$(DLL) *.$(LIBEXT) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d pgopti.* *.dyn core core.*[0-9][0-9] *.ver
|
||
|
|
||
|
# Include automatically generated dependencies
|
||
|
-include *.d
|