235 lines
9.8 KiB
Makefile
235 lines
9.8 KiB
Makefile
# Copyright (c) 2005-2016 Intel Corporation
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
#
|
|
#
|
|
#
|
|
|
|
# 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) $(DSE_KEY) $(M_INCLUDES) $(INCLUDE_KEY). $<
|
|
|
|
$(PROXY.OBJ): %.$(OBJ): %.cpp
|
|
$(CPLUS) $(COMPILE_ONLY) $(CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(DEFINE_KEY)__TBBMALLOC_BUILD=1 $(M_INCLUDES) $<
|
|
|
|
$(MALLOC_CPLUS.OBJ): %.$(OBJ): %.cpp
|
|
$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(DSE_KEY) $(M_INCLUDES) $<
|
|
|
|
itt_notify_malloc.$(OBJ): itt_notify.cpp
|
|
$(CPLUS) $(COMPILE_ONLY) $(M_CPLUS_FLAGS) $(PIC_KEY) $(DSE_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 dependency 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 dependencies
|
|
-include *.d
|