891b5bfe508e601aafc41ba6d235ab10a49e2ee0
[platform/upstream/iotjs.git] / cmake / jerry.cmake
1 # Copyright 2015-present Samsung Electronics Co., Ltd. and other contributors
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 cmake_minimum_required(VERSION 2.8)
16
17 # Host jerry for snapshot generation
18 set(DEPS_HOST_JERRY deps/jerry-host)
19 ExternalProject_Add(hostjerry
20   PREFIX ${DEPS_HOST_JERRY}
21   SOURCE_DIR ${ROOT_DIR}/deps/jerry/
22   BUILD_IN_SOURCE 0
23   BINARY_DIR ${DEPS_HOST_JERRY}
24   INSTALL_COMMAND ""
25   CMAKE_ARGS
26     -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
27     -DJERRY_CMDLINE=ON
28     -DJERRY_CMDLINE_MINIMAL=OFF
29     -DFEATURE_SNAPSHOT_SAVE=${ENABLE_SNAPSHOT}
30     -DFEATURE_PROFILE=es5.1
31 )
32 add_executable(jerry IMPORTED)
33 add_dependencies(jerry hostjerry)
34 set_property(TARGET jerry PROPERTY
35   IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/${DEPS_HOST_JERRY}/bin/jerry)
36 set(JERRY_HOST ${CMAKE_BINARY_DIR}/${DEPS_HOST_JERRY}/bin/jerry)
37
38 # Utility method to add -D<KEY>=<KEY_Value>
39 macro(add_cmake_arg TARGET_ARG KEY)
40   if(${KEY})
41     list(APPEND ${TARGET_ARG} -D${KEY}=${${KEY}})
42   endif()
43 endmacro(add_cmake_arg)
44
45 # Target libjerry
46 set(JERRY_LIBS jerry-core)
47 set(DEPS_LIB_JERRY_ARGS)
48
49 # Configure the MinSizeRel as the default build type
50 # for target jerry in release mode.
51 if("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
52   set(JERRY_CMAKE_BUILD_TYPE MinSizeRel)
53 else()
54   set(JERRY_CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE})
55 endif()
56
57
58 # use system libc/libm on Unix like targets
59 if("${TARGET_OS}" MATCHES "LINUX|TIZEN|DARWIN")
60   list(APPEND JERRY_LIBS m)
61   list(APPEND DEPS_LIB_JERRY_ARGS
62     -DJERRY_LIBC=OFF
63     -DJERRY_LIBM=OFF)
64 elseif("${TARGET_OS}" MATCHES "TIZENRT")
65   list(APPEND JERRY_LIBS jerry-libm)
66   list(APPEND DEPS_LIB_JERRY_ARGS
67     -DJERRY_LIBC=OFF
68     -DJERRY_LIBM=ON
69     -DEXTERNAL_LIBC_INTERFACE=${EXTERNAL_LIBC_INTERFACE}
70     -DEXTERNAL_CMAKE_SYSTEM_PROCESSOR=${EXTERNAL_CMAKE_SYSTEM_PROCESSOR}
71   )
72 else()
73   list(APPEND JERRY_LIBS jerry-libm jerry-libc)
74   list(APPEND DEPS_LIB_JERRY_ARGS
75     -DEXTERNAL_LIBC_INTERFACE=${EXTERNAL_LIBC_INTERFACE}
76     -DEXTERNAL_CMAKE_SYSTEM_PROCESSOR=${EXTERNAL_CMAKE_SYSTEM_PROCESSOR}
77   )
78 endif()
79
80 # Add a few cmake options based on buildtype/external cmake defines
81 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
82   list(APPEND DEPS_LIB_JERRY_ARGS -DFEATURE_ERROR_MESSAGES=ON)
83 endif()
84
85 add_cmake_arg(DEPS_LIB_JERRY_ARGS ENABLE_LTO)
86 add_cmake_arg(DEPS_LIB_JERRY_ARGS FEATURE_MEM_STATS)
87 add_cmake_arg(DEPS_LIB_JERRY_ARGS FEATURE_ERROR_MESSAGES)
88 add_cmake_arg(DEPS_LIB_JERRY_ARGS MEM_HEAP_SIZE_KB)
89 add_cmake_arg(DEPS_LIB_JERRY_ARGS JERRY_HEAP_SECTION_ATTR)
90
91 separate_arguments(EXTRA_JERRY_CMAKE_PARAMS)
92 set(DEPS_LIB_JERRY deps/jerry)
93 set(DEPS_LIB_JERRY_SRC ${ROOT_DIR}/${DEPS_LIB_JERRY})
94 ExternalProject_Add(libjerry
95   PREFIX ${DEPS_LIB_JERRY}
96   SOURCE_DIR ${ROOT_DIR}/deps/jerry/
97   BUILD_IN_SOURCE 0
98   BINARY_DIR ${DEPS_LIB_JERRY}
99   INSTALL_COMMAND
100     ${CMAKE_COMMAND} -E copy_directory
101     ${CMAKE_BINARY_DIR}/${DEPS_LIB_JERRY}/lib/
102     ${CMAKE_BINARY_DIR}/lib/
103   CMAKE_ARGS
104     -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
105     -DCMAKE_BUILD_TYPE=${JERRY_CMAKE_BUILD_TYPE}
106     -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
107     -DJERRY_CMDLINE=OFF
108     -DJERRY_CMDLINE_MINIMAL=OFF
109     -DFEATURE_SNAPSHOT_EXEC=${ENABLE_SNAPSHOT}
110     -DFEATURE_SNAPSHOT_SAVE=OFF
111     -DFEATURE_PROFILE=${FEATURE_PROFILE}
112     -DENABLE_LTO=${ENABLE_LTO}
113     ${DEPS_LIB_JERRY_ARGS}
114     ${EXTRA_JERRY_CMAKE_PARAMS}
115 )
116
117 set_property(DIRECTORY APPEND PROPERTY
118   ADDITIONAL_MAKE_CLEAN_FILES
119     ${CMAKE_BINARY_DIR}/lib/libjerry-core.a
120     ${CMAKE_BINARY_DIR}/lib/libjerry-libm.a
121     ${CMAKE_BINARY_DIR}/lib/libjerry-libc.a
122 )
123
124 # define external jerry-core target
125 add_library(jerry-core STATIC IMPORTED)
126 add_dependencies(jerry-core libjerry)
127 set_property(TARGET jerry-core PROPERTY
128   IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libjerry-core.a)
129
130 # define external jerry-libc target
131 add_library(jerry-libc STATIC IMPORTED)
132 add_dependencies(jerry-libc libjerry)
133 set_property(TARGET jerry-libc PROPERTY
134   IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libjerry-libc.a)
135
136 # define external jerry-libm target
137 add_library(jerry-libm STATIC IMPORTED)
138 add_dependencies(jerry-libm libjerry)
139 set_property(TARGET jerry-libm PROPERTY
140   IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libjerry-libm.a)
141
142 set(JERRY_PORT_DIR ${DEPS_LIB_JERRY_SRC}/targets/default)
143 set(JERRY_INCLUDE_DIR ${DEPS_LIB_JERRY}/jerry-core)