1# Copyright (c) 2020-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.16.5)
15
16project(jsfwk LANGUAGES CXX)
17
18set(CMAKE_CXX_STANDARD 11)
19set(CMAKE_CXX_STANDARD_REQUIRED ON)
20set(CMAKE_INCLUDE_CURRENT_DIR ON)
21
22# compile options
23add_compile_options(-fpermissive -Wno-narrowing)
24
25set(ACE_LITE_CONFIG_PATH "${CMAKE_CURRENT_SOURCE_DIR}/targets/simulator")
26set(ACE_LITE_INNERKITS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../interfaces/innerkits/builtin")
27set(JSFWK_INCLUDE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/include")
28set(JSFWK_INNERKITS_BUILTIN_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../../foundation/arkui/ace_engine_lite/interfaces/inner_api/builtin")
29set(JSFWK_SOURCE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/core")
30set(UIKIT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../../foundation/arkui/ui_lite")
31set(THIRTY_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party")
32set(JSFWK_SIMULATOR_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../../tools/developer_tools_lite/graphic_tool/simulator")
33set(AAFWK_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../ability/ability_lite")
34set(UTILS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../../../commonlibrary/utils_lite")
35
36# add definitions
37# temporarily set, when ui and graphic unifid, this can be removed
38add_definitions(-DSCREENSIZE_SPECIFIED)
39
40# setup jerryscript
41include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
42ExternalProject_Add(jerryscript
43    SOURCE_DIR ${THIRTY_PATH}/jerryscript
44    BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/jerryscript
45    CMAKE_ARGS -DJERRY_EXTERNAL_CONTEXT=${JERRY_EXTERNAL_CONTEXT}
46               -DJERRY_DEBUGGER=${JERRY_DEBUGGER}
47               -DJERRY_CMDLINE=OFF
48               -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
49               -DTOOLCHAIN_PATH=${TOOLCHAIN_PATH}
50               -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
51    BUILD_COMMAND $(MAKE) VERBOSE=1 -j 8
52    INSTALL_COMMAND ""
53    BUILD_ALWAYS 1
54)
55
56# header files
57include_directories(
58    ${ACE_LITE_CONFIG_PATH}
59    ${ACE_LITE_INNERKITS_PATH}/async
60    ${ACE_LITE_INNERKITS_PATH}/base
61    ${ACE_LITE_INNERKITS_PATH}/jsi
62    ${JSFWK_INCLUDE_PATH}/async
63    ${JSFWK_INCLUDE_PATH}/base
64    ${JSFWK_INCLUDE_PATH}/context
65    ${JSFWK_INCLUDE_PATH}/jsi
66    ${JSFWK_SOURCE_PATH}
67    ${JSFWK_SOURCE_PATH}/animation
68    ${JSFWK_SOURCE_PATH}/base
69    ${JSFWK_SOURCE_PATH}/base/cache
70    ${JSFWK_SOURCE_PATH}/components
71    ${JSFWK_SOURCE_PATH}/context
72    ${JSFWK_SOURCE_PATH}/directive
73    ${JSFWK_SOURCE_PATH}/jsi
74    ${JSFWK_SOURCE_PATH}/modules
75    ${JSFWK_SOURCE_PATH}/modules/presets
76    ${JSFWK_SOURCE_PATH}/router
77    ${JSFWK_SOURCE_PATH}/stylemgr
78    ${JSFWK_SOURCE_PATH}/wrapper
79    ${CMAKE_CURRENT_SOURCE_DIR}/targets
80    ${CMAKE_CURRENT_SOURCE_DIR}/test/mock
81    ${CMAKE_CURRENT_SOURCE_DIR}/test/unittest
82    ${THIRTY_PATH}/cJSON
83    ${THIRTY_PATH}/jerryscript/jerry-core/include
84    ${THIRTY_PATH}/jerryscript/jerry-ext/include/jerryscript-ext
85    ${THIRTY_PATH}/jerryscript/jerry-port/default/include
86    ${THIRTY_PATH}/freetype/include
87    ${JSFWK_SIMULATOR_PATH}/config
88    ${UTILS_PATH}/timer_task/include
89    ${AAFWK_PATH}/frameworks/abilitymgr_lite/include
90    ${AAFWK_PATH}/interfaces/kits/ability_lite
91    ${THIRTY_PATH}/bounds_checking_function/include)
92
93# source files
94aux_source_directory(${JSFWK_SOURCE_PATH}/animation ANIMATION)
95aux_source_directory(${JSFWK_SOURCE_PATH}/base BASE)
96aux_source_directory(${JSFWK_SOURCE_PATH}/base/cache CACHE)
97aux_source_directory(${JSFWK_SOURCE_PATH}/components COMPONENTS)
98aux_source_directory(${JSFWK_SOURCE_PATH}/context CONTEXT)
99aux_source_directory(${JSFWK_SOURCE_PATH}/directive DIRECTIVE)
100aux_source_directory(${JSFWK_SOURCE_PATH}/jsi JSI)
101aux_source_directory(${JSFWK_SOURCE_PATH}/modules MODULES)
102aux_source_directory(${JSFWK_SOURCE_PATH}/modules/presets MODULES_PRESETS)
103aux_source_directory(${JSFWK_SOURCE_PATH}/router ROUTER)
104aux_source_directory(${JSFWK_SOURCE_PATH}/stylemgr STYLEMGR)
105aux_source_directory(${JSFWK_SOURCE_PATH}/wrapper WRAPPER)
106aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/targets TARGETS)
107#aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/test TEST)
108#aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/test/unittest UNITTEST)
109
110list(REMOVE_ITEM CONTEXT "${JSFWK_SOURCE_PATH}/context/ace_ability.cpp")
111list(REMOVE_ITEM MODULES_PRESETS "${JSFWK_SOURCE_PATH}/modules/presets/jstest_module.cpp")
112list(REMOVE_ITEM UNITTEST
113    "${CMAKE_CURRENT_SOURCE_DIR}/test/unittest/tabs_tdd_test.cpp"
114    "${CMAKE_CURRENT_SOURCE_DIR}/test/unittest/js_async_work_tdd_test.cpp"
115    "${CMAKE_CURRENT_SOURCE_DIR}/test/unittest/message_queue_utils_tdd_test.cpp")
116
117add_library(jsfwk STATIC
118    ${ANIMATION}
119    ${BASE}
120    ${CACHE}
121    ${COMPONENTS}
122    ${CONTEXT}
123    ${DIRECTIVE}
124    ${JSI}
125    ${MODULES}
126    ${MODULES_PRESETS}
127    ${ROUTER}
128    ${STYLEMGR}
129    ${WRAPPER}
130    #${TEST}
131    ${TARGETS}
132    )
133target_include_directories(jsfwk PUBLIC
134    ${JSFWK_INNERKITS_BUILTIN_PATH}
135    ${JSFWK_INNERKITS_BUILTIN_PATH}/async
136    ${JSFWK_INNERKITS_BUILTIN_PATH}/base
137    ${JSFWK_INNERKITS_BUILTIN_PATH}/jsi
138    ${JSFWK_INCLUDE_PATH}
139    ${JSFWK_INCLUDE_PATH}/base
140    ${JSFWK_INCLUDE_PATH}/context
141    ${ACE_LITE_CONFIG_PATH}
142    ${AAFWK_PATH}/frameworks/abilitymgr_lite/include)
143add_dependencies(jsfwk jerryscript)
144target_link_directories(jsfwk PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/jerryscript/lib)
145if(UNIX)
146    target_link_libraries(jsfwk global_resmgr ui jerry-port-default jerry-ext jerry-core)
147else()
148    target_link_libraries(jsfwk global_resmgr ui -Wl,--whole-archive jerry-port-default jerry-ext jerry-core -Wl,--no-whole-archive psapi)
149endif()
150
151if (${JERRY_EXTERNAL_CONTEXT} STREQUAL ON)
152    target_compile_definitions(jsfwk PUBLIC -DJS_ENGINE_EXTERNAL_CONTEXT)
153endif()
154