diff options
author | Taylor Simpson <tsimpson@quicinc.com> | 2021-02-07 23:46:24 -0600 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2021-02-18 08:25:06 -0800 |
commit | 3e7a84eeccc3b3a9b43c6dfb52bd98ea5acebf0a (patch) | |
tree | 85d0cbf7cb3c4dda0f447d24fe1a948cdfc5fd0b /target | |
parent | 703c08d98ae6ac6481d460a0ddc5c118bdc4e97e (diff) | |
download | qemu-3e7a84eeccc3b3a9b43c6dfb52bd98ea5acebf0a.zip |
Hexagon build infrastructure
Add file to default-configs
Add hexagon to meson.build
Add hexagon to target/meson.build
Add target/hexagon/meson.build
Change scripts/qemu-binfmt-conf.sh
We can build a hexagon-linux-user target and run programs on
the Hexagon scalar core. With hexagon-linux-clang installed,
"make check-tcg" will pass.
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Taylor Simpson <tsimpson@quicinc.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <1612763186-18161-35-git-send-email-tsimpson@quicinc.com>
[rth: Use top-level python variable]
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'target')
-rw-r--r-- | target/hexagon/meson.build | 191 | ||||
-rw-r--r-- | target/meson.build | 1 |
2 files changed, 192 insertions, 0 deletions
diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build new file mode 100644 index 0000000000..15318a6fa7 --- /dev/null +++ b/target/hexagon/meson.build @@ -0,0 +1,191 @@ +## +## Copyright(c) 2020-2021 Qualcomm Innovation Center, Inc. All Rights Reserved. +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, see <http://www.gnu.org/licenses/>. +## + +hexagon_ss = ss.source_set() + +hex_common_py = 'hex_common.py' +attribs_def = meson.current_source_dir() / 'attribs_def.h.inc' +gen_tcg_h = meson.current_source_dir() / 'gen_tcg.h' + +# +# Step 1 +# We use a C program to create semantics_generated.pyinc +# +gen_semantics = executable( + 'gen_semantics', + 'gen_semantics.c', + native: true, build_by_default: false) + +semantics_generated = custom_target( + 'semantics_generated.pyinc', + output: 'semantics_generated.pyinc', + input: gen_semantics, + command: ['@INPUT@', '@OUTPUT@'], +) +hexagon_ss.add(semantics_generated) + +# +# Step 2 +# We use Python scripts to generate the following files +# shortcode_generated.h.inc +# helper_protos_generated.h.inc +# tcg_funcs_generated.c.inc +# tcg_func_table_generated.c.inc +# helper_funcs_generated.c.inc +# printinsn_generated.h.inc +# op_regs_generated.h.inc +# op_attribs_generated.h.inc +# opcodes_def_generated.h.inc +# +shortcode_generated = custom_target( + 'shortcode_generated.h.inc', + output: 'shortcode_generated.h.inc', + input: 'gen_shortcode.py', + depends: [semantics_generated], + depend_files: [hex_common_py, attribs_def], + command: [python, '@INPUT@', semantics_generated, attribs_def, '@OUTPUT@'], +) +hexagon_ss.add(shortcode_generated) + +helper_protos_generated = custom_target( + 'helper_protos_generated.h.inc', + output: 'helper_protos_generated.h.inc', + input: 'gen_helper_protos.py', + depends: [semantics_generated], + depend_files: [hex_common_py, attribs_def, gen_tcg_h], + command: [python, '@INPUT@', semantics_generated, attribs_def, gen_tcg_h, '@OUTPUT@'], +) +hexagon_ss.add(helper_protos_generated) + +tcg_funcs_generated = custom_target( + 'tcg_funcs_generated.c.inc', + output: 'tcg_funcs_generated.c.inc', + input: 'gen_tcg_funcs.py', + depends: [semantics_generated], + depend_files: [hex_common_py, attribs_def, gen_tcg_h], + command: [python, '@INPUT@', semantics_generated, attribs_def, gen_tcg_h, '@OUTPUT@'], +) +hexagon_ss.add(tcg_funcs_generated) + +tcg_func_table_generated = custom_target( + 'tcg_func_table_generated.c.inc', + output: 'tcg_func_table_generated.c.inc', + input: 'gen_tcg_func_table.py', + depends: [semantics_generated], + depend_files: [hex_common_py, attribs_def], + command: [python, '@INPUT@', semantics_generated, attribs_def, '@OUTPUT@'], +) +hexagon_ss.add(tcg_func_table_generated) + +helper_funcs_generated = custom_target( + 'helper_funcs_generated.c.inc', + output: 'helper_funcs_generated.c.inc', + input: 'gen_helper_funcs.py', + depends: [semantics_generated], + depend_files: [hex_common_py, attribs_def, gen_tcg_h], + command: [python, '@INPUT@', semantics_generated, attribs_def, gen_tcg_h, '@OUTPUT@'], +) +hexagon_ss.add(helper_funcs_generated) + +printinsn_generated = custom_target( + 'printinsn_generated.h.inc', + output: 'printinsn_generated.h.inc', + input: 'gen_printinsn.py', + depends: [semantics_generated], + depend_files: [hex_common_py, attribs_def], + command: [python, '@INPUT@', semantics_generated, attribs_def, '@OUTPUT@'], +) +hexagon_ss.add(printinsn_generated) + +op_regs_generated = custom_target( + 'op_regs_generated.h.inc', + output: 'op_regs_generated.h.inc', + input: 'gen_op_regs.py', + depends: [semantics_generated], + depend_files: [hex_common_py, attribs_def], + command: [python, '@INPUT@', semantics_generated, attribs_def, '@OUTPUT@'], +) +hexagon_ss.add(op_regs_generated) + +op_attribs_generated = custom_target( + 'op_attribs_generated.h.inc', + output: 'op_attribs_generated.h.inc', + input: 'gen_op_attribs.py', + depends: [semantics_generated], + depend_files: [hex_common_py, attribs_def], + command: [python, '@INPUT@', semantics_generated, attribs_def, '@OUTPUT@'], +) +hexagon_ss.add(op_attribs_generated) + +opcodes_def_generated = custom_target( + 'opcodes_def_generated.h.inc', + output: 'opcodes_def_generated.h.inc', + input: 'gen_opcodes_def.py', + depends: [semantics_generated], + depend_files: [hex_common_py, attribs_def], + command: [python, '@INPUT@', semantics_generated, attribs_def, '@OUTPUT@'], +) +hexagon_ss.add(opcodes_def_generated) + +# +# Step 3 +# We use a C program to create iset.py which is imported into dectree.py +# to create the decode tree +# +gen_dectree_import = executable( + 'gen_dectree_import', + 'gen_dectree_import.c', opcodes_def_generated, op_regs_generated, + native: true, build_by_default: false) + +iset_py = custom_target( + 'iset.py', + output: 'iset.py', + input: gen_dectree_import, + command: ['@INPUT@', '@OUTPUT@'], +) +hexagon_ss.add(iset_py) + +# +# Step 4 +# We use the dectree.py script to generate the decode tree header file +# +dectree_generated = custom_target( + 'dectree_generated.h.inc', + output: 'dectree_generated.h.inc', + input: 'dectree.py', + depends: [iset_py], + command: ['PYTHONPATH=' + meson.current_build_dir(), '@INPUT@', '@OUTPUT@'], +) +hexagon_ss.add(dectree_generated) + +hexagon_ss.add(files( + 'cpu.c', + 'translate.c', + 'op_helper.c', + 'gdbstub.c', + 'genptr.c', + 'reg_fields.c', + 'decode.c', + 'iclass.c', + 'opcodes.c', + 'printinsn.c', + 'arch.c', + 'fma_emu.c', + 'conv_emu.c', +)) + +target_arch += {'hexagon': hexagon_ss} diff --git a/target/meson.build b/target/meson.build index 9f0ae93b75..c35c1e9d34 100644 --- a/target/meson.build +++ b/target/meson.build @@ -2,6 +2,7 @@ subdir('alpha') subdir('arm') subdir('avr') subdir('cris') +subdir('hexagon') subdir('hppa') subdir('i386') subdir('lm32') |