update readme (#21797)
[mono-project.git] / mcs / tools / mono-symbolicate / Makefile
blobd4164712e5a19854d7beec44e75a0c06eea436d1
1 thisdir = tools/mono-symbolicate
2 SUBDIRS =
3 include ../../build/rules.make
5 PROGRAM = mono-symbolicate.exe
7 LOCAL_MCS_FLAGS = /D:NO_AUTHENTICODE /D:CECIL -nowarn:649 -unsafe
9 LIB_REFS = System.Xml System.Core System
11 include ../../build/executable.make
13 LIB_PATH = $(topdir)/class/lib/$(PROFILE)
15 ifdef TARGET_NET_REFERENCE
16 LIB_REF_PATH = $(topdir)/../external/binary-reference-assemblies/$(TARGET_NET_REFERENCE)
17 else
18 LIB_REF_PATH = $(LIB_PATH)
19 endif
21 MONO = MONO_PATH="$(LIB_PATH)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) -O=-inline
23 MSYM_DIR = $(OUT_DIR)/msymdir
24 TEST_CS = Test/StackTraceDumper.cs
25 TEST_EXE = StackTraceDumper.exe
26 STACKTRACE_FILE = $(OUT_DIR)/stacktrace.out
27 SYMBOLICATE_RAW_FILE = $(OUT_DIR)/symbolicate_raw.out
28 SYMBOLICATE_RESULT_FILE = $(OUT_DIR)/symbolicate.result
29 SYMBOLICATE_EXPECTED_FILE = Test/symbolicate.expected
31 CHECK_DIFF = @\
32 $(MONO) $(TEST_EXE) > $(STACKTRACE_FILE); \
33 $(MONO) $(LIB_PATH)/$(PROGRAM) $(MSYM_DIR) $(STACKTRACE_FILE) > $(SYMBOLICATE_RAW_FILE); \
34 cat $(SYMBOLICATE_RAW_FILE) | tr '\\' '/' | sed "s/) .* in .*\/mcs\//) in mcs\//" | sed "s/) .* in .*\/external\//) in external\//" | sed '/\[MVID\]/d' | sed '/\[AOTID\]/d' > $(SYMBOLICATE_RESULT_FILE); \
35 DIFF=$$(diff -up $(SYMBOLICATE_EXPECTED_FILE) $(SYMBOLICATE_RESULT_FILE)); \
36 if [ ! -z "$$DIFF" ]; then \
37 echo "Symbolicate tests failed."; \
38 echo "If $(SYMBOLICATE_RESULT_FILE) is correct copy it to $(SYMBOLICATE_EXPECTED_FILE)."; \
39 echo "Otherwise runtime sequence points need to be fixed."; \
40 echo "$$DIFF"; \
41 exit 1; \
44 ifdef MCS_MODE
45 CHECK_DIFF = @echo "WARNING: running in mcs mode, tests are specific to roslyn and would fail. Skipping diff check."
46 endif
48 PREPARE_OUTDIR = @\
49 rm -rf $(OUT_DIR); \
50 mkdir -p $(OUT_DIR); \
51 mkdir -p $(MSYM_DIR);
53 STORE_SYMBOLS = \
54 $(MONO) $(LIB_PATH)/$(PROGRAM) store-symbols $(MSYM_DIR) $(OUT_DIR); \
55 $(MONO) $(LIB_PATH)/$(PROGRAM) store-symbols $(MSYM_DIR) $(LIB_PATH);
57 COPY_TEST = @\
58 cp $(TEST_EXE) $(OUT_DIR); \
59 cp $(TEST_EXE:.exe=.pdb) $(OUT_DIR);
61 check: run-test
63 AOT_SUPPORTED = $(shell $(MONO) --aot 2>&1 | grep -q "AOT compilation is not supported" && echo 0 || echo 1)
65 test-local: $(TEST_EXE)
67 test-bundle:
68 mkdir -p $(TEST_BUNDLE_PATH)/tests/symbolicate
69 cp -L $(TEST_EXE) $(TEST_EXE:.exe=.pdb) $(SYMBOLICATE_EXPECTED_FILE) $(TEST_BUNDLE_PATH)/tests/symbolicate/
71 $(TEST_EXE): $(TEST_CS)
72 $(CSCOMPILE) $(TEST_CS) -r:$(LIB_REF_PATH)/mscorlib.dll -r:$(LIB_REF_PATH)/System.Core.dll -warn:0 -out:$(TEST_EXE)
74 run-test-local: run-test-without-aot run-test-with-aot run-test-with-aot-msym
76 run-test-without-aot: OUT_DIR = Test/without_aot
77 run-test-without-aot: all
78 @echo "Checking $(TEST_EXE) without AOT in $(OUT_DIR)"
79 $(PREPARE_OUTDIR)
80 $(COPY_TEST)
81 $(STORE_SYMBOLS)
82 $(CHECK_DIFF)
84 run-test-with-aot: OUT_DIR = Test/with_aot
85 run-test-with-aot: all
86 ifeq ($(AOT_SUPPORTED), 1)
87 @echo "Checking $(TEST_EXE) with AOT in $(OUT_DIR)"
88 $(PREPARE_OUTDIR)
89 $(COPY_TEST)
90 $(STORE_SYMBOLS)
91 @$(MONO) --aot $(OUT_DIR)/$(TEST_EXE) > /dev/null
92 $(CHECK_DIFF)
93 endif
95 run-test-with-aot-msym: OUT_DIR = Test/with_aot_msym
96 run-test-with-aot-msym: all
97 ifeq ($(AOT_SUPPORTED), 1)
98 @echo "Checking $(TEST_EXE) with AOT (using .msym) in $(OUT_DIR)"
99 $(PREPARE_OUTDIR)
100 $(COPY_TEST)
101 $(STORE_SYMBOLS)
102 @$(MONO) --aot=msym-dir=$(MSYM_DIR) $(OUT_DIR)/$(TEST_EXE) > /dev/null
103 $(CHECK_DIFF)
104 endif