• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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