mirror of
https://github.com/wjakob/tbb.git
synced 2026-08-30 00:50:40 +08:00
235 lines
10 KiB
Makefile
235 lines
10 KiB
Makefile
# Copyright 2005-2016 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
|