diff --git a/CHANGES b/CHANGES
new file mode 100644
index 0000000000..f538787744
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,1969 @@
+------------------------------------------------------------------------
+The list of most significant changes made over time in
+Intel(R) Threading Building Blocks (Intel(R) TBB).
+
+Intel TBB 4.4
+TBB_INTERFACE_VERSION == 9000
+
+- The following features are now fully supported:
+ tbb::flow::composite_node;
+ additional policies of tbb::flow::graph_node::reset().
+- Platform abstraction layer for Windows* OS updated to use compiler
+ intrinsics for most atomic operations.
+- The tbb/compat/thread header updated to automatically include
+ C++11 where available.
+- Fixes and refactoring in the task scheduler and class task_arena.
+- Added key_matching policy to tbb::flow::join_node, which removes
+ the restriction on the type that can be compared-against.
+- For tag_matching join_node, tag_value is redefined to be 64 bits
+ wide on all architectures.
+- Expanded the documentation for the flow graph with details about
+ node semantics and behavior.
+- Added dynamic replacement of C11 standard function aligned_alloc()
+ under Linux* OS.
+- Added C++11 move constructors and assignment operators to
+ tbb::enumerable_thread_specific container.
+- Added hashing support for tbb::tbb_thread::id.
+- On OS X*, binaries that depend on libstdc++ are not provided anymore.
+ In the makefiles, libc++ is now used by default; for building with
+ libstdc++, specify stdlib=libstdc++ in the make command line.
+
+Preview Features:
+
+- Added a new example, graph/fgbzip2, that shows usage of
+ tbb::flow::async_node.
+- Modification to the low-level API for memory pools:
+ added a function for finding a memory pool by an object allocated
+ from that pool.
+- tbb::memory_pool now does not request memory till the first allocation
+ from the pool.
+
+Changes affecting backward compatibility:
+
+- Internal layout of flow graph nodes has changed; recompilation is
+ recommended for all binaries that use the flow graph.
+- Resetting a tbb::flow::source_node will immediately activate it,
+ unless it was created in inactive state.
+
+Bugs fixed:
+
+- Failure at creation of a memory pool will not cause process
+ termination anymore.
+
+Open-source contributions integrated:
+
+- Supported building TBB with Clang on AArch64 with use of built-in
+ intrinsics by David A.
+
+------------------------------------------------------------------------
+Intel TBB 4.3 Update 6
+TBB_INTERFACE_VERSION == 8006
+
+Changes (w.r.t. Intel TBB 4.3 Update 5):
+- Supported zero-copy realloc for objects >1MB under Linux* via
+ mremap system call.
+- C++11 move-aware insert and emplace methods have been added to
+ concurrent_hash_map container.
+- install_name is set to @rpath/ on OS X*.
+
+Preview Features:
+- Added template class async_node to the flow graph API. It allows a
+ flow graph to communicate with an external activity managed by
+ the user or another runtime.
+- Improved speed of flow::graph::reset() clearing graph edges.
+ rf_extract flag has been renamed rf_clear_edges.
+- extract() method of graph nodes now takes no arguments.
+
+Bugs fixed:
+- concurrent_unordered_{set,map} behaves correctly for degenerate
+ hashes.
+- Fixed a race condition in the memory allocator that may lead to
+ excessive memory consumption under high multithreading load.
+
+------------------------------------------------------------------------
+Intel TBB 4.3 Update 5
+TBB_INTERFACE_VERSION == 8005
+
+Changes (w.r.t. Intel TBB 4.3 Update 4):
+- Added add_ref_count() method of class tbb::task.
+
+Preview Features:
+- Added class global_control for application-wide control of allowed
+ parallelism and thread stack size.
+- memory_pool_allocator now throws the std::bad_alloc exception on
+ allocation failure.
+- Exceptions thrown for by memory pool constructors changed from
+ std::bad_alloc to std::invalid_argument and std::runtime_error.
+
+Bugs fixed:
+- scalable_allocator now throws the std::bad_alloc exception on
+ allocation failure.
+- Fixed a race condition in the memory allocator that may lead to
+ excessive memory consumption under high multithreading load.
+- A new scheduler created right after destruction of the previous one
+ might be unable to modify the number of worker threads.
+
+Open-source contributions integrated:
+- (Added but not enabled) push_front() method of class tbb::task_list
+ by Raf Schietekat.
+
+------------------------------------------------------------------------
+Intel TBB 4.3 Update 4
+TBB_INTERFACE_VERSION == 8004
+
+Changes (w.r.t. Intel TBB 4.3 Update 3):
+- Added a C++11 variadic constructor for enumerable_thread_specific.
+ The arguments from this constructor are used to construct
+ thread-local values.
+- Improved exception safety for enumerable_thread_specific.
+- Added documentation for tbb::flow::tagged_msg class and
+ tbb::flow::output_port function.
+- Fixed build errors for systems that do not support dynamic linking.
+- C++11 move-aware insert and emplace methods have been added to
+ concurrent unordered containers.
+
+Preview Features:
+- Interface-breaking change: typedefs changed for node predecessor and
+ successor lists, affecting copy_predecessors and copy_successors
+ methods.
+- Added template class composite_node to the flow graph API. It packages
+ a subgraph to represent it as a first-class flow graph node.
+- make_edge and remove_edge now accept multiport nodes as arguments,
+ automatically using the node port with index 0 for an edge.
+
+Open-source contributions integrated:
+- Draft code for enumerable_thread_specific constructor with multiple
+ arguments (see above) by Adrien Guinet.
+- Fix for GCC invocation on IBM* Blue Gene*
+ by Jeff Hammond and Raf Schietekat.
+- Extended testing with smart pointers for Clang & libc++
+ by Raf Schietekat.
+
+------------------------------------------------------------------------
+Intel TBB 4.3 Update 3
+TBB_INTERFACE_VERSION == 8003
+
+Changes (w.r.t. Intel TBB 4.3 Update 2):
+
+- Move constructor and assignment operator were added to unique_lock.
+
+Preview Features:
+
+- Time overhead for memory pool destruction was reduced.
+
+Open-source contributions integrated:
+
+- Build error fix for iOS* by Raf Schietekat.
+
+------------------------------------------------------------------------
+Intel TBB 4.3 Update 2
+TBB_INTERFACE_VERSION == 8002
+
+Changes (w.r.t. Intel TBB 4.3 Update 1):
+
+- Binary files for 64-bit Android* applications were added as part of the
+ Linux* OS package.
+- Exact exception propagation is enabled for Intel C++ Compiler on OS X*.
+- concurrent_vector::shrink_to_fit was optimized for types that support
+ C++11 move semantics.
+
+Bugs fixed:
+
+- Fixed concurrent unordered containers to insert elements much faster
+ in debug mode.
+- Fixed concurrent priority queue to support types that do not have
+ copy constructors.
+- Fixed enumerable_thread_specific to forbid copying from an instance
+ with a different value type.
+
+Open-source contributions integrated:
+
+- Support for PathScale* EKOPath* Compiler by Erik Lindahl.
+
+------------------------------------------------------------------------
+Intel TBB 4.3 Update 1
+TBB_INTERFACE_VERSION == 8001
+
+Changes (w.r.t. Intel TBB 4.3):
+
+- The ability to split blocked_ranges in a proportion, used by
+ affinity_partitioner since version 4.2 Update 4, became a formal
+ extension of the Range concept.
+- More checks for an incorrect address to release added to the debug
+ version of the memory allocator.
+- Different kind of solutions for each TBB example were merged.
+
+Preview Features:
+
+- Task priorities are re-enabled in preview binaries.
+
+Bugs fixed:
+
+- Fixed a duplicate symbol when TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE is
+ used in multiple compilation units.
+- Fixed a crash in __itt_fini_ittlib seen on Ubuntu 14.04.
+- Fixed a crash in memory release after dynamic replacement of the
+ OS X* memory allocator.
+- Fixed incorrect indexing of arrays in seismic example.
+- Fixed a data race in lazy initialization of task_arena.
+
+Open-source contributions integrated:
+
+- Fix for dumping information about gcc and clang compiler versions
+ by Misty De Meo.
+
+------------------------------------------------------------------------
+Intel TBB 4.3
+TBB_INTERFACE_VERSION == 8000
+
+Changes (w.r.t. Intel TBB 4.2 Update 5):
+
+- The following features are now fully supported: flow::indexer_node,
+ task_arena, speculative_spin_rw_mutex.
+- Compatibility with C++11 standard improved for tbb/compat/thread
+ and tbb::mutex.
+- C++11 move constructors have been added to concurrent_queue and
+ concurrent_bounded_queue.
+- C++11 move constructors and assignment operators have been added to
+ concurrent_vector, concurrent_hash_map, concurrent_priority_queue,
+ concurrent_unordered_{set,multiset,map,multimap}.
+- C++11 move-aware emplace/push/pop methods have been added to
+ concurrent_vector, concurrent_queue, concurrent_bounded_queue,
+ concurrent_priority_queue.
+- Methods to insert a C++11 initializer list have been added:
+ concurrent_vector::grow_by(), concurrent_hash_map::insert(),
+ concurrent_unordered_{set,multiset,map,multimap}::insert().
+- Testing for compatibility of containers with some C++11 standard
+ library types has been added.
+- Dynamic replacement of standard memory allocation routines has been
+ added for OS X*.
+- Microsoft* Visual Studio* projects for Intel TBB examples updated
+ to VS 2010.
+- For open-source packages, debugging information (line numbers) in
+ precompiled binaries now matches the source code.
+- Debug information was added to release builds for OS X*, Solaris*,
+ FreeBSD* operating systems and MinGW*.
+- Various improvements in documentation, debug diagnostics and examples.
+
+Preview Features:
+
+- Additional actions on reset of graphs, and extraction of individual
+ nodes from a graph (TBB_PREVIEW_FLOW_GRAPH_FEATURES).
+- Support for an arbitrary number of arguments in parallel_invoke
+ (TBB_PREVIEW_VARIADIC_PARALLEL_INVOKE).
+
+Changes affecting backward compatibility:
+
+- For compatibility with C++11 standard, copy and move constructors and
+ assignment operators are disabled for all mutex classes. To allow
+ the old behavior, use TBB_DEPRECATED_MUTEX_COPYING macro.
+- flow::sequencer_node rejects messages with repeating sequence numbers.
+- Changed internal interface between tbbmalloc and tbbmalloc_proxy.
+- Following deprecated functionality has been removed:
+ old debugging macros TBB_DO_ASSERT & TBB_DO_THREADING_TOOLS;
+ no-op depth-related methods in class task;
+ tbb::deprecated::concurrent_queue;
+ deprecated variants of concurrent_vector methods.
+- register_successor() and remove_successor() are deprecated as methods
+ to add and remove edges in flow::graph; use make_edge() and
+ remove_edge() instead.
+
+Bugs fixed:
+
+- Fixed incorrect scalable_msize() implementation for aligned objects.
+- Flow graph buffering nodes now destroy their copy of forwarded items.
+- Multiple fixes in task_arena implementation, including for:
+ inconsistent task scheduler state inside executed functions;
+ incorrect floating-point settings and exception propagation;
+ possible stalls in concurrent invocations of execute().
+- Fixed floating-point settings propagation when the same instance of
+ task_group_context is used in different arenas.
+- Fixed compilation error in pipeline.h with Intel Compiler on OS X*.
+- Added missed headers for individual components to tbb.h.
+
+Open-source contributions integrated:
+
+- Range interface addition to parallel_do, parallel_for_each and
+ parallel_sort by Stephan Dollberg.
+- Variadic template implementation of parallel_invoke
+ by Kizza George Mbidde (see Preview Features).
+- Improvement in Seismic example for MacBook Pro* with Retina* display
+ by Raf Schietekat.
+
+------------------------------------------------------------------------
+Intel TBB 4.2 Update 5
+TBB_INTERFACE_VERSION == 7005
+
+Changes (w.r.t. Intel TBB 4.2 Update 4):
+
+- The second template argument of class aligned_space now is set
+ to 1 by default.
+
+Preview Features:
+
+- Better support for exception safety, task priorities and floating
+ point settings in class task_arena.
+- task_arena::current_slot() has been renamed to
+ task_arena::current_thread_index().
+
+Bugs fixed:
+
+- Task priority change possibly ignored by a worker thread entering
+ a nested parallel construct.
+- Memory leaks inside the task scheduler when running on
+ Intel(R) Xeon Phi(tm) coprocessor.
+
+Open-source contributions integrated:
+
+- Improved detection of X Window support for Intel TBB examples
+ and other feedback by Raf Schietekat.
+
+------------------------------------------------------------------------
+Intel TBB 4.2 Update 4
+TBB_INTERFACE_VERSION == 7004
+
+Changes (w.r.t. Intel TBB 4.2 Update 3):
+
+- Added possibility to specify floating-point settings at invocation
+ of most parallel algorithms (including flow::graph) via
+ task_group_context.
+- Added dynamic replacement of malloc_usable_size() under
+ Linux*/Android* and dlmalloc_usable_size() under Android*.
+- Added new methods to concurrent_vector:
+ grow_by() that appends a sequence between two given iterators;
+ grow_to_at_least() that initializes new elements with a given value.
+- Improved affinity_partitioner for better performance on balanced
+ workloads.
+- Improvements in the task scheduler, including better scalability
+ when threads search for a task arena, and better diagnostics.
+- Improved allocation performance for workloads that do intensive
+ allocation/releasing of same-size objects larger than ~8KB from
+ multiple threads.
+- Exception support is enabled by default for 32-bit MinGW compilers.
+- The tachyon example for Android* can be built for all targets
+ supported by the installed NDK.
+- Added Windows Store* version of the tachyon example.
+- GettingStarted/sub_string_finder example ported to offload execution
+ on Windows* for Intel(R) Many Integrated Core Architecture.
+
+Preview Features:
+
+- Removed task_scheduler_observer::on_scheduler_leaving() callback.
+- Added task_scheduler_observer::may_sleep() callback.
+- The CPF or_node has been renamed indexer_node. The input to
+ indexer_node is now a list of types. The output of indexer_node is
+ a tagged_msg type composed of a tag and a value. For indexer_node,
+ the tag is a size_t.
+
+Bugs fixed:
+
+- Fixed data races in preview extensions of task_scheduler_observer.
+- Added noexcept(false) for destructor of task_group_base to avoid
+ crash on cancelation of structured task group in C++11.
+
+Open-source contributions integrated:
+
+- Improved concurrency detection for BG/Q, and other improvements
+ by Raf Schietekat.
+- Fix for crashes in enumerable_thread_specific in case if a contained
+ object is too big to be constructed on the stack by Adrien Guinet.
+
+------------------------------------------------------------------------
+Intel TBB 4.2 Update 3
+TBB_INTERFACE_VERSION == 7003
+
+Changes (w.r.t. Intel TBB 4.2 Update 2):
+
+- Added support for Microsoft* Visual Studio* 2013.
+- Improved Microsoft* PPL-compatible form of parallel_for for better
+ support of auto-vectorization.
+- Added a new example for cancellation and reset in the flow graph:
+ Kohonen self-organizing map (examples/graph/som).
+- Various improvements in source code, tests, and makefiles.
+
+Bugs fixed:
+
+- Added dynamic replacement of _aligned_msize() previously missed.
+- Fixed task_group::run_and_wait() to throw invalid_multiple_scheduling
+ exception if the specified task handle is already scheduled.
+
+Open-source contributions integrated:
+
+- A fix for ARM* processors by Steve Capper.
+- Improvements in std::swap calls by Robert Maynard.
+
+------------------------------------------------------------------------
+Intel TBB 4.2 Update 2
+TBB_INTERFACE_VERSION == 7002
+
+Changes (w.r.t. Intel TBB 4.2 Update 1):
+
+- Enable C++11 features for Microsoft* Visual Studio* 2013 Preview.
+- Added a test for compatibility of TBB containers with C++11
+ range-based for loop.
+
+Changes affecting backward compatibility:
+
+- Internal layout changed for class tbb::flow::limiter_node.
+
+Preview Features:
+
+- Added speculative_spin_rw_mutex, a read-write lock class which uses
+ Intel(R) Transactional Synchronization Extensions.
+
+Bugs fixed:
+
+- When building for Intel(R) Xeon Phi(tm) coprocessor, TBB programs
+ no longer require explicit linking with librt and libpthread.
+
+Open-source contributions integrated:
+
+- Fixes for ARM* processors by Steve Capper, Leif Lindholm
+ and Steven Noonan.
+- Support for Clang on Linux by Raf Schietekat.
+- Typo correction in scheduler.cpp by Julien Schueller.
+
+------------------------------------------------------------------------
+Intel TBB 4.2 Update 1
+TBB_INTERFACE_VERSION == 7001
+
+Changes (w.r.t. Intel TBB 4.2):
+
+- Added project files for Microsoft* Visual Studio* 2010.
+- Initial support of Microsoft* Visual Studio* 2013 Preview.
+- Enable C++11 features available in Intel(R) C++ Compiler 14.0.
+- scalable_allocation_mode(TBBMALLOC_SET_SOFT_HEAP_LIMIT, ) can be
+ used to urge releasing memory from tbbmalloc internal buffers when
+ the given limit is exceeded.
+
+Preview Features:
+
+- Class task_arena no longer requires linking with a preview library,
+ though still remains a community preview feature.
+- The method task_arena::wait_until_empty() is removed.
+- The method task_arena::current_slot() now returns -1 if
+ the task scheduler is not initialized in the thread.
+
+Changes affecting backward compatibility:
+
+- Because of changes in internal layout of graph nodes, the namespace
+ interface number of flow::graph has been incremented from 6 to 7.
+
+Bugs fixed:
+
+- Fixed a race in lazy initialization of task_arena.
+- Fixed flow::graph::reset() to prevent situations where tasks would be
+ spawned in the process of resetting the graph to its initial state.
+- Fixed decrement bug in limiter_node.
+- Fixed a race in arc deletion in the flow graph.
+
+Open-source contributions integrated:
+
+- Improved support for IBM* Blue Gene* by Raf Schietekat.
+
+------------------------------------------------------------------------
+Intel TBB 4.2
+TBB_INTERFACE_VERSION == 7000
+
+Changes (w.r.t. Intel TBB 4.1 Update 4):
+
+- Added speculative_spin_mutex, which uses Intel(R) Transactional
+ Synchronization Extensions when they are supported by hardware.
+- Binary files linked with libc++ (the C++ standard library in Clang)
+ were added on OS X*.
+- For OS X* exact exception propagation is supported with Clang;
+ it requires use of libc++ and corresponding Intel TBB binaries.
+- Support for C++11 initializer lists in constructor and assigment
+ has been added to concurrent_hash_map, concurrent_unordered_set,
+ concurrent_unordered_multiset, concurrent_unordered_map,
+ concurrent_unordered_multimap.
+- The memory allocator may now clean its per-thread memory caches
+ when it cannot get more memory.
+- Added the scalable_allocation_command() function for on-demand
+ cleaning of internal memory caches.
+- Reduced the time overhead for freeing memory objects smaller than ~8K.
+- Simplified linking with the debug library for applications that use
+ Intel TBB in code offloaded to Intel(R) Xeon Phi(tm) coprocessors.
+ See an example in
+ examples/GettingStarted/sub_string_finder/Makefile.
+- Various improvements in source code, scripts and makefiles.
+
+Changes affecting backward compatibility:
+
+- tbb::flow::graph has been modified to spawn its tasks;
+ the old behaviour (task enqueuing) is deprecated. This change may
+ impact applications that expected a flow graph to make progress
+ without calling wait_for_all(), which is no longer guaranteed. See
+ the documentation for more details.
+- Changed the return values of the scalable_allocation_mode() function.
+
+Bugs fixed:
+
+- Fixed a leak of parallel_reduce body objects when execution is
+ cancelled or an exception is thrown, as suggested by Darcy Harrison.
+- Fixed a race in the task scheduler which can lower the effective
+ priority despite the existence of higher priority tasks.
+- On Linux an error during destruction of the internal thread local
+ storage no longer results in an exception.
+
+Open-source contributions integrated:
+
+- Fixed task_group_context state propagation to unrelated context trees
+ by Raf Schietekat.
+
+------------------------------------------------------------------------
+Intel TBB 4.1 Update 4
+TBB_INTERFACE_VERSION == 6105
+
+Changes (w.r.t. Intel TBB 4.1 Update 3):
+
+- Use /volatile:iso option with VS 2012 to disable extended
+ semantics for volatile variables.
+- Various improvements in affinity_partitioner, scheduler,
+ tests, examples, makefiles.
+- Concurrent_priority_queue class now supports initialization/assignment
+ via C++11 initializer list feature (std::initializer_list).
+
+Bugs fixed:
+
+- Fixed more possible stalls in concurrent invocations of
+ task_arena::execute(), especially waiting for enqueued tasks.
+- Fixed requested number of workers for task_arena(P,0).
+- Fixed interoperability with Intel(R) VTune(TM) Amplifier XE in
+ case of using task_arena::enqueue() from a terminating thread.
+
+Open-source contributions integrated:
+
+- Type fixes, cleanups, and code beautification by Raf Schietekat.
+- Improvements in atomic operations for big endian platforms
+ by Raf Schietekat.
+
+------------------------------------------------------------------------
+Intel TBB 4.1 Update 3
+TBB_INTERFACE_VERSION == 6103
+
+Changes (w.r.t. Intel TBB 4.1 Update 2):
+
+- Binary files for Android* applications were added to the Linux* OS
+ package.
+- Binary files for Windows Store* applications were added to the
+ Windows* OS package.
+- Exact exception propagation (exception_ptr) support on Linux OS is
+ now turned on by default for GCC 4.4 and higher.
+- Stopped implicit use of large memory pages by tbbmalloc (Linux-only).
+ Now use of large pages must be explicitly enabled with
+ scalable_allocation_mode() function or TBB_MALLOC_USE_HUGE_PAGES
+ environment variable.
+
+Community Preview Features:
+
+- Extended class task_arena constructor and method initialize() to
+ allow some concurrency to be reserved strictly for application
+ threads.
+- New methods terminate() and is_active() were added to class
+ task_arena.
+
+Bugs fixed:
+
+- Fixed initialization of hashing helper constant in the hash
+ containers.
+- Fixed possible stalls in concurrent invocations of
+ task_arena::execute() when no worker thread is available to make
+ progress.
+- Fixed incorrect calculation of hardware concurrency in the presence
+ of inactive processor groups, particularly on systems running
+ Windows* 8 and Windows* Server 2012.
+
+Open-source contributions integrated:
+
+- The fix for the GUI examples on OS X* systems by Raf Schietekat.
+- Moved some power-of-2 calculations to functions to improve readability
+ by Raf Schietekat.
+- C++11/Clang support improvements by arcata.
+- ARM* platform isolation layer by Steve Capper, Leif Lindholm, Leo Lara
+ (ARM).
+
+------------------------------------------------------------------------
+Intel TBB 4.1 Update 2
+TBB_INTERFACE_VERSION == 6102
+
+Changes (w.r.t. Intel TBB 4.1 Update 1):
+
+- Objects up to 128 MB are now cached by the tbbmalloc. Previously
+ the threshold was 8MB. Objects larger than 128 MB are still
+ processed by direct OS calls.
+- concurrent_unordered_multiset and concurrent_unordered_multimap
+ have been added, based on Microsoft* PPL prototype.
+- Ability to value-initialize a tbb::atomic variable on construction
+ in C++11, with const expressions properly supported.
+
+Community Preview Features:
+
+- Added a possibility to wait until all worker threads terminate.
+ This is necessary before calling fork() from an application.
+
+Bugs fixed:
+
+- Fixed data race in tbbmalloc that might lead to memory leaks
+ for large object allocations.
+- Fixed task_arena::enqueue() to use task_group_context of target arena.
+- Improved implementation of 64 bit atomics on ia32.
+
+------------------------------------------------------------------------
+Intel TBB 4.1 Update 1
+TBB_INTERFACE_VERSION == 6101
+
+Changes (w.r.t. Intel TBB 4.1):
+
+- concurrent_vector class now supports initialization/assignment
+ via C++11 initializer list feature (std::initializer_list)
+- Added implementation of the platform isolation layer based on
+ Intel compiler atomic built-ins; it is supposed to work on
+ any platform supported by compiler version 12.1 and newer.
+- Using GetNativeSystemInfo() instead of GetSystemInfo() to support
+ more than 32 processors for 32-bit applications under WOW64.
+- The following form of parallel_for:
+ parallel_for(first, last, [step,] f[, context]) now accepts an
+ optional partitioner parameter after the function f.
+
+Backward-incompatible API changes:
+
+- The library no longer injects tuple in to namespace std.
+ In previous releases, tuple was injected into namespace std by
+ flow_graph.h when std::tuple was not available. In this release,
+ flow_graph.h now uses tbb::flow::tuple. On platforms where
+ std::tuple is available, tbb::flow::tuple is typedef'ed to
+ std::tuple. On all other platforms, tbb::flow::tuple provides
+ a subset of the functionality defined by std::tuple. Users of
+ flow_graph.h may need to change their uses of std::tuple to
+ tbb::flow::tuple to ensure compatibility with non-C++11 compliant
+ compilers.
+
+Bugs fixed:
+
+- Fixed local observer to be able to override propagated CPU state and
+ to provide correct value of task_arena::current_slot() in callbacks.
+
+------------------------------------------------------------------------
+Intel TBB 4.1
+TBB_INTERFACE_VERSION == 6100
+
+Changes (w.r.t. Intel TBB 4.0 Update 5):
+
+- _WIN32_WINNT must be set to 0x0501 or greater in order to use TBB
+ on Microsoft* Windows*.
+- parallel_deterministic_reduce template function is fully supported.
+- TBB headers can be used with C++0x/C++11 mode (-std=c++0x) of GCC
+ and Intel(R) Compiler.
+- C++11 std::make_exception_ptr is used where available, instead of
+ std::copy_exception from earlier C++0x implementations.
+- Improvements in the TBB allocator to reduce extra memory consumption.
+- Partial refactoring of the task scheduler data structures.
+- TBB examples allow more flexible specification of the thread number,
+ including arithmetic and geometric progression.
+
+Bugs fixed:
+
+- On Linux & OS X*, pre-built TBB binaries do not yet support exact
+ exception propagation via C++11 exception_ptr. To prevent run time
+ errors, by default TBB headers disable exact exception propagation
+ even if the C++ implementation provides exception_ptr.
+
+Community Preview Features:
+
+- Added: class task_arena, for work submission by multiple application
+ threads with thread-independent control of concurrency level.
+- Added: task_scheduler_observer can be created as local to a master
+ thread, to observe threads that work on behalf of that master.
+ Local observers may have new on_scheduler_leaving() callback.
+
+------------------------------------------------------------------------
+Intel TBB 4.0 Update 5
+TBB_INTERFACE_VERSION == 6005
+
+Changes (w.r.t. Intel TBB 4.0 Update 4):
+
+- Parallel pipeline optimization (directly storing small objects in the
+ interstage data buffers) limited to trivially-copyable types for
+ C++11 and a short list of types for earlier compilers.
+- _VARIADIC_MAX switch is honored for TBB tuple implementation
+ and flow::graph nodes based on tuple.
+- Support of Cocoa framework was added to the GUI examples on OS X*
+ systems.
+
+Bugs fixed:
+
+- Fixed a tv_nsec overflow bug in condition_variable::wait_for.
+- Fixed execution order of enqueued tasks with different priorities.
+- Fixed a bug with task priority changes causing lack of progress
+ for fire-and-forget tasks when TBB was initialized to use 1 thread.
+- Fixed duplicate symbol problem when linking multiple compilation
+ units that include flow_graph.h on VC 10.
+
+------------------------------------------------------------------------
+Intel TBB 4.0 Update 4
+TBB_INTERFACE_VERSION == 6004
+
+Changes (w.r.t. Intel TBB 4.0 Update 3):
+
+- The TBB memory allocator transparently supports large pages on Linux.
+- A new flow_graph example, logic_sim, was added.
+- Support for DirectX* 9 was added to GUI examples.
+
+Community Preview Features:
+
+- Added: aggregator, a new concurrency control mechanism.
+
+Bugs fixed:
+
+- The abort operation on concurrent_bounded_queue now leaves the queue
+ in a reusable state. If a bad_alloc or bad_last_alloc exception is
+ thrown while the queue is recovering from an abort, that exception
+ will be reported instead of user_abort on the thread on which it
+ occurred, and the queue will not be reusable.
+- Steal limiting heuristic fixed to avoid premature stealing disabling
+ when large amount of __thread data is allocated on thread stack.
+- Fixed a low-probability leak of arenas in the task scheduler.
+- In STL-compatible allocator classes, the method construct() was fixed
+ to comply with C++11 requirements.
+- Fixed a bug that prevented creation of fixed-size memory pools
+ smaller than 2M.
+- Significantly reduced the amount of warnings from various compilers.
+
+Open-source contributions integrated:
+
+- Multiple improvements by Raf Schietekat.
+- Basic support for Clang on OS X* by Blas Rodriguez Somoza.
+- Fixes for warnings and corner-case bugs by Blas Rodriguez Somoza
+ and Edward Lam.
+
+------------------------------------------------------------------------
+Intel TBB 4.0 Update 3
+TBB_INTERFACE_VERSION == 6003
+
+Changes (w.r.t. Intel TBB 4.0 Update 2):
+
+- Modifications to the low-level API for memory pools:
+ added support for aligned allocations;
+ pool policies reworked to allow backward-compatible extensions;
+ added a policy to not return memory space till destruction;
+ pool_reset() does not return memory space anymore.
+- Class tbb::flow::graph_iterator added to iterate over all nodes
+ registered with a graph instance.
+- multioutput_function_node has been renamed multifunction_node.
+ multifunction_node and split_node are now fully-supported features.
+- For the tagged join node, the policy for try_put of an item with
+ already existing tag has been defined: the item will be rejected.
+- Matching the behavior on Windows, on other platforms the optional
+ shared libraries (libtbbmalloc, libirml) now are also searched
+ only in the directory where libtbb is located.
+- The platform isolation layer based on GCC built-ins is extended.
+
+Backward-incompatible API changes:
+
+- a graph reference parameter is now required to be passed to the
+ constructors of the following flow graph nodes: overwrite_node,
+ write_once_node, broadcast_node, and the CPF or_node.
+- the following tbb::flow node methods and typedefs have been renamed:
+ Old New
+ join_node and or_node:
+ inputs() -> input_ports()
+ input_ports_tuple_type -> input_ports_type
+ multifunction_node and split_node:
+ ports_type -> output_ports_type
+
+Bugs fixed:
+
+- Not all logical processors were utilized on systems with more than
+ 64 cores split by Windows into several processor groups.
+
+------------------------------------------------------------------------
+Intel TBB 4.0 Update 2 commercial-aligned release
+TBB_INTERFACE_VERSION == 6002
+
+Changes (w.r.t. Intel TBB 4.0 Update 1 commercial-aligned release):
+
+- concurrent_bounded_queue now has an abort() operation that releases
+ threads involved in pending push or pop operations. The released
+ threads will receive a tbb::user_abort exception.
+- Added Community Preview Feature: concurrent_lru_cache container,
+ a concurrent implementation of LRU (least-recently-used) cache.
+
+Bugs fixed:
+
+- fixed a race condition in the TBB scalable allocator.
+- concurrent_queue counter wraparound bug was fixed, which occurred when
+ the number of push and pop operations exceeded ~>4 billion on IA32.
+- fixed races in the TBB scheduler that could put workers asleep too
+ early, especially in presence of affinitized tasks.
+
+------------------------------------------------------------------------
+Intel TBB 4.0 Update 1 commercial-aligned release
+TBB_INTERFACE_VERSION == 6000 (forgotten to increment)
+
+Changes (w.r.t. Intel TBB 4.0 commercial-aligned release):
+
+- Memory leaks fixed in binpack example.
+- Improvements and fixes in the TBB allocator.
+
+------------------------------------------------------------------------
+Intel TBB 4.0 commercial-aligned release
+TBB_INTERFACE_VERSION == 6000
+
+Changes (w.r.t. Intel TBB 3.0 Update 8 commercial-aligned release):
+
+- concurrent_priority_queue is now a fully supported feature.
+ Capacity control methods were removed.
+- Flow graph is now a fully supported feature.
+- A new memory backend has been implemented in the TBB allocator.
+ It can reuse freed memory for both small and large objects, and
+ returns unused memory blocks to the OS more actively.
+- Improved partitioning algorithms for parallel_for and parallel_reduce
+ to better handle load imbalance.
+- The convex_hull example has been refactored for reproducible
+ performance results.
+- The major interface version has changed from 5 to 6.
+ Deprecated interfaces might be removed in future releases.
+
+Community Preview Features:
+
+- Added: serial subset, i.e. sequential implementations of TBB generic
+ algorithms (currently, only provided for parallel_for).
+- Preview of new flow graph nodes:
+ or_node (accepts multiple inputs, forwards each input separately
+ to all successors),
+ split_node (accepts tuples, and forwards each element of a tuple
+ to a corresponding successor), and
+ multioutput_function_node (accepts one input, and passes the input
+ and a tuple of output ports to the function body to support outputs
+ to multiple successors).
+- Added: memory pools for more control on memory source, grouping,
+ and collective deallocation.
+
+------------------------------------------------------------------------
+Intel TBB 3.0 Update 8 commercial-aligned release
+TBB_INTERFACE_VERSION == 5008
+
+Changes (w.r.t. Intel TBB 3.0 Update 7 commercial-aligned release):
+
+- Task priorities become an official feature of TBB,
+ not community preview as before.
+- Atomics API extended, and implementation refactored.
+- Added task::set_parent() method.
+- Added concurrent_unordered_set container.
+
+Open-source contributions integrated:
+
+- PowerPC support by Raf Schietekat.
+- Fix of potential task pool overrun and other improvements
+ in the task scheduler by Raf Schietekat.
+- Fix in parallel_for_each to work with std::set in Visual* C++ 2010.
+
+Community Preview Features:
+
+- Graph community preview feature was renamed to flow graph.
+ Multiple improvements in the implementation.
+ Binpack example was added for the feature.
+- A number of improvements to concurrent_priority_queue.
+ Shortpath example was added for the feature.
+- TBB runtime loaded functionality was added (Windows*-only).
+ It allows to specify which versions of TBB should be used,
+ as well as to set directories for the library search.
+- parallel_deterministic_reduce template function was added.
+
+------------------------------------------------------------------------
+Intel TBB 3.0 Update 7 commercial-aligned release
+TBB_INTERFACE_VERSION == 5006 (forgotten to increment)
+
+Changes (w.r.t. Intel TBB 3.0 Update 6 commercial-aligned release):
+
+- Added implementation of the platform isolation layer based on
+ GCC atomic built-ins; it is supposed to work on any platform
+ where GCC has these built-ins.
+
+Community Preview Features:
+
+- Graph's dining_philosophers example added.
+- A number of improvements to graph and concurrent_priority_queue.
+
+
+------------------------------------------------------------------------
+Intel TBB 3.0 Update 6 commercial-aligned release
+TBB_INTERFACE_VERSION == 5006
+
+Changes (w.r.t. Intel TBB 3.0 Update 5 commercial-aligned release):
+
+- Added Community Preview feature: task and task group priority, and
+ Fractal example demonstrating it.
+- parallel_pipeline optimized for data items of small and large sizes.
+- Graph's join_node is now parametrized with a tuple of up to 10 types.
+- Improved performance of concurrent_priority_queue.
+
+Open-source contributions integrated:
+
+- Initial NetBSD support by Aleksej Saushev.
+
+Bugs fixed:
+
+- Failure to enable interoperability with Intel(R) Cilk(tm) Plus runtime
+ library, and a crash caused by invoking the interoperability layer
+ after one of the libraries was unloaded.
+- Data race that could result in concurrent_unordered_map structure
+ corruption after call to clear() method.
+- Stack corruption caused by PIC version of 64-bit CAS compiled by Intel
+ compiler on Linux.
+- Inconsistency of exception propagation mode possible when application
+ built with Microsoft* Visual Studio* 2008 or earlier uses TBB built
+ with Microsoft* Visual Studio* 2010.
+- Affinitizing master thread to a subset of available CPUs after TBB
+ scheduler was initialized tied all worker threads to the same CPUs.
+- Method is_stolen_task() always returned 'false' for affinitized tasks.
+- write_once_node and overwrite_node did not immediately send buffered
+ items to successors
+
+------------------------------------------------------------------------
+Intel TBB 3.0 Update 5 commercial-aligned release
+TBB_INTERFACE_VERSION == 5005
+
+Changes (w.r.t. Intel TBB 3.0 Update 4 commercial-aligned release):
+
+- Added Community Preview feature: graph.
+- Added automatic propagation of master thread FPU settings to
+ TBB worker threads.
+- Added a public function to perform a sequentially consistent full
+ memory fence: tbb::atomic_fence() in tbb/atomic.h.
+
+Bugs fixed:
+
+- Data race that could result in scheduler data structures corruption
+ when using fire-and-forget tasks.
+- Potential referencing of destroyed concurrent_hash_map element after
+ using erase(accessor&A) method with A acquired as const_accessor.
+- Fixed a correctness bug in the convex hull example.
+
+Open-source contributions integrated:
+
+- Patch for calls to internal::atomic_do_once() by Andrey Semashev.
+
+------------------------------------------------------------------------
+Intel TBB 3.0 Update 4 commercial-aligned release
+TBB_INTERFACE_VERSION == 5004
+
+Changes (w.r.t. Intel TBB 3.0 Update 3 commercial-aligned release):
+
+- Added Community Preview feature: concurrent_priority_queue.
+- Fixed library loading to avoid possibility for remote code execution,
+ see http://www.microsoft.com/technet/security/advisory/2269637.mspx.
+- Added support of more than 64 cores for appropriate Microsoft*
+ Windows* versions. For more details, see
+ http://msdn.microsoft.com/en-us/library/dd405503.aspx.
+- Default number of worker threads is adjusted in accordance with
+ process affinity mask.
+
+Bugs fixed:
+
+- Calls of scalable_* functions from inside the allocator library
+ caused issues if the functions were overridden by another module.
+- A crash occurred if methods run() and wait() were called concurrently
+ for an empty tbb::task_group (1736).
+- The tachyon example exhibited build problems associated with
+ bug 554339 on Microsoft* Visual Studio* 2010. Project files were
+ modified as a partial workaround to overcome the problem. See
+ http://connect.microsoft.com/VisualStudio/feedback/details/554339.
+
+------------------------------------------------------------------------
+Intel TBB 3.0 Update 3 commercial-aligned release
+TBB_INTERFACE_VERSION == 5003
+
+Changes (w.r.t. Intel TBB 3.0 Update 2 commercial-aligned release):
+
+- cache_aligned_allocator class reworked to use scalable_aligned_malloc.
+- Improved performance of count() and equal_range() methods
+ in concurrent_unordered_map.
+- Improved implementation of 64-bit atomic loads and stores on 32-bit
+ platforms, including compilation with VC 7.1.
+- Added implementation of atomic operations on top of OSAtomic API
+ provided by OS X*.
+- Removed gratuitous try/catch blocks surrounding thread function calls
+ in tbb_thread.
+- Xcode* projects were added for sudoku and game_of_life examples.
+- Xcode* projects were updated to work without TBB framework.
+
+Bugs fixed:
+
+- Fixed a data race in task scheduler destruction that on rare occasion
+ could result in memory corruption.
+- Fixed idle spinning in thread bound filters in tbb::pipeline (1670).
+
+Open-source contributions integrated:
+
+- MinGW-64 basic support by brsomoza (partially).
+- Patch for atomic.h by Andrey Semashev.
+- Support for AIX & GCC on PowerPC by Giannis Papadopoulos.
+- Various improvements by Raf Schietekat.
+
+------------------------------------------------------------------------
+Intel TBB 3.0 Update 2 commercial-aligned release
+TBB_INTERFACE_VERSION == 5002
+
+Changes (w.r.t. Intel TBB 3.0 Update 1 commercial-aligned release):
+
+- Destructor of tbb::task_group class throws missing_wait exception
+ if there are tasks running when it is invoked.
+- Interoperability layer with Intel Cilk Plus runtime library added
+ to protect TBB TLS in case of nested usage with Intel Cilk Plus.
+- Compilation fix for dependent template names in concurrent_queue.
+- Memory allocator code refactored to ease development and maintenance.
+
+Bugs fixed:
+
+- Improved interoperability with other Intel software tools on Linux in
+ case of dynamic replacement of memory allocator (1700)
+- Fixed install issues that prevented installation on
+ Mac OS* X 10.6.4 (1711).
+
+------------------------------------------------------------------------
+Intel TBB 3.0 Update 1 commercial-aligned release
+TBB_INTERFACE_VERSION == 5000 (forgotten to increment)
+
+Changes (w.r.t. Intel TBB 3.0 commercial-aligned release):
+
+- Decreased memory fragmentation by allocations bigger than 8K.
+- Lazily allocate worker threads, to avoid creating unnecessary stacks.
+
+Bugs fixed:
+
+- TBB allocator used much more memory than malloc (1703) - see above.
+- Deadlocks happened in some specific initialization scenarios
+ of the TBB allocator (1701, 1704).
+- Regression in enumerable_thread_specific: excessive requirements
+ for object constructors.
+- A bug in construction of parallel_pipeline filters when body instance
+ was a temporary object.
+- Incorrect usage of memory fences on PowerPC and XBOX360 platforms.
+- A subtle issue in task group context binding that could result
+ in cancelation signal being missed by nested task groups.
+- Incorrect construction of concurrent_unordered_map if specified
+ number of buckets is not power of two.
+- Broken count() and equal_range() of concurrent_unordered_map.
+- Return type of postfix form of operator++ for hash map's iterators.
+
+------------------------------------------------------------------------
+Intel TBB 3.0 commercial-aligned release
+TBB_INTERFACE_VERSION == 5000
+
+Changes (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release):
+
+- All open-source-release changes down to TBB 2.2 U3 below
+ were incorporated into this release.
+
+------------------------------------------------------------------------
+20100406 open-source release
+
+Changes (w.r.t. 20100310 open-source release):
+
+- Added support for Microsoft* Visual Studio* 2010, including binaries.
+- Added a PDF file with recommended Design Patterns for TBB.
+- Added parallel_pipeline function and companion classes and functions
+ that provide a strongly typed lambda-friendly pipeline interface.
+- Reworked enumerable_thread_specific to use a custom implementation of
+ hash map that is more efficient for ETS usage models.
+- Added example for class task_group; see examples/task_group/sudoku.
+- Removed two examples, as they were long outdated and superceded:
+ pipeline/text_filter (use pipeline/square);
+ parallel_while/parallel_preorder (use parallel_do/parallel_preorder).
+- PDF documentation updated.
+- Other fixes and changes in code, tests, and examples.
+
+Bugs fixed:
+
+- Eliminated build errors with MinGW32.
+- Fixed post-build step and other issues in VS projects for examples.
+- Fixed discrepancy between scalable_realloc and scalable_msize that
+ caused crashes with malloc replacement on Windows.
+
+------------------------------------------------------------------------
+20100310 open-source release
+
+Changes (w.r.t. Intel TBB 2.2 Update 3 commercial-aligned release):
+
+- Version macros changed in anticipation of a future release.
+- Directory structure aligned with Intel(R) C++ Compiler;
+ now TBB binaries reside in //[bin|lib]
+ (in TBB 2.x, it was [bin|lib]//).
+- Visual Studio projects changed for examples: instead of separate set
+ of files for each VS version, now there is single 'msvs' directory
+ that contains workspaces for MS C++ compiler (_cl.sln) and
+ Intel C++ compiler (_icl.sln). Works with VS 2005 and above.
+- The name versioning scheme for backward compatibility was improved;
+ now compatibility-breaking changes are done in a separate namespace.
+- Added concurrent_unordered_map implementation based on a prototype
+ developed in Microsoft for a future version of PPL.
+- Added PPL-compatible writer-preference RW lock (reader_writer_lock).
+- Added TBB_IMPLEMENT_CPP0X macro to control injection of C++0x names
+ implemented in TBB into namespace std.
+- Added almost-C++0x-compatible std::condition_variable, plus a bunch
+ of other C++0x classes required by condition_variable.
+- With TBB_IMPLEMENT_CPP0X, tbb_thread can be also used as std::thread.
+- task.cpp was split into several translation units to structure
+ TBB scheduler sources layout. Static data layout and library
+ initialization logic were also updated.
+- TBB scheduler reworked to prevent master threads from stealing
+ work belonging to other masters.
+- Class task was extended with enqueue() method, and slightly changed
+ semantics of methods spawn() and destroy(). For exact semantics,
+ refer to TBB Reference manual.
+- task_group_context now allows for destruction by non-owner threads.
+- Added TBB_USE_EXCEPTIONS macro to control use of exceptions in TBB
+ headers. It turns off (i.e. sets to 0) automatically if specified
+ compiler options disable exception handling.
+- TBB is enabled to run on top of Microsoft's Concurrency Runtime
+ on Windows* 7 (via our worker dispatcher known as RML).
+- Removed old unused busy-waiting code in concurrent_queue.
+- Described the advanced build & test options in src/index.html.
+- Warning level for GCC raised with -Wextra and a few other options.
+- Multiple fixes and improvements in code, tests, examples, and docs.
+
+Open-source contributions integrated:
+
+- Xbox support by Roman Lut (Deep Shadows), though further changes are
+ required to make it working; e.g. post-2.1 entry points are missing.
+- "Eventcount" by Dmitry Vyukov evolved into concurrent_monitor,
+ an internal class used in the implementation of concurrent_queue.
+
+------------------------------------------------------------------------
+Intel TBB 2.2 Update 3 commercial-aligned release
+TBB_INTERFACE_VERSION == 4003
+
+Changes (w.r.t. Intel TBB 2.2 Update 2 commercial-aligned release):
+
+- PDF documentation updated.
+
+Bugs fixed:
+
+- concurrent_hash_map compatibility issue exposed on Linux in case
+ two versions of the container were used by different modules.
+- enforce 16 byte stack alignment for consistence with GCC; required
+ to work correctly with 128-bit variables processed by SSE.
+- construct() methods of allocator classes now use global operator new.
+
+------------------------------------------------------------------------
+Intel TBB 2.2 Update 2 commercial-aligned release
+TBB_INTERFACE_VERSION == 4002
+
+Changes (w.r.t. Intel TBB 2.2 Update 1 commercial-aligned release):
+
+- parallel_invoke and parallel_for_each now take function objects
+ by const reference, not by value.
+- Building TBB with /MT is supported, to avoid dependency on particular
+ versions of Visual C++* runtime DLLs. TBB DLLs built with /MT
+ are located in vc_mt directory.
+- Class critical_section introduced.
+- Improvements in exception support: new exception classes introduced,
+ all exceptions are thrown via an out-of-line internal method.
+- Improvements and fixes in the TBB allocator and malloc replacement,
+ including robust memory identification, and more reliable dynamic
+ function substitution on Windows*.
+- Method swap() added to class tbb_thread.
+- Methods rehash() and bucket_count() added to concurrent_hash_map.
+- Added support for Visual Studio* 2010 Beta2. No special binaries
+ provided, but CRT-independent DLLs (vc_mt) should work.
+- Other fixes and improvements in code, tests, examples, and docs.
+
+Open-source contributions integrated:
+
+- The fix to build 32-bit TBB on Mac OS* X 10.6.
+- GCC-based port for SPARC Solaris by Michailo Matijkiw, with use of
+ earlier work by Raf Schietekat.
+
+Bugs fixed:
+
+- 159 - TBB build for PowerPC* running Mac OS* X.
+- 160 - IBM* Java segfault if used with TBB allocator.
+- crash in concurrent_queue (1616).
+
+------------------------------------------------------------------------
+Intel TBB 2.2 Update 1 commercial-aligned release
+TBB_INTERFACE_VERSION == 4001
+
+Changes (w.r.t. Intel TBB 2.2 commercial-aligned release):
+
+- Incorporates all changes from open-source releases below.
+- Documentation was updated.
+- TBB scheduler auto-initialization now covers all possible use cases.
+- concurrent_queue: made argument types of sizeof used in paddings
+ consistent with those actually used.
+- Memory allocator was improved: supported corner case of user's malloc
+ calling scalable_malloc (non-Windows), corrected processing of
+ memory allocation requests during tbb memory allocator startup
+ (Linux).
+- Windows malloc replacement has got better support for static objects.
+- In pipeline setups that do not allow actual parallelism, execution
+ by a single thread is guaranteed, idle spinning eliminated, and
+ performance improved.
+- RML refactoring and clean-up.
+- New constructor for concurrent_hash_map allows reserving space for
+ a number of items.
+- Operator delete() added to the TBB exception classes.
+- Lambda support was improved in parallel_reduce.
+- gcc 4.3 warnings were fixed for concurrent_queue.
+- Fixed possible initialization deadlock in modules using TBB entities
+ during construction of global static objects.
+- Copy constructor in concurrent_hash_map was fixed.
+- Fixed a couple of rare crashes in the scheduler possible before
+ in very specific use cases.
+- Fixed a rare crash in the TBB allocator running out of memory.
+- New tests were implemented, including test_lambda.cpp that checks
+ support for lambda expressions.
+- A few other small changes in code, tests, and documentation.
+
+------------------------------------------------------------------------
+20090809 open-source release
+
+Changes (w.r.t. Intel TBB 2.2 commercial-aligned release):
+
+- Fixed known exception safety issues in concurrent_vector.
+- Better concurrency of simultaneous grow requests in concurrent_vector.
+- TBB allocator further improves performance of large object allocation.
+- Problem with source of text relocations was fixed on Linux
+- Fixed bugs related to malloc replacement under Windows
+- A few other small changes in code and documentation.
+
+------------------------------------------------------------------------
+Intel TBB 2.2 commercial-aligned release
+TBB_INTERFACE_VERSION == 4000
+
+Changes (w.r.t. Intel TBB 2.1 U4 commercial-aligned release):
+
+- Incorporates all changes from open-source releases below.
+- Architecture folders renamed from em64t to intel64 and from itanium
+ to ia64.
+- Major Interface version changed from 3 to 4. Deprecated interfaces
+ might be removed in future releases.
+- Parallel algorithms that use partitioners have switched to use
+ the auto_partitioner by default.
+- Improved memory allocator performance for allocations bigger than 8K.
+- Added new thread-bound filters functionality for pipeline.
+- New implementation of concurrent_hash_map that improves performance
+ significantly.
+- A few other small changes in code and documentation.
+
+------------------------------------------------------------------------
+20090511 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Basic support for MinGW32 development kit.
+- Added tbb::zero_allocator class that initializes memory with zeros.
+ It can be used as an adaptor to any STL-compatible allocator class.
+- Added tbb::parallel_for_each template function as alias to parallel_do.
+- Added more overloads for tbb::parallel_for.
+- Added support for exact exception propagation (can only be used with
+ compilers that support C++0x std::exception_ptr).
+- tbb::atomic template class can be used with enumerations.
+- mutex, recursive_mutex, spin_mutex, spin_rw_mutex classes extended
+ with explicit lock/unlock methods.
+- Fixed size() and grow_to_at_least() methods of tbb::concurrent_vector
+ to provide space allocation guarantees. More methods added for
+ compatibility with std::vector, including some from C++0x.
+- Preview of a lambda-friendly interface for low-level use of tasks.
+- scalable_msize function added to the scalable allocator (Windows only).
+- Rationalized internal auxiliary functions for spin-waiting and backoff.
+- Several tests undergo decent refactoring.
+
+Changes affecting backward compatibility:
+
+- Improvements in concurrent_queue, including limited API changes.
+ The previous version is deprecated; its functionality is accessible
+ via methods of the new tbb::concurrent_bounded_queue class.
+- grow* and push_back methods of concurrent_vector changed to return
+ iterators; old semantics is deprecated.
+
+------------------------------------------------------------------------
+Intel TBB 2.1 Update 4 commercial-aligned release
+TBB_INTERFACE_VERSION == 3016
+
+Changes (w.r.t. Intel TBB 2.1 U3 commercial-aligned release):
+
+- Added tests for aligned memory allocations and malloc replacement.
+- Several improvements for better bundling with Intel(R) C++ Compiler.
+- A few other small changes in code and documentaion.
+
+Bugs fixed:
+
+- 150 - request to build TBB examples with debug info in release mode.
+- backward compatibility issue with concurrent_queue on Windows.
+- dependency on VS 2005 SP1 runtime libraries removed.
+- compilation of GUI examples under Xcode* 3.1 (1577).
+- On Windows, TBB allocator classes can be instantiated with const types
+ for compatibility with MS implementation of STL containers (1566).
+
+------------------------------------------------------------------------
+20090313 open-source release
+
+Changes (w.r.t. 20081109 open-source release):
+
+- Includes all changes introduced in TBB 2.1 Update 2 & Update 3
+ commercial-aligned releases (see below for details).
+- Added tbb::parallel_invoke template function. It runs up to 10
+ user-defined functions in parallel and waits for them to complete.
+- Added a special library providing ability to replace the standard
+ memory allocation routines in Microsoft* C/C++ RTL (malloc/free,
+ global new/delete, etc.) with the TBB memory allocator.
+ Usage details are described in include/tbb/tbbmalloc_proxy.h file.
+- Task scheduler switched to use new implementation of its core
+ functionality (deque based task pool, new structure of arena slots).
+- Preview of Microsoft* Visual Studio* 2005 project files for
+ building the library is available in build/vsproject folder.
+- Added tests for aligned memory allocations and malloc replacement.
+- Added parallel_for/game_of_life.net example (for Windows only)
+ showing TBB usage in a .NET application.
+- A number of other fixes and improvements to code, tests, makefiles,
+ examples and documents.
+
+Bugs fixed:
+
+- The same list as in TBB 2.1 Update 4 right above.
+
+------------------------------------------------------------------------
+Intel TBB 2.1 Update 3 commercial-aligned release
+TBB_INTERFACE_VERSION == 3015
+
+Changes (w.r.t. Intel TBB 2.1 U2 commercial-aligned release):
+
+- Added support for aligned allocations to the TBB memory allocator.
+- Added a special library to use with LD_PRELOAD on Linux* in order to
+ replace the standard memory allocation routines in C/C++ with the
+ TBB memory allocator.
+- Added null_mutex and null_rw_mutex: no-op classes interface-compliant
+ to other TBB mutexes.
+- Improved performance of parallel_sort, to close most of the serial gap
+ with std::sort, and beat it on 2 and more cores.
+- A few other small changes.
+
+Bugs fixed:
+
+- the problem where parallel_for hanged after exception throw
+ if affinity_partitioner was used (1556).
+- get rid of VS warnings about mbstowcs deprecation (1560),
+ as well as some other warnings.
+- operator== for concurrent_vector::iterator fixed to work correctly
+ with different vector instances.
+
+------------------------------------------------------------------------
+Intel TBB 2.1 Update 2 commercial-aligned release
+TBB_INTERFACE_VERSION == 3014
+
+Changes (w.r.t. Intel TBB 2.1 U1 commercial-aligned release):
+
+- Incorporates all open-source-release changes down to TBB 2.1 U1,
+ except for:
+ - 20081019 addition of enumerable_thread_specific;
+- Warning level for Microsoft* Visual C++* compiler raised to /W4 /Wp64;
+ warnings found on this level were cleaned or suppressed.
+- Added TBB_runtime_interface_version API function.
+- Added new example: pipeline/square.
+- Added exception handling and cancellation support
+ for parallel_do and pipeline.
+- Added copy constructor and [begin,end) constructor to concurrent_queue.
+- Added some support for beta version of Intel(R) Parallel Amplifier.
+- Added scripts to set environment for cross-compilation of 32-bit
+ applications on 64-bit Linux with Intel(R) C++ Compiler.
+- Fixed semantics of concurrent_vector::clear() to not deallocate
+ internal arrays. Fixed compact() to perform such deallocation later.
+- Fixed the issue with atomic when T is incomplete type.
+- Improved support for PowerPC* Macintosh*, including the fix
+ for a bug in masked compare-and-swap reported by a customer.
+- As usual, a number of other improvements everywhere.
+
+------------------------------------------------------------------------
+20081109 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Added new serial out of order filter for tbb::pipeline.
+- Fixed the issue with atomic::operator= reported at the forum.
+- Fixed the issue with using tbb::task::self() in task destructor
+ reported at the forum.
+- A number of other improvements to code, tests, makefiles, examples
+ and documents.
+
+Open-source contributions integrated:
+- Changes in the memory allocator were partially integrated.
+
+------------------------------------------------------------------------
+20081019 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Introduced enumerable_thread_specific. This new class provides a
+ wrapper around native thread local storage as well as iterators and
+ ranges for accessing the thread local copies (1533).
+- Improved support for Intel(R) Threading Analysis Tools
+ on Intel(R) 64 architecture.
+- Dependency from Microsoft* CRT was integrated to the libraries using
+ manifests, to avoid issues if called from code that uses different
+ version of Visual C++* runtime than the library.
+- Introduced new defines TBB_USE_ASSERT, TBB_USE_DEBUG,
+ TBB_USE_PERFORMANCE_WARNINGS, TBB_USE_THREADING_TOOLS.
+- A number of other improvements to code, tests, makefiles, examples
+ and documents.
+
+Open-source contributions integrated:
+
+- linker optimization: /incremental:no .
+
+------------------------------------------------------------------------
+20080925 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Same fix for a memory leak in the memory allocator as in TBB 2.1 U1.
+- Improved support for lambda functions.
+- Fixed more concurrent_queue issues reported at the forum.
+- A number of other improvements to code, tests, makefiles, examples
+ and documents.
+
+------------------------------------------------------------------------
+Intel TBB 2.1 Update 1 commercial-aligned release
+TBB_INTERFACE_VERSION == 3013
+
+Changes (w.r.t. Intel TBB 2.1 commercial-aligned release):
+
+- Fixed small memory leak in the memory allocator.
+- Incorporates all open-source-release changes since TBB 2.1,
+ except for:
+ - 20080825 changes for parallel_do;
+
+------------------------------------------------------------------------
+20080825 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Added exception handling and cancellation support for parallel_do.
+- Added default HashCompare template argument for concurrent_hash_map.
+- Fixed concurrent_queue.clear() issues due to incorrect assumption
+ about clear() being private method.
+- Added the possibility to use TBB in applications that change
+ default calling conventions (Windows* only).
+- Many improvements to code, tests, examples, makefiles and documents.
+
+Bugs fixed:
+
+- 120, 130 - memset declaration missed in concurrent_hash_map.h
+
+------------------------------------------------------------------------
+20080724 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Inline assembly for atomic operations improved for gcc 4.3
+- A few more improvements to the code.
+
+------------------------------------------------------------------------
+20080709 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- operator=() was added to the tbb_thread class according to
+ the current working draft for std::thread.
+- Recognizing SPARC* in makefiles for Linux* and Sun Solaris*.
+
+Bugs fixed:
+
+- 127 - concurrent_hash_map::range fixed to split correctly.
+
+Open-source contributions integrated:
+
+- fix_set_midpoint.diff by jyasskin
+- SPARC* support in makefiles by Raf Schietekat
+
+------------------------------------------------------------------------
+20080622 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Fixed a hang that rarely happened on Linux
+ during deinitialization of the TBB scheduler.
+- Improved support for Intel(R) Thread Checker.
+- A few more improvements to the code.
+
+------------------------------------------------------------------------
+Intel TBB 2.1 commercial-aligned release
+TBB_INTERFACE_VERSION == 3011
+
+Changes (w.r.t. Intel TBB 2.0 U3 commercial-aligned release):
+
+- All open-source-release changes down to, and including, TBB 2.0 below,
+ were incorporated into this release.
+
+------------------------------------------------------------------------
+20080605 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Explicit control of exported symbols by version scripts added on Linux.
+- Interfaces polished for exception handling & algorithm cancellation.
+- Cache behavior improvements in the scalable allocator.
+- Improvements in text_filter, polygon_overlay, and other examples.
+- A lot of other stability improvements in code, tests, and makefiles.
+- First release where binary packages include headers/docs/examples, so
+ binary packages are now self-sufficient for using TBB.
+
+Open-source contributions integrated:
+
+- atomics patch (partially).
+- tick_count warning patch.
+
+Bugs fixed:
+
+- 118 - fix for boost compatibility.
+- 123 - fix for tbb_machine.h.
+
+------------------------------------------------------------------------
+20080512 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Fixed a problem with backward binary compatibility
+ of debug Linux builds.
+- Sun* Studio* support added.
+- soname support added on Linux via linker script. To restore backward
+ binary compatibility, *.so -> *.so.2 softlinks should be created.
+- concurrent_hash_map improvements - added few new forms of insert()
+ method and fixed precondition and guarantees of erase() methods.
+ Added runtime warning reporting about bad hash function used for
+ the container. Various improvements for performance and concurrency.
+- Cancellation mechanism reworked so that it does not hurt scalability.
+- Algorithm parallel_do reworked. Requirement for Body::argument_type
+ definition removed, and work item argument type can be arbitrarily
+ cv-qualified.
+- polygon_overlay example added.
+- A few more improvements to code, tests, examples and Makefiles.
+
+Open-source contributions integrated:
+
+- Soname support patch for Bugzilla #112.
+
+Bugs fixed:
+
+- 112 - fix for soname support.
+
+------------------------------------------------------------------------
+Intel TBB 2.0 U3 commercial-aligned release (package 017, April 20, 2008)
+
+Corresponds to commercial 019 (for Linux*, 020; for Mac OS* X, 018)
+packages.
+
+Changes (w.r.t. Intel TBB 2.0 U2 commercial-aligned release):
+
+- Does not contain open-source-release changes below; this release is
+ only a minor update of TBB 2.0 U2.
+- Removed spin-waiting in pipeline and concurrent_queue.
+- A few more small bug fixes from open-source releases below.
+
+------------------------------------------------------------------------
+20080408 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- count_strings example reworked: new word generator implemented, hash
+ function replaced, and tbb_allocator is used with std::string class.
+- Static methods of spin_rw_mutex were replaced by normal member
+ functions, and the class name was versioned.
+- tacheon example was renamed to tachyon.
+- Improved support for Intel(R) Thread Checker.
+- A few more minor improvements.
+
+Open-source contributions integrated:
+
+- Two sets of Sun patches for IA Solaris support.
+
+------------------------------------------------------------------------
+20080402 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Exception handling and cancellation support for tasks and algorithms
+ fully enabled.
+- Exception safety guaranties defined and fixed for all concurrent
+ containers.
+- User-defined memory allocator support added to all concurrent
+ containers.
+- Performance improvement of concurrent_hash_map, spin_rw_mutex.
+- Critical fix for a rare race condition during scheduler
+ initialization/de-initialization.
+- New methods added for concurrent containers to be closer to STL,
+ as well as automatic filters removal from pipeline
+ and __TBB_AtomicAND function.
+- The volatile keyword dropped from where it is not really needed.
+- A few more minor improvements.
+
+------------------------------------------------------------------------
+20080319 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Support for gcc version 4.3 was added.
+- tbb_thread class, near compatible with std::thread expected in C++0x,
+ was added.
+
+Bugs fixed:
+
+- 116 - fix for compilation issues with gcc version 4.2.1.
+- 120 - fix for compilation issues with gcc version 4.3.
+
+------------------------------------------------------------------------
+20080311 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- An enumerator added for pipeline filter types (serial vs. parallel).
+- New task_scheduler_observer class introduced, to observe when
+ threads start and finish interacting with the TBB task scheduler.
+- task_scheduler_init reverted to not use internal versioned class;
+ binary compatibility guaranteed with stable releases only.
+- Various improvements to code, tests, examples and Makefiles.
+
+------------------------------------------------------------------------
+20080304 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Task-to-thread affinity support, previously kept under a macro,
+ now fully legalized.
+- Work-in-progress on cache_aligned_allocator improvements.
+- Pipeline really supports parallel input stage; it's no more serialized.
+- Various improvements to code, tests, examples and Makefiles.
+
+Bugs fixed:
+
+- 119 - fix for scalable_malloc sometimes failing to return a big block.
+- TR575 - fixed a deadlock occurring on Windows in startup/shutdown
+ under some conditions.
+
+------------------------------------------------------------------------
+20080226 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Introduced tbb_allocator to select between standard allocator and
+ tbb::scalable_allocator when available.
+- Removed spin-waiting in pipeline and concurrent_queue.
+- Improved performance of concurrent_hash_map by using tbb_allocator.
+- Improved support for Intel(R) Thread Checker.
+- Various improvements to code, tests, examples and Makefiles.
+
+------------------------------------------------------------------------
+Intel TBB 2.0 U2 commercial-aligned release (package 017, February 14, 2008)
+
+Corresponds to commercial 017 (for Linux*, 018; for Mac OS* X, 016)
+packages.
+
+Changes (w.r.t. Intel TBB 2.0 U1 commercial-aligned release):
+
+- Does not contain open-source-release changes below; this release is
+ only a minor update of TBB 2.0 U1.
+- Add support for Microsoft* Visual Studio* 2008, including binary
+ libraries and VS2008 projects for examples.
+- Use SwitchToThread() not Sleep() to yield threads on Windows*.
+- Enhancements to Doxygen-readable comments in source code.
+- A few more small bug fixes from open-source releases below.
+
+Bugs fixed:
+
+- TR569 - Memory leak in concurrent_queue.
+
+------------------------------------------------------------------------
+20080207 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Improvements and minor fixes in VS2008 projects for examples.
+- Improvements in code for gating worker threads that wait for work,
+ previously consolidated under #if IMPROVED_GATING, now legalized.
+- Cosmetic changes in code, examples, tests.
+
+Bugs fixed:
+
+- 113 - Iterators and ranges should be convertible to their const
+ counterparts.
+- TR569 - Memory leak in concurrent_queue.
+
+------------------------------------------------------------------------
+20080122 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Updated examples/parallel_for/seismic to improve the visuals and to
+ use the affinity_partitioner (20071127 and forward) for better
+ performance.
+- Minor improvements to unittests and performance tests.
+
+------------------------------------------------------------------------
+20080115 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Cleanup, simplifications and enhancements to the Makefiles for
+ building the libraries (see build/index.html for high-level
+ changes) and the examples.
+- Use SwitchToThread() not Sleep() to yield threads on Windows*.
+- Engineering work-in-progress on exception safety/support.
+- Engineering work-in-progress on affinity_partitioner for
+ parallel_reduce.
+- Engineering work-in-progress on improved gating for worker threads
+ (idle workers now block in the OS instead of spinning).
+- Enhancements to Doxygen-readable comments in source code.
+
+Bugs fixed:
+
+- 102 - Support for parallel build with gmake -j
+- 114 - /Wp64 build warning on Windows*.
+
+------------------------------------------------------------------------
+20071218 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Full support for Microsoft* Visual Studio* 2008 in open-source.
+ Binaries for vc9/ will be available in future stable releases.
+- New recursive_mutex class.
+- Full support for 32-bit PowerMac including export files for builds.
+- Improvements to parallel_do.
+
+------------------------------------------------------------------------
+20071206 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Support for Microsoft* Visual Studio* 2008 in building libraries
+ from source as well as in vc9/ projects for examples.
+- Small fixes to the affinity_partitioner first introduced in 20071127.
+- Small fixes to the thread-stack size hook first introduced in 20071127.
+- Engineering work in progress on concurrent_vector.
+- Engineering work in progress on exception behavior.
+- Unittest improvements.
+
+------------------------------------------------------------------------
+20071127 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- Task-to-thread affinity support (affinity partitioner) first appears.
+- More work on concurrent_vector.
+- New parallel_do algorithm (function-style version of parallel while)
+ and parallel_do/parallel_preorder example.
+- New task_scheduler_init() hooks for getting default_num_threads() and
+ for setting thread stack size.
+- Support for weak memory consistency models in the code base.
+- Futex usage in the task scheduler (Linux).
+- Started adding 32-bit PowerMac support.
+- Intel(R) 9.1 compilers are now the base supported Intel(R) compiler
+ version.
+- TBB libraries added to link line automatically on Microsoft Windows*
+ systems via #pragma comment linker directives.
+
+Open-source contributions integrated:
+
+- FreeBSD platform support patches.
+- AIX weak memory model patch.
+
+Bugs fixed:
+
+- 108 - Removed broken affinity.h reference.
+- 101 - Does not build on Debian Lenny (replaced arch with uname -m).
+
+------------------------------------------------------------------------
+20071030 open-source release
+
+Changes (w.r.t. previous open-source release):
+
+- More work on concurrent_vector.
+- Better support for building with -Wall -Werror (or not) as desired.
+- A few fixes to eliminate extraneous warnings.
+- Begin introduction of versioning hooks so that the internal/API
+ version is tracked via TBB_INTERFACE_VERSION. The newest binary
+ libraries should always work with previously-compiled code when-
+ ever possible.
+- Engineering work in progress on using futex inside the mutexes (Linux).
+- Engineering work in progress on exception behavior.
+- Engineering work in progress on a new parallel_do algorithm.
+- Unittest improvements.
+
+------------------------------------------------------------------------
+20070927 open-source release
+
+Changes (w.r.t. Intel TBB 2.0 U1 commercial-aligned release):
+
+- Minor update to TBB 2.0 U1 below.
+- Begin introduction of new concurrent_vector interfaces not released
+ with TBB 2.0 U1.
+
+------------------------------------------------------------------------
+Intel TBB 2.0 U1 commercial-aligned release (package 014, October 1, 2007)
+
+Corresponds to commercial 014 (for Linux*, 016) packages.
+
+Changes (w.r.t. Intel TBB 2.0 commercial-aligned release):
+
+- All open-source-release changes down to, and including, TBB 2.0
+ below, were incorporated into this release.
+- Made a number of changes to the officially supported OS list:
+ Added Linux* OSs:
+ Asianux* 3, Debian* 4.0, Fedora Core* 6, Fedora* 7,
+ Turbo Linux* 11, Ubuntu* 7.04;
+ Dropped Linux* OSs:
+ Asianux* 2, Fedora Core* 4, Haansoft* Linux 2006 Server,
+ Mandriva/Mandrake* 10.1, Miracle Linux* 4.0,
+ Red Flag* DC Server 5.0;
+ Only Mac OS* X 10.4.9 (and forward) and Xcode* tool suite 2.4.1 (and
+ forward) are now supported.
+- Commercial installers on Linux* fixed to recommend the correct
+ binaries to use in more cases, with less unnecessary warnings.
+- Changes to eliminate spurious build warnings.
+
+Open-source contributions integrated:
+
+- Two small header guard macro patches; it also fixed bug #94.
+- New blocked_range3d class.
+
+Bugs fixed:
+
+- 93 - Removed misleading comments in task.h.
+- 94 - See above.
+
+------------------------------------------------------------------------
+20070815 open-source release
+
+Changes:
+
+- Changes to eliminate spurious build warnings.
+- Engineering work in progress on concurrent_vector allocator behavior.
+- Added hooks to use the Intel(R) compiler code coverage tools.
+
+Open-source contributions integrated:
+
+- Mac OS* X build warning patch.
+
+Bugs fixed:
+
+- 88 - Fixed TBB compilation errors if both VS2005 and Windows SDK are
+ installed.
+
+------------------------------------------------------------------------
+20070719 open-source release
+
+Changes:
+
+- Minor update to TBB 2.0 commercial-aligned release below.
+- Changes to eliminate spurious build warnings.
+
+------------------------------------------------------------------------
+Intel TBB 2.0 commercial-aligned release (package 010, July 19, 2007)
+
+Corresponds to commercial 010 (for Linux*, 012) packages.
+
+- TBB open-source debut release.
+
+------------------------------------------------------------------------
+Intel TBB 1.1 commercial release (April 10, 2007)
+
+Changes (w.r.t. Intel TBB 1.0 commercial release):
+
+- auto_partitioner which offered an automatic alternative to specifying
+ a grain size parameter to estimate the best granularity for tasks.
+- The release was added to the Intel(R) C++ Compiler 10.0 Pro.
+
+------------------------------------------------------------------------
+Intel TBB 1.0 Update 2 commercial release
+
+Changes (w.r.t. Intel TBB 1.0 Update 1 commercial release):
+
+- Mac OS* X 64-bit support added.
+- Source packages for commercial releases introduced.
+
+------------------------------------------------------------------------
+Intel TBB 1.0 Update 1 commercial-aligned release
+
+Changes (w.r.t. Intel TBB 1.0 commercial release):
+
+- Fix for critical package issue on Mac OS* X.
+
+------------------------------------------------------------------------
+Intel TBB 1.0 commercial release (August 29, 2006)
+
+Changes (w.r.t. Intel TBB 1.0 beta commercial release):
+
+- New namespace (and compatibility headers for old namespace).
+ Namespaces are tbb and tbb::internal and all classes are in the
+ underscore_style not the WindowsStyle.
+- New class: scalable_allocator (and cache_aligned_allocator using that
+ if it exists).
+- Added parallel_for/tacheon example.
+- Removed C-style casts from headers for better C++ compliance.
+- Bug fixes.
+- Documentation improvements.
+- Improved performance of the concurrent_hash_map class.
+- Upgraded parallel_sort() to support STL-style random-access iterators
+ instead of just pointers.
+- The Windows vs7_1 directories renamed to vs7.1 in examples.
+- New class: spin version of reader-writer lock.
+- Added push_back() interface to concurrent_vector().
+
+------------------------------------------------------------------------
+Intel TBB 1.0 beta commercial release
+
+Initial release.
+
+Features / APIs:
+
+- Concurrent containers: ConcurrentHashTable, ConcurrentVector,
+ ConcurrentQueue.
+- Parallel algorithms: ParallelFor, ParallelReduce, ParallelScan,
+ ParallelWhile, Pipeline, ParallelSort.
+- Support: AlignedSpace, BlockedRange (i.e., 1D), BlockedRange2D
+- Task scheduler with multi-master support.
+- Atomics: read, write, fetch-and-store, fetch-and-add, compare-and-swap.
+- Locks: spin, reader-writer, queuing, OS-wrapper.
+- Memory allocation: STL-style memory allocator that avoids false
+ sharing.
+- Timers.
+
+Tools Support:
+- Intel(R) Thread Checker 3.0.
+- Intel(R) Thread Profiler 3.0.
+
+Documentation:
+- First Use Documents: README.txt, INSTALL.txt, Release_Notes.txt,
+ Doc_Index.html, Getting_Started.pdf, Tutorial.pdf, Reference.pdf.
+- Class hierarchy HTML pages (Doxygen).
+- Tree of index.html pages for navigating the installed package, esp.
+ for the examples.
+
+Examples:
+- One for each of these TBB features: ConcurrentHashTable, ParallelFor,
+ ParallelReduce, ParallelWhile, Pipeline, Task.
+- Live copies of examples from Getting_Started.pdf.
+- TestAll example that exercises every class and header in the package
+ (i.e., a "liveness test").
+- Compilers: see Release_Notes.txt.
+- APIs: OpenMP, WinThreads, Pthreads.
+
+Packaging:
+- Package for Windows installs IA-32 and EM64T bits.
+- Package for Linux installs IA-32, EM64T and IPF bits.
+- Package for Mac OS* X installs IA-32 bits.
+- All packages support Intel(R) software setup assistant (ISSA) and
+ install-time FLEXlm license checking.
+- ISSA support allows license file to be specified directly in case of
+ no Internet connection or problems with IRC or serial #s.
+- Linux installer allows root or non-root, RPM or non-RPM installs.
+- FLEXlm license servers (for those who need floating/counted licenses)
+ are provided separately on Intel(R) Premier.
+
+------------------------------------------------------------------------
+Intel and Cilk are registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+
+* Other names and brands may be claimed as the property of others.
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000000..5af6ed874d
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,353 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+---------------- END OF Gnu General Public License ----------------
+
+The source code of Threading Building Blocks is distributed under version 2
+of the GNU General Public License, with the so-called "runtime exception,"
+as follows (or see any header or implementation file):
+
+ 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.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000..bc459897b3
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,80 @@
+# Copyright 2005-2015 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.
+
+tbb_root?=.
+include $(tbb_root)/build/common.inc
+.PHONY: default all tbb tbbmalloc tbbproxy test examples
+
+#workaround for non-depend targets tbb and tbbmalloc which both depend on version_string.ver
+#According to documentation, recursively invoked make commands can process their targets in parallel
+.NOTPARALLEL: tbb tbbmalloc tbbproxy
+
+default: tbb tbbmalloc $(if $(use_proxy),tbbproxy)
+
+all: tbb tbbmalloc tbbproxy test examples
+
+tbb: mkdir
+ $(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbb cfg=debug
+ $(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbb cfg=release
+
+tbbmalloc: mkdir
+ $(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc
+ $(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc
+
+tbbproxy: mkdir
+ $(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=debug tbbproxy
+ $(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbproxy cfg=release tbbproxy
+
+test: tbb tbbmalloc $(if $(use_proxy),tbbproxy)
+ -$(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=debug malloc_test
+ -$(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.test cfg=debug
+ -$(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.tbbmalloc cfg=release malloc_test
+ -$(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.test cfg=release
+
+rml: mkdir
+ $(MAKE) -C "$(work_dir)_debug" -r -f $(tbb_root)/build/Makefile.rml cfg=debug
+ $(MAKE) -C "$(work_dir)_release" -r -f $(tbb_root)/build/Makefile.rml cfg=release
+
+
+examples: tbb tbbmalloc
+ $(MAKE) -C examples -r -f Makefile tbb_root=.. release test
+
+.PHONY: clean clean_examples mkdir info
+
+clean: clean_examples
+ $(shell $(RM) $(work_dir)_release$(SLASH)*.* >$(NUL) 2>$(NUL))
+ $(shell $(RD) $(work_dir)_release >$(NUL) 2>$(NUL))
+ $(shell $(RM) $(work_dir)_debug$(SLASH)*.* >$(NUL) 2>$(NUL))
+ $(shell $(RD) $(work_dir)_debug >$(NUL) 2>$(NUL))
+ @echo clean done
+
+clean_examples:
+ $(shell $(MAKE) -s -i -r -C examples -f Makefile tbb_root=.. clean >$(NUL) 2>$(NUL))
+
+mkdir:
+ $(shell $(MD) "$(work_dir)_release" >$(NUL) 2>$(NUL))
+ $(shell $(MD) "$(work_dir)_debug" >$(NUL) 2>$(NUL))
+ @echo Created $(work_dir)_release and ..._debug directories
+
+info:
+ @echo OS: $(tbb_os)
+ @echo arch=$(arch)
+ @echo compiler=$(compiler)
+ @echo runtime=$(runtime)
+ @echo tbb_build_prefix=$(tbb_build_prefix)
+
diff --git a/README b/README
new file mode 100644
index 0000000000..fcc87af0c9
--- /dev/null
+++ b/README
@@ -0,0 +1,11 @@
+Intel(R) Threading Building Blocks - README
+
+See index.html for directions and documentation.
+
+If source is present (./Makefile and src/ directories),
+type 'gmake' in this directory to build and test.
+
+See examples/index.html for runnable examples and directions.
+
+See http://threadingbuildingblocks.org for full documentation
+and software information.
diff --git a/README.md b/README.md
index 78810c0513..8bce84b8bb 100644
--- a/README.md
+++ b/README.md
@@ -1,28 +1,27 @@
-# Intel(R) Threading Building Blocks
+# Intel(R) Threading Building Blocks 4.4
Intel(R) Threading Building Blocks (Intel(R) TBB) lets you easily write parallel C++ programs that take
full advantage of multicore performance, that are portable, composable and have future-proof scalability.
-## Intel(R) TBB Distribution
-* Commercial version: [https://software.intel.com/en-us/intel-tbb] (https://software.intel.com/en-us/intel-tbb)
-* Community licensing: [https://software.intel.com/sites/campaigns/nest/] (https://software.intel.com/sites/campaigns/nest/)
-* Open source version: [https://www.threadingbuildingblocks.org/] (https://www.threadingbuildingblocks.org/)
-* Intel(R) TBB for Python\*: [http://anaconda.org/intel/tbb] (http://anaconda.org/intel/tbb)
+## Release Information
+Here are the latest [Changes] (CHANGES) and [Release Notes]
+(doc/Release_Notes.txt) (contains system requirements and known issues).
-## Repository Content
-This is an official Intel(R) TBB public GitHub repository. All source and binary packages starting from Intel(R) TBB 4.4
-can be found at the [Release page] (https://github.com/01org/tbb/releases). Packages with older versions of Intel(R) TBB can be found
-at the [Intel(R) TBB open source site] (https://www.threadingbuildingblocks.org/)
+## Licensing
+Intel(R) TBB 4.4 is licensed under [GPLv2] (COPYING) with the runtime exception.
-## Repository Structure
-The Master branch is empty and contains only README.md.
+## Documentation
+* Intel(R) TBB [tutorial] (https://software.intel.com/en-us/tbb-tutorial)
+* Intel(R) TBB general documentation: [stable] (https://software.intel.com/en-us/tbb-documentation)
+and [latest] (https://www.threadingbuildingblocks.org/docs/help/index.htm)
-tbb_\ - branch for the new major version. All minor versions of the major release will be committed in this branch.
+## Support
+Please report issues and suggestions via
+[GitHub issues](https://github.com/01org/tbb/issues) or start a topic on the
+[Intel(R) TBB forum](http://software.intel.com/en-us/forums/intel-threading-building-blocks/).
-For example:
-* Intel(R) TBB 2017 initial release goes to branch tbb_2017.
-* Intel(R) TBB 2017 Update 1 will go to branch tbb_2017 too.
-* Intel(R) TBB 2018 initial release will go to branch tbb_2018.
+## How to Contribute
+Please read the instructions on the official [Intel(R) TBB open source site] (https://www.threadingbuildingblocks.org/submit-contribution).
------------------------------------------------------------------------
Intel and the Intel logo are trademarks of Intel Corporation or its subsidiaries in the U.S. and/or other countries.
diff --git a/build/AIX.gcc.inc b/build/AIX.gcc.inc
new file mode 100644
index 0000000000..3b19a6d92f
--- /dev/null
+++ b/build/AIX.gcc.inc
@@ -0,0 +1,75 @@
+# Copyright 2005-2015 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.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c++
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall
+DYLIB_KEY = -shared
+LIBDL = -ldl
+
+CPLUS = g++
+CONLY = gcc
+LIB_LINK_FLAGS = -shared
+LIBS = -lpthread -ldl
+C_FLAGS = $(CPLUS_FLAGS) -x c
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = -O2 -DUSE_PTHREAD -pthread
+endif
+ifeq ($(cfg), debug)
+ CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD -pthread
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (powerpc,$(arch))
+ CPLUS_FLAGS += -maix64 -Wl,-G
+ LIB_LINK_FLAGS += -maix64 -Wl,-b64 -Wl,-brtl -Wl,-G
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+
+ASSEMBLY_SOURCE=ibm_aix51
+ifeq (powerpc,$(arch))
+ TBB_ASM.OBJ = atomic_support.o
+endif
+
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/AIX.inc b/build/AIX.inc
new file mode 100644
index 0000000000..5f87361d2f
--- /dev/null
+++ b/build/AIX.inc
@@ -0,0 +1,66 @@
+# Copyright 2005-2015 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.
+
+ifndef arch
+ arch:=$(shell uname -p)
+ export arch
+endif
+
+ifndef runtime
+ gcc_version:=$(shell gcc -dumpversion)
+ os_version:=$(shell uname -r)
+ os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
+ export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)
+endif
+
+native_compiler := gcc
+export compiler ?= gcc
+debugger ?= gdb
+
+CMD=$(SHELL) -c
+CWD=$(shell pwd)
+RM?=rm -f
+RD?=rmdir
+MD?=mkdir -p
+NUL= /dev/null
+SLASH=/
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_aix.sh $(VERSION_FLAGS) >version_string.ver
+MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
+
+ifdef LIBPATH
+ export LIBPATH := .:$(LIBPATH)
+else
+ export LIBPATH := .
+endif
+
+####### Build settings ########################################################
+
+OBJ = o
+DLL = so
+
+TBB.LST =
+TBB.DEF =
+TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+LINK_TBB.LIB = $(TBB.LIB)
+
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+LINK_MALLOC.LIB = $(MALLOC.LIB)
+
+TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)
diff --git a/build/FreeBSD.clang.inc b/build/FreeBSD.clang.inc
new file mode 100644
index 0000000000..5cee5d78fc
--- /dev/null
+++ b/build/FreeBSD.clang.inc
@@ -0,0 +1,116 @@
+# Copyright 2005-2015 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.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c++
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall
+TEST_WARNING_KEY = -Wextra -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor
+WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor -Wno-dangling-else
+DYLIB_KEY = -shared
+EXPORT_KEY = -Wl,--version-script,
+LIBDL =
+
+CPLUS = clang++
+CONLY = clang
+LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
+LIBS += -lpthread -lrt
+LINK_FLAGS = -Wl,-rpath-link=. -rdynamic
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD
+endif
+ifeq ($(cfg), debug)
+ CPLUS_FLAGS = -DTBB_USE_DEBUG $(ITT_NOTIFY) -g -O0 -DUSE_PTHREAD
+endif
+
+ifeq (libc++,$(stdlib))
+ CPLUS_FLAGS += -stdlib=libc++
+ LIB_LINK_FLAGS += -stdlib=libc++
+endif
+
+CPP11_FLAGS = -std=c++11 -D_TBB_CPP0X
+
+ifneq (00,$(lambdas)$(cpp0x))
+ CXX_ONLY_FLAGS += $(CPP11_FLAGS)
+endif
+
+TBB_ASM.OBJ=
+MALLOC_ASM.OBJ=
+
+ifeq (intel64,$(arch))
+ ITT_NOTIFY = -DDO_ITT_NOTIFY
+ CPLUS_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ia32,$(arch))
+ ITT_NOTIFY = -DDO_ITT_NOTIFY
+ CPLUS_FLAGS += -m32 -march=pentium4
+ LIB_LINK_FLAGS += -m32
+endif
+
+ifeq (ppc64,$(arch))
+ CPLUS_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ppc32,$(arch))
+ CPLUS_FLAGS += -m32
+ LIB_LINK_FLAGS += -m32
+endif
+
+ifeq (bg,$(arch))
+ CPLUS = bgclang++
+ CONLY = bgclang
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASM = as
+ifeq (intel64,$(arch))
+ ASM_FLAGS += --64
+endif
+ifeq (ia32,$(arch))
+ ASM_FLAGS += --32
+endif
+ifeq ($(cfg),debug)
+ ASM_FLAGS += -g
+endif
+
+ASSEMBLY_SOURCE=$(arch)-gas
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/FreeBSD.gcc.inc b/build/FreeBSD.gcc.inc
new file mode 100644
index 0000000000..20f002711a
--- /dev/null
+++ b/build/FreeBSD.gcc.inc
@@ -0,0 +1,86 @@
+# Copyright 2005-2015 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.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c++
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall
+DYLIB_KEY = -shared
+WARNING_SUPPRESS = -Wno-parentheses
+
+CPLUS = g++
+CONLY = gcc
+LIB_LINK_FLAGS = -shared
+LIBS = -lpthread
+C_FLAGS = $(CPLUS_FLAGS)
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = -g -O2 -DUSE_PTHREAD
+endif
+ifeq ($(cfg), debug)
+ CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+MALLOC_ASM.OBJ=
+
+ifeq (ia64,$(arch))
+# Position-independent code (PIC) is a must on IA-64 architecture, even for regular (not shared) executables
+ CPLUS_FLAGS += $(PIC_KEY)
+endif
+
+ifeq (intel64,$(arch))
+ CPLUS_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ia32,$(arch))
+ CPLUS_FLAGS += -m32
+ LIB_LINK_FLAGS += -m32
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-gas
+ifeq (ia64,$(arch))
+ ASM=as
+ TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o
+ MALLOC_ASM.OBJ = atomic_support.o lock_byte.o pause.o
+endif
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/FreeBSD.inc b/build/FreeBSD.inc
new file mode 100644
index 0000000000..11d125e0de
--- /dev/null
+++ b/build/FreeBSD.inc
@@ -0,0 +1,74 @@
+# Copyright 2005-2015 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.
+
+ifndef arch
+ ifeq ($(shell uname -m),i386)
+ export arch:=ia32
+ endif
+ ifeq ($(shell uname -m),ia64)
+ export arch:=ia64
+ endif
+ ifeq ($(shell uname -m),amd64)
+ export arch:=intel64
+ endif
+endif
+
+ifndef runtime
+ gcc_version:=$(shell gcc -dumpversion)
+ os_version:=$(shell uname -r)
+ os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
+ export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)
+endif
+
+native_compiler := gcc
+export compiler ?= gcc
+debugger ?= gdb
+
+CMD=$(SHELL) -c
+CWD=$(shell pwd)
+RM?=rm -f
+RD?=rmdir
+MD?=mkdir -p
+NUL= /dev/null
+SLASH=/
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_linux.sh $(VERSION_FLAGS) >version_string.ver
+MAKE_TBBVARS=sh $(tbb_root)/build/generate_tbbvars.sh
+
+ifdef LD_LIBRARY_PATH
+ export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH)
+else
+ export LD_LIBRARY_PATH := .
+endif
+
+####### Build settings ########################################################
+
+OBJ = o
+DLL = so
+LIBEXT=so
+
+TBB.LST =
+TBB.DEF =
+TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+LINK_TBB.LIB = $(TBB.LIB)
+
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+LINK_MALLOC.LIB = $(MALLOC.LIB)
+
+TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)
diff --git a/build/Makefile.rml b/build/Makefile.rml
new file mode 100644
index 0000000000..43cba2dd60
--- /dev/null
+++ b/build/Makefile.rml
@@ -0,0 +1,162 @@
+# Copyright 2005-2015 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.
+
+tbb_root ?= $(TBBROOT)
+BUILDING_PHASE=1
+TEST_RESOURCE = $(RML.RES)
+include $(tbb_root)/build/common.inc
+DEBUG_SUFFIX=$(findstring _debug,_$(cfg))
+
+ifeq (android,$(target))
+$(error "RML is not supported on Android")
+endif
+
+# default target
+default_rml: rml rml_test
+
+RML_ROOT ?= $(tbb_root)/src/rml
+RML_SERVER_ROOT = $(RML_ROOT)/server
+
+VPATH = $(tbb_root)/src/tbb $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE)
+VPATH += $(RML_ROOT)/server $(RML_ROOT)/client $(RML_ROOT)/test $(tbb_root)/src/test
+
+include $(tbb_root)/build/common_rules.inc
+
+#--------------------------------------------------------------------------
+# Define rules for making the RML server shared library and client objects.
+#--------------------------------------------------------------------------
+
+# Object files that make up RML server
+RML_SERVER.OBJ = rml_server.$(OBJ)
+
+# Object files that RML clients need
+RML_TBB_CLIENT.OBJ ?= rml_tbb.$(OBJ) dynamic_link_rml.$(OBJ)
+RML_OMP_CLIENT.OBJ ?= rml_omp.$(OBJ) omp_dynamic_link.$(OBJ)
+
+RML.OBJ = $(RML_SERVER.OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ)
+ifeq (windows,$(tbb_os))
+RML_ASM.OBJ = $(if $(findstring intel64,$(arch)),$(TBB_ASM.OBJ))
+endif
+ifeq (linux,$(tbb_os))
+RML_ASM.OBJ = $(if $(findstring ia64,$(arch)),$(TBB_ASM.OBJ))
+endif
+
+RML_TBB_DEP= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) concurrent_vector_rml.$(OBJ) semaphore_rml.$(OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)
+TBB_DEP_NON_RML_TEST?= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ) tbb_misc_ex_rml.$(OBJ)
+ifeq ($(cfg),debug)
+RML_TBB_DEP+= spin_mutex_rml.$(OBJ)
+TBB_DEP_RML_TEST?= $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ)
+else
+TBB_DEP_RML_TEST?= $(RML_ASM.OBJ)
+endif
+LIBS += $(LIBDL)
+
+INCLUDES += $(INCLUDE_KEY)$(RML_ROOT)/include $(INCLUDE_KEY).
+T_INCLUDES = $(INCLUDES) $(INCLUDE_KEY)$(tbb_root)/src/test $(INCLUDE_KEY)$(RML_SERVER_ROOT)
+
+ifeq ($(rml_wcrm),1)
+CPLUS_FLAGS+=/DRML_USE_WCRM
+endif
+
+# Suppress superfluous warnings for RML compilation
+R_CPLUS_FLAGS = $(subst DO_ITT_NOTIFY,DO_ITT_NOTIFY=0,$(CPLUS_FLAGS)) $(WARNING_SUPPRESS) \
+ $(DEFINE_KEY)TBB_USE_THREADING_TOOLS=0 $(DEFINE_KEY)__TBB_RML_STATIC=1 $(DEFINE_KEY)__TBB_NO_IMPLICIT_LINKAGE=1
+
+%.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(INCLUDES) $<
+
+ifeq (linux,$(tbb_os))
+omp_dynamic_link.$(OBJ): CPLUS_FLAGS+=-fno-exceptions
+endif
+
+tbb_misc_rml.$(OBJ): version_string.ver
+
+RML_TEST.OBJ = test_job_automaton.$(OBJ) test_thread_monitor.$(OBJ) test_rml_tbb.$(OBJ) test_rml_omp.$(OBJ) test_rml_mixed.$(OBJ)
+
+$(RML_TBB_DEP): %_rml.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(R_CPLUS_FLAGS) $(PIC_KEY) $(INCLUDES) $<
+
+$(RML_TEST.OBJ): %.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(R_CPLUS_FLAGS) $(PIC_KEY) $(T_INCLUDES) $<
+
+ifneq (,$(RML.DEF))
+rml.def: $(RML.DEF)
+ $(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@
+
+LIB_LINK_FLAGS += $(EXPORT_KEY)rml.def
+$(RML.DLL): rml.def
+endif
+
+$(RML.DLL): BUILDING_LIBRARY = $(RML.DLL)
+$(RML.DLL): $(RML_TBB_DEP) $(RML_SERVER.OBJ) $(RML.RES) $(RML_NO_VERSION.DLL) $(RML_ASM.OBJ)
+ $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(RML.DLL) $(RML_SERVER.OBJ) $(RML_TBB_DEP) $(RML_ASM.OBJ) $(RML.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS)
+
+ifneq (,$(RML_NO_VERSION.DLL))
+$(RML_NO_VERSION.DLL):
+ echo "INPUT ($(RML.DLL))" > $(RML_NO_VERSION.DLL)
+endif
+
+rml: $(RML.DLL) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ)
+
+#------------------------------------------------------
+# End of rules for making the RML server shared library
+#------------------------------------------------------
+
+#------------------------------------------------------
+# Define rules for making the RML unit tests
+#------------------------------------------------------
+
+add_debug=$(basename $(1))_debug$(suffix $(1))
+cross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))
+
+RML_TESTS = test_job_automaton.$(TEST_EXT) test_thread_monitor.$(TEST_EXT)
+RML_CUSTOM_TESTS = test_rml_tbb.$(TEST_EXT) test_rml_omp.$(TEST_EXT) test_rml_mixed.$(TEST_EXT) test_rml_omp_c_linkage.$(TEST_EXT)
+
+test_rml_tbb.$(TEST_EXT): test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_tbb.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS)
+
+test_rml_omp.$(TEST_EXT): test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_omp.$(OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS)
+
+test_rml_mixed.$(TEST_EXT): test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) test_rml_mixed.$(OBJ) $(RML_TBB_CLIENT.OBJ) $(RML_OMP_CLIENT.OBJ) $(TBB_DEP_RML_TEST) $(LIBS) $(LINK_FLAGS)
+
+rml_omp_stub.$(OBJ): rml_omp_stub.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(WARNING_SUPPRESS) $(T_INCLUDES) $(PIC_KEY) $<
+
+test_rml_omp_c_linkage.$(TEST_EXT): test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ) omp_dynamic_link.$(OBJ)
+ $(CONLY) $(C_FLAGS) $(OUTPUT_KEY)$@ test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ) omp_dynamic_link.$(OBJ) $(LIBS) $(LINK_FLAGS)
+
+$(RML_TESTS): %.$(TEST_EXT): %.$(OBJ) $(TBB_DEP_NON_RML_TEST)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(TBB_DEP_NON_RML_TEST) $(LIBS) $(LINK_FLAGS)
+
+### run_cmd is usually empty
+rml_test: $(call cross_suffix,$(RML.DLL)) $(TEST_PREREQUISITE) $(RML_TESTS) $(RML_CUSTOM_TESTS)
+ $(run_cmd) ./test_job_automaton.$(TEST_EXT) $(args)
+ $(run_cmd) ./test_thread_monitor.$(TEST_EXT) $(args)
+ $(run_cmd) ./test_rml_tbb.$(TEST_EXT) $(args)
+ $(run_cmd) ./test_rml_omp.$(TEST_EXT) $(args)
+ $(run_cmd) ./test_rml_mixed.$(TEST_EXT) $(args)
+ $(run_cmd) ./test_rml_omp_c_linkage.$(TEST_EXT) $(args)
+
+#------------------------------------------------------
+# End of rules for making the TBBMalloc unit tests
+#------------------------------------------------------
+
+# Include automatically generated dependences
+-include *.d
diff --git a/build/Makefile.tbb b/build/Makefile.tbb
new file mode 100644
index 0000000000..06e76e2b32
--- /dev/null
+++ b/build/Makefile.tbb
@@ -0,0 +1,122 @@
+# Copyright 2005-2015 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.
+
+#------------------------------------------------------------------------------
+# Define rules for making the TBB shared library.
+#------------------------------------------------------------------------------
+
+tbb_root ?= "$(TBBROOT)"
+BUILDING_PHASE=1
+include $(tbb_root)/build/common.inc
+DEBUG_SUFFIX=$(findstring _debug,_$(cfg))
+
+#------------------------------------------------------------
+# Define static pattern rules dealing with .cpp source files
+#------------------------------------------------------------
+$(warning CONFIG: cfg=$(cfg) arch=$(arch) compiler=$(compiler) target=$(target) runtime=$(runtime))
+
+default_tbb: $(TBB.DLL)
+.PHONY: default_tbb tbbvars clean
+.PRECIOUS: %.$(OBJ)
+
+VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/old $(tbb_root)/src/rml/client
+
+CPLUS_FLAGS += $(PIC_KEY) $(DEFINE_KEY)__TBB_BUILD=1
+
+# suppress warnings for build of itt_notify by GCC3
+ifneq (,$(findstring gcc_cc3., $(compiler)_$(runtime)))
+KNOWN_WARNINGS += itt_notify.$(OBJ)
+endif
+
+# Object files (that were compiled from C++ code) that gmake up TBB
+TBB_CPLUS.OBJ = concurrent_hash_map.$(OBJ) \
+ concurrent_queue.$(OBJ) \
+ concurrent_vector.$(OBJ) \
+ dynamic_link.$(OBJ) \
+ itt_notify.$(OBJ) \
+ cache_aligned_allocator.$(OBJ) \
+ pipeline.$(OBJ) \
+ queuing_mutex.$(OBJ) \
+ queuing_rw_mutex.$(OBJ) \
+ reader_writer_lock.$(OBJ) \
+ spin_rw_mutex.$(OBJ) \
+ x86_rtm_rw_mutex.$(OBJ) \
+ spin_mutex.$(OBJ) \
+ critical_section.$(OBJ) \
+ mutex.$(OBJ) \
+ recursive_mutex.$(OBJ) \
+ condition_variable.$(OBJ) \
+ tbb_thread.$(OBJ) \
+ concurrent_monitor.$(OBJ) \
+ semaphore.$(OBJ) \
+ private_server.$(OBJ) \
+ rml_tbb.$(OBJ) \
+ tbb_misc.$(OBJ) \
+ tbb_misc_ex.$(OBJ) \
+ task.$(OBJ) \
+ task_group_context.$(OBJ) \
+ governor.$(OBJ) \
+ market.$(OBJ) \
+ arena.$(OBJ) \
+ scheduler.$(OBJ) \
+ observer_proxy.$(OBJ) \
+ tbb_statistics.$(OBJ) \
+ tbb_main.$(OBJ)
+
+# OLD/Legacy object files for backward binary compatibility
+ifeq (,$(findstring $(DEFINE_KEY)TBB_NO_LEGACY,$(CPLUS_FLAGS)))
+TBB_CPLUS_OLD.OBJ = \
+ concurrent_vector_v2.$(OBJ) \
+ concurrent_queue_v2.$(OBJ) \
+ spin_rw_mutex_v2.$(OBJ) \
+ task_v2.$(OBJ)
+endif
+
+# Object files that gmake up TBB (TBB_ASM.OBJ is platform-specific)
+TBB.OBJ = $(TBB_CPLUS.OBJ) $(TBB_CPLUS_OLD.OBJ) $(TBB_ASM.OBJ)
+
+# Suppress superfluous warnings for TBB compilation
+WARNING_KEY += $(WARNING_SUPPRESS)
+
+include $(tbb_root)/build/common_rules.inc
+
+ifneq (,$(TBB.DEF))
+tbb.def: $(TBB.DEF) $(TBB.LST)
+ $(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(INCLUDES) > $@
+
+LIB_LINK_FLAGS += $(EXPORT_KEY)tbb.def
+$(TBB.DLL): tbb.def
+endif
+
+tbbvars.sh:
+ $(MAKE_TBBVARS)
+
+$(TBB.DLL): BUILDING_LIBRARY = $(TBB.DLL)
+$(TBB.DLL): $(TBB.OBJ) $(TBB.RES) tbbvars.sh $(TBB_NO_VERSION.DLL)
+ $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(TBB.DLL) $(TBB.OBJ) $(TBB.RES) $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS)
+
+ifneq (,$(TBB_NO_VERSION.DLL))
+$(TBB_NO_VERSION.DLL):
+ echo "INPUT ($(TBB.DLL))" > $(TBB_NO_VERSION.DLL)
+endif
+
+#clean:
+# $(RM) *.$(OBJ) *.$(DLL) *.res *.map *.ilk *.pdb *.exp *.manifest *.tmp *.d core core.*[0-9][0-9] *.ver
+
+# Include automatically generated dependences
+-include *.d
diff --git a/build/Makefile.tbbmalloc b/build/Makefile.tbbmalloc
new file mode 100644
index 0000000000..f2be65e12a
--- /dev/null
+++ b/build/Makefile.tbbmalloc
@@ -0,0 +1,234 @@
+# Copyright 2005-2015 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.
+
+# default target
+default_malloc: malloc malloc_test
+
+tbb_root ?= $(TBBROOT)
+BUILDING_PHASE=1
+TEST_RESOURCE = $(MALLOC.RES)
+TESTFILE=tbbmalloc
+include $(tbb_root)/build/common.inc
+DEBUG_SUFFIX=$(findstring _debug,$(call cross_cfg,_$(cfg)))
+
+MALLOC_ROOT ?= $(tbb_root)/src/tbbmalloc
+MALLOC_SOURCE_ROOT ?= $(MALLOC_ROOT)
+
+VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test
+VPATH += $(MALLOC_ROOT) $(MALLOC_SOURCE_ROOT)
+
+CPLUS_FLAGS += $(if $(crosstest),$(DEFINE_KEY)__TBBMALLOC_NO_IMPLICIT_LINKAGE=1)
+
+TEST_SUFFIXES=proxy
+TEST_PREREQUISITE+=$(MALLOC.LIB)
+LINK_FILES+=$(LINK_MALLOC.LIB)
+include $(tbb_root)/build/common_rules.inc
+
+ORIG_CPLUS_FLAGS:=$(CPLUS_FLAGS)
+ORIG_INCLUDES:=$(INCLUDES)
+ORIG_LINK_MALLOC.LIB:=$(LINK_MALLOC.LIB)
+
+#------------------------------------------------------
+# Define rules for making the TBBMalloc shared library.
+#------------------------------------------------------
+
+# Object files that make up TBBMalloc
+MALLOC_CPLUS.OBJ = backend.$(OBJ) large_objects.$(OBJ) backref.$(OBJ) tbbmalloc.$(OBJ)
+MALLOC.OBJ := $(MALLOC_CPLUS.OBJ) $(MALLOC_ASM.OBJ) itt_notify_malloc.$(OBJ) frontend.$(OBJ)
+PROXY.OBJ := proxy.$(OBJ) tbb_function_replacement.$(OBJ)
+M_CPLUS_FLAGS := $(subst $(WARNING_KEY),,$(M_CPLUS_FLAGS)) $(DEFINE_KEY)__TBBMALLOC_BUILD=1
+M_INCLUDES := $(INCLUDES) $(INCLUDE_KEY)$(MALLOC_ROOT) $(INCLUDE_KEY)$(MALLOC_SOURCE_ROOT)
+
+# Suppress superfluous warnings for TBBMalloc compilation
+$(MALLOC.OBJ): M_CPLUS_FLAGS += $(WARNING_SUPPRESS)
+# Suppress superfluous warnings for TBBMalloc proxy compilation
+$(PROXY.OBJ): CPLUS_FLAGS += $(WARNING_SUPPRESS)
+
+frontend.$(OBJ): frontend.cpp version_string.ver
+ $(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $(INCLUDE_KEY). $<
+
+$(PROXY.OBJ): %.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(PIC_KEY) $(DEFINE_KEY)__TBBMALLOC_BUILD=1 $(M_INCLUDES) $<
+
+$(MALLOC_CPLUS.OBJ): %.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(M_INCLUDES) $<
+
+itt_notify_malloc.$(OBJ): itt_notify.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(OUTPUTOBJ_KEY)$@ $(INCLUDES) $<
+
+MALLOC_LINK_FLAGS = $(LIB_LINK_FLAGS)
+PROXY_LINK_FLAGS = $(LIB_LINK_FLAGS)
+
+ifneq (,$(MALLOC.DEF))
+tbbmalloc.def: $(MALLOC.DEF)
+ $(CPLUS) $(PREPROC_ONLY) $< $(M_CPLUS_FLAGS) $(WARNING_SUPPRESS) $(INCLUDES) > $@
+
+MALLOC_LINK_FLAGS += $(EXPORT_KEY)tbbmalloc.def
+$(MALLOC.DLL): tbbmalloc.def
+endif
+
+$(MALLOC.DLL): BUILDING_LIBRARY = $(MALLOC.DLL)
+$(MALLOC.DLL): $(MALLOC.OBJ) $(MALLOC.RES) $(MALLOC_NO_VERSION.DLL)
+ $(subst $(CPLUS),$(CONLY),$(LIB_LINK_CMD)) $(LIB_OUTPUT_KEY)$(MALLOC.DLL) $(MALLOC.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(MALLOC_LINK_FLAGS)
+
+ifneq (,$(MALLOCPROXY.DEF))
+tbbmallocproxy.def: $(MALLOCPROXY.DEF)
+ $(CPLUS) $(PREPROC_ONLY) $< $(CPLUS_FLAGS) $(WARNING_SUPPRESS) $(INCLUDES) > $@
+
+PROXY_LINK_FLAGS += $(EXPORT_KEY)tbbmallocproxy.def
+$(MALLOCPROXY.DLL): tbbmallocproxy.def
+endif
+
+ifneq (,$(MALLOCPROXY.DLL))
+$(MALLOCPROXY.DLL): BUILDING_LIBRARY = $(MALLOCPROXY.DLL)
+$(MALLOCPROXY.DLL): $(PROXY.OBJ) $(MALLOCPROXY_NO_VERSION.DLL) $(MALLOC.DLL) $(MALLOC.RES)
+ $(LIB_LINK_CMD) $(LIB_OUTPUT_KEY)$(MALLOCPROXY.DLL) $(PROXY.OBJ) $(MALLOC.RES) $(LIB_LINK_LIBS) $(LINK_MALLOC.LIB) $(PROXY_LINK_FLAGS)
+endif
+
+ifneq (,$(MALLOC_NO_VERSION.DLL))
+$(MALLOC_NO_VERSION.DLL):
+ echo "INPUT ($(MALLOC.DLL))" > $(MALLOC_NO_VERSION.DLL)
+endif
+
+ifneq (,$(MALLOCPROXY_NO_VERSION.DLL))
+$(MALLOCPROXY_NO_VERSION.DLL):
+ echo "INPUT ($(MALLOCPROXY.DLL))" > $(MALLOCPROXY_NO_VERSION.DLL)
+endif
+
+malloc: $(MALLOC.DLL) $(MALLOCPROXY.DLL)
+
+malloc_dll: $(MALLOC.DLL)
+
+malloc_proxy_dll: $(MALLOCPROXY.DLL)
+
+.PHONY: malloc malloc_dll malloc_proxy_dll
+
+#------------------------------------------------------
+# End of rules for making the TBBMalloc shared library
+#------------------------------------------------------
+
+#------------------------------------------------------
+# Define rules for making the TBBMalloc unit tests
+#------------------------------------------------------
+
+# --------- The list of TBBMalloc unit tests ----------
+MALLOC_TESTS = test_ScalableAllocator.$(TEST_EXT) \
+ test_ScalableAllocator_STL.$(TEST_EXT) \
+ test_malloc_compliance.$(TEST_EXT) \
+ test_malloc_regression.$(TEST_EXT) \
+ test_malloc_init_shutdown.$(TEST_EXT) \
+ test_malloc_pools.$(TEST_EXT) \
+ test_malloc_pure_c.$(TEST_EXT) \
+ test_malloc_whitebox.$(TEST_EXT) \
+ test_malloc_used_by_lib.$(TEST_EXT) \
+ test_malloc_lib_unload.$(TEST_EXT)
+ifneq (,$(MALLOCPROXY.DLL))
+MALLOC_TESTS += test_malloc_overload.$(TEST_EXT) \
+ test_malloc_overload_proxy.$(TEST_EXT) \
+ test_malloc_atexit.$(TEST_EXT)
+endif
+# -----------------------------------------------------
+
+# ------------ Set test specific variables ------------
+ifeq (windows.gcc,$(tbb_os).$(compiler))
+test_malloc_overload.$(TEST_EXT): LIBS += $(MALLOCPROXY.LIB)
+endif
+
+MALLOC_M_CPLUS_TESTS = test_malloc_whitebox.$(TEST_EXT) test_malloc_lib_unload.$(TEST_EXT) \
+ test_malloc_used_by_lib.$(TEST_EXT)
+MALLOC_NO_LIB_TESTS = test_malloc_whitebox.$(TEST_EXT) test_malloc_lib_unload.$(TEST_EXT) \
+ test_malloc_used_by_lib.$(TEST_EXT) test_malloc_overload.$(TEST_EXT)
+MALLOC_LINK_PROXY_TESTS = test_malloc_overload_proxy.$(TEST_EXT)
+MALLOC_ADD_DLL_TESTS = test_malloc_lib_unload.$(TEST_EXT) test_malloc_used_by_lib.$(TEST_EXT) \
+ test_malloc_atexit.$(TEST_EXT)
+
+# TODO: implement accurate warning suppression for tests to unify with Makefile.test.
+
+$(MALLOC_M_CPLUS_TESTS): CPLUS_FLAGS=$(M_CPLUS_FLAGS)
+$(MALLOC_M_CPLUS_TESTS): INCLUDES=$(M_INCLUDES)
+$(MALLOC_NO_LIB_TESTS): LINK_MALLOC.LIB=
+$(MALLOC_NO_LIB_TESTS): LINK_FLAGS+=$(LIBDL)
+$(MALLOC_LINK_PROXY_TESTS): LINK_MALLOC.LIB=$(LINK_MALLOCPROXY.LIB)
+ifneq (,$(DYLIB_KEY))
+$(MALLOC_ADD_DLL_TESTS): %.$(TEST_EXT): %_dll.$(DLL)
+$(MALLOC_ADD_DLL_TESTS): TEST_LIBS+=$(@:.$(TEST_EXT)=_dll.$(LIBEXT))
+endif
+
+test_malloc_over%.$(TEST_EXT): CPLUS_FLAGS=$(subst /MT,/MD,$(M_CPLUS_FLAGS))
+test_malloc_over%.$(TEST_EXT): INCLUDES=$(M_INCLUDES)
+test_malloc_overload_proxy.$(TEST_EXT): LINK_FLAGS+=$(LIBDL)
+
+test_malloc_atexit_dll.$(DLL): CPLUS_FLAGS=$(subst /MT,/MD,$(M_CPLUS_FLAGS))
+test_malloc_atexit.$(TEST_EXT): CPLUS_FLAGS=$(subst /MT,/MD,$(M_CPLUS_FLAGS))
+test_malloc_atexit.$(TEST_EXT): LINK_FLAGS+=$(LIBDL)
+# on Ubuntu 11.10 linker called with --as-needed, so dependence on libtbbmalloc_proxy
+# is not created, and malloc overload via linking with -ltbbmalloc_proxy is not working.
+# Overcome with --no-as-needed.
+ifeq (linux.gcc,$(tbb_os).$(compiler))
+test_malloc_atexit.$(TEST_EXT): MALLOCPROXY.LIB := -Wl,--no-as-needed $(MALLOCPROXY.LIB)
+endif
+# The test isn't added to MALLOC_LINK_PROXY_TESTS, because we need both
+# tbbmalloc and proxy libs. For platforms other than Android it's enough
+# to modify LINK_MALLOC.LIB for TEST_EXT target only. But under Android build
+# of DLL and TEST_EXT can be requested independently, so there is no chance
+# to set LINK_MALLOC.LIB in TEST_EXT build rule, and affect DLL build.
+test_malloc_atexit.$(TEST_EXT): LINK_MALLOC.LIB := $(LINK_MALLOC.LIB) $(LINK_MALLOCPROXY.LIB)
+test_malloc_atexit_dll.$(DLL): LINK_MALLOC.LIB := $(LINK_MALLOC.LIB) $(LINK_MALLOCPROXY.LIB)
+
+test_malloc_whitebox.$(TEST_EXT): $(MALLOC_ASM.OBJ) version_string.ver
+test_malloc_whitebox.$(TEST_EXT): INCLUDES+=$(INCLUDE_KEY).
+test_malloc_whitebox.$(TEST_EXT): LINK_FILES+=$(MALLOC_ASM.OBJ)
+
+# Some _dll targets need to restore variables since they are changed by parent
+# target-specific rule of its .exe targets
+test_malloc_lib_unload_dll.$(DLL): CPLUS_FLAGS=$(ORIG_CPLUS_FLAGS)
+test_malloc_lib_unload_dll.$(DLL): INCLUDES=$(ORIG_INCLUDES)
+
+test_malloc_used_by_lib_dll.$(DLL): CPLUS_FLAGS=$(subst /MT,/LD,$(M_CPLUS_FLAGS))
+test_malloc_used_by_lib_dll.$(DLL): LINK_FILES+=$(ORIG_LINK_MALLOC.LIB)
+test_malloc_used_by_lib_dll.$(DLL): LIBDL=
+# -----------------------------------------------------
+
+# ---- The list of TBBMalloc test running commands ----
+# run_cmd is usually empty
+malloc_test: $(MALLOC.DLL) malloc_test_no_depends
+
+malloc_test_no_depends: $(TEST_PREREQUISITE) $(MALLOC_TESTS)
+ $(run_cmd) ./test_malloc_pools.$(TEST_EXT) $(args) 1:4
+ifneq (,$(MALLOCPROXY.DLL))
+ $(run_cmd) ./test_malloc_atexit.$(TEST_EXT) $(args)
+ $(run_cmd) $(TEST_LAUNCHER) -l $(MALLOCPROXY.DLL) ./test_malloc_overload.$(TEST_EXT) $(args)
+ $(run_cmd) $(TEST_LAUNCHER) ./test_malloc_overload_proxy.$(TEST_EXT) $(args)
+endif
+ $(run_cmd) $(TEST_LAUNCHER) ./test_malloc_lib_unload.$(TEST_EXT) $(args)
+ $(run_cmd) $(TEST_LAUNCHER) ./test_malloc_used_by_lib.$(TEST_EXT)
+ $(run_cmd) ./test_malloc_whitebox.$(TEST_EXT) $(args) 1:4
+ $(run_cmd) $(TEST_LAUNCHER) -u ./test_malloc_compliance.$(TEST_EXT) $(args) 1:4
+ $(run_cmd) ./test_ScalableAllocator.$(TEST_EXT) $(args)
+ $(run_cmd) ./test_ScalableAllocator_STL.$(TEST_EXT) $(args)
+ $(run_cmd) ./test_malloc_regression.$(TEST_EXT) $(args)
+ $(run_cmd) ./test_malloc_init_shutdown.$(TEST_EXT) $(args)
+ $(run_cmd) ./test_malloc_pure_c.$(TEST_EXT) $(args)
+# -----------------------------------------------------
+
+#------------------------------------------------------
+# End of rules for making the TBBMalloc unit tests
+#------------------------------------------------------
+
+# Include automatically generated dependences
+-include *.d
diff --git a/build/Makefile.tbbproxy b/build/Makefile.tbbproxy
new file mode 100644
index 0000000000..706037e7ed
--- /dev/null
+++ b/build/Makefile.tbbproxy
@@ -0,0 +1,109 @@
+# Copyright 2005-2015 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.
+
+# default target
+default_tbbproxy: tbbproxy tbbproxy_test
+
+tbb_root ?= $(TBBROOT)
+BUILDING_PHASE=1
+include $(tbb_root)/build/common.inc
+DEBUG_SUFFIX=$(findstring _debug,_$(cfg))
+
+PROXY_ROOT ?= $(tbb_root)/src/tbbproxy
+PROXY_SOURCE_ROOT ?= $(PROXY_ROOT)
+
+VPATH = $(tbb_root)/src/tbb/$(ASSEMBLY_SOURCE) $(tbb_root)/src/tbb $(tbb_root)/src/test
+VPATH += $(PROXY_ROOT) $(PROXY_SOURCE_ROOT)
+
+CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DLL_NAME=$(TBB.DLL)
+CPLUS_FLAGS += $(DEFINE_KEY)__TBB_LST=$(TBB.LST)
+CPLUS_FLAGS += $(foreach dir,$(VPATH),$(INCLUDE_KEY)$(dir))
+CPLUS_FLAGS += $(PIC_KEY)
+
+include $(tbb_root)/build/common_rules.inc
+
+#------------------------------------------------------
+# Define rules for making the TBB Proxy static library.
+#------------------------------------------------------
+
+# Object files that make up TBB Proxy
+PROXY_CPLUS.OBJ = tbbproxy.$(OBJ)
+PROXY_ASM.OBJ = tbbproxy-asm.$(OBJ)
+PROXY.OBJ := $(PROXY_CPLUS.OBJ) $(PROXY_ASM.OBJ)
+
+# Not using intrinsics prevents undesired dependence from ICL libraries (e.g. libirc).
+# Not using default libs prevents link issues caused by different CRT versions in tbbproxy and in an app.
+$(PROXY.OBJ): CPLUS_FLAGS += $(DEFINE_KEY)ARCH_$(arch) $(DEFINE_KEY)OS_$(tbb_os) $(NOINTRINSIC_KEY) $(NODEFAULTLIB_KEY)
+
+$(PROXY_CPLUS.OBJ): CPLUS_FLAGS+=$(if $(filter windows.%cl,$(tbb_os).$(compiler)),/Fdtbbproxy$(DEBUG_SUFFIX).pdb)
+$(PROXY_CPLUS.OBJ): %.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(INCLUDES) $<
+
+$(PROXY.LIB): $(PROXY.OBJ)
+ $(AR) $(AR_FLAGS) $(AR_OUTPUT_KEY)$@ $^
+
+.PRECIOUS : %.$(ASMEXT)
+tbbproxy-asm.$(ASMEXT) : tbbproxy-$(tbb_os).$(ASMEXT) $(TBB.LST) $(TBB-OBJECTS.LST)
+ $(CPLUS) $(PREPROC_ONLY) $< $(INCLUDES) $(CPLUS_FLAGS) $(DEFINE_KEY)__TBB_BUILD=1 > $@
+
+.PHONY: tbbproxy
+ifeq (windows,$(tbb_os))
+tbbproxy: $(PROXY.LIB)
+else
+tbbproxy:
+endif
+
+#------------------------------------------------------
+# End of rules for making the TBB Proxy static library
+#------------------------------------------------------
+
+#------------------------------------------------------
+# Define rules for making the TBB Proxy unit tests
+#------------------------------------------------------
+
+add_debug=$(basename $(1))_debug$(suffix $(1))
+cross_suffix=$(if $(crosstest),$(if $(DEBUG_SUFFIX),$(subst _debug,,$(1)),$(call add_debug,$(1))),$(1))
+
+PROXY_LIB = $(call cross_suffix,$(PROXY.LIB))
+PROXY_TESTS_SRCS = test_runtime_loader.cpp
+PROXY_TESTS_OBJS = $(PROXY_TESTS_SRCS:.cpp=.$(OBJ))
+PROXY_TESTS_EXES = $(PROXY_TESTS_OBJS:.$(OBJ)=.$(TEST_EXT))
+
+# Run rules.
+.PHONY: tbbproxy_test
+ifeq (windows,$(tbb_os))
+tbbproxy_test: $(call cross_suffix,$(PROXY.LIB)) $(TEST_PREREQUISITE) $(PROXY_TESTS_EXES)
+ $(run_cmd) ./test_runtime_loader.$(TEST_EXT) $(args)
+else
+tbbproxy_test:
+endif
+
+# Link rules.
+$(PROXY_TESTS_EXES): %.$(TEST_EXT): %.$(OBJ) $(PROXY_LIB)
+ $(CPLUS) $(OUTPUT_KEY)$@ $(CPLUS_FLAGS) $< $(PROXY_LIB) $(LIBS) $(LIBDL) $(LINK_FLAGS)
+
+# Compilation rules.
+$(PROXY_TESTS_OBJS): %.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $(OUTPUT_KEY)$@ $<
+
+#------------------------------------------------------
+# End of rules for making the TBB Proxy unit tests
+#------------------------------------------------------
+
+# Include automatically generated dependences
+-include *.d
diff --git a/build/Makefile.test b/build/Makefile.test
new file mode 100644
index 0000000000..1ecb764a62
--- /dev/null
+++ b/build/Makefile.test
@@ -0,0 +1,298 @@
+# Copyright 2005-2015 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.
+
+#------------------------------------------------------------------------------
+# 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).
+
+$(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)
+
+# Tests that use some features of C++11
+TEST_TBB_CPP11 = test_lambda.$(TEST_EXT) test_cache_aligned_allocator_STL.$(TEST_EXT)
+
+ifneq (0,$(cpp0x))
+# Made CPP11 tests use NOSTRICT flags because -strict-ansi combined with
+# -std=c++0x on ICC 13.0 results in a compile error when stdlib is included
+$(TEST_TBB_CPP11): CPLUS_FLAGS := $(CPLUS_FLAGS_NOSTRICT)
+endif
+
+# 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)
+
+# 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_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_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_tbb_version.$(TEST_EXT) # insert new files right above
+
+TEST_TBB_PLAIN.EXE += $(TEST_TBB_CPP11)
+
+# 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_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 dependences
+-include *.d
diff --git a/build/SunOS.gcc.inc b/build/SunOS.gcc.inc
new file mode 100644
index 0000000000..65df43c83c
--- /dev/null
+++ b/build/SunOS.gcc.inc
@@ -0,0 +1,92 @@
+# Copyright 2005-2015 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.
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c++
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall
+TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor $(if $(findstring cc4., $(runtime)),-Wextra)
+WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor
+DYLIB_KEY = -shared
+LIBDL = -ldl
+
+CPLUS = g++
+CONLY = gcc
+LIB_LINK_FLAGS = -shared
+LIBS = -lpthread -lrt -ldl
+C_FLAGS = $(CPLUS_FLAGS) -x c
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = -g -O2 -DUSE_PTHREAD
+endif
+ifeq ($(cfg), debug)
+ CPLUS_FLAGS = -DTBB_USE_DEBUG -g -O0 -DUSE_PTHREAD
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (ia64,$(arch))
+# Position-independent code (PIC) is a must for IA-64
+ CPLUS_FLAGS += $(PIC_KEY)
+endif
+
+ifeq (intel64,$(arch))
+ CPLUS_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ia32,$(arch))
+ CPLUS_FLAGS += -m32
+ LIB_LINK_FLAGS += -m32
+endif
+
+# for some gcc versions on Solaris, -m64 may imply V9, but perhaps not everywhere (TODO: verify)
+ifeq (sparc,$(arch))
+ CPLUS_FLAGS += -mcpu=v9 -m64
+ LIB_LINK_FLAGS += -mcpu=v9 -m64
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-gas
+ifeq (ia64,$(arch))
+ ASM=ias
+ TBB_ASM.OBJ = atomic_support.o lock_byte.o log2.o pause.o
+endif
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/SunOS.inc b/build/SunOS.inc
new file mode 100644
index 0000000000..6f46bab54f
--- /dev/null
+++ b/build/SunOS.inc
@@ -0,0 +1,83 @@
+# Copyright 2005-2015 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.
+
+ifndef arch
+ arch:=$(shell uname -p)
+ ifeq ($(arch),i386)
+ ifeq ($(shell isainfo -b),64)
+ arch:=intel64
+ else
+ arch:=ia32
+ endif
+ endif
+ export arch
+# For non-IA systems running Sun OS, 'arch' will contain whatever is printed by uname -p.
+# In particular, for SPARC architecture it will contain "sparc".
+endif
+
+ifndef runtime
+ gcc_version:=$(shell gcc -dumpversion)
+ os_version:=$(shell uname -r)
+ os_kernel_version:=$(shell uname -r | sed -e 's/-.*$$//')
+ export runtime:=cc$(gcc_version)_kernel$(os_kernel_version)
+endif
+
+ifeq ($(arch),sparc)
+ native_compiler := gcc
+ export compiler ?= gcc
+else
+ native_compiler := suncc
+ export compiler ?= suncc
+endif
+# debugger ?= gdb
+
+CMD=$(SHELL) -c
+CWD=$(shell pwd)
+RM?=rm -f
+RD?=rmdir
+MD?=mkdir -p
+NUL= /dev/null
+SLASH=/
+MAKE_VERSIONS=bash $(tbb_root)/build/version_info_sunos.sh $(VERSION_FLAGS) >version_string.ver
+MAKE_TBBVARS=bash $(tbb_root)/build/generate_tbbvars.sh
+
+ifdef LD_LIBRARY_PATH
+ export LD_LIBRARY_PATH := .:$(LD_LIBRARY_PATH)
+else
+ export LD_LIBRARY_PATH := .
+endif
+
+####### Build settings ########################################################
+
+OBJ = o
+DLL = so
+LIBEXT=so
+
+TBB.LST =
+TBB.DEF =
+TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+LINK_TBB.LIB = $(TBB.LIB)
+
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+LINK_MALLOC.LIB = $(MALLOC.LIB)
+
+MALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)
+
+TEST_LAUNCHER=sh $(tbb_root)/build/test_launcher.sh $(largs)
diff --git a/build/SunOS.suncc.inc b/build/SunOS.suncc.inc
new file mode 100644
index 0000000000..4d8819256a
--- /dev/null
+++ b/build/SunOS.suncc.inc
@@ -0,0 +1,90 @@
+# Copyright 2005-2015 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.
+
+COMPILE_ONLY = -c -xMMD -errtags
+PREPROC_ONLY = -E -xMMD
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -KPIC
+DYLIB_KEY = -G
+LIBDL = -ldl
+# WARNING_AS_ERROR_KEY = -errwarn=%all
+WARNING_AS_ERROR_KEY = Warning as error
+# Supported Solaris Studio* 12.2 and above, remove ',inlasmpnu' in the line below to build by compiler prior Solaris Studio* 12.2
+WARNING_SUPPRESS = -erroff=unassigned,attrskipunsup,badargtype2w,badbinaryopw,wbadasg,wvarhidemem,inlasmpnu
+tbb_strict=0
+
+CPLUS = CC
+CONLY = cc
+LIB_LINK_FLAGS = -G -R . -M$(tbb_root)/build/suncc.map.pause
+LINK_FLAGS += -M$(tbb_root)/build/suncc.map.pause
+LIBS = -lpthread -lrt -R .
+C_FLAGS = $(CPLUS_FLAGS)
+
+#TODO: the $(stdlib) instead of hard-wiring STLPort
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = -mt -xO2 -g -library=stlport4 -DUSE_PTHREAD $(WARNING_SUPPRESS)
+endif
+ifeq ($(cfg), debug)
+ CPLUS_FLAGS = -mt -DTBB_USE_DEBUG -g -library=stlport4 -DUSE_PTHREAD $(WARNING_SUPPRESS)
+endif
+
+ASM=
+ASM_FLAGS=
+
+TBB_ASM.OBJ=
+
+ifeq (intel64,$(arch))
+ CPLUS_FLAGS += -m64
+ ASM_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (ia32,$(arch))
+ CPLUS_FLAGS += -m32
+ LIB_LINK_FLAGS += -m32
+endif
+
+# TODO: verify whether -m64 implies V9 on relevant Sun Studio versions
+# (those that handle gcc assembler syntax)
+ifeq (sparc,$(arch))
+ CPLUS_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+export TBB_CUSTOM_VARS_SH=export CXXFLAGS="-I$${TBBROOT}/include -library=stlport4 $(CXXFLAGS) -M$${TBBROOT}/build/suncc.map.pause"
+export TBB_CUSTOM_VARS_CSH=setenv CXXFLAGS "-I$${TBBROOT}/include -library=stlport4 $(CXXFLAGS) -M$${TBBROOT}/build/suncc.map.pause"
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+ASSEMBLY_SOURCE=$(arch)-fbe
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+M_INCLUDES = $(INCLUDES) -I$(MALLOC_ROOT) -I$(MALLOC_SOURCE_ROOT)
+M_CPLUS_FLAGS = $(CPLUS_FLAGS)
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/android.gcc.inc b/build/android.gcc.inc
new file mode 100644
index 0000000000..fd4607af57
--- /dev/null
+++ b/build/android.gcc.inc
@@ -0,0 +1,139 @@
+# Copyright 2005-2015 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.
+
+
+COMPILE_ONLY = -c -MMD
+PREPROC_ONLY = -E -x c++
+INCLUDE_KEY = -I
+DEFINE_KEY = -D
+OUTPUT_KEY = -o #
+OUTPUTOBJ_KEY = -o #
+PIC_KEY = -fPIC
+WARNING_AS_ERROR_KEY = -Werror
+WARNING_KEY = -Wall
+TEST_WARNING_KEY = -Wshadow -Wcast-qual -Woverloaded-virtual -Wnon-virtual-dtor -Wextra
+
+WARNING_SUPPRESS = -Wno-parentheses -Wno-non-virtual-dtor
+DYLIB_KEY = -shared
+EXPORT_KEY = -Wl,--version-script,
+LIBDL = -ldl
+
+CPLUS = $(tbb_tool_prefix)g++
+CONLY = $(tbb_tool_prefix)gcc
+
+# -soname is necessary for proper linkage to TBB prebuilt libraries when building application with Android SDK
+LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
+
+# pie is necessary for test executables to work and might be removed if newer NDK will add it implicitly
+PIE_FLAG = -pie
+ifeq ($(APP_PIE), false)
+ PIE_FLAG=
+endif
+
+LINK_FLAGS = -Wl,-rpath-link=. -rdynamic $(PIE_FLAG)
+C_FLAGS = $(CPLUS_FLAGS)
+
+# gcc 4.4 and higher support C++11
+ifneq (,$(shell $(CPLUS) -dumpversion | egrep "^(4\.[4-9]|[5-9])"))
+ # On Android/gcc 4.4.3, -std=c++0x causes ::int64_t and ::uint64_t to be undefined.
+ CPP11_FLAGS = -std=gnu++0x $(DEFINE_KEY)_TBB_CPP0X
+endif
+
+ifeq ($(cfg), release)
+ CPLUS_FLAGS = -O2
+endif
+ifeq ($(cfg), debug)
+ CPLUS_FLAGS = -g -O0 $(DEFINE_KEY)TBB_USE_DEBUG
+endif
+
+CPLUS_FLAGS += $(DEFINE_KEY)USE_PTHREAD $(DEFINE_KEY)_GLIBCXX_HAVE_FENV_H
+
+ifneq (,$(findstring $(arch),ia32 intel64))
+ CPLUS_FLAGS += $(DEFINE_KEY)DO_ITT_NOTIFY
+endif
+
+ifneq (0, $(dlopen_workaround))
+ CPLUS_FLAGS += $(DEFINE_KEY)__TBB_USE_DLOPEN_REENTRANCY_WORKAROUND=1
+ CPLUS_FLAGS += $(DEFINE_KEY)__TBB_USE_DLOPEN_MAIN_PROGRAM_WORKAROUND=1
+else
+ CPLUS_FLAGS += $(DEFINE_KEY)__TBB_USE_DLOPEN_REENTRANCY_WORKAROUND=0
+ CPLUS_FLAGS += $(DEFINE_KEY)__TBB_USE_DLOPEN_MAIN_PROGRAM_WORKAROUND=0
+endif
+
+ifeq (0, $(dynamic_load))
+ CPLUS_FLAGS += $(DEFINE_KEY)__TBB_DYNAMIC_LOAD_ENABLED=0
+endif
+
+
+# Paths to the NDK prebuilt tools and libraries
+CPLUS_FLAGS += --sysroot=$(SYSROOT)
+LIB_LINK_FLAGS += --sysroot=$(SYSROOT)
+LIBS = -L$(CPLUS_LIB_PATH) -lgnustl_shared
+
+# This causes CPP11_FLAGS to be issued twice for test_lambda.cpp
+# TODO: Fix this in general for all platforms once the correct strategy is determined.
+ifneq (00,$(lambdas)$(cpp0x))
+ CXX_ONLY_FLAGS += $(CPP11_FLAGS)
+endif
+
+ifeq (ia32,$(arch))
+ # TODO: Determine best setting of -march and add to CPLUS_FLAGS
+ CPLUS_FLAGS += -m32
+ LIB_LINK_FLAGS += -m32
+endif
+
+ifeq (intel64,$(arch))
+ CPLUS_FLAGS += -m64
+ LIB_LINK_FLAGS += -m64
+endif
+
+ifeq (arm,$(findstring arm,$(arch)))
+ CPLUS_FLAGS += -march=armv7-a $(DEFINE_KEY)TBB_USE_GCC_BUILTINS=1 $(DEFINE_KEY)__TBB_64BIT_ATOMICS=0
+endif
+
+#------------------------------------------------------------------------------
+# Setting assembler data.
+#------------------------------------------------------------------------------
+TBB_ASM.OBJ=
+MALLOC_ASM.OBJ=
+
+ASM = $(tbb_tool_prefix)as
+ifeq (intel64,$(arch))
+ ASM_FLAGS += --64
+endif
+ifeq (ia32,$(arch))
+ ASM_FLAGS += --32
+endif
+ifeq ($(cfg),debug)
+ ASM_FLAGS += -g
+endif
+
+ASSEMBLY_SOURCE=$(arch)-gas
+#------------------------------------------------------------------------------
+# End of setting assembler data.
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Setting tbbmalloc data.
+#------------------------------------------------------------------------------
+
+M_CPLUS_FLAGS = $(CPLUS_FLAGS) -fno-rtti -fno-exceptions
+
+#------------------------------------------------------------------------------
+# End of setting tbbmalloc data.
+#------------------------------------------------------------------------------
diff --git a/build/android.inc b/build/android.inc
new file mode 100644
index 0000000000..fbe68a7642
--- /dev/null
+++ b/build/android.inc
@@ -0,0 +1,62 @@
+# Copyright 2005-2015 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.
+
+#
+# Extra gmake command-line parameters for use with Android:
+#
+# dlopen_workaround: Some OS versions need workaround for dlopen to avoid recursive calls.
+#
+
+####### Detections and Commands ###############################################
+
+ifeq (android,$(findstring android,$(tbb_os)))
+ $(error TBB only supports cross-compilation for Android. Specify "target=android" instead.)
+endif
+
+ifneq ("command line","$(origin arch)")
+ ifeq (icc,$(compiler))
+ export COMPILER_VERSION := ICC: $(shell icc -V &1 | grep 'Version')
+ ifneq (,$(findstring IA-32, $(COMPILER_VERSION)))
+ export arch:=ia32
+ else
+ $(error "No support for Android in $(COMPILER_VERSION)")
+ endif
+
+ else
+ ifdef ANDROID_SERIAL
+ uname_m:=$(shell adb shell uname -m)
+ ifeq (i686,$(uname_m))
+ export arch:=ia32
+ else
+ export arch:=$(uname_m)
+ endif
+ else
+ ifndef arch
+ $(error "No target architecture specified and \'ANDROID_SERIAL\' environment variable specifying target device not set")
+ endif
+ endif
+ endif
+endif
+
+# Many OS versions (Android 4.0.[0-3] for example) need workaround for dlopen to avoid non-recursive loader lock hang
+export dlopen_workaround = 1
+
+# Android platform only supported from TBB 4.1 forward
+NO_LEGACY_TESTS = 1
+
+
diff --git a/build/android.linux.inc b/build/android.linux.inc
new file mode 100644
index 0000000000..ab40bcc996
--- /dev/null
+++ b/build/android.linux.inc
@@ -0,0 +1,70 @@
+# Copyright 2005-2015 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.
+
+####### Detections and Commands ###############################################
+
+# Must set def_prefix according to target architecture detected above
+ifeq (ia32,$(arch))
+ def_prefix = lin32
+endif
+ifeq (arm,$(findstring arm,$(arch)))
+ def_prefix = lin32
+endif
+ifeq (64,$(findstring 64,$(arch)))
+ def_prefix = lin64
+endif
+
+gcc_version = $(shell $(tbb_tool_prefix)g++ -dumpversion)
+
+ifdef ANDROID_NDK_ROOT
+ $(warning "NDK version $(ANDROID_NDK_ROOT)")
+ ndk_version:= $(lastword $(subst -, ,$(ANDROID_NDK_ROOT)))
+else
+ $(warning "NDK version not set in environment, using \'unknown\' instead.")
+ ndk_version:=unknown
+endif
+
+export runtime:=$(target)_cc$(gcc_version)_NDK$(ndk_version)_version_$(target_os_version)
+
+AR = $(tbb_tool_prefix)ar
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_android.sh $(VERSION_FLAGS) >version_string.ver
+
+####### Build settings ########################################################
+
+# No SONAME_SUFFIX for Android allowed in library names
+TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst
+TBB.DEF = $(TBB.LST:.lst=.def)
+TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+TBB_NO_VERSION.DLL=
+LINK_TBB.LIB = $(TBB.LIB)
+
+MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+MALLOC_NO_VERSION.DLL=
+LINK_MALLOC.LIB = $(MALLOC.LIB)
+
+MALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def
+MALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)
+MALLOCPROXY_NO_VERSION.DLL=
+MALLOCPROXY.LIB = $(MALLOCPROXY.DLL)
+LINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB)
+
+TEST_LAUNCHER=
+run_cmd ?= -sh $(tbb_root)/build/android.linux.launcher.sh $(largs)
diff --git a/build/android.linux.launcher.sh b/build/android.linux.launcher.sh
new file mode 100644
index 0000000000..5de025cb8f
--- /dev/null
+++ b/build/android.linux.launcher.sh
@@ -0,0 +1,147 @@
+#!/bin/sh
+#
+# Copyright 2005-2015 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.
+
+# Usage:
+# android.linux.launcher.sh [-v] [-q] [-s] [-r ] [-u] [-l ]
+# where: -v enables verbose output
+# where: -q enables quiet mode
+# where: -s runs the test in stress mode (until non-zero exit code or ctrl-c pressed)
+# where: -r specifies number of times to repeat execution
+# where: -u is ignored on Android
+# where: -l specifies the library name to be assigned to LD_PRELOAD
+#
+# Libs and executable necessary for testing should be present in the current directory before running.
+# ANDROID_SERIAL must be set to the connected Android target device name for file transfer and test runs.
+# ANDROID_TEST_DIRECTORY may be set to the directory used for testing on the Android target device; otherwise,
+# the default directory used is "/data/local/tmp/$(basename $PWD)".
+# Note: Do not remove the redirections to '/dev/null' in the script, otherwise the nightly test system will fail.
+
+do_cleanup() #
+{ #
+ adb pull $targetdir/events.txt events.txt > /dev/null 2>&1 #
+ # Remove target directory on the device
+ adb shell "rm -r ${targetdir}; mkdir -p ${targetdir}" > /dev/null 2>&1 #
+} #
+do_trap_cleanup() #
+{ #
+ do_cleanup #
+ exit -1 #
+} #
+while getopts "qvsr:ul:" flag #
+do case $flag in #
+ s ) # Stress testing mode
+ echo Doing stress testing. Press Ctrl-C to terminate
+ run_env='stressed() { while $*; do :; done; }; ' #
+ run_prefix="stressed $run_prefix" ;; #
+ r ) # Repeats test n times
+ run_env="repeated() { for i in $(seq -s ' ' 1 $OPTARG) ; do echo \$i of $OPTARG:; \$*; done; }; " #
+ run_prefix="repeated $run_prefix" ;; #
+ l ) # Additional library
+ ldpreload="$OPTARG " ;; #
+ u ) # Stack limit
+ ;; #
+ q ) # Quiet mode, removes 'done' but prepends any other output by test name
+ OUTPUT='2>&1 | sed -e "s/done//;/^[[:space:]]*$/d;s!^!$exename: !"' ;; #
+ v ) # Verbose mode
+ SUPPRESS='' #
+ verbose=1 ;; #
+esac done #
+shift `expr $OPTIND - 1` #
+[ -z "$OUTPUT" ] && OUTPUT='| sed -e "s/\\r$//"' #
+[ $verbose ] || SUPPRESS='>/dev/null' #
+# Collect the executable name
+exename=$(basename $1) #
+shift #
+# Prepare the target directory on the device
+currentdir=$(basename $PWD) #
+targetdir=${ANDROID_TEST_DIRECTORY:-/data/local/tmp/$currentdir} #
+do_cleanup #
+trap do_trap_cleanup INT # if someone hits control-c, cleanup the device
+# Collect the list of files to transfer to the target device, starting with executable itself.
+fnamelist="$exename" #
+# Add the C++ standard library from the NDK, which is required for all tests on Android.
+if [ ! -z "${LIB_GNU_STL_ANDROID}" ]; then #
+ fnamelist="$fnamelist ${LIB_GNU_STL_ANDROID}/libgnustl_shared.so" #
+else #
+ fnamelist="$fnamelist libgnustl_shared.so" #
+fi #
+# Find the TBB libraries and add them to the list.
+# Add TBB libraries from the current directory that contains libtbb* files
+files="$(/bin/ls libtbb* 2> /dev/null)" #
+[ -z "$files" ] || fnamelist="$fnamelist $files" #
+# Add any libraries built for specific tests.
+exeroot=${exename%\.*} #
+files="$(/bin/ls ${exeroot}*.so ${exeroot}*.so.* 2> /dev/null)" #
+[ -z "$files" ] || fnamelist="$fnamelist $files" #
+# TODO: Add extra libraries from the Intel(R) Compiler for certain tests
+# found=$(echo $exename | egrep 'test_malloc_atexit\|test_malloc_lib_unload' 2> /dev/null)
+# if [ ! -z $found ] ; then
+# fnamelist="$fnamelist ${compiler_path_lib}/libimf.so \
+# ${compiler_path_lib}/libsvml.so \
+# ${compiler_path_lib}/libintlc.so.5"
+# fi
+
+# Transfer collected executable and library files to the target device.
+transfers_ok=1 #
+for fullname in $fnamelist; do { #
+ if [ -r $fullname ]; then { #
+ # Transfer the executable and libraries to top-level target directory
+ [ $verbose ] && echo -n "Pushing $fullname: " #
+ eval "adb push $fullname ${targetdir}/$(basename $fullname) $SUPPRESS 2>&1" #
+ }; else { #
+ echo "Error: required file ${currentdir}/${fullname} for test $exename not available for transfer." #
+ transfers_ok=0 #
+ }; fi #
+}; done #
+if [ "${transfers_ok}" = "0" ]; then { #
+ do_cleanup #
+ exit -1 #
+}; fi #
+# Transfer input files used by example codes by scanning the executable argument list.
+for fullname in "$@"; do { #
+ if [ -r $fullname ]; then { #
+ directory=$(dirname $fullname) #
+ filename=$(basename $fullname) #
+ # strip leading "." from fullname if present
+ if [ "$directory" = "\." ]; then { #
+ directory="" #
+ fullname=$filename #
+ }; fi #
+ # Create the target directory to hold input file if necessary
+ if [ ! -z $directory ]; then { #
+ eval "adb shell 'mkdir $directory' $SUPPRESS 2>&1" #
+ }; fi #
+ # Transfer the input file to corresponding directory on target device
+ [ $verbose ] && echo -n "Pushing $fullname: " #
+ eval "adb push $fullname ${targetdir}/$fullname $SUPPRESS 2>&1" #
+ }; fi #
+}; done #
+# Set LD_PRELOAD if necessary
+[ -z "$ldpreload" ] || run_prefix="LD_PRELOAD='$ldpreload' $run_prefix" #
+[ $verbose ] && echo Running $run_prefix ./$exename $* #
+run_env="$run_env cd $targetdir; export LD_LIBRARY_PATH=." #
+# The return_code file is the best way found to return the status of the test execution when using adb shell.
+eval 'adb shell "$run_env; $run_prefix ./$exename $* || echo -n \$? >error_code"' "${OUTPUT}" #
+# Capture the return code string and remove the trailing \r from the return_code file contents
+err=`adb shell "cat $targetdir/error_code 2>/dev/null"` #
+[ -z $err ] || echo $exename: exited with error $err #
+do_cleanup #
+# Return the exit code of the test.
+exit $err #
diff --git a/build/android.macos.inc b/build/android.macos.inc
new file mode 100644
index 0000000000..2f1b348316
--- /dev/null
+++ b/build/android.macos.inc
@@ -0,0 +1,79 @@
+# Copyright 2005-2015 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.
+
+####### Detections and Commands ###############################################
+
+# Must set def_prefix according to target architecture detected above
+ifeq (ia32,$(arch))
+ def_prefix = lin32
+endif
+ifeq (arm,$(findstring arm,$(arch)))
+ def_prefix = lin32
+endif
+ifeq (64,$(findstring 64,$(arch)))
+ def_prefix = lin64
+endif
+
+gcc_version = $(shell $(tbb_tool_prefix)g++ -dumpversion)
+
+ifdef ANDROID_NDK_ROOT
+ $(warning "NDK version $(ANDROID_NDK_ROOT)")
+ ndk_version:= $(lastword $(subst -, ,$(ANDROID_NDK_ROOT)))
+else
+ $(warning "NDK version not set in environment, using \'unknown\' instead.")
+ ndk_version:=unknown
+endif
+
+export runtime:=$(target)_cc$(gcc_version)_NDK$(ndk_version)_version_$(target_os_version)
+
+AR = $(tbb_tool_prefix)ar
+MAKE_VERSIONS=sh $(tbb_root)/build/version_info_android.sh $(VERSION_FLAGS) >version_string.ver
+
+####### Build settings ########################################################
+
+# No SONAME_SUFFIX for Android allowed in library names
+TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst
+TBB.DEF = $(TBB.LST:.lst=.def)
+TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+TBB_NO_VERSION.DLL=
+LINK_TBB.LIB = $(TBB.LIB)
+
+MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+MALLOC_NO_VERSION.DLL=
+LINK_MALLOC.LIB = $(MALLOC.LIB)
+
+MALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def
+MALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)
+MALLOCPROXY_NO_VERSION.DLL=
+MALLOCPROXY.LIB = $(MALLOCPROXY.DLL)
+LINK_MALLOCPROXY.LIB = $(MALLOCPROXY.LIB)
+
+TBB.RES =
+MALLOC.RES =
+RML.RES =
+TBB.MANIFEST =
+MALLOC.MANIFEST =
+RML.MANIFEST =
+OBJ = o
+DLL = so
+
+TEST_LAUNCHER=
+run_cmd ?= -sh $(tbb_root)/build/android.linux.launcher.sh $(largs)
diff --git a/build/android.windows.inc b/build/android.windows.inc
new file mode 100644
index 0000000000..742f240a7f
--- /dev/null
+++ b/build/android.windows.inc
@@ -0,0 +1,78 @@
+# Copyright 2005-2015 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.
+
+####### Detections and Commands ###############################################
+
+# Must set def_prefix according to target architecture detected above
+ifeq (ia32,$(arch))
+ def_prefix = lin32
+endif
+ifeq (arm,$(findstring arm,$(arch)))
+ def_prefix = lin32
+endif
+ifeq (64,$(findstring 64,$(arch)))
+ def_prefix = lin64
+endif
+
+gcc_version = $(shell $(tbb_tool_prefix)g++ -dumpversion)
+
+ifdef ANDROID_NDK_ROOT
+ $(warning "NDK version $(ANDROID_NDK_ROOT)")
+ ndk_version:= $(lastword $(subst -, ,$(ANDROID_NDK_ROOT)))
+else
+ $(warning "NDK version not set in environment, using \'unknown\' instead.")
+ ndk_version:=unknown
+endif
+
+export runtime:=$(target)_cc$(gcc_version)_NDK$(ndk_version)_version_$(target_os_version)
+
+AR = $(tbb_tool_prefix)ar
+MAKE_VERSIONS = cmd /C cscript /nologo /E:jscript $(subst \,/,$(tbb_root))/build/version_info_windows.js $(CONLY) $(arch) $(subst \,/,"$(VERSION_FLAGS)") > version_string.ver
+
+####### Build settings ########################################################
+
+# No SONAME_SUFFIX for Android allowed in library names
+TBB.LST = $(tbb_root)/src/tbb/$(def_prefix)-tbb-export.lst
+TBB.DEF = $(TBB.LST:.lst=.def)
+TBB.DLL = libtbb$(CPF_SUFFIX)$(DEBUG_SUFFIX).$(DLL)
+TBB.LIB = $(TBB.DLL)
+TBB_NO_VERSION.DLL=
+LINK_TBB.LIB = $(TBB.LIB)
+
+MALLOC.DEF = $(MALLOC_ROOT)/$(def_prefix)-tbbmalloc-export.def
+MALLOC.DLL = libtbbmalloc$(DEBUG_SUFFIX).$(DLL)
+MALLOC.LIB = $(MALLOC.DLL)
+MALLOC_NO_VERSION.DLL=
+LINK_MALLOC.LIB = $(MALLOC.LIB)
+
+MALLOCPROXY.DEF = $(MALLOC_ROOT)/$(def_prefix)-proxy-export.def
+MALLOCPROXY.DLL = libtbbmalloc_proxy$(DEBUG_SUFFIX).$(DLL)
+MALLOCPROXY_NO_VERSION.DLL=
+MALLOCPROXY.LIB = $(MALLOCPROXY.DLL)
+
+TBB.RES =
+MALLOC.RES =
+RML.RES =
+TBB.MANIFEST =
+MALLOC.MANIFEST =
+RML.MANIFEST =
+OBJ = o
+DLL = so
+
+TEST_LAUNCHER=
+run_cmd ?= -sh $(tbb_root)/build/android.linux.launcher.sh $(largs)
diff --git a/build/big_iron.inc b/build/big_iron.inc
new file mode 100644
index 0000000000..9bafc78d88
--- /dev/null
+++ b/build/big_iron.inc
@@ -0,0 +1,76 @@
+# Copyright 2005-2015 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.
+
+#------------------------------------------------------------------------------
+# Defines settings for building the TBB run-time as a static library.
+# Use these only on platforms where dynamic linking is impractical.
+#
+# IF YOU USE TBB AS A STATIC LIBRARY, YOU MUST GUARANTEE THAT ONLY ONE COPY OF
+# THE TBB RUN-TIME IS LINKED INTO AN APPLICATION! LINKING IN MULTIPLE COPIES
+# OF THE TBB RUN-TIME, DIRECTLY OR INDIRECTLY, MAY CAUSE PROGRAM FAILURE!
+#------------------------------------------------------------------------------
+
+# Note that ITT_NOTIFY allows to selectively remove the definition of
+# DO_ITT_NOTIFY without sabotaging deferred expansion of CPLUS_FLAGS.
+# TODO: currently only in linux.{gcc,xl}.inc
+
+# Note that -pthread with xl gives "1501-210 (W) command option t contains an incorrect subargument";
+# multithreading is instead achieved by using the _r affix in the compiler name.
+# TODO: is -lpthread still relevant/needed with XL and _r affix?
+
+# Note that usage of dynamic (shared) libraries is disabled
+# (via -D__TBB_DYNAMIC_LOAD_ENABLED=0 and LIBDL emptied) primarily for performance.
+
+# OS specific settings =>
+ LIB_LINK_CMD = ar rcs
+ LIB_LINK_FLAGS =
+ LIB_LINK_LIBS =
+ LIB_OUTPUT_KEY =
+ DYLIB_KEY =
+ ifeq ($(tbb_os),linux)
+ ifeq ($(compiler),clang)
+ LIBS = -pthread -lrt
+ endif
+ ifeq ($(compiler),gcc)
+ LIBS = -pthread -lrt
+ endif
+ ifeq ($(compiler),xl)
+ LIBS = -lpthread -lrt
+ endif
+ LINK_FLAGS =
+ endif
+ override CXXFLAGS += -D__TBB_DYNAMIC_LOAD_ENABLED=0 -D__TBB_SOURCE_DIRECTLY_INCLUDED=1
+ ITT_NOTIFY =
+ DLL = a
+ LIBEXT = a
+ LIBPREF = lib
+ LIBDL =
+# <= OS specific settings
+
+TBB.DLL = $(LIBPREF)tbb$(DEBUG_SUFFIX).$(LIBEXT)
+LINK_TBB.LIB = $(TBB.DLL)
+TBB.LST =
+TBB.DEF =
+TBB_NO_VERSION.DLL =
+
+MALLOC.DLL = $(LIBPREF)tbbmalloc$(DEBUG_SUFFIX).$(LIBEXT)
+LINK_MALLOC.LIB = $(MALLOC.DLL)
+MALLOC.DEF =
+MALLOC_NO_VERSION.DLL =
+MALLOCPROXY.DLL =
+MALLOCPROXY.DEF =
diff --git a/build/codecov.txt b/build/codecov.txt
new file mode 100644
index 0000000000..e22f8059a2
--- /dev/null
+++ b/build/codecov.txt
@@ -0,0 +1,7 @@
+src/tbb
+src/tbbmalloc
+include/tbb
+src/rml/server
+src/rml/client
+src/rml/include
+source/malloc
diff --git a/build/common.inc b/build/common.inc
new file mode 100644
index 0000000000..6aa702d8b6
--- /dev/null
+++ b/build/common.inc
@@ -0,0 +1,147 @@
+# Copyright 2005-2015 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.
+
+ifndef tbb_os
+
+ # Windows sets environment variable OS; for other systems, ask uname
+ ifeq ($(OS),)
+ OS:=$(shell uname)
+ ifeq ($(OS),)
+ $(error "Cannot detect operating system")
+ endif
+ export tbb_os=$(OS)
+ endif
+
+ ifeq ($(OS), Windows_NT)
+ export tbb_os=windows
+ endif
+ ifeq ($(OS), Linux)
+ export tbb_os=linux
+ endif
+ ifeq ($(OS), Darwin)
+ export tbb_os=macos
+ endif
+
+endif # !tbb_os
+
+ifeq ($(tbb_cpf),1)
+ export CPF_SUFFIX ?=_preview
+endif
+
+ifeq (,$(wildcard $(tbb_root)/build/$(tbb_os).inc))
+ $(error "$(tbb_os)" is not supported. Add build/$(tbb_os).inc file with os-specific settings )
+endif
+
+# detect arch and runtime versions, provide common host-specific definitions
+include $(tbb_root)/build/$(tbb_os).inc
+
+ifeq ($(arch),)
+ $(error Architecture not detected)
+endif
+ifeq ($(runtime),)
+ $(error Runtime version not detected)
+endif
+
+# process target-dependent compilation and testing configurations
+ifdef target
+ # optionally process target-dependent options for compilation and testing
+ ifneq (,$(wildcard $(tbb_root)/build/$(target).inc))
+ include $(tbb_root)/build/$(target).inc
+ endif
+
+ # optionally process host-dependent environment for target-dependent compilation and testing
+ ifneq (,$(wildcard $(tbb_root)/build/$(target).$(tbb_os).inc))
+ include $(tbb_root)/build/$(target).$(tbb_os).inc
+ endif
+
+ # insure at least one target-dependent configuration file was found for compilation and testing
+ ifeq (,$(wildcard $(tbb_root)/build/$(target).inc)$(wildcard $(tbb_root)/build/$(target).$(tbb_os).inc))
+ $(error "$(target)" is not supported. Add build/$(target).inc or build/$(target).$(tbb_os).inc file)
+ endif
+endif #target
+
+# Support for running debug tests to release library and vice versa
+flip_cfg=$(subst _flipcfg,_release,$(subst _release,_debug,$(subst _debug,_flipcfg,$(1))))
+cross_cfg = $(if $(crosstest),$(call flip_cfg,$(1)),$(1))
+# Setting default configuration to release
+cfg?=release
+
+ifdef BUILDING_PHASE
+ # No lambdas or other C++0x extensions by default for compilers that implement them as experimental features
+ # TODO: it should become unnecessary when all relevant tests are "moved" to the TEST_TBB_CPP11 set
+ lambdas ?= 0
+ cpp0x ?= 0
+
+ ifndef target
+ target:=$(tbb_os)
+ endif
+ # process host/target compiler-dependent build configuration
+ ifeq (,$(wildcard $(tbb_root)/build/$(target).$(compiler).inc))
+ $(error "$(compiler)" is not supported on $(target). Add build/$(target).$(compiler).inc file with compiler-specific settings. )
+ endif
+ include $(tbb_root)/build/$(target).$(compiler).inc
+endif
+
+ifneq ($(BUILDING_PHASE),1)
+ # definitions for top-level Makefiles
+ origin_build_dir:=$(origin tbb_build_dir)
+ tbb_build_dir?=$(tbb_root)$(SLASH)build
+ export tbb_build_prefix?=$(tbb_os)_$(arch)_$(compiler)_$(runtime)$(CPF_SUFFIX)
+ work_dir=$(tbb_build_dir)$(SLASH)$(tbb_build_prefix)
+endif # BUILDING_PHASE != 1
+
+ifdef offload
+ extra_inc=$(offload).offload.inc
+endif
+ifdef extra_inc
+ ifneq (,$(wildcard $(tbb_root)/build/$(extra_inc)))
+ include $(tbb_root)/build/$(extra_inc)
+ else
+ $(error specified build file: "build/$(extra_inc)" is not found. )
+ endif
+endif
+
+ifndef BUILDING_PHASE
+ work_dir:=$(work_dir)
+ # assign new value for tbb_root if path is not absolute (the filter keeps only /* paths)
+ ifeq ($(filter /% $(SLASH)%, $(subst :, ,$(tbb_root)) ),)
+ full_tbb_root:=$(CURDIR)/$(tbb_root)
+ ifeq ($(origin_build_dir),undefined)
+ #relative path are needed here as a workaround to support whitespaces in path
+ override tbb_root:=../..
+ else
+ override tbb_root:=$(full_tbb_root)
+ endif
+ export tbb_root
+ endif
+ endif # !BUILDING_PHASE
+
+.DELETE_ON_ERROR: # Make will delete target if error occurred when building it.
+
+# MAKEOVERRIDES contains the command line variable definitions. Reseting it to
+# empty allows propogating all exported overridden variables to nested makes.
+# NOTEs:
+# 1. All variable set in command line are propagated to nested makes.
+# 2. All variables declared with the "export" keyword are propagated to
+# nested makes.
+# 3. "override" allows changing variables set in command line. But it doesn't
+# propagate new values to nested makes. For propagation, the "export" keyword
+# should be used.
+# 4. gmake v3.80 doesn't support exporting of target-specific variables using
+# the "export" keyword
+MAKEOVERRIDES =
diff --git a/build/common_rules.inc b/build/common_rules.inc
new file mode 100644
index 0000000000..410bd9afd7
--- /dev/null
+++ b/build/common_rules.inc
@@ -0,0 +1,165 @@
+# Copyright 2005-2015 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.
+
+
+ifeq ($(tbb_strict),1)
+ ifeq ($(WARNING_AS_ERROR_KEY),)
+ $(error WARNING_AS_ERROR_KEY is empty)
+ endif
+ # Do not remove line below!
+ WARNING_KEY += $(WARNING_AS_ERROR_KEY)
+endif
+
+ifneq (,$(findstring s,$(MAKEFLAGS)))
+ override largs+=-q
+endif
+ifneq (,$(repeat))
+ override largs+=-r $(repeat)
+endif
+ifneq (,$(largs)$(run_prefix))
+ override run_cmd:=$(run_cmd) $(TEST_LAUNCHER)
+ TEST_LAUNCHER=
+ ifeq (,$(strip $(run_cmd)))
+ $(warning Test launcher is not defined for the platform, ignoring launcher arguments)
+ endif
+endif
+
+ifndef TEST_EXT
+ TEST_EXT = exe
+endif
+
+INCLUDES += $(INCLUDE_KEY)$(tbb_root)/src $(INCLUDE_KEY)$(tbb_root)/src/rml/include $(INCLUDE_KEY)$(tbb_root)/include
+
+CPLUS_FLAGS += $(WARNING_KEY) $(CXXFLAGS)
+ifeq ($(tbb_cpf),1)
+CPLUS_FLAGS += $(DEFINE_KEY)__TBB_CPF_BUILD=1
+endif
+LINK_FLAGS += $(LDFLAGS)
+LIB_LINK_FLAGS += $(LDFLAGS)
+CPLUS_FLAGS_NOSTRICT = $(subst -strict-ansi,-ansi,$(CPLUS_FLAGS))
+
+LIB_LINK_CMD ?= $(CPLUS) $(PIC_KEY)
+ifeq ($(origin LIB_OUTPUT_KEY), undefined)
+ LIB_OUTPUT_KEY = $(OUTPUT_KEY)
+endif
+ifeq ($(origin LIB_LINK_LIBS), undefined)
+ LIB_LINK_LIBS = $(LIBDL) $(LIBS)
+endif
+
+CONLY ?= $(CPLUS)
+
+# The most generic rules
+#$(1) - is the target pattern
+define make-cxx-obj
+$1: %.cpp
+ $$(CPLUS) $$(OUTPUTOBJ_KEY)$$@ $$(COMPILE_ONLY) $$(CPLUS_FLAGS) $$(CXX_ONLY_FLAGS) $$(CXX_WARN_SUPPRESS) $$(INCLUDES) $$<
+endef
+
+TEST_AFFIXES_OBJS=$(addsuffix .$(OBJ),$(addprefix %_,$(TEST_SUFFIXES)) $(addsuffix _%,$(TEST_PREFIXES)))
+
+# Make will not process the same recipe for each test pattern (since the dependency on the same %.cpp)
+# thus the separated recipes should be provided
+$(foreach t,%.$(OBJ) $(TEST_AFFIXES_OBJS),$(eval $(call make-cxx-obj,$(t))))
+
+.PRECIOUS: %.$(OBJ) %.$(TEST_EXT) %.res $(TEST_AFFIXES_OBJS)
+
+# Rules for generating a test DLL
+%_dll.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(CPLUS_FLAGS) $(PIC_KEY) $(DEFINE_KEY)_USRDLL $(INCLUDES) $<
+
+#$(1) - is the binary name
+#$(2) - is the input obj files and libraries
+define make-test-binary
+ $(CPLUS) $(OUTPUT_KEY)$(strip $1) $(CPLUS_FLAGS) $(2) $(LIBS) $(LINK_FLAGS)
+endef
+
+# LINK_FILES the list of options to link test specific files (libraries and object files)
+LINK_FILES+=$(TEST_LIBS)
+# Rule for generating executable test
+%.$(TEST_EXT): %.$(OBJ) $(TEST_LIBS) $(TEST_PREREQUISITE) $(if $(use_proxy),$(PROXY.LIB))
+ $(call make-test-binary,$@,$< $(LINK_FILES))
+
+# Rules for generating a test DLL
+%_dll.$(DLL): LINK_FLAGS += $(PIC_KEY) $(DYLIB_KEY)
+%_dll.$(DLL): TEST_LIBS := $(subst %_dll.$(DLL),,$(TEST_LIBS))
+%_dll.$(DLL): %_dll.$(OBJ)
+ $(call make-test-binary,$@,$< $(LINK_FILES))
+.PRECIOUS: %_dll.$(OBJ) %_dll.$(DLL)
+
+%.$(OBJ): %.c
+ $(CONLY) $(COMPILE_ONLY) $(OUTPUTOBJ_KEY)$@ $(C_FLAGS) $(INCLUDES) $<
+
+%.$(OBJ): %.asm
+ $(ASM) $(ASM_FLAGS) $<
+
+%.$(OBJ): %.s
+ cpp <$< | grep -v '^#' >$*.tmp
+ $(ASM) $(ASM_FLAGS) -o $@ $*.tmp
+
+# Rule for generating .E file if needed for visual inspection
+# Note that due to mapping for ICL all uses of PREPROC_ONLY should be immediately followed by a file name
+%.E: %.cpp
+ $(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) $(PREPROC_ONLY) $< >$@
+
+# TODO Rule for generating .asm file if needed for visual inspection
+%.asm: %.cpp
+ $(CPLUS) /c /FAs /Fa $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) $<
+
+# TODO Rule for generating .s file if needed for visual inspection
+%.s: %.cpp
+ $(CPLUS) -S $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES) $<
+
+# Customizations
+$(KNOWN_WARNINGS): %.$(OBJ): %.cpp
+ $(CPLUS) $(COMPILE_ONLY) $(subst $(WARNING_KEY),,$(CPLUS_FLAGS)) $(CXX_ONLY_FLAGS) $(CXX_WARN_SUPPRESS) $(INCLUDES) $<
+
+tbb_misc.$(OBJ): version_string.ver
+tbb_misc.$(OBJ): INCLUDES+=$(INCLUDE_KEY).
+
+tbb_misc.E: tbb_misc.cpp version_string.ver
+ $(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDE_KEY). $(INCLUDES) $(PREPROC_ONLY) $< >$@
+
+%.res: %.rc version_string.ver $(TBB.MANIFEST)
+ rc /Fo$@ $(INCLUDES) $(filter /D%,$(CPLUS_FLAGS)) $<
+
+# TODO: add $(LIB_LINK_LIBS) $(LIB_LINK_FLAGS) (in a separate line?) and remove useless $(INCLUDES)
+VERSION_FLAGS=$(CPLUS) $(CPLUS_FLAGS) $(CXX_ONLY_FLAGS) $(INCLUDES)
+
+ifneq (,$(TBB.MANIFEST))
+$(TBB.MANIFEST):
+ cmd /C "echo #include ^ >tbbmanifest.c"
+ cmd /C "echo int main(){return 0;} >>tbbmanifest.c"
+ cl /nologo $(C_FLAGS) tbbmanifest.c
+
+version_string.ver: $(TBB.MANIFEST)
+ $(MAKE_VERSIONS)
+ cmd /C "echo #define TBB_MANIFEST 1 >> version_string.ver"
+# TODO: fix parallel build by writting to a temporary file and rename it when complete
+else
+# TODO: make version strings directly representative for all the libraries
+version_string.ver:
+ $(MAKE_VERSIONS)
+endif
+
+test_% debug_%: test_%.$(TEST_EXT) $(TEST_PREREQUISITE)
+ $(run_cmd) ./$< $(args)
+ifneq (,$(codecov))
+ profmerge
+ codecov $(if $(findstring -,$(codecov)),$(codecov),) -demang -comp $(tbb_root)/build/codecov.txt
+endif
+
diff --git a/build/detect.js b/build/detect.js
new file mode 100644
index 0000000000..9315fe2fed
--- /dev/null
+++ b/build/detect.js
@@ -0,0 +1,181 @@
+// Copyright 2005-2015 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.
+
+function doWork() {
+ var WshShell = WScript.CreateObject("WScript.Shell");
+
+ var fso = new ActiveXObject("Scripting.FileSystemObject");
+
+ var tmpExec;
+ tmpExec = WshShell.Run("cmd /c echo int main(){return 0;} >detect.c", 0, true);
+
+ // The next block deals with GCC (MinGW)
+ if ( WScript.Arguments.Count() > 1 && WScript.Arguments(1) == "gcc" ) {
+ if ( WScript.Arguments(0) == "/arch" ) {
+ // Get predefined macros
+ tmpExec = WshShell.Run("cmd /C gcc -dM -E detect.c > detect.map", 0, true);
+ var file = fso.OpenTextFile("detect.map", 1, 0);
+ var defs = file.readAll();
+ file.Close();
+
+ //detect target architecture
+ var intel64=/x86_64|amd64/mgi;
+ var ia32=/i386/mgi;
+ if ( defs.match(intel64) ) {
+ WScript.Echo( "intel64" );
+ } else if ( defs.match(ia32) ) {
+ WScript.Echo( "ia32" );
+ } else {
+ WScript.Echo( "unknown" );
+ }
+ } else {
+ tmpExec = WshShell.Exec("gcc -dumpversion");
+ var gcc_version = tmpExec.StdOut.ReadLine();
+ if ( WScript.Arguments(0) == "/runtime" ) {
+ WScript.Echo( "mingw"+gcc_version );
+ }
+ else if ( WScript.Arguments(0) == "/minversion" ) {
+ // Comparing strings, not numbers; will not work for two-digit versions
+ if ( gcc_version >= WScript.Arguments(2) ) {
+ WScript.Echo( "ok" );
+ } else {
+ WScript.Echo( "fail" );
+ }
+ }
+ }
+ return;
+ }
+
+ //Compile binary
+ tmpExec = WshShell.Exec("cl /MD detect.c /link /MAP");
+ while ( tmpExec.Status == 0 ) {
+ WScript.Sleep(100);
+ }
+ //compiler banner that includes version and target arch was printed to stderr
+ var clVersion = tmpExec.StdErr.ReadAll();
+
+ if ( WScript.Arguments(0) == "/arch" ) {
+ //detect target architecture
+ var intel64=/AMD64|EM64T|x64/mgi;
+ var ia32=/[80|\s]x86/mgi;
+ var arm=/ARM/mgi;
+ if ( clVersion.match(intel64) ) {
+ WScript.Echo( "intel64" );
+ } else if ( clVersion.match(ia32) ) {
+ WScript.Echo( "ia32" );
+ } else if ( clVersion.match(arm) ) {
+ WScript.Echo( "armv7" );
+ } else {
+ WScript.Echo( "unknown" );
+ }
+ return;
+ }
+
+ if ( WScript.Arguments(0) == "/runtime" ) {
+ //read map-file
+ var map = fso.OpenTextFile("detect.map", 1, 0);
+ var mapContext = map.readAll();
+ map.Close();
+
+ //detect runtime
+ var vc71=/MSVCR71\.DLL/mgi;
+ var vc80=/MSVCR80\.DLL/mgi;
+ var vc90=/MSVCR90\.DLL/mgi;
+ var vc100=/MSVCR100\.DLL/mgi;
+ var vc110=/MSVCR110\.DLL/mgi;
+ var vc120=/MSVCR120\.DLL/mgi;
+ var vc140=/VCRUNTIME140\.DLL/mgi;
+ var psdk=/MSVCRT\.DLL/mgi;
+ if ( mapContext.match(vc71) ) {
+ WScript.Echo( "vc7.1" );
+ } else if ( mapContext.match(vc80) ) {
+ WScript.Echo( "vc8" );
+ } else if ( mapContext.match(vc90) ) {
+ WScript.Echo( "vc9" );
+ } else if ( mapContext.match(vc100) ) {
+ WScript.Echo( "vc10" );
+ } else if ( mapContext.match(vc110) ) {
+ WScript.Echo( "vc11" );
+ } else if ( mapContext.match(vc120) ) {
+ WScript.Echo( "vc12" );
+ } else if ( mapContext.match(vc140) ) {
+ WScript.Echo( "vc14" );
+ } else {
+ WScript.Echo( "unknown" );
+ }
+ return;
+ }
+
+ if ( WScript.Arguments(0) == "/minversion" ) {
+ var compiler_version;
+ if ( WScript.Arguments(1) == "cl" ) {
+ compiler_version = clVersion.match(/Compiler Version ([0-9.]+)\s/mi)[1];
+ // compiler_version is in xx.xx.xxxxx.xx format, i.e. a string.
+ // It will compare well with major.minor versions where major has two digits,
+ // which is sufficient as the versions of interest start from 13 (for VC7).
+ } else if ( WScript.Arguments(1) == "icl" ) {
+ // Get predefined ICL macros
+ tmpExec = WshShell.Run("cmd /C icl /QdM /E detect.c > detect.map", 0, true);
+ var file = fso.OpenTextFile("detect.map", 1, 0);
+ var defs = file.readAll();
+ file.Close();
+ // In #define __INTEL_COMPILER XXYY, XX is the major ICL version, YY is minor
+ compiler_version = defs.match(/__INTEL_COMPILER[ \t]*([0-9]+).*$/mi)[1]/100;
+ // compiler version is a number; it compares well with another major.minor
+ // version number, where major has one, two, and perhaps more digits (9.1, 11, etc).
+ }
+ if ( compiler_version >= WScript.Arguments(2) ) {
+ WScript.Echo( "ok" );
+ } else {
+ WScript.Echo( "fail" );
+ }
+ return;
+ }
+}
+
+function doClean() {
+ var fso = new ActiveXObject("Scripting.FileSystemObject");
+ // delete intermediate files
+ if ( fso.FileExists("detect.c") )
+ fso.DeleteFile ("detect.c", false);
+ if ( fso.FileExists("detect.obj") )
+ fso.DeleteFile ("detect.obj", false);
+ if ( fso.FileExists("detect.map") )
+ fso.DeleteFile ("detect.map", false);
+ if ( fso.FileExists("detect.exe") )
+ fso.DeleteFile ("detect.exe", false);
+ if ( fso.FileExists("detect.exe.manifest") )
+ fso.DeleteFile ("detect.exe.manifest", false);
+}
+
+if ( WScript.Arguments.Count() > 0 ) {
+
+ try {
+ doWork();
+ } catch( error ) {
+ WScript.Echo( "unknown" );
+ }
+ doClean();
+
+} else {
+ WScript.Echo( "Supported options:\n"
+ + "\t/arch [compiler]\n"
+ + "\t/runtime [compiler]\n"
+ + "\t/minversion compiler version" );
+}
+
diff --git a/build/generate_tbbvars.bat b/build/generate_tbbvars.bat
new file mode 100644
index 0000000000..2eb47c17ad
--- /dev/null
+++ b/build/generate_tbbvars.bat
@@ -0,0 +1,69 @@
+@echo off
+REM
+REM Copyright 2005-2015 Intel Corporation. All Rights Reserved.
+REM
+REM This file is part of Threading Building Blocks. Threading Building Blocks is free software;
+REM you can redistribute it and/or modify it under the terms of the GNU General Public License
+REM version 2 as published by the Free Software Foundation. Threading Building Blocks is
+REM distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
+REM implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+REM See the GNU General Public License for more details. You should have received a copy of
+REM the GNU General Public License along with Threading Building Blocks; if not, write to the
+REM Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+REM
+REM As a special exception, you may use this file as part of a free software library without
+REM restriction. Specifically, if other files instantiate templates or use macros or inline
+REM functions from this file, or you compile this file and link it with other files to produce
+REM an executable, this file does not by itself cause the resulting executable to be covered
+REM by the GNU General Public License. This exception does not however invalidate any other
+REM reasons why the executable file might be covered by the GNU General Public License.
+REM
+setlocal
+for %%D in ("%tbb_root%") do set actual_root=%%~fD
+set fslash_root=%actual_root:\=/%
+set bin_dir=%CD%
+set fslash_bin_dir=%bin_dir:\=/%
+set _INCLUDE=INCLUDE& set _LIB=LIB
+if not x%UNIXMODE%==x set _INCLUDE=CPATH& set _LIB=LIBRARY_PATH
+
+if exist tbbvars.bat goto skipbat
+echo Generating local tbbvars.bat
+echo @echo off>tbbvars.bat
+echo SET TBBROOT=%actual_root%>>tbbvars.bat
+echo SET TBB_ARCH_PLATFORM=%arch%\%runtime%>>tbbvars.bat
+echo SET TBB_TARGET_ARCH=%arch%>>tbbvars.bat
+echo SET %_INCLUDE%=%%TBBROOT%%\include;%%%_INCLUDE%%%>>tbbvars.bat
+echo SET %_LIB%=%bin_dir%;%%%_LIB%%%>>tbbvars.bat
+echo SET PATH=%bin_dir%;%%PATH%%>>tbbvars.bat
+if not x%UNIXMODE%==x echo SET LD_LIBRARY_PATH=%bin_dir%;%%LD_LIBRARY_PATH%%>>tbbvars.bat
+:skipbat
+
+if exist tbbvars.sh goto skipsh
+echo Generating local tbbvars.sh
+echo #!/bin/sh>tbbvars.sh
+echo export TBBROOT="%fslash_root%">>tbbvars.sh
+echo export TBB_ARCH_PLATFORM="%arch%\%runtime%">>tbbvars.sh
+echo export TBB_TARGET_ARCH="%arch%">>tbbvars.sh
+echo export %_INCLUDE%="${TBBROOT}/include;$%_INCLUDE%">>tbbvars.sh
+echo export %_LIB%="%fslash_bin_dir%;$%_LIB%">>tbbvars.sh
+echo export PATH="%fslash_bin_dir%;$PATH">>tbbvars.sh
+if not x%UNIXMODE%==x echo export LD_LIBRARY_PATH="%fslash_bin_dir%;$LD_LIBRARY_PATH">>tbbvars.sh
+:skipsh
+
+if exist tbbvars.csh goto skipcsh
+echo Generating local tbbvars.csh
+echo #!/bin/csh>tbbvars.csh
+echo setenv TBBROOT "%actual_root%">>tbbvars.csh
+echo setenv TBB_ARCH_PLATFORM "%arch%\%runtime%">>tbbvars.csh
+echo setenv TBB_TARGET_ARCH "%arch%">>tbbvars.csh
+echo setenv %_INCLUDE% "${TBBROOT}\include;$%_INCLUDE%">>tbbvars.csh
+echo setenv %_LIB% "%bin_dir%;$%_LIB%">>tbbvars.csh
+echo setenv PATH "%bin_dir%;$PATH">>tbbvars.csh
+if not x%UNIXMODE%==x echo setenv LD_LIBRARY_PATH "%bin_dir%;$LD_LIBRARY_PATH">>tbbvars.csh
+:skipcsh
+
+REM Workaround for copying Android* specific libgnustl_shared.so library to work folder
+if not x%LIB_GNU_STL_ANDROID%==x copy /Y "%LIB_GNU_STL_ANDROID%"\libgnustl_shared.so
+
+endlocal
+exit
diff --git a/build/generate_tbbvars.sh b/build/generate_tbbvars.sh
new file mode 100644
index 0000000000..2f15e1a639
--- /dev/null
+++ b/build/generate_tbbvars.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+#
+# Copyright 2005-2015 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.
+
+# Script used to generate tbbvars.[c]sh scripts
+bin_dir="$PWD" #
+cd "$tbb_root" # keep this comments here
+tbb_root="$PWD" # to make it unsensible
+cd "$bin_dir" # to EOL encoding
+[ -f ./tbbvars.sh ] || cat >./tbbvars.sh <./tbbvars.csh <
+
+
+Overview
+This directory contains the internal Makefile infrastructure for Intel® Threading Building Blocks (Intel® TBB).
+
+
+See below for how to build Intel TBB and how to port Intel TBB
+to a new platform, operating system or architecture.
+
+
+Files
+The files here are not intended to be used directly. See below for usage.
+
+- Makefile.tbb
+
- Main Makefile to build the Intel TBB library.
+ Invoked via 'make tbb' from top-level Makefile.
+
- Makefile.tbbmalloc
+
- Main Makefile to build the Intel TBB scalable memory allocator library as well as its tests.
+ Invoked via 'make tbbmalloc' from top-level Makefile.
+
- Makefile.test
+
- Main Makefile to build and run the tests for the Intel TBB library.
+ Invoked via 'make test' from top-level Makefile.
+
- common.inc
+
- Main common included Makefile that includes OS-specific and compiler-specific Makefiles.
+
- <os>.inc
+
- OS-specific Makefile for a particular <os>.
+
- <os>.<compiler>.inc
+
- Compiler-specific Makefile for a particular <os> / <compiler> combination.
+
- *.sh
+
- Infrastructure utilities for Linux* OS, OS X*, and UNIX*-related operating systems.
+
- *.js, *.bat
+
- Infrastructure utilities for Windows* OS.
+
+
+To Build
+
+To port Intel TBB to a new platform, operating system or architecture, see the porting directions below.
+
+
+Software prerequisites:
+
+- C++ compiler for the platform, operating system and architecture of interest.
+ Either the native compiler for your system, or, optionally, the appropriate Intel® C++ compiler, may be used.
+
- GNU make utility. On Windows OS, if a UNIX* emulator is used to run GNU make,
+ it should be able to run Windows OS utilities and commands. On Linux OS, OS X, etc.,
+ shell commands issued by GNU make should execute in a Bourne or BASH compatible shell.
+
+
+
+Intel TBB libraries can be built by performing the following steps.
+On systems that support only one ABI (e.g., 32-bit), these steps build the libraries for that ABI.
+On systems that support both 64-bit and 32-bit libraries, these steps build the 64-bit libraries
+(Linux OS, OS X, and related systems) or whichever ABI is selected in the development environment (Windows OS).
+
+
+- Change to the top-level directory of the installed software.
+
- If using the Intel® C++ compiler, make sure the appropriate compiler is available in your PATH
+ (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
+
- Invoke GNU make using no arguments, for example, 'gmake'.
+
+
+
+To build Intel TBB libraries for other than the default ABI (e.g., to build 32-bit libraries on Linux OS, OS X,
+or related systems that support both 64-bit and 32-bit libraries), perform the following steps:
+
+
+- Change to the top-level directory of the installed software.
+
- If using the Intel® C++ compiler, make sure the appropriate compiler is available in your PATH
+ (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
+
- Invoke GNU make as follows, 'gmake arch=ia32'.
+
+
+The default make target will build the release and debug versions of the Intel TBB library.
+Other targets are available in the top-level Makefile. You might find the following targets useful:
+
+- 'make test' will build and run Intel TBB unit-tests;
+
- 'make examples' will build and run Intel TBB examples;
+
- 'make all' will do all of the above.
+
+See also the list of other targets below.
+
+
+
+By default, the libraries will be built in sub-directories within the build/ directory.
+The sub-directories are named according to the operating system, architecture, compiler and software environment used
+(the sub-directory names also distinguish release vs. debug libraries). On Linux OS, the software environment comprises
+the GCC, libc and kernel version used. On OS X, the software environment comprises the GCC and OS version used.
+On Windows OS, the software environment comprises the Microsoft* Visual Studio* version used.
+See below for how to change the default build directory.
+
+
+
+To perform different build and/or test operations, use the following steps.
+
+
+- Change to the top-level directory of the installed software.
+
- If using the Intel® C++ compiler, make sure the appropriate compiler is available in your PATH
+ (e.g., by sourcing the appropriate iccvars script for the compiler to be used).
+
- Invoke GNU make by using one or more of the following commands.
+
+ - make
+
- Default build. Equivalent to 'make tbb tbbmalloc'.
+
- make all
+
- Equivalent to 'make tbb tbbmalloc test examples'.
+
- cd src;make release
+
- Build and test release libraries only.
+
- cd src;make debug
+
- Build and test debug libraries only.
+
- make tbb
+
- Make Intel TBB release and debug libraries.
+
- make tbbmalloc
+
- Make Intel TBB scalable memory allocator libraries.
+
- make test
+
- Compile and run unit-tests
+
- make examples
+
- Build libraries and run all examples, like doing 'make debug clean release' from the general example Makefile.
+
- make compiler={icl, icc, gcc, clang} [(above options or targets)]
+
- Build and run as above, but use specified compilers instead of default, native compilers
+
+ - {icl, icc} - to use Intel® compilers (icl on Windows OS, icc on Linux OS or OS X).
+ - gcc - to use g++ (e.g. MinGW on Windows OS)
+ - clang - to use Clang compiler
+
+ - make compiler=clang stdlib=libc++ [(above options or targets)]
+
- Build and run as above, but use libc++ as a standard c++ library for clang.
+
- make target_ui=win8ui [target_ui_mode=production] [(above options or targets)]
+
- Build and run as above, but use API that is compliant with Windows Store* applications.
+ target_ui_mode=production is used to produce binaries that are compliant with Windows Store* application container. In later case they won't with Intel TBB unit tests but work only with Windows Store* applications.
+
- ndk-build target=android [(above options or targets)]
+
- Build and run as above, but build libraries for Android* OS by Android NDK that should be installed. Makefiles were tested with revision 8.
+
- make arch={ia32, intel64, ia64} [(above options or targets)]
+
- Build and run as above, but build libraries for the selected ABI.
+ Might be useful for cross-compilation; ensure proper environment is set before running this command.
+
- make tbb_root={(Intel TBB directory)} [(above options or targets)]
+
- Build and run as above; for use when invoking 'make' from a directory other than the top-level directory.
+
- make tbb_build_dir={(build directory)} [(above options or targets)]
+
- Build and run as above, but place the built libraries in the specified directory, rather than in the default sub-directory within the build/ directory. This command might have troubles with the build in case the sources installed to the directory with spaces in the path.
+
- make tbb_build_prefix={(build sub-directory)} [(above options or targets)]
+
- Build and run as above, but place the built libraries in the specified sub-directory within the build/ directory, rather than using the default sub-directory name.
+
- make tbb_cpf=1 [(above options or targets)]
+
- Build and run as above, but build and use libraries with the Community Preview Features enabled, rather than the default libraries.
+
- make [(above options)] clean
+
- Remove any executables or intermediate files produced by the above commands.
+ Includes build directories, object files, libraries and test executables.
+
+
+
+To Port
+
+This section provides information on how to port Intel TBB to a new platform, operating system or architecture.
+A subset or a superset of these steps may be required for porting to a given platform.
+
+
+To port the Intel TBB source code:
+
+- If porting to a new architecture, create a file that describes the architecture-specific details for that architecture.
+
+ - Create a <os>_<architecture>.h file in the include/tbb/machine directory
+ that describes these details.
+
+ - The <os>_<architecture>.h is named after the operating system and architecture as recognized by
+ include/tbb/tbb_machine.h and the Makefile infrastructure.
+
- This file defines the implementations of synchronization operations, and also the
+ scheduler yield function, for the operating system and architecture.
+
- Several examples of <os>_<architecture>.h files can be found in the
+ include/tbb/machine directory.
+
+
+ - Modify include/tbb/tbb_machine.h, if needed, to invoke the appropriate
+ <os>_<architecture>.h file in the include/tbb/machine directory.
+
+ - Add an implementation of DetectNumberOfWorkers() in src/tbb/tbb_misc.h,
+ that returns the number of cores found on the system in case it is not supported by the current implementation.
+ This is used to determine the default number of threads for the Intel TBB task scheduler.
+
- Either properly define FillDynamicLinks for use in
+ src/tbb/cache_aligned_allocator.cpp,
+ or hardcode the allocator to be used.
+
- Additional types might be required in the union defined in
+ include/tbb/aligned_space.h
+ to ensure proper alignment on your platform.
+
- Changes may be required in include/tbb/tick_count.h
+ for systems that do not provide gettimeofday.
+
+
+To port the Makefile infrastructure:
+Modify the appropriate files in the Makefile infrastructure to add a new platform, operating system or architecture as needed.
+See the Makefile infrastructure files for examples.
+
+- The top-level Makefile includes common.inc to determine the operating system.
+
+ - To add a new operating system, add the appropriate test to common.inc, and create the needed <os>.inc and <os>.<compiler>.inc files (see below).
+
+ - The <os>.inc file makes OS-specific settings for a particular operating systems.
+
+ - For example, linux.inc makes settings specific to Linux operating systems.
+
- This file performs OS-dependent tests to determine the specific platform and/or architecture, and sets other platform-dependent values.
+
- Add a new <os>.inc file for each new operating system added.
+
+ - The <os>.<compiler>.inc file makes compiler-specific settings for a particular
+ <os> / <compiler> combination.
+
+ - For example, linux.gcc.inc makes specific settings for using GCC on Linux OS, and linux.icc.inc makes specific settings for using the Intel® C++ compiler on Linux OS.
+
- This file sets particular compiler, assembler and linker options required when using a particular <os> / <compiler> combination.
+
- Add a new <os>.<compiler>.inc file for each new <os> / <compiler> combination added.
+
+
+
+
+Up to parent directory
+
+Copyright © 2005-2015 Intel Corporation. All Rights Reserved.
+
+Intel and Itanium are registered trademarks or trademarks of Intel Corporation or its
+subsidiaries in the United States and other countries.
+
+* Other names and brands may be claimed as the property of others.
+
+