From 5a81eca8654a5a85959c3e19be2b9caa721e319d Mon Sep 17 00:00:00 2001 From: br Date: Wed, 4 Apr 2018 12:33:46 +0000 Subject: [PATCH] Import OpenCSD -- an ARM CoreSight Trace Decode library. Git ID 900407e9d6400f6541138d6c2e483a9fc2d699a4 Sponsored by: DARPA, AFRL --- .gitignore | 76 + HOWTO.md | 661 +++++ LICENSE | 30 + README.md | 132 + TODO | 19 + decoder/build/linux/makefile | 196 ++ decoder/build/linux/rctdl_c_api_lib/makefile | 105 + .../build/linux/ref_trace_decode_lib/makefile | 143 + decoder/build/win-vs2015/opencsd.props | 20 + .../rctdl_c_api_lib/rctdl_c_api_lib.vcxproj | 327 +++ .../rctdl_c_api_lib.vcxproj.filters | 48 + .../ref_trace_decode_lib.sln | 135 + .../ref_trace_decode_lib.vcxproj | 453 ++++ .../ref_trace_decode_lib.vcxproj.filters | 488 ++++ decoder/docs/build_libs.md | 113 + decoder/docs/doxygen_config.dox | 2413 +++++++++++++++++ decoder/docs/external_custom.md | 148 + ...ace and Debug Snapshot file format 0v2.pdf | Bin 0 -> 435644 bytes decoder/docs/test_progs.md | 199 ++ .../include/common/comp_attach_notifier_i.h | 63 + decoder/include/common/comp_attach_pt_t.h | 240 ++ decoder/include/common/ocsd_code_follower.h | 231 ++ decoder/include/common/ocsd_dcd_mngr.h | 396 +++ decoder/include/common/ocsd_dcd_mngr_i.h | 98 + decoder/include/common/ocsd_dcd_tree.h | 406 +++ decoder/include/common/ocsd_dcd_tree_elem.h | 112 + decoder/include/common/ocsd_error.h | 116 + decoder/include/common/ocsd_error_logger.h | 89 + decoder/include/common/ocsd_gen_elem_list.h | 153 ++ .../include/common/ocsd_lib_dcd_register.h | 131 + decoder/include/common/ocsd_msg_logger.h | 84 + decoder/include/common/ocsd_pe_context.h | 116 + decoder/include/common/ocsd_version.h | 46 + decoder/include/common/trc_component.h | 149 + decoder/include/common/trc_core_arch_map.h | 68 + decoder/include/common/trc_cs_config.h | 62 + .../include/common/trc_frame_deformatter.h | 97 + decoder/include/common/trc_gen_elem.h | 206 ++ decoder/include/common/trc_pkt_decode_base.h | 303 +++ decoder/include/common/trc_pkt_elem_base.h | 49 + decoder/include/common/trc_pkt_proc_base.h | 412 +++ decoder/include/common/trc_printable_elem.h | 91 + decoder/include/common/trc_ret_stack.h | 114 + decoder/include/i_dec/trc_i_decode.h | 56 + decoder/include/i_dec/trc_idec_arminst.h | 130 + .../include/interfaces/trc_abs_typed_base_i.h | 58 + .../include/interfaces/trc_data_raw_in_i.h | 84 + .../interfaces/trc_data_rawframe_in_i.h | 81 + decoder/include/interfaces/trc_error_log_i.h | 134 + .../include/interfaces/trc_gen_elem_in_i.h | 77 + .../include/interfaces/trc_indexer_pkt_i.h | 77 + .../include/interfaces/trc_indexer_src_i.h | 124 + .../include/interfaces/trc_instr_decode_i.h | 66 + decoder/include/interfaces/trc_pkt_in_i.h | 80 + decoder/include/interfaces/trc_pkt_raw_in_i.h | 83 + .../include/interfaces/trc_tgt_mem_access_i.h | 91 + decoder/include/mem_acc/trc_mem_acc.h | 47 + decoder/include/mem_acc/trc_mem_acc_base.h | 244 ++ decoder/include/mem_acc/trc_mem_acc_bufptr.h | 76 + decoder/include/mem_acc/trc_mem_acc_cb.h | 81 + decoder/include/mem_acc/trc_mem_acc_cb_if.h | 71 + decoder/include/mem_acc/trc_mem_acc_file.h | 234 ++ decoder/include/mem_acc/trc_mem_acc_mapper.h | 128 + decoder/include/ocsd_if_version.h | 65 + decoder/include/opencsd.h | 84 + .../opencsd/c_api/ocsd_c_api_cust_fact.h | 54 + .../opencsd/c_api/ocsd_c_api_cust_impl.h | 158 ++ .../include/opencsd/c_api/ocsd_c_api_custom.h | 253 ++ .../include/opencsd/c_api/ocsd_c_api_types.h | 105 + decoder/include/opencsd/c_api/opencsd_c_api.h | 485 ++++ decoder/include/opencsd/etmv3/etmv3_decoder.h | 47 + .../include/opencsd/etmv3/trc_cmp_cfg_etmv3.h | 235 ++ .../opencsd/etmv3/trc_dcd_mngr_etmv3.h | 57 + .../opencsd/etmv3/trc_pkt_decode_etmv3.h | 274 ++ .../opencsd/etmv3/trc_pkt_elem_etmv3.h | 261 ++ .../opencsd/etmv3/trc_pkt_proc_etmv3.h | 81 + .../opencsd/etmv3/trc_pkt_types_etmv3.h | 178 ++ decoder/include/opencsd/etmv4/etmv4_decoder.h | 48 + .../include/opencsd/etmv4/trc_cmp_cfg_etmv4.h | 449 +++ .../opencsd/etmv4/trc_dcd_mngr_etmv4i.h | 31 + .../opencsd/etmv4/trc_etmv4_stack_elem.h | 338 +++ .../opencsd/etmv4/trc_pkt_decode_etmv4i.h | 183 ++ .../opencsd/etmv4/trc_pkt_elem_etmv4d.h | 73 + .../opencsd/etmv4/trc_pkt_elem_etmv4i.h | 520 ++++ .../opencsd/etmv4/trc_pkt_proc_etmv4.h | 104 + .../opencsd/etmv4/trc_pkt_types_etmv4.h | 350 +++ decoder/include/opencsd/ocsd_if_types.h | 592 ++++ decoder/include/opencsd/ptm/ptm_decoder.h | 46 + decoder/include/opencsd/ptm/trc_cmp_cfg_ptm.h | 210 ++ .../include/opencsd/ptm/trc_dcd_mngr_ptm.h | 57 + .../include/opencsd/ptm/trc_pkt_decode_ptm.h | 197 ++ .../include/opencsd/ptm/trc_pkt_elem_ptm.h | 221 ++ .../include/opencsd/ptm/trc_pkt_proc_ptm.h | 215 ++ .../include/opencsd/ptm/trc_pkt_types_ptm.h | 137 + decoder/include/opencsd/stm/stm_decoder.h | 45 + decoder/include/opencsd/stm/trc_cmp_cfg_stm.h | 161 ++ .../include/opencsd/stm/trc_dcd_mngr_stm.h | 57 + .../include/opencsd/stm/trc_pkt_decode_stm.h | 103 + .../include/opencsd/stm/trc_pkt_elem_stm.h | 238 ++ .../include/opencsd/stm/trc_pkt_proc_stm.h | 289 ++ .../include/opencsd/stm/trc_pkt_types_stm.h | 158 ++ decoder/include/opencsd/trc_gen_elem_types.h | 126 + decoder/include/opencsd/trc_pkt_types.h | 137 + .../include/pkt_printers/gen_elem_printer.h | 95 + decoder/include/pkt_printers/item_printer.h | 94 + decoder/include/pkt_printers/pkt_printer_t.h | 189 ++ .../include/pkt_printers/raw_frame_printer.h | 69 + .../include/pkt_printers/trc_pkt_printers.h | 43 + decoder/include/pkt_printers/trc_print_fact.h | 60 + decoder/source/c_api/ocsd_c_api.cpp | 572 ++++ .../source/c_api/ocsd_c_api_custom_obj.cpp | 431 +++ decoder/source/c_api/ocsd_c_api_custom_obj.h | 189 ++ decoder/source/c_api/ocsd_c_api_obj.h | 182 ++ decoder/source/etmv3/trc_cmp_cfg_etmv3.cpp | 65 + decoder/source/etmv3/trc_pkt_decode_etmv3.cpp | 670 +++++ decoder/source/etmv3/trc_pkt_elem_etmv3.cpp | 688 +++++ decoder/source/etmv3/trc_pkt_proc_etmv3.cpp | 122 + .../source/etmv3/trc_pkt_proc_etmv3_impl.cpp | 1224 +++++++++ .../source/etmv3/trc_pkt_proc_etmv3_impl.h | 175 ++ decoder/source/etmv4/trc_cmp_cfg_etmv4.cpp | 109 + decoder/source/etmv4/trc_etmv4_stack_elem.cpp | 110 + .../source/etmv4/trc_pkt_decode_etmv4i.cpp | 1121 ++++++++ decoder/source/etmv4/trc_pkt_elem_etmv4d.cpp | 57 + decoder/source/etmv4/trc_pkt_elem_etmv4i.cpp | 560 ++++ decoder/source/etmv4/trc_pkt_proc_etmv4.cpp | 126 + .../source/etmv4/trc_pkt_proc_etmv4d_impl.h | 71 + .../source/etmv4/trc_pkt_proc_etmv4i_impl.cpp | 1582 +++++++++++ .../source/etmv4/trc_pkt_proc_etmv4i_impl.h | 204 ++ decoder/source/i_dec/trc_i_decode.cpp | 213 ++ decoder/source/i_dec/trc_idec_arminst.cpp | 561 ++++ decoder/source/mem_acc/trc_mem_acc_base.cpp | 148 + decoder/source/mem_acc/trc_mem_acc_bufptr.cpp | 54 + decoder/source/mem_acc/trc_mem_acc_cb.cpp | 32 + decoder/source/mem_acc/trc_mem_acc_file.cpp | 391 +++ decoder/source/mem_acc/trc_mem_acc_mapper.cpp | 238 ++ decoder/source/ocsd_code_follower.cpp | 161 ++ decoder/source/ocsd_dcd_tree.cpp | 671 +++++ decoder/source/ocsd_error.cpp | 230 ++ decoder/source/ocsd_error_logger.cpp | 159 ++ decoder/source/ocsd_gen_elem_list.cpp | 168 ++ decoder/source/ocsd_lib_dcd_register.cpp | 215 ++ decoder/source/ocsd_msg_logger.cpp | 120 + decoder/source/ocsd_version.cpp | 48 + .../source/pkt_printers/raw_frame_printer.cpp | 104 + .../source/pkt_printers/trc_print_fact.cpp | 123 + decoder/source/ptm/trc_cmp_cfg_ptm.cpp | 59 + decoder/source/ptm/trc_pkt_decode_ptm.cpp | 660 +++++ decoder/source/ptm/trc_pkt_elem_ptm.cpp | 473 ++++ decoder/source/ptm/trc_pkt_proc_ptm.cpp | 1215 +++++++++ decoder/source/stm/trc_pkt_decode_stm.cpp | 299 ++ decoder/source/stm/trc_pkt_elem_stm.cpp | 314 +++ decoder/source/stm/trc_pkt_proc_stm.cpp | 1043 +++++++ decoder/source/trc_component.cpp | 149 + decoder/source/trc_core_arch_map.cpp | 69 + decoder/source/trc_frame_deformatter.cpp | 856 ++++++ decoder/source/trc_frame_deformatter_impl.h | 167 ++ decoder/source/trc_gen_elem.cpp | 242 ++ decoder/source/trc_printable_elem.cpp | 120 + decoder/source/trc_ret_stack.cpp | 149 + .../build/linux/c_api_pkt_print_test/makefile | 92 + .../build/linux/echo_test_dcd_lib/makefile | 88 + .../build/linux/snapshot_parser_lib/makefile | 92 + .../tests/build/linux/trc_pkt_lister/makefile | 91 + .../c_api_pkt_print_test.vcxproj | 333 +++ .../c_api_pkt_print_test.vcxproj.filters | 22 + .../ext_dcd_echo_test.vcxproj | 160 ++ .../ext_dcd_echo_test.vcxproj.filters | 33 + .../snapshot_parser_lib.vcxproj | 314 +++ .../snapshot_parser_lib.vcxproj.filters | 72 + .../trc_pkt_lister/trc_pkt_lister.vcxproj | 316 +++ .../trc_pkt_lister.vcxproj.filters | 27 + .../c_api_echo_test/ext_dcd_echo_test.c | 451 +++ .../c_api_echo_test/ext_dcd_echo_test.h | 93 + .../c_api_echo_test/ext_dcd_echo_test_fact.c | 104 + .../c_api_echo_test/ext_dcd_echo_test_fact.h | 48 + .../perf-test-scripts/perf-setup-env.bash | 42 + .../perf-test-scripts/perf-test-report.bash | 14 + .../perf-test-scripts/perf-test-script.bash | 11 + .../snapshot_parser_lib/include/device_info.h | 62 + .../include/device_parser.h | 106 + .../include/ini_section_names.h | 88 + .../include/snapshot_info.h | 50 + .../include/snapshot_parser.h | 152 ++ .../include/snapshot_parser_util.h | 111 + .../include/snapshot_reader.h | 99 + .../include/ss_key_value_names.h | 76 + .../include/ss_to_dcdtree.h | 111 + .../include/trace_snapshots.h | 44 + .../source/device_info.cpp | 70 + .../source/device_parser.cpp | 157 ++ .../source/snapshot_parser.cpp | 840 ++++++ .../source/snapshot_parser_util.cpp | 91 + .../source/snapshot_reader.cpp | 270 ++ .../source/ss_to_dcdtree.cpp | 524 ++++ decoder/tests/source/c_api_pkt_print_test.c | 961 +++++++ decoder/tests/source/trc_pkt_lister.cpp | 649 +++++ 196 files changed, 44105 insertions(+) create mode 100644 .gitignore create mode 100644 HOWTO.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 TODO create mode 100644 decoder/build/linux/makefile create mode 100644 decoder/build/linux/rctdl_c_api_lib/makefile create mode 100644 decoder/build/linux/ref_trace_decode_lib/makefile create mode 100644 decoder/build/win-vs2015/opencsd.props create mode 100644 decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj create mode 100644 decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.sln create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj create mode 100644 decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters create mode 100644 decoder/docs/build_libs.md create mode 100644 decoder/docs/doxygen_config.dox create mode 100644 decoder/docs/external_custom.md create mode 100644 decoder/docs/specs/ARM Trace and Debug Snapshot file format 0v2.pdf create mode 100644 decoder/docs/test_progs.md create mode 100644 decoder/include/common/comp_attach_notifier_i.h create mode 100644 decoder/include/common/comp_attach_pt_t.h create mode 100644 decoder/include/common/ocsd_code_follower.h create mode 100644 decoder/include/common/ocsd_dcd_mngr.h create mode 100644 decoder/include/common/ocsd_dcd_mngr_i.h create mode 100644 decoder/include/common/ocsd_dcd_tree.h create mode 100644 decoder/include/common/ocsd_dcd_tree_elem.h create mode 100644 decoder/include/common/ocsd_error.h create mode 100644 decoder/include/common/ocsd_error_logger.h create mode 100644 decoder/include/common/ocsd_gen_elem_list.h create mode 100644 decoder/include/common/ocsd_lib_dcd_register.h create mode 100644 decoder/include/common/ocsd_msg_logger.h create mode 100644 decoder/include/common/ocsd_pe_context.h create mode 100644 decoder/include/common/ocsd_version.h create mode 100644 decoder/include/common/trc_component.h create mode 100644 decoder/include/common/trc_core_arch_map.h create mode 100644 decoder/include/common/trc_cs_config.h create mode 100644 decoder/include/common/trc_frame_deformatter.h create mode 100644 decoder/include/common/trc_gen_elem.h create mode 100644 decoder/include/common/trc_pkt_decode_base.h create mode 100644 decoder/include/common/trc_pkt_elem_base.h create mode 100644 decoder/include/common/trc_pkt_proc_base.h create mode 100644 decoder/include/common/trc_printable_elem.h create mode 100644 decoder/include/common/trc_ret_stack.h create mode 100644 decoder/include/i_dec/trc_i_decode.h create mode 100644 decoder/include/i_dec/trc_idec_arminst.h create mode 100644 decoder/include/interfaces/trc_abs_typed_base_i.h create mode 100644 decoder/include/interfaces/trc_data_raw_in_i.h create mode 100644 decoder/include/interfaces/trc_data_rawframe_in_i.h create mode 100644 decoder/include/interfaces/trc_error_log_i.h create mode 100644 decoder/include/interfaces/trc_gen_elem_in_i.h create mode 100644 decoder/include/interfaces/trc_indexer_pkt_i.h create mode 100644 decoder/include/interfaces/trc_indexer_src_i.h create mode 100644 decoder/include/interfaces/trc_instr_decode_i.h create mode 100644 decoder/include/interfaces/trc_pkt_in_i.h create mode 100644 decoder/include/interfaces/trc_pkt_raw_in_i.h create mode 100644 decoder/include/interfaces/trc_tgt_mem_access_i.h create mode 100644 decoder/include/mem_acc/trc_mem_acc.h create mode 100644 decoder/include/mem_acc/trc_mem_acc_base.h create mode 100644 decoder/include/mem_acc/trc_mem_acc_bufptr.h create mode 100644 decoder/include/mem_acc/trc_mem_acc_cb.h create mode 100644 decoder/include/mem_acc/trc_mem_acc_cb_if.h create mode 100644 decoder/include/mem_acc/trc_mem_acc_file.h create mode 100644 decoder/include/mem_acc/trc_mem_acc_mapper.h create mode 100644 decoder/include/ocsd_if_version.h create mode 100644 decoder/include/opencsd.h create mode 100644 decoder/include/opencsd/c_api/ocsd_c_api_cust_fact.h create mode 100644 decoder/include/opencsd/c_api/ocsd_c_api_cust_impl.h create mode 100644 decoder/include/opencsd/c_api/ocsd_c_api_custom.h create mode 100644 decoder/include/opencsd/c_api/ocsd_c_api_types.h create mode 100644 decoder/include/opencsd/c_api/opencsd_c_api.h create mode 100644 decoder/include/opencsd/etmv3/etmv3_decoder.h create mode 100644 decoder/include/opencsd/etmv3/trc_cmp_cfg_etmv3.h create mode 100644 decoder/include/opencsd/etmv3/trc_dcd_mngr_etmv3.h create mode 100644 decoder/include/opencsd/etmv3/trc_pkt_decode_etmv3.h create mode 100644 decoder/include/opencsd/etmv3/trc_pkt_elem_etmv3.h create mode 100644 decoder/include/opencsd/etmv3/trc_pkt_proc_etmv3.h create mode 100644 decoder/include/opencsd/etmv3/trc_pkt_types_etmv3.h create mode 100644 decoder/include/opencsd/etmv4/etmv4_decoder.h create mode 100644 decoder/include/opencsd/etmv4/trc_cmp_cfg_etmv4.h create mode 100644 decoder/include/opencsd/etmv4/trc_dcd_mngr_etmv4i.h create mode 100644 decoder/include/opencsd/etmv4/trc_etmv4_stack_elem.h create mode 100644 decoder/include/opencsd/etmv4/trc_pkt_decode_etmv4i.h create mode 100644 decoder/include/opencsd/etmv4/trc_pkt_elem_etmv4d.h create mode 100644 decoder/include/opencsd/etmv4/trc_pkt_elem_etmv4i.h create mode 100644 decoder/include/opencsd/etmv4/trc_pkt_proc_etmv4.h create mode 100644 decoder/include/opencsd/etmv4/trc_pkt_types_etmv4.h create mode 100644 decoder/include/opencsd/ocsd_if_types.h create mode 100644 decoder/include/opencsd/ptm/ptm_decoder.h create mode 100644 decoder/include/opencsd/ptm/trc_cmp_cfg_ptm.h create mode 100644 decoder/include/opencsd/ptm/trc_dcd_mngr_ptm.h create mode 100644 decoder/include/opencsd/ptm/trc_pkt_decode_ptm.h create mode 100644 decoder/include/opencsd/ptm/trc_pkt_elem_ptm.h create mode 100644 decoder/include/opencsd/ptm/trc_pkt_proc_ptm.h create mode 100644 decoder/include/opencsd/ptm/trc_pkt_types_ptm.h create mode 100644 decoder/include/opencsd/stm/stm_decoder.h create mode 100644 decoder/include/opencsd/stm/trc_cmp_cfg_stm.h create mode 100644 decoder/include/opencsd/stm/trc_dcd_mngr_stm.h create mode 100644 decoder/include/opencsd/stm/trc_pkt_decode_stm.h create mode 100644 decoder/include/opencsd/stm/trc_pkt_elem_stm.h create mode 100644 decoder/include/opencsd/stm/trc_pkt_proc_stm.h create mode 100644 decoder/include/opencsd/stm/trc_pkt_types_stm.h create mode 100644 decoder/include/opencsd/trc_gen_elem_types.h create mode 100644 decoder/include/opencsd/trc_pkt_types.h create mode 100644 decoder/include/pkt_printers/gen_elem_printer.h create mode 100644 decoder/include/pkt_printers/item_printer.h create mode 100644 decoder/include/pkt_printers/pkt_printer_t.h create mode 100644 decoder/include/pkt_printers/raw_frame_printer.h create mode 100644 decoder/include/pkt_printers/trc_pkt_printers.h create mode 100644 decoder/include/pkt_printers/trc_print_fact.h create mode 100644 decoder/source/c_api/ocsd_c_api.cpp create mode 100644 decoder/source/c_api/ocsd_c_api_custom_obj.cpp create mode 100644 decoder/source/c_api/ocsd_c_api_custom_obj.h create mode 100644 decoder/source/c_api/ocsd_c_api_obj.h create mode 100644 decoder/source/etmv3/trc_cmp_cfg_etmv3.cpp create mode 100644 decoder/source/etmv3/trc_pkt_decode_etmv3.cpp create mode 100644 decoder/source/etmv3/trc_pkt_elem_etmv3.cpp create mode 100644 decoder/source/etmv3/trc_pkt_proc_etmv3.cpp create mode 100644 decoder/source/etmv3/trc_pkt_proc_etmv3_impl.cpp create mode 100644 decoder/source/etmv3/trc_pkt_proc_etmv3_impl.h create mode 100644 decoder/source/etmv4/trc_cmp_cfg_etmv4.cpp create mode 100644 decoder/source/etmv4/trc_etmv4_stack_elem.cpp create mode 100644 decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp create mode 100644 decoder/source/etmv4/trc_pkt_elem_etmv4d.cpp create mode 100644 decoder/source/etmv4/trc_pkt_elem_etmv4i.cpp create mode 100644 decoder/source/etmv4/trc_pkt_proc_etmv4.cpp create mode 100644 decoder/source/etmv4/trc_pkt_proc_etmv4d_impl.h create mode 100644 decoder/source/etmv4/trc_pkt_proc_etmv4i_impl.cpp create mode 100644 decoder/source/etmv4/trc_pkt_proc_etmv4i_impl.h create mode 100644 decoder/source/i_dec/trc_i_decode.cpp create mode 100644 decoder/source/i_dec/trc_idec_arminst.cpp create mode 100644 decoder/source/mem_acc/trc_mem_acc_base.cpp create mode 100644 decoder/source/mem_acc/trc_mem_acc_bufptr.cpp create mode 100644 decoder/source/mem_acc/trc_mem_acc_cb.cpp create mode 100644 decoder/source/mem_acc/trc_mem_acc_file.cpp create mode 100644 decoder/source/mem_acc/trc_mem_acc_mapper.cpp create mode 100644 decoder/source/ocsd_code_follower.cpp create mode 100644 decoder/source/ocsd_dcd_tree.cpp create mode 100644 decoder/source/ocsd_error.cpp create mode 100644 decoder/source/ocsd_error_logger.cpp create mode 100644 decoder/source/ocsd_gen_elem_list.cpp create mode 100644 decoder/source/ocsd_lib_dcd_register.cpp create mode 100644 decoder/source/ocsd_msg_logger.cpp create mode 100644 decoder/source/ocsd_version.cpp create mode 100644 decoder/source/pkt_printers/raw_frame_printer.cpp create mode 100644 decoder/source/pkt_printers/trc_print_fact.cpp create mode 100644 decoder/source/ptm/trc_cmp_cfg_ptm.cpp create mode 100644 decoder/source/ptm/trc_pkt_decode_ptm.cpp create mode 100644 decoder/source/ptm/trc_pkt_elem_ptm.cpp create mode 100644 decoder/source/ptm/trc_pkt_proc_ptm.cpp create mode 100644 decoder/source/stm/trc_pkt_decode_stm.cpp create mode 100644 decoder/source/stm/trc_pkt_elem_stm.cpp create mode 100644 decoder/source/stm/trc_pkt_proc_stm.cpp create mode 100644 decoder/source/trc_component.cpp create mode 100644 decoder/source/trc_core_arch_map.cpp create mode 100644 decoder/source/trc_frame_deformatter.cpp create mode 100644 decoder/source/trc_frame_deformatter_impl.h create mode 100644 decoder/source/trc_gen_elem.cpp create mode 100644 decoder/source/trc_printable_elem.cpp create mode 100644 decoder/source/trc_ret_stack.cpp create mode 100644 decoder/tests/build/linux/c_api_pkt_print_test/makefile create mode 100644 decoder/tests/build/linux/echo_test_dcd_lib/makefile create mode 100644 decoder/tests/build/linux/snapshot_parser_lib/makefile create mode 100644 decoder/tests/build/linux/trc_pkt_lister/makefile create mode 100644 decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj create mode 100644 decoder/tests/build/win-vs2015/c_api_pkt_print_test/c_api_pkt_print_test.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj create mode 100644 decoder/tests/build/win-vs2015/ext_dcd_echo_test/ext_dcd_echo_test.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj create mode 100644 decoder/tests/build/win-vs2015/snapshot_parser_lib/snapshot_parser_lib.vcxproj.filters create mode 100644 decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj create mode 100644 decoder/tests/build/win-vs2015/trc_pkt_lister/trc_pkt_lister.vcxproj.filters create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.c create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test.h create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.c create mode 100644 decoder/tests/ext_dcd_test_eg/c_api_echo_test/ext_dcd_echo_test_fact.h create mode 100755 decoder/tests/perf-test-scripts/perf-setup-env.bash create mode 100755 decoder/tests/perf-test-scripts/perf-test-report.bash create mode 100755 decoder/tests/perf-test-scripts/perf-test-script.bash create mode 100644 decoder/tests/snapshot_parser_lib/include/device_info.h create mode 100644 decoder/tests/snapshot_parser_lib/include/device_parser.h create mode 100644 decoder/tests/snapshot_parser_lib/include/ini_section_names.h create mode 100644 decoder/tests/snapshot_parser_lib/include/snapshot_info.h create mode 100644 decoder/tests/snapshot_parser_lib/include/snapshot_parser.h create mode 100644 decoder/tests/snapshot_parser_lib/include/snapshot_parser_util.h create mode 100644 decoder/tests/snapshot_parser_lib/include/snapshot_reader.h create mode 100644 decoder/tests/snapshot_parser_lib/include/ss_key_value_names.h create mode 100644 decoder/tests/snapshot_parser_lib/include/ss_to_dcdtree.h create mode 100644 decoder/tests/snapshot_parser_lib/include/trace_snapshots.h create mode 100644 decoder/tests/snapshot_parser_lib/source/device_info.cpp create mode 100644 decoder/tests/snapshot_parser_lib/source/device_parser.cpp create mode 100644 decoder/tests/snapshot_parser_lib/source/snapshot_parser.cpp create mode 100644 decoder/tests/snapshot_parser_lib/source/snapshot_parser_util.cpp create mode 100644 decoder/tests/snapshot_parser_lib/source/snapshot_reader.cpp create mode 100644 decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp create mode 100644 decoder/tests/source/c_api_pkt_print_test.c create mode 100644 decoder/tests/source/trc_pkt_lister.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000000..54627e695ab4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,76 @@ +# Object files +*.o +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ + +# Vc++ build files +*tlog +Debug/ +ipch/ +*.opensdf +*.sdf +*.suo +*.user +*.idb +*.pdb +*.exp +*.ilk + +# ignore emacs backup saves +*~ + +# ignore bin test directory +bin/ +*.log +ref_trace_decoder/build/win/rctdl_c_api_lib/Release/* +ref_trace_decoder/build/win/rctdl_c_api_lib/x64/Release/* +ref_trace_decoder/build/win/ref_trace_decode_lib/Release/* +ref_trace_decoder/build/win/ref_trace_decode_lib/x64/Release/* +ref_trace_decoder/tests/build/win/simple_pkt_print_c_api/Release/* +ref_trace_decoder/tests/build/win/simple_pkt_print_c_api/x64/Release/* +*.lastbuildstate +*.manifest +*.cache +ref_trace_decoder/docs/html/* +ref_trace_decoder/tests/build/win/simple_pkt_print_c_api/Debug-dll/* +ref_trace_decoder/tests/build/win/simple_pkt_print_c_api/x64/Debug-dll/* +ref_trace_decoder/tests/build/win/trc_pkt_lister/Debug-dll/* +ref_trace_decoder/tests/build/win/trc_pkt_lister/Release-dll/* +ref_trace_decoder/tests/build/win/trc_pkt_lister/x64/Debug-dll/* +ref_trace_decoder/tests/build/win/trc_pkt_lister/x64/Release-dll/* +*.bak +*.orig +decoder/docs/html/* +*.orig +*.VC.db +*.VC.VC.opendb +*.iobj +*.ipdb diff --git a/HOWTO.md b/HOWTO.md new file mode 100644 index 000000000000..dfaf9de6452e --- /dev/null +++ b/HOWTO.md @@ -0,0 +1,661 @@ +HOWTO - using the library with perf {#howto_perf} +=================================== + +@brief Using command line perf and OpenCSD to collect and decode trace. + +This HOWTO explains how to use the perf cmd line tools and the openCSD +library to collect and extract program flow traces generated by the +CoreSight IP blocks on a Linux system. The examples have been generated using +an aarch64 Juno-r0 platform. All information is considered accurate and tested +using the latest version of the library and the `master` branch on the +[perf-opencsd github repository][1]. + + +On Target Trace Acquisition - Perf Record +----------------------------------------- +All the enhancement to the Perf tools that support the new `cs_etm` pmu have +not been upstreamed yet. To get the required functionality branch +`perf-opencsd-master` needs to be downloaded to the target system where +traces are to be collected. This branch is a vanilla upstream kernel +supplemented with modifications to the CoreSight framework and drivers to be +usable by the Perf core. The remaining out of tree patches are being +upstreamed incrementally. + +From there compiling the perf tools with `make -C tools/perf` will yield a +`perf` executable that will support CoreSight trace collection. Note that if +traces are to be decompressed *off* target, there is no need to download and +compile the openCSD library (on the target). + +Before launching a trace run a sink that will collect trace data needs to be +identified. All CoreSight blocks identified by the framework are registed in +sysFS: + + + linaro@linaro-nano:~$ ls /sys/bus/coresight/devices/ + 20010000.etf 20040000.main_funnel 22040000.etm 22140000.etm + 230c0000.A53_funnel 23240000.etm replicator@20020000 20030000.tpiu + 20070000.etr 220c0000.A57_funnel 23040000.etm 23140000.etm 23340000.etm + + +CoreSight blocks are listed in the device tree for a specific system and +discovered at boot time. Since tracers can be linked to more than one sink, +the sink that will recieve trace data needs to be identified and given as an +option on the perf command line. Once a sink has been identify trace collection +can start. An easy and yet interesting example is the `uname` command: + + linaro@linaro-nano:~/kernel$ ./tools/perf/perf record -e cs_etm/@20070000.etr/ --per-thread uname + +This will generate a `perf.data` file where execution has been traced for both +user and kernel space. To narrow the field to either user or kernel space the +`u` and `k` options can be specified. For example the following will limit +traces to user space: + + + linaro@linaro-nano:~/kernel$ ./tools/perf/perf record -vvv -e cs_etm/@20070000.etr/u --per-thread uname + Problems setting modules path maps, continuing anyway... + ----------------------------------------------------------- + perf_event_attr: + type 8 + size 112 + { sample_period, sample_freq } 1 + sample_type IP|TID|IDENTIFIER + read_format ID + disabled 1 + exclude_kernel 1 + exclude_hv 1 + enable_on_exec 1 + sample_id_all 1 + ------------------------------------------------------------ + sys_perf_event_open: pid 11375 cpu -1 group_fd -1 flags 0x8 + ------------------------------------------------------------ + perf_event_attr: + type 1 + size 112 + config 0x9 + { sample_period, sample_freq } 1 + sample_type IP|TID|IDENTIFIER + read_format ID + disabled 1 + exclude_kernel 1 + exclude_hv 1 + mmap 1 + comm 1 + enable_on_exec 1 + task 1 + sample_id_all 1 + mmap2 1 + comm_exec 1 + ------------------------------------------------------------ + sys_perf_event_open: pid 11375 cpu -1 group_fd -1 flags 0x8 + mmap size 266240B + AUX area mmap length 131072 + perf event ring buffer mmapped per thread + Synthesizing auxtrace information + Linux + auxtrace idx 0 old 0 head 0x11ea0 diff 0x11ea0 + [ perf record: Woken up 1 times to write data ] + overlapping maps: + 7f99daf000-7f99db0000 0 [vdso] + 7f99d84000-7f99db3000 0 /lib/aarch64-linux-gnu/ld-2.21.so + 7f99d84000-7f99daf000 0 /lib/aarch64-linux-gnu/ld-2.21.so + 7f99db0000-7f99db3000 0 /lib/aarch64-linux-gnu/ld-2.21.so + failed to write feature 8 + failed to write feature 9 + failed to write feature 14 + [ perf record: Captured and wrote 0.072 MB perf.data ] + + linaro@linaro-nano:~/kernel$ ls -l ~/.debug/ perf.data + _-rw------- 1 linaro linaro 77888 Mar 2 20:41 perf.data + + /home/linaro/.debug/: + total 16 + drwxr-xr-x 2 linaro linaro 4096 Mar 2 20:40 [kernel.kallsyms] + drwxr-xr-x 2 linaro linaro 4096 Mar 2 20:40 [vdso] + drwxr-xr-x 3 linaro linaro 4096 Mar 2 20:40 bin + drwxr-xr-x 3 linaro linaro 4096 Mar 2 20:40 lib + +Trace data filtering +-------------------- +The amount of traces generated by CoreSight tracers is staggering, event for +the most simple trace scenario. Reducing trace generation to specific areas +of interest is desirable to save trace buffer space and avoid getting lost in +the trace data that isn't relevant. Supplementing the 'k' and 'u' options +described above is the notion of address filters. + +On CoreSight two types of address filter have been implemented - address range +and start/stop filter: + +**Address range filters:** +With address range filters traces are generated if the instruction pointer +falls within the specified range. Any work done by the CPU outside of that +range will not be traced. Address range filters can be specified for both +user and kernel space session: + + perf record -e cs_etm/@20070000.etr/k --filter 'filter 0xffffff8008562d0c/0x48' --per-thread uname + + perf record -e cs_etm/@20070000.etr/u --filter 'filter 0x72c/0x40@/opt/lib/libcstest.so.1.0' --per-thread ./main + +When dealing with kernel space trace addresses are typically taken in the +'System.map' file. In user space addresses are relocatable and can be +extracted from an objdump output: + + $ aarch64-linux-gnu-objdump -d libcstest.so.1.0 + ... + ... + 000000000000072c : <------------ Beginning of traces + 72c: d10083ff sub sp, sp, #0x20 + 730: b9000fe0 str w0, [sp,#12] + 734: b9001fff str wzr, [sp,#28] + 738: 14000007 b 754 + 73c: b9400fe0 ldr w0, [sp,#12] + 740: 11000800 add w0, w0, #0x2 + 744: b9000fe0 str w0, [sp,#12] + 748: b9401fe0 ldr w0, [sp,#28] + 74c: 11000400 add w0, w0, #0x1 + 750: b9001fe0 str w0, [sp,#28] + 754: b9401fe0 ldr w0, [sp,#28] + 758: 7100101f cmp w0, #0x4 + 75c: 54ffff0d b.le 73c + 760: b9400fe0 ldr w0, [sp,#12] + 764: 910083ff add sp, sp, #0x20 + 768: d65f03c0 ret + ... + ... + +Following the address the amount of byte is specified and if tracing in user +space, the full path to the binary (or library) being traced. + +**Start/Stop filters:** +With start/stop filters traces are generated when the instruction pointer is +equal to the start address. Incidentally traces stop being generated when the +insruction pointer is equal to the stop address. Anything that happens between +there to events is traced: + + perf record -e cs_etm/@20070000.etr/k --filter 'start 0xffffff800856bc50,stop 0xffffff800856bcb0' --per-thread uname + + perf record -vvv -e cs_etm/@20070000.etr/u --filter 'start 0x72c@/opt/lib/libcstest.so.1.0, \ + stop 0x40082c@/home/linaro/main' \ + --per-thread ./main + +**Limitation on address filters:** +The only limitation on address filters is the amount of address comparator +found on an implementation and the mutual exclusion between range and +start stop filters. As such the following example would _not_ work: + + perf record -e cs_etm/@20070000.etr/k --filter 'start 0xffffff800856bc50,stop 0xffffff800856bcb0, \ // start/stop + filter 0x72c/0x40@/opt/lib/libcstest.so.1.0' \ // address range + --per-thread uname + +Additional Trace Options +------------------------ +Additional options can be used during trace collection that add information to the captured trace. + +- Timestamps: These packets are added to the trace streams to allow correlation of different sources where tools support this. +- Cycle Counts: These packets are added to get a count of cycles for blocks of executed instructions. Adding cycle counts will considerably increase the amount of generated trace. +The relationship between cycle counts and executed instructions differs according to the trace protocol. +For example, the ETMv4 protocol will emit counts for groups of instructions according to a minimum count threshold. +Presently this threshold is fixed at 256 cycles for `perf record`. + +Command line options in `perf record` to use these features are part of the options for the `cs_etm` event: + + perf record -e cs_etm/timestamp,cycacc,@20070000.etr/ --per-thread uname + +At current version, `perf record` and `perf script` do not use this additional information. + +On Target Trace Collection +-------------------------- +The entire program flow will have been recorded in the `perf.data` file. +Information about libraries and executable is stored under `$HOME/.debug`: + + linaro@linaro-nano:~/kernel$ tree ~/.debug + .debug + ├── [kernel.kallsyms] + │   └── 0542921808098d591a7acba5a1163e8991897669 + │   └── kallsyms + ├── [vdso] + │   └── 551fbbe29579eb63be3178a04c16830b8d449769 + │   └── vdso + ├── bin + │   └── uname + │   └── ed95e81f97c4471fb2ccc21e356b780eb0c92676 + │   └── elf + └── lib + └── aarch64-linux-gnu + ├── ld-2.21.so + │   └── 94912dc5a1dc8c7ef2c4e4649d4b1639b6ebc8b7 + │   └── elf + └── libc-2.21.so + └── 169a143e9c40cfd9d09695333e45fd67743cd2d6 + └── elf + + 13 directories, 5 files + linaro@linaro-nano:~/kernel$ + + +All this information needs to be collected in order to successfully decode +traces off target: + + linaro@linaro-nano:~/kernel$ tar czf uname.trace.tgz perf.data ~/.debug + + +Note that file `vmlinux` should also be added to the bundle if kernel traces +have also been collected. + + +Off Target OpenCSD Compilation +------------------------------ +The openCSD library is not part of the perf tools. It is available on +[github][1] and needs to be compiled before the perf tools. Checkout the +required branch/tag version into a local directory. + + linaro@t430:~/linaro/coresight$ git clone -b v0.8 https://github.com/Linaro/OpenCSD.git my-opencsd + Cloning into 'OpenCSD'... + remote: Counting objects: 2063, done. + remote: Total 2063 (delta 0), reused 0 (delta 0), pack-reused 2063 + Receiving objects: 100% (2063/2063), 2.51 MiB | 1.24 MiB/s, done. + Resolving deltas: 100% (1399/1399), done. + Checking connectivity... done. + linaro@t430:~/linaro/coresight$ ls my-opencsd + decoder LICENSE README.md HOWTO.md TODO + +Once the source code has been acquired compilation of the openCSD library can +take place. For Linux two options are available, LINUX and LINUX64, based on +the host's (which has nothing to do with the target) architecture: + + linaro@t430:~/linaro/coresight/$ cd my-opencsd/decoder/build/linux/ + linaro@t430:~/linaro/coresight/my-opencsd/decoder/build/linux$ ls + makefile rctdl_c_api_lib ref_trace_decode_lib + + linaro@t430:~/linaro/coresight/my-opencsd/decoder/build/linux$ make LINUX64=1 DEBUG=1 + ... + ... + + linaro@t430:~/linaro/coresight/my-opencsd/decoder/build/linux$ ls ../../lib/linux64/dbg/ + libopencsd.a libopencsd_c_api.a libopencsd_c_api.so libopencsd.so + +From there the header file and libraries need to be installed on the system, +something that requires root privileges. The default installation path is +/usr/include/opencsd for the header files and /usr/lib/ for the libraries: + + linaro@t430:~/linaro/coresight/my-opencsd/decoder/build/linux$ sudo make install + linaro@t430:~/linaro/coresight/my-opencsd/decoder/build/linux$ ls -l /usr/include/opencsd + total 60 + drwxr-xr-x 2 root root 4096 Dec 12 10:19 c_api + drwxr-xr-x 2 root root 4096 Dec 12 10:19 etmv3 + drwxr-xr-x 2 root root 4096 Dec 12 10:19 etmv4 + -rw-r--r-- 1 root root 28049 Dec 12 10:19 ocsd_if_types.h + drwxr-xr-x 2 root root 4096 Dec 12 10:19 ptm + drwxr-xr-x 2 root root 4096 Dec 12 10:19 stm + -rw-r--r-- 1 root root 7264 Dec 12 10:19 trc_gen_elem_types.h + -rw-r--r-- 1 root root 3972 Dec 12 10:19 trc_pkt_types.h + + linaro@t430:~/linaro/coresight/my-opencsd/decoder/build/linux$ ls -l /usr/lib/libopencsd* + -rw-r--r-- 1 root root 598720 Dec 12 10:19 /usr/lib/libopencsd_c_api.so + -rw-r--r-- 1 root root 4692200 Dec 12 10:19 /usr/lib/libopencsd.so + +A "clean_install" target is also available so that openCSD installed files can +be removed from a system. Going forward the goal is to have the openCSD library +packaged as a Debian or RPM archive so that it can be installed from a +distribution without having to be compiled. + + +Off Target Perf Tools Compilation +--------------------------------- +As mentionned above the openCSD library is not part of the perf tools' code base +and needs to be installed on a system prior to compilation. Information about +the status of the openCSD library on a system is given at compile time by the +perf tools build script: + + linaro@t430:~/linaro/linux-kernel$ make VF=1 -C tools/perf + Auto-detecting system features: + ... dwarf: [ on ] + ... dwarf_getlocations: [ on ] + ... glibc: [ on ] + ... gtk2: [ on ] + ... libaudit: [ on ] + ... libbfd: [ OFF ] + ... libelf: [ on ] + ... libnuma: [ OFF ] + ... numa_num_possible_cpus: [ OFF ] + ... libperl: [ on ] + ... libpython: [ on ] + ... libslang: [ on ] + ... libcrypto: [ on ] + ... libunwind: [ OFF ] + ... libdw-dwarf-unwind: [ on ] + ... zlib: [ on ] + ... lzma: [ OFF ] + ... get_cpuid: [ on ] + ... bpf: [ on ] + ... libopencsd: [ on ] <------- + + +At the end of the compilation a new perf binary is available in `tools/perf/`: + + linaro@t430:~/linaro/linux-kernel$ ldd tools/perf/perf + linux-vdso.so.1 => (0x00007fff135db000) + libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f15f9176000) + librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f15f8f6e000) + libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f15f8c64000) + libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f15f8a60000) + libopencsd_c_api.so => /usr/lib/libopencsd_c_api.so (0x00007f15f884e000) <------- + libelf.so.1 => /usr/lib/x86_64-linux-gnu/libelf.so.1 (0x00007f15f8635000) + libdw.so.1 => /usr/lib/x86_64-linux-gnu/libdw.so.1 (0x00007f15f83ec000) + libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007f15f81c5000) + libslang.so.2 => /lib/x86_64-linux-gnu/libslang.so.2 (0x00007f15f7e38000) + libperl.so.5.22 => /usr/lib/x86_64-linux-gnu/libperl.so.5.22 (0x00007f15f7a5d000) + libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f15f7693000) + libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007f15f7104000) + libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f15f6eea000) + /lib64/ld-linux-x86-64.so.2 (0x0000559b88038000) + libopencsd.so => /usr/lib/libopencsd.so (0x00007f15f6c62000) <------- + libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f15f68df000) + libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f15f66c9000) + liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f15f64a6000) + libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007f15f6296000) + libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f15f605e000) + libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f15f5e5a000) + + +Additional debug output from the decoder can be compiled in by setting the +`CSTRACE_RAW` environment variable. Setting this to `packed` gets trace frame +output as follows:- + + Frame Data; Index 576; RAW_PACKED; d6 d6 d6 d6 d6 d6 d6 d6 fc fb d6 d6 d6 d6 e0 7f + Frame Data; Index 576; ID_DATA[0x14]; d7 d6 d7 d6 d7 d6 d7 d6 fd fb d7 d6 d7 d6 e0 + +Set to any other value will remove the RAW_PACKED lines. + +Working with a debug version of the openCSD library +--------------------------------------------------- +When compiling the perf tools it is possible to reference another version of +the openCSD library than the one installed on the system. This is useful when +working with multiple development trees or having the desire to keep system +libraries intact. Two environment variable are available to tell the perf tools +build script where to get the header file and libraries, namely CSINCLUDES and +CSLIBS: + + linaro@t430:~/linaro/linux-kernel$ export CSINCLUDES=~/linaro/coresight/my-opencsd/decoder/include/ + linaro@t430:~/linaro/linux-kernel$ export CSLIBS=~/linaro/coresight/my-opencsd/decoder/lib/linux64-rel/ + linaro@t430:~/linaro/linux-kernel$ make VF=1 -C tools/perf + +This will have the effect of compiling and linking against the provided library. +Since the system's openCSD library is in the loader's search patch the +LD_LIBRARY_PATH environment variable needs to be set. + + linaro@t430:~/linaro/linux-kernel$ export LD_LIBRARY_PATH=$CSLIBS + + +Trace Decoding with Perf Report +------------------------------- +Before working with custom traces it is suggested to use a trace bundle that +is known to be working properly. A sample bundle has been made available +here [2]. Trace bundles can be extracted anywhere and have no dependencies on +where the perf tools and openCSD library have been compiled. + + linaro@t430:~/linaro/coresight$ mkdir sept20 + linaro@t430:~/linaro/coresight$ cd sept20 + linaro@t430:~/linaro/coresight/sept20$ wget http://people.linaro.org/~mathieu.poirier/openCSD/uname.v4.user.sept20.tgz + linaro@t430:~/linaro/coresight/sept20$ md5sum uname.v4.user.sept20.tgz + f53f11d687ce72bdbe9de2e67e960ec6 uname.v4.user.sept20.tgz + linaro@t430:~/linaro/coresight/sept20$ tar xf uname.v4.user.sept20.tgz + linaro@t430:~/linaro/coresight/sept20$ ls -la + total 1312 + drwxrwxr-x 3 linaro linaro 4096 Mar 3 10:26 . + drwxrwxr-x 5 linaro linaro 4096 Mar 3 10:13 .. + drwxr-xr-x 7 linaro linaro 4096 Feb 24 12:21 .debug + -rw------- 1 linaro linaro 78016 Feb 24 12:21 perf.data + -rw-rw-r-- 1 linaro linaro 1245881 Feb 24 12:25 uname.v4.user.sept20.tgz + +Perf is expecting files related to the trace capture (`perf.data`) to be located +under `~/.debug` [3]. This example will remove the current `~/.debug` directory +to be sure everything is clean. + + linaro@t430:~/linaro/coresight/sept20$ rm -rf ~/.debug + linaro@t430:~/linaro/coresight/sept20$ cp -dpR .debug ~/ + linaro@t430:~/linaro/coresight/sept20$ ../perf-opencsd-master/tools/perf/perf report --stdio + + # To display the perf.data header info, please use --header/--header-only options. + # + # + # Total Lost Samples: 0 + # + # Samples: 0 of event 'cs_etm//u' + # Event count (approx.): 0 + # + # Children Self Command Shared Object Symbol + # ........ ........ ....... ............. ...... + # + + + # Samples: 0 of event 'dummy:u' + # Event count (approx.): 0 + # + # Children Self Command Shared Object Symbol + # ........ ........ ....... ............. ...... + # + + + # Samples: 115K of event 'instructions:u' + # Event count (approx.): 522009 + # + # Children Self Command Shared Object Symbol + # ........ ........ ....... ................ ...................... + # + 4.13% 4.13% uname libc-2.21.so [.] 0x0000000000078758 + 3.81% 3.81% uname libc-2.21.so [.] 0x0000000000078e50 + 2.06% 2.06% uname libc-2.21.so [.] 0x00000000000fcaf4 + 1.65% 1.65% uname libc-2.21.so [.] 0x00000000000fcae4 + 1.59% 1.59% uname ld-2.21.so [.] 0x000000000000a7f4 + 1.50% 1.50% uname libc-2.21.so [.] 0x0000000000078e40 + 1.43% 1.43% uname libc-2.21.so [.] 0x00000000000fcac4 + 1.31% 1.31% uname libc-2.21.so [.] 0x000000000002f0c0 + 1.26% 1.26% uname ld-2.21.so [.] 0x0000000000016888 + 1.24% 1.24% uname libc-2.21.so [.] 0x0000000000078e7c + 1.24% 1.24% uname libc-2.21.so [.] 0x00000000000fcab8 + ... + +Additional data can be obtained, which contains a dump of the trace packets received using the command + + mjl@ubuntu-vbox:./perf-opencsd-master/coresight/tools/perf/perf report --stdio --dump + +resulting a large amount of data, trace looking like:- + + 0x618 [0x30]: PERF_RECORD_AUXTRACE size: 0x11ef0 offset: 0 ref: 0x4d881c1f13216016 idx: 0 tid: 15244 cpu: -1 + + . ... CoreSight ETM Trace data: size 73456 bytes + + 0: I_ASYNC : Alignment Synchronisation. + 12: I_TRACE_INFO : Trace Info. + 17: I_TRACE_ON : Trace On. + 18: I_ADDR_CTXT_L_64IS0 : Address & Context, Long, 64 bit, IS0.; Addr=0x0000007F89F24D80; Ctxt: AArch64,EL0, NS; + 28: I_ATOM_F6 : Atom format 6.; EEEEEEEEEEEEEEEEEEEEEEEE + 29: I_ATOM_F6 : Atom format 6.; EEEEEEEEEEEEEEEEEEEEEEEE + 30: I_ATOM_F6 : Atom format 6.; EEEEEEEEEEEEEEEEEEEEEEEE + 32: I_ATOM_F6 : Atom format 6.; EEEEN + 33: I_ATOM_F1 : Atom format 1.; E + 34: I_EXCEPT : Exception.; Data Fault; Ret Addr Follows; + 36: I_ADDR_L_64IS0 : Address, Long, 64 bit, IS0.; Addr=0x0000007F89F2832C; + 45: I_ADDR_CTXT_L_64IS0 : Address & Context, Long, 64 bit, IS0.; Addr=0xFFFFFFC000083400; Ctxt: AArch64,EL1, NS; + 56: I_TRACE_ON : Trace On. + 57: I_ADDR_CTXT_L_64IS0 : Address & Context, Long, 64 bit, IS0.; Addr=0x0000007F89F2832C; Ctxt: AArch64,EL0, NS; + 68: I_ATOM_F3 : Atom format 3.; NEE + 69: I_ATOM_F3 : Atom format 3.; NEN + 70: I_ATOM_F3 : Atom format 3.; NNE + 71: I_ATOM_F5 : Atom format 5.; ENENE + 72: I_ATOM_F5 : Atom format 5.; NENEN + 73: I_ATOM_F5 : Atom format 5.; ENENE + 74: I_ATOM_F5 : Atom format 5.; NENEN + 75: I_ATOM_F5 : Atom format 5.; ENENE + 76: I_ATOM_F3 : Atom format 3.; NNE + 77: I_ATOM_F3 : Atom format 3.; NNE + 78: I_ATOM_F3 : Atom format 3.; NNE + 80: I_ATOM_F3 : Atom format 3.; NNE + 81: I_ATOM_F3 : Atom format 3.; ENN + 82: I_EXCEPT : Exception.; Data Fault; Ret Addr Follows; + 84: I_ADDR_L_64IS0 : Address, Long, 64 bit, IS0.; Addr=0x0000007F89F283F0; + 93: I_ADDR_CTXT_L_64IS0 : Address & Context, Long, 64 bit, IS0.; Addr=0xFFFFFFC000083400; Ctxt: AArch64,EL1, NS; + 104: I_TRACE_ON : Trace On. + 105: I_ADDR_CTXT_L_64IS0 : Address & Context, Long, 64 bit, IS0.; Addr=0x0000007F89F283F0; Ctxt: AArch64,EL0, NS; + 116: I_ATOM_F5 : Atom format 5.; NNNNN + 117: I_ATOM_F5 : Atom format 5.; NNNNN + + +Trace Decoding with Perf Script +------------------------------- +Working with perf scripts needs more command line options but yields +interesting results. + + linaro@t430:~/linaro/coresight/sept20$ export EXEC_PATH=/home/linaro/coresight/perf-opencsd-master/tools/perf/ + linaro@t430:~/linaro/coresight/sept20$ export SCRIPT_PATH=$EXEC_PATH/scripts/python/ + linaro@t430:~/linaro/coresight/sept20$ export XTOOL_PATH=/your/aarch64/toolchain/path/bin/ + linaro@t430:~/linaro/coresight/sept20$ ../perf-opencsd-master/tools/perf/perf --exec-path=${EXEC_PATH} script --script=python:${SCRIPT_PATH}/cs-trace-disasm.py -- -d ${XTOOL_PATH}/aarch64-linux-gnu-objdump + + 7f89f24d80: 910003e0 mov x0, sp + 7f89f24d84: 94000d53 bl 7f89f282d0 + 7f89f282d0: d11203ff sub sp, sp, #0x480 + 7f89f282d4: a9ba7bfd stp x29, x30, [sp,#-96]! + 7f89f282d8: 910003fd mov x29, sp + 7f89f282dc: a90363f7 stp x23, x24, [sp,#48] + 7f89f282e0: 9101e3b7 add x23, x29, #0x78 + 7f89f282e4: a90573fb stp x27, x28, [sp,#80] + 7f89f282e8: a90153f3 stp x19, x20, [sp,#16] + 7f89f282ec: aa0003fb mov x27, x0 + 7f89f282f0: 910a82e1 add x1, x23, #0x2a0 + 7f89f282f4: a9025bf5 stp x21, x22, [sp,#32] + 7f89f282f8: a9046bf9 stp x25, x26, [sp,#64] + 7f89f282fc: 910102e0 add x0, x23, #0x40 + 7f89f28300: f800841f str xzr, [x0],#8 + 7f89f28304: eb01001f cmp x0, x1 + 7f89f28308: 54ffffc1 b.ne 7f89f28300 + 7f89f28300: f800841f str xzr, [x0],#8 + 7f89f28304: eb01001f cmp x0, x1 + 7f89f28308: 54ffffc1 b.ne 7f89f28300 + 7f89f28300: f800841f str xzr, [x0],#8 + 7f89f28304: eb01001f cmp x0, x1 + 7f89f28308: 54ffffc1 b.ne 7f89f28300 + +Kernel Trace Decoding +--------------------- + +When dealing with kernel space traces the vmlinux file has to be communicated +explicitely to perf using the "--vmlinux" command line option: + + linaro@t430:~/linaro/coresight/sept20$ ../perf-opencsd-master/tools/perf/perf report --stdio --vmlinux=./vmlinux + ... + ... + linaro@t430:~/linaro/coresight/sept20$ ../perf-opencsd-master/tools/perf/perf script --vmlinux=./vmlinux + +When using scripts things get a little more convoluted. Using the same example +an above but for traces but for kernel traces, the command line becomes: + + linaro@t430:~/linaro/coresight/sept20$ export EXEC_PATH=/home/linaro/coresight/perf-opencsd-master/tools/perf/ + linaro@t430:~/linaro/coresight/sept20$ export SCRIPT_PATH=$EXEC_PATH/scripts/python/ + linaro@t430:~/linaro/coresight/sept20$ export XTOOL_PATH=/your/aarch64/toolchain/path/bin/ + linaro@t430:~/linaro/coresight/sept20$ ../perf-opencsd-master/tools/perf/perf --exec-path=${EXEC_PATH} script \ + --vmlinux=./vmlinux \ + --script=python:${SCRIPT_PATH}/cs-trace-disasm.py -- \ + -d ${XTOOLS_PATH}/aarch64-linux-gnu-objdump \ + -k ./vmlinux + ... + ... + +The option "--vmlinux=./vmlinux" is interpreted by the "perf script" command +the same way it if for "perf report". The option "-k ./vmlinux" is dependant +on the script being executed and has no related to the "--vmlinux", though it +is highly advised to keep them synchronized. + + +Perf Test Environment Scripts +----------------------------- + +The decoder library comes with a number of `bash` scripts that ease the setting up of the +offline build and test environment for perf, and executing tests. + +These scripts can be found in + + decoder/tests/perf-test-scripts + +There are three scripts provided: + +- `perf-setup-env.bash` : this sets up all the environment variables mentioned above. +- `perf-test-report.bash` : this runs `perf report` - using the environment setup by `perf-setup-env.bash` +- `perf-test-script.bash` : this runs `perf script` - using the environment setup by `perf-setup-env.bash` + +Use as follows:- + +1. Prior to building perf, edit `perf-setup-env.bash` to conform to your environment. There are four lines at the top of the file that will require editing. + +2. Execute the script using the command + + source perf-setup-env.bash + + This will set up all the environment variables mentioned in the sections on building and running + perf above, and these are used by the `perf-test...` scripts to run the tests. + +3. Build perf as described above. +4. Follow the instructions for downloading the test capture, or create a capture from your target. +5. Copy the `perf-test...` scripts into the capture data directory -> the one that contains `perf.data`. + +6. The scripts can now be run. No options are required for the default operation, but any command line options will be added to the perf report / perf script command line. + +e.g. + + ./perf-test-report.bash --dump + +will add the --dump option to the end of the command line and run + + ${PERF_EXEC_PATH}/perf report --stdio --dump + + +Generating coverage files for Feedback Directed Optimization: AutoFDO +--------------------------------------------------------------------- + +Below is an example of using ARM ETM for autoFDO. The updates to the perf +support for this is experimental and available on the 'autoFDO' branch of +the [perf-opencsd github repository][1]. + +It also requires autofdo (https://github.com/google/autofdo) and gcc version 5. The bubble +sort example is from the AutoFDO tutorial (https://gcc.gnu.org/wiki/AutoFDO/Tutorial). + + $ gcc-5 -O3 sort.c -o sort_optimized + $ taskset -c 2 ./sort_optimized + Bubble sorting array of 30000 elements + 5910 ms + + $ perf record -e cs_etm/@20070000.etr/u --per-thread taskset -c 2 ./sort + Bubble sorting array of 30000 elements + 12543 ms + [ perf record: Woken up 35 times to write data ] + [ perf record: Captured and wrote 69.640 MB perf.data ] + + $ perf inject -i perf.data -o inj.data --itrace=il64 --strip + $ create_gcov --binary=./sort --profile=inj.data --gcov=sort.gcov -gcov_version=1 + $ gcc-5 -O3 -fauto-profile=sort.gcov sort.c -o sort_autofdo + $ taskset -c 2 ./sort_autofdo + Bubble sorting array of 30000 elements + 5806 ms + + +The Linaro CoreSight Team +------------------------- +- Mike Leach +- Tor Jeremiassen +- Chunyan Zang +- Mathieu Poirier + + +One Last Thing +-------------- +We welcome help on this project. If you would like to add features or help +improve the way things work, we want to hear from you. + +Best regards, +*The Linaro CoreSight Team* + +-------------------------------------- +[1]: https://github.com/Linaro/perf-opencsd "perf-opencsd Github" + +[2]: http://people.linaro.org/~mathieu.poirier/openCSD/uname.v4.user.sept20.tgz + +[3]: Get in touch with us if you know a way to change this. diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000000..8c80288c53f9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,30 @@ + BSD 3Clause License + http://directory.fsf.org/wiki/License:BSD_3Clause + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + (1) Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + (2) Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + (3)The name of the author may not be used to + endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 000000000000..44b7c6807c35 --- /dev/null +++ b/README.md @@ -0,0 +1,132 @@ +OpenCSD - An open source CoreSight(tm) Trace Decode library {#mainpage} +=========================================================== + +This library provides an API suitable for the decode of ARM(r) CoreSight(tm) trace streams. + +The library will decode formatted trace in three stages: + +1. *Frame Deformatting* : Removal CoreSight frame formatting from individual trace streams. +2. *Packet Processing* : Separate individual trace streams into discrete packets. +3. *Packet Decode* : Convert the packets into fully decoded trace describing the program flow on a core. + +The library is implemented in C++ with an optional "C" API. + +Library Versioning +------------------ + +From version 0.4, library versioning will use a semantic versioning format +(per http://semver.org) of the form _Major.minor.patch_ (M.m.p). + +Internal library version calls, documentation and git repository will use this format moving forwards. +Where a patch version is not quoted, or quoted as .x then comments will apply to the entire release. + +Releases will be at M.m.0, with patch version incremented for bugfixes or documentation updates. + +Releases will appear on the master branch in the git repository with an appropriate version tag. + +CoreSight Trace Component Support. +---------------------------------- + +_Current Version 0.8.2_ + +### Current support: + +- ETMv4 (v4.1) instruction trace - packet processing and packet decode. +- PTM (v1.1) instruction trace - packet processing and packet decode. +- ETMv3 (v3.5) instruction trace - packet processing and packet decode. +- ETMv3 (v3.5) data trace - packet processing. +- STM (v1.1) software trace - packet processing and packet decode. + +- External Decoders - support for addition of external / custom decoders into the library. + +### Support to be added: + +- ITM software trace - packet processing and decode. +- ETMv3 data trace - packet decode. +- ETMv4 data trace - packet processing and decode. + +Note: for ITM and STM, packet decode is combining Master+Channel+Marker+Payload packets into a single generic +output packet. + + +Note on the Git Repository. +--------------------------- + +This git repository for OpenCSD contains only source for the OpenCSD decoder library. +From version 0.4, releases appear as versioned tags on the master branch. + +From version 0.7.4, the required updates to CoreSight drivers and perf, that are not +currently upstream in the linux kernel tree, are now contained in a separate +repository to be found at: + +https://github.com/Linaro/perf-opencsd + + +Documentation +------------- + +API Documentation is provided inline in the source header files, which use the __doxygen__ standard mark-up. +Run `doxygen` on the `./doxygen_config.dox` file located in the `./docs` directory.. + + doxygen ./doxygen_config.dox + +This will produce the documentation in the `./docs/html` directory. The doxygen configuration also includes +the `*.md` files as part of the documentation. + + +Building the Library +-------------------- + +See [build_libs.md](@ref build_lib) in the `./docs` directory for build details. + + +How the Library is used in Linux `perf` +--------------------------------------- +The library and additional infrastructure for programming CoreSight components has been integrated +with the standard linux perfomance analysis tool `perf`. + + +See [HOWTO.md](@ref howto_perf) for details. + + +Version and Modification Information +==================================== + +- _Version 0.001_: Library development - tested with `perf` tools integration - BKK16, 8th March 2016 +- _Version 0.002_: Library development - added in PTM decoder support. Restructure header dir, replaced ARM rctdl prefix with opencsd/ocsd. +- _Version 0.003_: Library development - added in ETMv3 instruction decoder support. +- _Version 0.4_ : Library development - updated decode tree and C-API for generic decoder handling. Switch to semantic versioning. +- _Version 0.4.1_: Minor Update & Bugfixes - fix to PTM decoder, ID checking on test program, adds NULL_TS support in STM packet processor. +- _Version 0.4.2_: Minor Update - Update to documentation for perf usage in 4.8 kernel branch. +- _Version 0.5.0_: Library Development - external decoder support. STM full decode. +- _Version 0.5.1_: Minor Update & Bugfixes - Update HOWTO for kernel 4.9. Build fixes for parallel builds +- _Version 0.5.2_: Minor Update & Bugfixes - Update trace info packet string o/p + Cycle count packet bugfixes. +- _Version 0.5.3_: Doc update for using AutoFDO with ETM and additional timestamp and cycle count options. +- _Version 0.5.4_: Updates: X-compile for arm/arm64. Remove deprecated VS2010 builds. Bugfix: GCC inline semantics in debug build. +- _Version 0.6.0_: Packet printers moved from tests into the main library. C++ and C APIs updated to allow clients to use them. + Update to allow perf to insert barrier packets (4xFSYNC) which the decoder can be made to use to reset the decode state. +- _Version 0.6.1_: Bugfix: instruction follower bug on A32 branch to T32. +- _Version 0.7.0_: Add handling for trace return stack feature to ETMv4 and PTM trace. +- _Version 0.7.1_: Bugfix: ETMv3 packet processor. +- _Version 0.7.2_: Bugfix: ETMv4 decoder - fix exact match packet address follower. +- _Version 0.7.3_: Bugfix: PTM decoder - issues with initialisation and ASYNC detection. +- _Version 0.7.4_: Notification of change of repository for perf extensions. gcc 6.x build fixes. +- _Version 0.7.5_: Bugfix: ETMv4 decoder memory leak. Linux build update - header dependencies force rebuild. +- _Version 0.8.0_: Header restructure and build update to enable linux version to install library and C-API headers in standard locations. + Library output naming changed from 'cstraced' to 'opencsd'. +- _Version 0.8.1_: Minor updates: Use install tool to copy headers. Changes to HOWTO for perf usage. +- _Version 0.8.2_: Bugfix: C++ init errors fixed for CLANG build process. + +Licence Information +=================== + +This library is licensed under the [BSD three clause licence.](http://directory.fsf.org/wiki/License:BSD_3Clause) + +A copy of this license is in the `LICENCE` file included with the source code. + +Contact +======= + +Using the github site: https://github.com/Linaro/OpenCSD + +Mailing list: coresight@lists.linaro.org diff --git a/TODO b/TODO new file mode 100644 index 000000000000..1dbb6dd0e715 --- /dev/null +++ b/TODO @@ -0,0 +1,19 @@ +* ETMv4/PTM - decoder updates to handle advanced configuration. +-> Certain (currently unused by perf / current hardware) configuration settings + can alter the format of the trace output. One example is Return Stack - + settable in the control registers for PTM/ETMv4, and removes some inline + addresses. Decoder must use a follower to correctly trace when this is set. + +* ITM packet processing and decode. +-> ITM is primarily an M class SW trace module. I wouldn't expect to see it on + systems with STM, unless a companion M class was present. + +*Data trace - ETMv4 / ETMv3 +-> Differing solutions to data trace in v4/v3 - v4 is separate trace stream + completely, output at trace ID +1. ETMv3 is inline with + the instruction trace. + +Cortex-A cores do not support this architecturally. On R and M profile cores it +is an option. There are scenarios in future that could see linux on R cores, plus +on something like Juno it is possible to switch on trace for the SCP +(M class processor). So at some point data trace may be required. diff --git a/decoder/build/linux/makefile b/decoder/build/linux/makefile new file mode 100644 index 000000000000..330829b77089 --- /dev/null +++ b/decoder/build/linux/makefile @@ -0,0 +1,196 @@ +######################################################## +# Copyright 2015 ARM Limited. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +################################################################################# +# OpenCSD - master makefile for libraries and tests +# +# command line options +# DEBUG=1 create a debug build +# + +# Set project root - relative to build directory +ifeq ($(OCSD_ROOT),) +OCSD_ROOT := $(shell pwd | sed 's,/build/linux.*,,') +export OCSD_ROOT +endif + +# library names +LIB_BASE_NAME=opencsd +export LIB_BASE_NAME +LIB_CAPI_NAME=$(LIB_BASE_NAME)_c_api +export LIB_CAPI_NAME + +# determine base architecture, heavily borrowed from the Linux kernel v4.4's +# tools/perf/config/Makefile.arch +# For example, to compile for arm64 on a X86 PC, you can issue the command: +# "export ARCH=arm64" +ifndef ARCH +ARCH := $(shell uname -m 2>/dev/null || echo not) +endif + +# source root directories +export OCSD_LIB_ROOT=$(OCSD_ROOT)/lib + +export OCSD_INCLUDE=$(OCSD_ROOT)/include +export OCSD_SOURCE=$(OCSD_ROOT)/source + +export OCSD_TESTS=$(OCSD_ROOT)/tests + +export LIB_UAPI_INC_DIR=opencsd + +# tools +export MASTER_CC=$(CROSS_COMPILE)gcc +export MASTER_CPP=$(CROSS_COMPILE)g++ +export MASTER_LINKER=$(CROSS_COMPILE)g++ +export MASTER_LIB=$(CROSS_COMPILE)ar +export INSTALL=install + +# installation directory +INSTALL_LIB_DIR=/usr/lib/ +export INSTALL_INCLUDE_DIR=/usr/include/ + +# compile flags +MASTER_CC_FLAGS := -c -Wall -DLINUX +MASTER_CPP_FLAGS := -c -Wall -DLINUX -std=c++11 +MASTER_LINKER_FLAGS := -Wl,-z,defs +MASTER_LIB_FLAGS := rcs + +# debug variant +ifdef DEBUG +MASTER_CC_FLAGS += -g -O0 -DDEBUG +MASTER_CPP_FLAGS += -g -O0 -DDEBUG +BUILD_VARIANT=dbg +else +MASTER_CC_FLAGS += -g -O2 -DNDEBUG +MASTER_CPP_FLAGS += -g -O2 -DNDEBUG +BUILD_VARIANT=rel +endif + + +# platform bit size variant +ifeq ($(ARCH),x86) + MFLAG:="-m32" + BIT_VARIANT=32 +else ifeq ($(ARCH),x86_64) + MFLAG:="-m64" + BIT_VARIANT=64 +else ifeq ($(ARCH),arm) + BIT_VARIANT=-arm +else ifeq ($(ARCH),arm64) + BIT_VARIANT=-arm64 +else ifeq ($(ARCH),aarch64) + BIT_VARIANT=-arm64 +else ifeq ($(ARCH),aarch32) + BIT_VARIANT=-arm +endif + +MASTER_CC_FLAGS += $(MFLAG) +MASTER_CPP_FLAGS += $(MFLAG) +MASTER_LINKER_FLAGS += $(MFLAG) + +# export build flags +export MASTER_CC_FLAGS +export MASTER_CPP_FLAGS +export MASTER_LINKER_FLAGS +export MASTER_LIB_FLAGS + +# target directories +export PLAT_DIR=linux$(BIT_VARIANT)/$(BUILD_VARIANT) +export LIB_TARGET_DIR=$(OCSD_LIB_ROOT)/$(PLAT_DIR) +export LIB_TEST_TARGET_DIR=$(OCSD_TESTS)/lib/$(PLAT_DIR) +export BIN_TEST_TARGET_DIR=$(OCSD_TESTS)/bin/$(PLAT_DIR) + +########################################################### +# build targets + +all: libs tests + +libs: $(LIB_BASE_NAME)_lib $(LIB_CAPI_NAME)_lib + +install: libs + $(INSTALL) --mode=644 $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so $(INSTALL_LIB_DIR)/ + $(INSTALL) --mode=644 $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so $(INSTALL_LIB_DIR)/ + cd $(OCSD_ROOT)/build/linux/rctdl_c_api_lib && make install_inc + +################################ +# build OpenCSD trace decode library +# +$(LIB_BASE_NAME)_lib: $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a $(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so + +$(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).so: $(LIB_BASE_NAME)_all +$(LIB_TARGET_DIR)/lib$(LIB_BASE_NAME).a: $(LIB_BASE_NAME)_all + +# single command builds both .a and .so targets in sub-makefile +$(LIB_BASE_NAME)_all: + mkdir -p $(LIB_TARGET_DIR) + cd $(OCSD_ROOT)/build/linux/ref_trace_decode_lib && make + +################################ +# build OpenCSD trace decode C API library +# +$(LIB_CAPI_NAME)_lib: $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).a $(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so + +$(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).so: $(LIB_CAPI_NAME)_all +$(LIB_TARGET_DIR)/lib$(LIB_CAPI_NAME).a: $(LIB_CAPI_NAME)_all + +# single command builds both .a and .so targets in sub-makefile +$(LIB_CAPI_NAME)_all: $(LIB_BASE_NAME)_lib + mkdir -p $(LIB_TARGET_DIR) + cd $(OCSD_ROOT)/build/linux/rctdl_c_api_lib && make + +################################# +# build tests + +.PHONY: tests +tests: libs + cd $(OCSD_ROOT)/tests/build/linux/echo_test_dcd_lib && make + cd $(OCSD_ROOT)/tests/build/linux/snapshot_parser_lib && make + cd $(OCSD_ROOT)/tests/build/linux/trc_pkt_lister && make + cd $(OCSD_ROOT)/tests/build/linux/c_api_pkt_print_test && make + +############################################################# +# clean targets +# +clean: clean_libs clean_tests + +.PHONY: clean_libs clean_tests + +clean_libs: + cd $(OCSD_ROOT)/build/linux/ref_trace_decode_lib && make clean + cd $(OCSD_ROOT)/build/linux/rctdl_c_api_lib && make clean + +clean_tests: + cd $(OCSD_ROOT)/tests/build/linux/echo_test_dcd_lib && make clean + cd $(OCSD_ROOT)/tests/build/linux/snapshot_parser_lib && make clean + cd $(OCSD_ROOT)/tests/build/linux/trc_pkt_lister && make clean + cd $(OCSD_ROOT)/tests/build/linux/c_api_pkt_print_test && make clean + +clean_install: + rm -f $(INSTALL_LIB_DIR)/lib$(LIB_BASE_NAME).so + rm -f $(INSTALL_LIB_DIR)/lib$(LIB_CAPI_NAME).so + rm -rf $(INSTALL_INCLUDE_DIR)/$(LIB_UAPI_INC_DIR) diff --git a/decoder/build/linux/rctdl_c_api_lib/makefile b/decoder/build/linux/rctdl_c_api_lib/makefile new file mode 100644 index 000000000000..fb54d3ad8c24 --- /dev/null +++ b/decoder/build/linux/rctdl_c_api_lib/makefile @@ -0,0 +1,105 @@ +######################################################## +# Copyright 2015 ARM Limited. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +################################################################################# +# OpenCSD - makefile for C API wrapper library +# + +CPP := $(MASTER_CPP) +LINKER := $(MASTER_LINKER) +LIB := $(MASTER_LIB) + +CPP_FLAGS := $(MASTER_CPP_FLAGS) -fpic -Wno-switch +LIB_FLAGS := $(MASTER_LIB_FLAGS) +LINKER_FLAGS := $(MASTER_LINKER_FLAGS) -shared + +LIB_NAME = lib$(LIB_CAPI_NAME) +SO_LIB_DEPS= -L$(LIB_TARGET_DIR) -l$(LIB_BASE_NAME) + +BUILD_DIR=./$(PLAT_DIR) + +VPATH= $(OCSD_SOURCE)/c_api + +CPP_INCLUDES= \ + -I$(OCSD_INCLUDE) \ + -I$(OCSD_SOURCE)/c_api + +OBJECTS=$(BUILD_DIR)/ocsd_c_api.o \ + $(BUILD_DIR)/ocsd_c_api_custom_obj.o + +INST_INC_SRC=$(OCSD_INCLUDE)/$(LIB_UAPI_INC_DIR) +INST_INC_DST=$(INSTALL_INCLUDE_DIR)/$(LIB_UAPI_INC_DIR) + +all: build_dir $(OBJECTS) + mkdir -p $(LIB_TARGET_DIR) + $(LIB) $(LIB_FLAGS) $(LIB_TARGET_DIR)/$(LIB_NAME).a $(OBJECTS) + $(LINKER) $(LINKER_FLAGS) -o $(LIB_TARGET_DIR)/$(LIB_NAME).so -Wl,-soname,$(LIB_NAME).so $(OBJECTS) $(SO_LIB_DEPS) + +build_dir: + mkdir -p $(BUILD_DIR) + +##### build rules + +## object dependencies +DEPS := $(OBJECTS:%.o=%.d) + +-include $(DEPS) + +## object compile +$(BUILD_DIR)/%.o : %.cpp + $(CPP) $(CPP_FLAGS) $(CPP_INCLUDES) -MMD $< -o $@ + + +#### clean +.PHONY: clean +clean: + rm -f $(OBJECTS) + rm -f $(DEPS) + rm -f $(LIB_TARGET_DIR)/$(LIB_NAME).a + rm -f $(LIB_TARGET_DIR)/$(LIB_NAME).so + +#### install the necessary include files for the c-api library on linux +install_inc: + $(INSTALL) -d --mode=0755 $(INST_INC_DST)/ + $(INSTALL) --mode=0644 $(INST_INC_SRC)/trc_gen_elem_types.h $(INST_INC_DST)/ + $(INSTALL) --mode=0644 $(INST_INC_SRC)/ocsd_if_types.h $(INST_INC_DST)/ + $(INSTALL) --mode=0644 $(INST_INC_SRC)/trc_pkt_types.h $(INST_INC_DST)/ + $(INSTALL) -d --mode=0755 $(INST_INC_DST)/ptm + $(INSTALL) --mode=0644 $(INST_INC_SRC)/ptm/trc_pkt_types_ptm.h $(INST_INC_DST)/ptm/ + $(INSTALL) -d --mode=0755 $(INST_INC_DST)/stm + $(INSTALL) --mode=0644 $(INST_INC_SRC)/stm/trc_pkt_types_stm.h $(INST_INC_DST)/stm/ + $(INSTALL) -d --mode=0755 $(INST_INC_DST)/etmv3 + $(INSTALL) --mode=0644 $(INST_INC_SRC)/etmv3/trc_pkt_types_etmv3.h $(INST_INC_DST)/etmv3/ + $(INSTALL) -d --mode=0755 $(INST_INC_DST)/etmv4 + $(INSTALL) --mode=0644 $(INST_INC_SRC)/etmv4/trc_pkt_types_etmv4.h $(INST_INC_DST)/etmv4/ + $(INSTALL) -d --mode=0755 $(INST_INC_DST)/c_api + $(INSTALL) --mode=0644 $(INST_INC_SRC)/c_api/ocsd_c_api_types.h $(INST_INC_DST)/c_api/ + $(INSTALL) --mode=0644 $(INST_INC_SRC)/c_api/opencsd_c_api.h $(INST_INC_DST)/c_api/ + $(INSTALL) --mode=0644 $(INST_INC_SRC)/c_api/ocsd_c_api_custom.h $(INST_INC_DST)/c_api/ + + diff --git a/decoder/build/linux/ref_trace_decode_lib/makefile b/decoder/build/linux/ref_trace_decode_lib/makefile new file mode 100644 index 000000000000..a356066d009f --- /dev/null +++ b/decoder/build/linux/ref_trace_decode_lib/makefile @@ -0,0 +1,143 @@ +######################################################## +# Copyright 2015 ARM Limited. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors +# may be used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +################################################################################# +# OpenCSD - makefile for main trace decode library +# + +CPP := $(MASTER_CPP) +LINKER := $(MASTER_LINKER) +LIB := $(MASTER_LIB) + +CPP_FLAGS := $(MASTER_CPP_FLAGS) -fpic -Wno-switch +LIB_FLAGS := $(MASTER_LIB_FLAGS) +LINKER_FLAGS := $(MASTER_LINKER_FLAGS) -shared + +LIB_NAME= lib$(LIB_BASE_NAME) + +BUILD_DIR=./$(PLAT_DIR) + +VPATH= $(OCSD_SOURCE) \ + $(OCSD_SOURCE)/etmv3 \ + $(OCSD_SOURCE)/etmv4 \ + $(OCSD_SOURCE)/ptm \ + $(OCSD_SOURCE)/i_dec \ + $(OCSD_SOURCE)/mem_acc \ + $(OCSD_SOURCE)/stm \ + $(OCSD_SOURCE)/pkt_printers + + +CPP_INCLUDES= \ + -I$(OCSD_INCLUDE) \ + -I$(OCSD_SOURCE) + +ETMV3OBJ= $(BUILD_DIR)/trc_cmp_cfg_etmv3.o \ + $(BUILD_DIR)/trc_pkt_decode_etmv3.o \ + $(BUILD_DIR)/trc_pkt_elem_etmv3.o \ + $(BUILD_DIR)/trc_pkt_proc_etmv3.o \ + $(BUILD_DIR)/trc_pkt_proc_etmv3_impl.o + +ETMV4OBJ= $(BUILD_DIR)/trc_cmp_cfg_etmv4.o \ + $(BUILD_DIR)/trc_pkt_proc_etmv4.o \ + $(BUILD_DIR)/trc_pkt_proc_etmv4i_impl.o \ + $(BUILD_DIR)/trc_pkt_decode_etmv4i.o \ + $(BUILD_DIR)/trc_pkt_elem_etmv4i.o \ + $(BUILD_DIR)/trc_pkt_elem_etmv4d.o \ + $(BUILD_DIR)/trc_etmv4_stack_elem.o + +PTMOBJ= $(BUILD_DIR)/trc_cmp_cfg_ptm.o \ + $(BUILD_DIR)/trc_pkt_elem_ptm.o \ + $(BUILD_DIR)/trc_pkt_proc_ptm.o \ + $(BUILD_DIR)/trc_pkt_decode_ptm.o + +IDECOBJ= $(BUILD_DIR)/trc_i_decode.o \ + $(BUILD_DIR)/trc_idec_arminst.o + +MEMACCOBJ= $(BUILD_DIR)/trc_mem_acc_mapper.o \ + $(BUILD_DIR)/trc_mem_acc_bufptr.o \ + $(BUILD_DIR)/trc_mem_acc_file.o \ + $(BUILD_DIR)/trc_mem_acc_base.o \ + $(BUILD_DIR)/trc_mem_acc_cb.o + +STMOBJ= $(BUILD_DIR)/trc_pkt_elem_stm.o \ + $(BUILD_DIR)/trc_pkt_proc_stm.o \ + $(BUILD_DIR)/trc_pkt_decode_stm.o + +PKTPRNTOBJ= $(BUILD_DIR)/raw_frame_printer.o \ + $(BUILD_DIR)/trc_print_fact.o + + +OBJECTS=$(BUILD_DIR)/ocsd_code_follower.o \ + $(BUILD_DIR)/ocsd_dcd_tree.o \ + $(BUILD_DIR)/ocsd_error.o \ + $(BUILD_DIR)/ocsd_error_logger.o \ + $(BUILD_DIR)/ocsd_gen_elem_list.o \ + $(BUILD_DIR)/ocsd_lib_dcd_register.o \ + $(BUILD_DIR)/ocsd_msg_logger.o \ + $(BUILD_DIR)/ocsd_version.o \ + $(BUILD_DIR)/trc_component.o \ + $(BUILD_DIR)/trc_core_arch_map.o \ + $(BUILD_DIR)/trc_frame_deformatter.o \ + $(BUILD_DIR)/trc_gen_elem.o \ + $(BUILD_DIR)/trc_printable_elem.o \ + $(BUILD_DIR)/trc_ret_stack.o \ + $(ETMV3OBJ) \ + $(ETMV4OBJ) \ + $(IDECOBJ) \ + $(MEMACCOBJ) \ + $(STMOBJ) \ + $(PTMOBJ) \ + $(PKTPRNTOBJ) + +all: build_dir $(OBJECTS) + mkdir -p $(LIB_TARGET_DIR) + $(LIB) $(LIB_FLAGS) $(LIB_TARGET_DIR)/$(LIB_NAME).a $(OBJECTS) + $(LINKER) $(LINKER_FLAGS) -o $(LIB_TARGET_DIR)/$(LIB_NAME).so -Wl,-soname,$(LIB_NAME).so $(OBJECTS) + +build_dir: + mkdir -p $(BUILD_DIR) + +##### build rules + +## object dependencies +DEPS := $(OBJECTS:%.o=%.d) + +-include $(DEPS) + +## object compile +$(BUILD_DIR)/%.o : %.cpp + $(CPP) $(CPP_FLAGS) $(CPP_INCLUDES) -MMD $< -o $@ + + +#### clean +.PHONY: clean +clean: + rm -f $(OBJECTS) + rm -f $(DEPS) + rm -f $(LIB_TARGET_DIR)/$(LIB_NAME).a + rm -f $(LIB_TARGET_DIR)/$(LIB_NAME).so diff --git a/decoder/build/win-vs2015/opencsd.props b/decoder/build/win-vs2015/opencsd.props new file mode 100644 index 000000000000..64b1268db436 --- /dev/null +++ b/decoder/build/win-vs2015/opencsd.props @@ -0,0 +1,20 @@ + + + + + opencsd + opencsd_c_api + + + + + + $(LIB_BASE_NAME) + true + + + $(LIB_CAPI_NAME) + true + + + diff --git a/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj b/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj new file mode 100644 index 000000000000..c82ad9bc5e3e --- /dev/null +++ b/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj @@ -0,0 +1,327 @@ + + + + + Debug-dll + Win32 + + + Debug-dll + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release-dll + Win32 + + + Release-dll + x64 + + + Release + Win32 + + + Release + x64 + + + + {533F929A-A73B-46B6-9D5F-FFCD62F734E3} + Win32Proj + rctdl_c_api_lib + ocsd_c_api_lib + + + + StaticLibrary + true + MultiByte + v140 + + + DynamicLibrary + true + MultiByte + v140 + + + StaticLibrary + true + MultiByte + v140 + + + DynamicLibrary + true + MultiByte + v140 + + + StaticLibrary + false + true + MultiByte + v140 + + + DynamicLibrary + false + true + MultiByte + v140 + + + StaticLibrary + false + true + MultiByte + v140 + + + DynamicLibrary + false + true + MultiByte + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ..\..\..\lib\win$(PlatformArchitecture)\rel\ + lib$(LIB_CAPI_NAME) + + + ..\..\..\lib\win$(PlatformArchitecture)\rel\ + $(Platform)\$(Configuration)\ + $(LIB_CAPI_NAME) + + + ..\..\..\lib\win$(PlatformArchitecture)\dbg\ + lib$(LIB_CAPI_NAME) + + + ..\..\..\lib\win$(PlatformArchitecture)\dbg\ + $(LIB_CAPI_NAME) + $(Platform)\$(Configuration)\ + + + ..\..\..\lib\win$(PlatformArchitecture)\dbg\ + lib$(LIB_CAPI_NAME) + $(Platform)\$(Configuration)\ + + + ..\..\..\lib\win$(PlatformArchitecture)\dbg\ + $(LIB_CAPI_NAME) + $(Platform)\$(Configuration)\ + + + ..\..\..\lib\win$(PlatformArchitecture)\rel\ + lib$(LIB_CAPI_NAME) + $(Platform)\$(Configuration)\ + + + ..\..\..\lib\win$(PlatformArchitecture)\rel\ + $(Platform)\$(Configuration)\ + $(LIB_CAPI_NAME) + + + + + + Level3 + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;_OCSD_C_API_DLL_EXPORT;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;_OCSD_C_API_DLL_EXPORT;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_USRDLL;_OCSD_C_API_DLL_EXPORT;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_USRDLL;_CRT_SECURE_NO_WARNINGS;_OCSD_C_API_DLL_EXPORT;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + true + true + + + + + + + + + + + + + + {7f500891-cc76-405f-933f-f682bc39f923} + + + + + + + + + + \ No newline at end of file diff --git a/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters b/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters new file mode 100644 index 000000000000..a9b05adfdf4c --- /dev/null +++ b/decoder/build/win-vs2015/rctdl_c_api_lib/rctdl_c_api_lib.vcxproj.filters @@ -0,0 +1,48 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Source Files + + + Header Files + + + Source Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.sln b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.sln new file mode 100644 index 000000000000..94b561a39848 --- /dev/null +++ b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.sln @@ -0,0 +1,135 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opencsd_lib", "ref_trace_decode_lib.vcxproj", "{7F500891-CC76-405F-933F-F682BC39F923}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ocsd_c_api_lib", "..\rctdl_c_api_lib\rctdl_c_api_lib.vcxproj", "{533F929A-A73B-46B6-9D5F-FFCD62F734E3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "snapshot_parser_lib", "..\..\..\tests\build\win-vs2015\snapshot_parser_lib\snapshot_parser_lib.vcxproj", "{DE1F395D-4F53-42FB-8AEF-993A4BF7E411}" + ProjectSection(ProjectDependencies) = postProject + {7F500891-CC76-405F-933F-F682BC39F923} = {7F500891-CC76-405F-933F-F682BC39F923} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "trc_pkt_lister", "..\..\..\tests\build\win-vs2015\trc_pkt_lister\trc_pkt_lister.vcxproj", "{18ABC652-AB11-4993-9491-1A7FB7117339}" + ProjectSection(ProjectDependencies) = postProject + {7F500891-CC76-405F-933F-F682BC39F923} = {7F500891-CC76-405F-933F-F682BC39F923} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "c_api_pkt_print_test", "..\..\..\tests\build\win-vs2015\c_api_pkt_print_test\c_api_pkt_print_test.vcxproj", "{3AC169DA-E156-4D16-95DF-73D7302A5606}" + ProjectSection(ProjectDependencies) = postProject + {46219A32-8178-41C1-B3B1-B5A6E547515F} = {46219A32-8178-41C1-B3B1-B5A6E547515F} + {533F929A-A73B-46B6-9D5F-FFCD62F734E3} = {533F929A-A73B-46B6-9D5F-FFCD62F734E3} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext_dcd_echo_test", "..\..\..\tests\build\win-vs2015\ext_dcd_echo_test\ext_dcd_echo_test.vcxproj", "{46219A32-8178-41C1-B3B1-B5A6E547515F}" + ProjectSection(ProjectDependencies) = postProject + {533F929A-A73B-46B6-9D5F-FFCD62F734E3} = {533F929A-A73B-46B6-9D5F-FFCD62F734E3} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Debug-dll|Win32 = Debug-dll|Win32 + Debug-dll|x64 = Debug-dll|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + Release-dll|Win32 = Release-dll|Win32 + Release-dll|x64 = Release-dll|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7F500891-CC76-405F-933F-F682BC39F923}.Debug|Win32.ActiveCfg = Debug|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug|Win32.Build.0 = Debug|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug|x64.ActiveCfg = Debug|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug|x64.Build.0 = Debug|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug-dll|Win32.Build.0 = Debug-dll|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug-dll|x64.ActiveCfg = Debug-dll|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Debug-dll|x64.Build.0 = Debug-dll|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Release|Win32.ActiveCfg = Release|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Release|Win32.Build.0 = Release|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Release|x64.ActiveCfg = Release|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Release|x64.Build.0 = Release|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Release-dll|Win32.ActiveCfg = Release-dll|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Release-dll|Win32.Build.0 = Release-dll|Win32 + {7F500891-CC76-405F-933F-F682BC39F923}.Release-dll|x64.ActiveCfg = Release-dll|x64 + {7F500891-CC76-405F-933F-F682BC39F923}.Release-dll|x64.Build.0 = Release-dll|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug|Win32.ActiveCfg = Debug|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug|Win32.Build.0 = Debug|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug|x64.ActiveCfg = Debug|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug|x64.Build.0 = Debug|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug-dll|Win32.Build.0 = Debug-dll|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug-dll|x64.ActiveCfg = Debug-dll|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Debug-dll|x64.Build.0 = Debug-dll|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release|Win32.ActiveCfg = Release|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release|Win32.Build.0 = Release|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release|x64.ActiveCfg = Release|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release|x64.Build.0 = Release|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release-dll|Win32.ActiveCfg = Release-dll|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release-dll|Win32.Build.0 = Release-dll|Win32 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release-dll|x64.ActiveCfg = Release-dll|x64 + {533F929A-A73B-46B6-9D5F-FFCD62F734E3}.Release-dll|x64.Build.0 = Release-dll|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug|Win32.ActiveCfg = Debug|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug|Win32.Build.0 = Debug|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug|x64.ActiveCfg = Debug|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug|x64.Build.0 = Debug|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Debug-dll|x64.ActiveCfg = Debug-dll|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release|Win32.ActiveCfg = Release|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release|Win32.Build.0 = Release|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release|x64.ActiveCfg = Release|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release|x64.Build.0 = Release|x64 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release-dll|Win32.ActiveCfg = Release-dll|Win32 + {DE1F395D-4F53-42FB-8AEF-993A4BF7E411}.Release-dll|x64.ActiveCfg = Release-dll|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug|Win32.ActiveCfg = Debug|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug|Win32.Build.0 = Debug|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug|x64.ActiveCfg = Debug|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug|x64.Build.0 = Debug|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Debug-dll|x64.ActiveCfg = Debug-dll|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release|Win32.ActiveCfg = Release|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release|Win32.Build.0 = Release|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release|x64.ActiveCfg = Release|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release|x64.Build.0 = Release|x64 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release-dll|Win32.ActiveCfg = Release-dll|Win32 + {18ABC652-AB11-4993-9491-1A7FB7117339}.Release-dll|x64.ActiveCfg = Release-dll|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug|Win32.ActiveCfg = Debug|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug|Win32.Build.0 = Debug|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug|x64.ActiveCfg = Debug|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug|x64.Build.0 = Debug|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug-dll|Win32.ActiveCfg = Debug-dll|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug-dll|Win32.Build.0 = Debug-dll|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug-dll|x64.ActiveCfg = Debug-dll|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Debug-dll|x64.Build.0 = Debug-dll|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release|Win32.ActiveCfg = Release|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release|Win32.Build.0 = Release|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release|x64.ActiveCfg = Release|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release|x64.Build.0 = Release|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release-dll|Win32.ActiveCfg = Release-dll|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release-dll|Win32.Build.0 = Release-dll|Win32 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release-dll|x64.ActiveCfg = Release-dll|x64 + {3AC169DA-E156-4D16-95DF-73D7302A5606}.Release-dll|x64.Build.0 = Release-dll|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug|Win32.ActiveCfg = Debug|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug|Win32.Build.0 = Debug|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug|x64.ActiveCfg = Debug|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug|x64.Build.0 = Debug|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug-dll|Win32.ActiveCfg = Debug|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug-dll|Win32.Build.0 = Debug|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug-dll|x64.ActiveCfg = Debug|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Debug-dll|x64.Build.0 = Debug|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release|Win32.ActiveCfg = Release|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release|Win32.Build.0 = Release|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release|x64.ActiveCfg = Release|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release|x64.Build.0 = Release|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release-dll|Win32.ActiveCfg = Release|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release-dll|Win32.Build.0 = Release|Win32 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release-dll|x64.ActiveCfg = Release|x64 + {46219A32-8178-41C1-B3B1-B5A6E547515F}.Release-dll|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj new file mode 100644 index 000000000000..123fc0061100 --- /dev/null +++ b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj @@ -0,0 +1,453 @@ + + + + + Debug-dll + Win32 + + + Debug-dll + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release-dll + Win32 + + + Release-dll + x64 + + + Release + Win32 + + + Release + x64 + + + + {7F500891-CC76-405F-933F-F682BC39F923} + Win32Proj + ref_trace_decode_lib + opencsd_lib + 8.1 + + + + StaticLibrary + true + MultiByte + v140 + + + StaticLibrary + true + MultiByte + v140 + + + StaticLibrary + true + MultiByte + v140 + + + StaticLibrary + true + MultiByte + v140 + + + StaticLibrary + false + true + MultiByte + v140 + + + StaticLibrary + false + true + MultiByte + v140 + + + StaticLibrary + false + true + MultiByte + v140 + + + StaticLibrary + false + true + MultiByte + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ..\..\..\lib\win$(PlatformArchitecture)\dbg\ + lib$(LIB_BASE_NAME) + + + ..\..\..\lib\win$(PlatformArchitecture)\dbg\ + lib$(LIB_BASE_NAME) + + + ..\..\..\lib\win$(PlatformArchitecture)\rel\ + lib$(LIB_BASE_NAME) + + + ..\..\..\lib\win$(PlatformArchitecture)\rel\ + lib$(LIB_BASE_NAME) + + + ..\..\..\lib\win$(PlatformArchitecture)\rel\ + lib$(LIB_BASE_NAME) + $(Platform)\$(Configuration)\ + + + ..\..\..\lib\win$(PlatformArchitecture)\rel\ + lib$(LIB_BASE_NAME) + $(Platform)\$(Configuration)\ + + + ..\..\..\lib\win$(PlatformArchitecture)\dbg\ + $(Platform)\$(Configuration)\ + lib$(LIB_BASE_NAME) + + + ..\..\..\lib\win$(PlatformArchitecture)\dbg\ + lib$(LIB_BASE_NAME) + $(Platform)\$(Configuration)\ + .lib + + + + + + Level3 + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions); + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions); + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ..\..\..\include;%(AdditionalIncludeDirectories) + $(OutDir)$(TargetName)_vc$(PlatformToolsetVersion).pdb + + + Windows + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters new file mode 100644 index 000000000000..cceb92bd83ff --- /dev/null +++ b/decoder/build/win-vs2015/ref_trace_decode_lib/ref_trace_decode_lib.vcxproj.filters @@ -0,0 +1,488 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {80012968-9f0d-4623-901a-c2fa5f1c0890} + + + {98cd2a71-b44f-4884-bb8a-56c851cc8321} + + + {dd155712-7990-4cdd-b9b0-299d97f625e4} + + + {9ec501e2-9ba4-4bad-a3d3-cdb604cc38b4} + + + {23a35c62-e38f-43f6-a03b-6f1287478a69} + + + {f550018a-8974-4f8b-975a-bd8b86ae418f} + + + {2c796b59-81f6-49c9-88cf-e90ed2e741a3} + + + {5ea7e02d-0667-4d2d-8c3d-039daf112edc} + + + {2aa8a97b-13da-4bd1-bdb5-02f3e1cf030b} + + + {ff9157b6-ef07-41e4-8ff4-322c50ea6665} + + + {0c2ba881-cc82-4567-ab59-d2363b4c3d1b} + + + {73a56760-b7ff-4d56-88f0-13249201081c} + + + {cb3682ee-abbd-44c3-a175-4522d76e2d68} + + + {eb9beab1-99c6-4eaa-88c0-893b05b2e673} + + + {58d2398e-efdd-45d9-b7be-fc6096f3bec2} + + + {0e6e1f5d-465e-4f91-88a3-479952bbd316} + + + {baf047d0-0ff7-4502-b42b-4f1fda94d54b} + + + + + docs-files + + + docs-files + + + docs-files + + + docs-files + + + docs-files + + + docs-files + + + docs-files + + + + + Source Files + + + interfaces + + + interfaces + + + interfaces + + + interfaces + + + interfaces + + + interfaces + + + interfaces + + + interfaces + + + interfaces + + + interfaces + + + Header Files\etmv3 + + + Header Files\etmv3 + + + Header Files\etmv3 + + + Header Files\etmv3 + + + Header Files\etmv3 + + + Header Files\etmv4 + + + Header Files\etmv4 + + + Header Files\etmv4 + + + Header Files\etmv4 + + + Header Files\etmv4 + + + Header Files\etmv4 + + + Header Files\ptm + + + Header Files\ptm + + + Header Files\ptm + + + Header Files\ptm + + + Header Files\ptm + + + Header Files\mem_acc + + + Header Files\mem_acc + + + Header Files\mem_acc + + + Header Files\mem_acc + + + Header Files\i_dec + + + Header Files\i_dec + + + Header Files\etmv4 + + + Header Files\mem_acc + + + Header Files\stm + + + Header Files\stm + + + Header Files\stm + + + Header Files\stm + + + Header Files\stm + + + Header Files\etmv3 + + + Header Files\mem_acc + + + Header Files\mem_acc + + + Header Files\ptm + + + Source Files\etmv4 + + + Source Files\etmv4 + + + Source Files\etmv3 + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + Header Files\common + + + interfaces + + + Header Files\etmv4 + + + Source Files\etmv3 + + + Header Files\ptm + + + Header Files\stm + + + Header Files\common + + + Header Files\stm + + + Header Files + + + Header Files\pkt_printers + + + Header Files\pkt_printers + + + Header Files\pkt_printers + + + Header Files\pkt_printers + + + Header Files\pkt_printers + + + Header Files\pkt_printers + + + Header Files\common + + + Header Files\etmv4 + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\ptm + + + Source Files\ptm + + + Source Files\ptm + + + Source Files\etmv4 + + + Source Files\etmv4 + + + Source Files\etmv4 + + + Source Files\etmv4 + + + Source Files\etmv4 + + + Source Files\etmv3 + + + Source Files\etmv3 + + + Source Files\etmv3 + + + Source Files\etmv3 + + + Source Files\etmv3 + + + Source Files\etmv4 + + + Source Files\ptm + + + Source Files\stm + + + Source Files\stm + + + Source Files\i_dec + + + Source Files\i_dec + + + Source Files\mem_acc + + + Source Files\mem_acc + + + Source Files\mem_acc + + + Source Files\mem_acc + + + Source Files\mem_acc + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files\stm + + + Source Files\pkt_printers + + + Source Files\pkt_printers + + + Source Files + + + Source Files\etmv4 + + + \ No newline at end of file diff --git a/decoder/docs/build_libs.md b/decoder/docs/build_libs.md new file mode 100644 index 000000000000..b7c8536ca5f0 --- /dev/null +++ b/decoder/docs/build_libs.md @@ -0,0 +1,113 @@ +Building and using the Library {#build_lib} +============================== + +@brief How to build the library and test programs and include the library in an application + +Platform Support +---------------- + +The current makefiles and build projects support building the library on Linux and Windows, +x86 or x64 hosts. + +Support is expected for ARM linux and baremetal, AArch32 and AArch64 platforms. + + +Building the Library +-------------------- + +The library and test programs are built from the library `./build/` directory. + +See [`./docs/test_progs.md`](@ref test_progs) for further information on use of the test +programs. + +### Linux x86/x64 ### + +Go to the `./build/linux/` and run `make` in that directory. + +Options to pass to the makefile are:- +- `LINUX64=1` : build the 64 bit version of the library +- `DEBUG=1` : build the debug version of the library. + +Libraries are delivered to the `./lib/linux/` directories. +e.g. `./lib/linux64/rel` will contain the linux 64 bit release libraries. + +The following libraries are built:- +- `libcstraced.so` : shared library containing the main C++ based decoder library +- `libcstraced_c_api.so` : shared library containing the C-API wrapper library. Dependent on `libcstraced.so` +- `libcstraced.a` : static library containing the main C++ based decoder library. +- `libcstraced_c_api.a` : static library containing the C-API wrapper library. + +Test programs are delivered to the `./tests/bin/linux/` directories. + +The test programs are built to used the .so versions of the libraries. +- `trc_pkt_lister` - dependent on `libcstraced.so`. +- `simple_pkt_print_c_api` - dependent on `libcstraced_c_api.so` & hence `libcstraced.so`. + +The test program build for `trc_pkt_lister` also builds an auxiliary library used by this program for test purposes only. +This is the `libsnapshot_parser.a` library, delivered to the `./tests/lib/linux/` directories. + +### Windows ### + +Use the `.\build\win\ref_trace_decode_lib\ref_trace_decode_lib.sln` file to load a solution +which contains all library and test build projects. + +Libraries are delivered to the `./lib/win/` directories. +e.g. `./lib/win64/rel` will contain the windows 64 bit release libraries. + +The solution contains four configurations:- +- *Debug* : builds debug versions of static C++ main library and C-API libraries, test programs linked to the static library. +- *Debug-dll* : builds debug versions of static main library and C-API DLL. C-API statically linked to the main library. +C-API test built as `simple_pkt_print_c_api-dl.exe` and linked against the DLL version of the C-API library. +- *Release* : builds release static library versions, test programs linked to static libraries. +- *Release-dll* : builds release C-API DLL, static main library. + +_Note_: Currently there is no Windows DLL version of the main C++ library. This may follow once +the project is nearer completion with further decode protocols, and the classes requiring export are established.. + +Libraries built are:- +- `libcstraced.lib` : static main C++ decoder library. +- `cstraced_c_api.dll` : C-API DLL library. Statically linked against `libcstraced.lib` at .DLL build time. +- `libcstraced_c_api.lib` : C-API static library. + +There is also a project file to build an auxiliary library used `trc_pkt_lister` for test purposes only. +This is the `snapshot_parser_lib.lib` library, delivered to the `./tests/lib/win/` directories. + + +### Additional Build Options ### + +__Library Virtual Address Size__ + +The ocsd_if_types.h file includes a #define that controls the size of the virtual addresses +used within the library. By default this is a 64 bit `uint64_t` value. + +When building for ARM architectures that have only a 32 bit Virtual Address, and building on +32 bit ARM architectures it may be desirable to build a library that uses a v-addr size of +32 bits. Define `USE_32BIT_V_ADDR` to enable this option + + +Including the Library in an Application +--------------------------------------- + +The user source code includes a header according to the API to be used:- + +- Main C++ decoder library - include `opencsd.h`. Link to C++ library. +- C-API library - include `opencsd_c_api.h`. Link to C-API library. + +### Linux build ### + +By default linux builds will link against the .so versions of the library. Using the C-API library will also +introduce a dependency on the main C++ decoder .so. Ensure that the library paths and link commands are part of the +application makefile. + +To use the static versions use appropriate linker options. + +### Windows build ### + +To link against the C-API DLL, include the .DLL name as a dependency in the application project options. + +To link against the C-API static library, include the library name in the dependency list, and define the macro +`OCSD_USE_STATIC_C_API` in the preprocessor definitions. This ensures that the correct static bindings are declared in +the header file. Also link against the main C++ library. + +To link against the main C++ library include the library name in the dependency list. + diff --git a/decoder/docs/doxygen_config.dox b/decoder/docs/doxygen_config.dox new file mode 100644 index 000000000000..acc6137f4264 --- /dev/null +++ b/decoder/docs/doxygen_config.dox @@ -0,0 +1,2413 @@ +# Doxyfile 1.8.8 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "OpenCSD - CoreSight Trace Decode Library" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = 0.5 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is included in +# the documentation. The maximum height of the logo should not exceed 55 pixels +# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo +# to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./. + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a +# new page for each member. If set to NO, the documentation of a member will be +# part of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by by putting a % sign in front of the word +# or globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO these classes will be included in the various overviews. This option has +# no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the +# todo list. This list is created by putting \todo commands in the +# documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the +# test list. This list is created by putting \test commands in the +# documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES the list +# will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO doxygen will only warn about wrong or incomplete parameter +# documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. + +INPUT = ../include \ + ../include/interfaces \ + ../include/etmv3 \ + ../include/etmv4 \ + ../include/ptm \ + ../include/c_api \ + ../include/stm \ + ../include/mem_acc \ + ../../README.md \ + . \ + ../../HOWTO.md \ + ../include/common \ + ../include + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.as \ + *.js + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER ) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# compiled with the --with-libclang option. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefor more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra stylesheet files is of importance (e.g. the last +# stylesheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the stylesheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated ( +# YES) or that it should be included in the master .chm file ( NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated ( +# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /