66 lines
2.4 KiB
Makefile
66 lines
2.4 KiB
Makefile
|
# needs-profiler-support
|
||
|
|
||
|
# ISSUE(76038): When targeting MSVC, Rust binaries built with both `-Z instrument-coverage` and
|
||
|
# `-C link-dead-code` typically crash (with a seg-fault) or at best generate an empty `*.profraw`.
|
||
|
# See ../instrument-coverage/coverage_tools.mk for more information.
|
||
|
|
||
|
-include ../instrument-coverage/coverage_tools.mk
|
||
|
|
||
|
BASEDIR=../instrument-coverage-llvm-ir-base
|
||
|
|
||
|
ifeq ($(UNAME),Darwin)
|
||
|
INSTR_PROF_DATA_SUFFIX=,regular,live_support
|
||
|
DATA_SECTION_PREFIX=__DATA,
|
||
|
LLVM_COV_SECTION_PREFIX=__LLVM_COV,
|
||
|
else
|
||
|
INSTR_PROF_DATA_SUFFIX=
|
||
|
DATA_SECTION_PREFIX=
|
||
|
LLVM_COV_SECTION_PREFIX=
|
||
|
endif
|
||
|
|
||
|
ifeq ($(LINK_DEAD_CODE),yes)
|
||
|
DEFINE_INTERNAL=define hidden
|
||
|
else
|
||
|
DEFINE_INTERNAL=define internal
|
||
|
endif
|
||
|
|
||
|
ifdef IS_WINDOWS
|
||
|
LLVM_FILECHECK_OPTIONS=\
|
||
|
-check-prefixes=CHECK,WINDOWS \
|
||
|
-DPRIVATE_GLOBAL='internal global' \
|
||
|
-DDEFINE_INTERNAL='$(DEFINE_INTERNAL)' \
|
||
|
-DINSTR_PROF_DATA='.lprfd$$M' \
|
||
|
-DINSTR_PROF_NAME='.lprfn$$M' \
|
||
|
-DINSTR_PROF_CNTS='.lprfc$$M' \
|
||
|
-DINSTR_PROF_VALS='.lprfv$$M' \
|
||
|
-DINSTR_PROF_VNODES='.lprfnd$$M' \
|
||
|
-DINSTR_PROF_COVMAP='.lcovmap$$M' \
|
||
|
-DINSTR_PROF_ORDERFILE='.lorderfile$$M'
|
||
|
else
|
||
|
LLVM_FILECHECK_OPTIONS=\
|
||
|
-check-prefixes=CHECK \
|
||
|
-DPRIVATE_GLOBAL='private global' \
|
||
|
-DDEFINE_INTERNAL='$(DEFINE_INTERNAL)' \
|
||
|
-DINSTR_PROF_DATA='$(DATA_SECTION_PREFIX)__llvm_prf_data$(INSTR_PROF_DATA_SUFFIX)' \
|
||
|
-DINSTR_PROF_NAME='$(DATA_SECTION_PREFIX)__llvm_prf_names' \
|
||
|
-DINSTR_PROF_CNTS='$(DATA_SECTION_PREFIX)__llvm_prf_cnts' \
|
||
|
-DINSTR_PROF_VALS='$(DATA_SECTION_PREFIX)__llvm_prf_vals' \
|
||
|
-DINSTR_PROF_VNODES='$(DATA_SECTION_PREFIX)__llvm_prf_vnds' \
|
||
|
-DINSTR_PROF_COVMAP='$(LLVM_COV_SECTION_PREFIX)__llvm_covmap' \
|
||
|
-DINSTR_PROF_ORDERFILE='$(DATA_SECTION_PREFIX)__llvm_orderfile'
|
||
|
endif
|
||
|
|
||
|
all:
|
||
|
# Compile the test program with non-experimental coverage instrumentation, and generate LLVM IR
|
||
|
#
|
||
|
# Note: `-Clink-dead-code=no` disables the option, needed because the option is automatically
|
||
|
# enabled for some platforms, but not for Windows MSVC (due to Issue #76038). The state of this
|
||
|
# option affects the generated MIR and coverage, so it is enabled for tests to ensure the
|
||
|
# tests results are the same across platforms.
|
||
|
$(RUSTC) $(BASEDIR)/testprog.rs \
|
||
|
-Zinstrument-coverage \
|
||
|
-Clink-dead-code=$(LINK_DEAD_CODE) \
|
||
|
--emit=llvm-ir
|
||
|
|
||
|
cat "$(TMPDIR)"/testprog.ll | "$(LLVM_FILECHECK)" $(BASEDIR)/filecheck.testprog.txt $(LLVM_FILECHECK_OPTIONS)
|