| # Copyright 2005-2010 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 ?= $(TBB30_INSTALL_DIR) |
| BUILDING_PHASE=1 |
| TEST_RESOURCE = $(RML.RES) |
| include $(tbb_root)/build/common.inc |
| DEBUG_SUFFIX=$(findstring _debug,_$(cfg)) |
| |
| # 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.$(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) tbb_misc_rml.$(OBJ) |
| TBB_DEP_NON_RML_TEST= cache_aligned_allocator_rml.$(OBJ) dynamic_link_rml.$(OBJ) $(RML_ASM.OBJ) tbb_misc_rml.$(OBJ) |
| TBB_DEP_RML_TEST= $(RML_ASM.OBJ) |
| ifeq ($(cfg),debug) |
| RML_TBB_DEP+= spin_mutex_rml.$(OBJ) |
| TBB_DEP_RML_TEST+= tbb_misc_rml.$(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) |
| |
| # Suppress superfluous warnings for RML compilation |
| R_CPLUS_FLAGS = $(subst DO_ITT_NOTIFY,DO_ITT_NOTIFY=0,$(CPLUS_FLAGS_NOSTRICT)) $(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) $< |
| |
| tbb_misc_rml.$(OBJ): version_string.tmp |
| |
| 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) |
| $(CMD) "$(CPLUS) $(PREPROC_ONLY) $(RML.DEF) $(filter $(DEFINE_KEY)%,$(CPLUS_FLAGS)) >rml.def 2>$(NUL) || exit 0" |
| |
| 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) 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) |
| $(CONLY) $(C_FLAGS) $(OUTPUT_KEY)$@ test_rml_omp_c_linkage.$(OBJ) rml_omp_stub.$(OBJ) $(LIBS) $(LINK_FLAGS) |
| |
| test_%.$(TEST_EXT): test_%.$(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) |
| $(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 |