1# Copyright (c) 2021-2022 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13 14cmake_minimum_required(VERSION 3.3.2 FATAL_ERROR) 15project(assembler CXX) 16 17panda_add_executable(ark_asm pandasm.cpp) 18 19set(PANDASM_BIN_TESTS ${CMAKE_CURRENT_BINARY_DIR}/tests) 20file(MAKE_DIRECTORY "${PANDASM_BIN_TESTS}") 21 22panda_isa_gen( 23 TEMPLATES 24 "isa.h.erb" 25 "function_collect_string.cpp.erb" 26 "ins_emit.h.erb" 27 "ins_to_string.cpp.erb" 28 "ins_create_api.h.erb" 29 "opcode_parsing.h.erb" 30 "operand_types_print.h.erb" 31 REQUIRES 32 "${CMAKE_CURRENT_SOURCE_DIR}/asm_isapi.rb" 33 "${PANDA_ROOT}/libpandafile/pandafile_isapi.rb" 34) 35 36set(SOURCES 37 lexer.cpp 38 annotation.cpp 39 assembly-emitter.cpp 40 assembly-parser.cpp 41 assembly-program.cpp 42 assembly-type.cpp 43 assembly-ins.cpp 44 context.cpp 45 meta.cpp 46 ins_to_string.cpp 47 extensions/extensions.cpp 48) 49 50set(META_GEN_H ${CMAKE_CURRENT_BINARY_DIR}/meta_gen.h) 51panda_gen_file( 52 DATAFILE ${CMAKE_CURRENT_SOURCE_DIR}/metadata.yaml 53 TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/templates/meta_gen.cpp.erb 54 OUTPUTFILE ${META_GEN_H} 55 REQUIRES ${CMAKE_CURRENT_SOURCE_DIR}/asm_metadata.rb 56) 57add_custom_target(meta_gen_h DEPENDS ${META_GEN_H}) 58 59add_library(arkassembler ${PANDA_DEFAULT_LIB_TYPE} ${SOURCES}) 60add_dependencies(arkassembler 61 isa_gen_assembler 62 arkfile 63 meta_gen_h 64) 65 66target_include_directories(arkassembler PUBLIC 67 ${CMAKE_CURRENT_BINARY_DIR} 68 ${CMAKE_CURRENT_SOURCE_DIR} 69 ${CMAKE_BINARY_DIR}/libpandabase 70 ${PANDA_ROOT} 71) 72 73panda_add_to_clang_tidy(arkassembler) 74panda_add_to_clang_tidy(TARGET ark_asm CHECKS 75 "-cert-dcl21-cpp" 76 "-cppcoreguidelines-macro-usage" 77 "-google-runtime-references" 78 "-misc-non-private-member-variables-in-classes" 79) 80 81target_link_libraries(arkassembler arkfile) 82target_link_libraries(ark_asm arkassembler arkbase) 83if(PANDA_WITH_BYTECODE_OPTIMIZER) 84 target_link_libraries(ark_asm arkbytecodeopt) 85endif() 86 87include_directories(${PANDA_ROOT}/libpandabase/) 88include_directories(${CMAKE_BINARY_DIR}/libpandafile/include/) 89 90panda_add_gtest( 91 NAME assembler_tests 92 SOURCES 93 tests/lexer_test.cpp 94 tests/parser_test.cpp 95 tests/emitter_test.cpp 96 tests/mangling_tests.cpp 97 LIBRARIES 98 arkbase arkassembler 99 SANITIZERS 100 ${PANDA_SANITIZERS_LIST} 101) 102if(TARGET assembler_tests) 103 target_compile_options(assembler_tests PUBLIC "-Wno-ignored-attributes") 104endif() 105 106panda_add_sanitizers(TARGET arkassembler SANITIZERS ${PANDA_SANITIZERS_LIST}) 107panda_add_sanitizers(TARGET ark_asm SANITIZERS ${PANDA_SANITIZERS_LIST}) 108 109# TODO: remove after all components will use ark_asm instead of pandasm 110add_custom_target(pandasm ALL 111 COMMAND cd $<TARGET_FILE_DIR:ark_asm> && ${CMAKE_COMMAND} -E create_symlink $<TARGET_FILE_NAME:ark_asm> pandasm) 112 113add_dependencies(pandasm ark_asm) 114 115add_check_style(".") 116 117if (TARGET host_tools_depends) 118 add_dependencies(host_tools_depends arkassembler) 119endif() 120 121if (DEFINED PANDA_ROOT_BINARY_DIR) 122 # Special case for host tool build. 123 target_include_directories(arkassembler PUBLIC ${PANDA_ROOT_BINARY_DIR}/assembler) 124endif() 125 126if (PANDA_ENABLE_AFL) 127 include("${PANDA_ROOT}/fuzzing/Fuzzing.cmake") 128 panda_substitute_libs(TARGET arkassembler LIBS arkbase c_secshared arkfile) 129endif() 130