1# Copyright (c) 2021 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.10 FATAL_ERROR) 15 16project(ts2abc) 17 18set(PANDA_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../submodules/panda) 19set(PANDA_BIN ${CMAKE_CURRENT_BINARY_DIR}/panda) 20set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread") 21set(JSON_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../third_party/jsoncpp) 22 23set(CMAKE_CXX_STANDARD 17) 24set(CMAKE_CXX_STANDARD_REQUIRED ON) 25set(CMAKE_CXX_EXTENSIONS OFF) 26 27include("${PANDA_ROOT}/cmake/Definitions.cmake") 28include("${PANDA_ROOT}/cmake/PandaCmakeFunctions.cmake") 29 30set(TS2ABC_SOURCES ts2abc.cpp) 31set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin) 32panda_add_executable(ts2abc ${TS2ABC_SOURCES}) 33target_include_directories(ts2abc 34 PRIVATE 35 ${PANDA_ROOT}/assembler 36 ${PANDA_BIN}/assembler 37 ${PANDA_ROOT}/libpandabase 38 ${PANDA_ROOT}/libpandafile 39 ${PANDA_BIN}/libpandafile/include 40 ${PANDA_ROOT}/third_party/libc_sec/include 41 ${PANDA_ROOT}/bytecode_optimizer 42 ${PANDA_ROOT}/compiler 43 ${PANDA_BIN}/runtime/include 44 ${PANDA_ROOT} 45 ${PANDA_BIN}/compiler/generated 46 ${CMAKE_CURRENT_SOURCE_DIR} 47 ${JSON_ROOT} 48 ${JSON_ROOT}/include 49) 50 51include(ExternalProject) 52ExternalProject_Add(panda 53 SOURCE_DIR ${PANDA_ROOT} 54 BINARY_DIR ${PANDA_BIN} 55 CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DPANDA_ENABLE_CLANG_TIDY=${PANDA_ENABLE_CLANG_TIDY} -DPANDA_PRODUCT_BUILD=true 56 BUILD_COMMAND $(MAKE) arkassembler arkcompiler arkbytecodeopt 57 BUILD_BYPRODUCTS ${PANDA_ASSEMBLER_OUTPUT} ${PANDA_FILE_OUTPUT} ${PANDA_BASE_OUTPUT} ${PANDA_ZIPARCHIVE_OUTPUT} ${MINIZ_OUTPUT} ${PANDA_COMPILER_OUTPUT} ${PANDA_BYTECODEOPT_OUTPUT} 58 INSTALL_COMMAND "" 59 BUILD_ALWAYS TRUE 60) 61 62add_dependencies(ts2abc panda) 63if(PANDA_TARGET_WINDOWS OR PANDA_TARGET_MACOS) 64 if(PANDA_TARGET_WINDOWS) 65 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static") 66 endif() 67 set(PANDA_ASSEMBLER_OUTPUT ${PANDA_BIN}/lib/libarkassembler.a) 68 add_library(arkassembler STATIC IMPORTED) 69 set(PANDA_FILE_OUTPUT ${PANDA_BIN}/lib/libarkfile.a) 70 add_library(arkfile STATIC IMPORTED) 71 set(PANDA_BASE_OUTPUT ${PANDA_BIN}/lib/libarkbase.a) 72 add_library(arkbase STATIC IMPORTED) 73 set(PANDA_COMPILER_OUTPUT ${PANDA_BIN}/lib/libarkcompiler.a) 74 add_library(arkcompiler STATIC IMPORTED) 75 set(PANDA_BYTECODEOPT_OUTPUT ${PANDA_BIN}/lib/libarkbytecodeopt.a) 76 add_library(arkbytecodeopt STATIC IMPORTED) 77 78 79 set(PANDA_ZIPARCHIVE_OUTPUT ${PANDA_BIN}/lib/libarkziparchive.a) 80 add_library(arkziparchive STATIC IMPORTED) 81 set(MINIZ_OUTPUT ${PANDA_BIN}/lib/libminiz.a) 82 add_library(miniz STATIC IMPORTED) 83 set_target_properties (miniz PROPERTIES 84 IMPORTED_LOCATION ${MINIZ_OUTPUT} 85 ) 86 set(SEC_OUTPUT ${PANDA_BIN}/lib/libc_secshared.a) 87 add_library(c_secshared STATIC IMPORTED) 88 89 set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build jsoncpp static library" FORCE) 90 add_subdirectory(${JSON_ROOT} jsoncpp_static) 91 target_link_libraries(ts2abc jsoncpp_static) 92else() 93 set(PANDA_ASSEMBLER_OUTPUT ${PANDA_BIN}/lib/libarkassembler.so) 94 add_library(arkassembler SHARED IMPORTED) 95 set(PANDA_FILE_OUTPUT ${PANDA_BIN}/lib/libarkfile.so) 96 add_library(arkfile SHARED IMPORTED) 97 set(PANDA_BASE_OUTPUT ${PANDA_BIN}/lib/libarkbase.so) 98 add_library(arkbase SHARED IMPORTED) 99 set(PANDA_ZIPARCHIVE_OUTPUT ${PANDA_BIN}/lib/libarkziparchive.so) 100 add_library(arkziparchive SHARED IMPORTED) 101 set(PANDA_COMPILER_OUTPUT ${PANDA_BIN}/lib/libarkcompiler.so) 102 add_library(arkcompiler SHARED IMPORTED) 103 set(PANDA_BYTECODEOPT_OUTPUT ${PANDA_BIN}/lib/libarkbytecodeopt.so) 104 add_library(arkbytecodeopt SHARED IMPORTED) 105 106 set(MINIZ_OUTPUT ${PANDA_BIN}/lib/libminiz.so) 107 add_library(miniz SHARED IMPORTED) 108 set(SEC_OUTPUT ${PANDA_BIN}/lib/libc_secshared.so) 109 add_library(c_secshared SHARED IMPORTED) 110 111 set(BUILD_SHARED_LIBS ON CACHE BOOL "Build jsoncpp shared library" FORCE) 112 add_subdirectory(${JSON_ROOT} jsoncpp_lib) 113 target_link_libraries(ts2abc jsoncpp_lib) 114endif() 115 116set_target_properties (arkassembler PROPERTIES 117 IMPORTED_LOCATION ${PANDA_ASSEMBLER_OUTPUT} 118) 119set_target_properties (arkfile PROPERTIES 120 IMPORTED_LOCATION ${PANDA_FILE_OUTPUT} 121) 122set_target_properties (arkbase PROPERTIES 123 IMPORTED_LOCATION ${PANDA_BASE_OUTPUT} 124) 125set_target_properties (arkziparchive PROPERTIES 126 IMPORTED_LOCATION ${PANDA_ZIPARCHIVE_OUTPUT} 127) 128set_target_properties (arkcompiler PROPERTIES 129 IMPORTED_LOCATION ${PANDA_COMPILER_OUTPUT} 130) 131set_target_properties (arkbytecodeopt PROPERTIES 132 IMPORTED_LOCATION ${PANDA_BYTECODEOPT_OUTPUT} 133) 134set_target_properties (c_secshared PROPERTIES 135 IMPORTED_LOCATION ${SEC_OUTPUT} 136) 137 138if(PANDA_TARGET_WINDOWS OR PANDA_TARGET_MACOS) 139 target_link_libraries(ts2abc arkbytecodeopt arkcompiler arkassembler arkfile arkziparchive arkbase c_secshared miniz) 140else() 141 target_link_libraries(ts2abc arkassembler arkfile arkbase arkziparchive c_secshared arkcompiler arkbytecodeopt) 142endif() 143