[ci] Add targets to bundle tests and add a script to run them in Helix
[mono-project.git] / mcs / tools / mono-symbolicate / Makefile
blob9be64f4beca1d1d57b219ddfe0a47dce1a841f24
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
9 LIB_REFS = System.Xml System.Core System
11 include ../../build/executable.make
13 LIB_PATH = $(topdir)/class/lib/$(PROFILE)
15 MONO = MONO_PATH="$(LIB_PATH)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" $(RUNTIME) -O=-inline
17 MSYM_DIR = $(OUT_DIR)/msymdir
18 TEST_CS = Test/StackTraceDumper.cs
19 TEST_EXE = StackTraceDumper.exe
20 STACKTRACE_FILE = $(OUT_DIR)/stacktrace.out
21 SYMBOLICATE_RAW_FILE = $(OUT_DIR)/symbolicate_raw.out
22 SYMBOLICATE_RESULT_FILE = $(OUT_DIR)/symbolicate.result
23 SYMBOLICATE_EXPECTED_FILE = Test/symbolicate.expected
25 CHECK_DIFF = @\
26 $(MONO) $(TEST_EXE) > $(STACKTRACE_FILE); \
27 $(MONO) $(LIB_PATH)/$(PROGRAM) $(MSYM_DIR) $(STACKTRACE_FILE) > $(SYMBOLICATE_RAW_FILE); \
28 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); \
29 DIFF=$$(diff -up $(SYMBOLICATE_EXPECTED_FILE) $(SYMBOLICATE_RESULT_FILE)); \
30 if [ ! -z "$$DIFF" ]; then \
31 echo "Symbolicate tests failed."; \
32 echo "If $(SYMBOLICATE_RESULT_FILE) is correct copy it to $(SYMBOLICATE_EXPECTED_FILE)."; \
33 echo "Otherwise runtime sequence points need to be fixed."; \
34 echo "$$DIFF"; \
35 exit 1; \
38 ifdef MCS_MODE
39 CHECK_DIFF = @echo "WARNING: running in mcs mode, tests are specific to roslyn and would fail. Skipping diff check."
40 endif
42 PREPARE_OUTDIR = @\
43 rm -rf $(OUT_DIR); \
44 mkdir -p $(OUT_DIR); \
45 mkdir -p $(MSYM_DIR);
47 STORE_SYMBOLS = \
48 $(MONO) $(LIB_PATH)/$(PROGRAM) store-symbols $(MSYM_DIR) $(OUT_DIR); \
49 $(MONO) $(LIB_PATH)/$(PROGRAM) store-symbols $(MSYM_DIR) $(LIB_PATH);
51 COPY_TEST = @\
52 cp $(TEST_EXE) $(OUT_DIR); \
53 cp $(TEST_EXE:.exe=.pdb) $(OUT_DIR);
55 check: run-test
57 AOT_SUPPORTED = $(shell $(MONO) --aot 2>&1 | grep -q "AOT compilation is not supported" && echo 0 || echo 1)
59 test-local: $(TEST_EXE)
61 test-bundle:
62 mkdir -p $(TEST_BUNDLE_PATH)/tests/symbolicate
63 cp -L $(TEST_EXE) $(TEST_EXE:.exe=.pdb) $(SYMBOLICATE_EXPECTED_FILE) $(TEST_BUNDLE_PATH)/tests/symbolicate/
65 $(TEST_EXE): $(TEST_CS)
66 $(CSCOMPILE) $(TEST_CS) -r:$(LIB_PATH)/mscorlib.dll -r:$(LIB_PATH)/System.Core.dll -warn:0 -out:$(TEST_EXE)
68 run-test-local: run-test-without-aot run-test-with-aot run-test-with-aot-msym
70 run-test-without-aot: OUT_DIR = Test/without_aot
71 run-test-without-aot: all
72 @echo "Checking $(TEST_EXE) without AOT in $(OUT_DIR)"
73 $(PREPARE_OUTDIR)
74 $(COPY_TEST)
75 $(STORE_SYMBOLS)
76 $(CHECK_DIFF)
78 run-test-with-aot: OUT_DIR = Test/with_aot
79 run-test-with-aot: all
80 ifeq ($(AOT_SUPPORTED), 1)
81 @echo "Checking $(TEST_EXE) with AOT in $(OUT_DIR)"
82 $(PREPARE_OUTDIR)
83 $(COPY_TEST)
84 $(STORE_SYMBOLS)
85 @$(MONO) --aot $(OUT_DIR)/$(TEST_EXE) > /dev/null
86 $(CHECK_DIFF)
87 endif
89 run-test-with-aot-msym: OUT_DIR = Test/with_aot_msym
90 run-test-with-aot-msym: all
91 ifeq ($(AOT_SUPPORTED), 1)
92 @echo "Checking $(TEST_EXE) with AOT (using .msym) in $(OUT_DIR)"
93 $(PREPARE_OUTDIR)
94 $(COPY_TEST)
95 $(STORE_SYMBOLS)
96 @$(MONO) --aot=msym-dir=$(MSYM_DIR) $(OUT_DIR)/$(TEST_EXE) > /dev/null
97 $(CHECK_DIFF)
98 endif