Browse Source
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>pull/111/head
committed by
Richard Henderson
5 changed files with 199 additions and 1 deletions
@ -0,0 +1 @@ |
|||
TARGET_ARCH=hexagon |
|||
@ -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} |
|||
Loading…
Reference in new issue