• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright JS Foundation and other contributors, http://js.foundation
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
15cmake_minimum_required (VERSION 2.8.12)
16set(JERRY_CORE_NAME jerry-core)
17project (${JERRY_CORE_NAME} C)
18
19# Optional build settings
20set(ENABLE_ALL_IN_ONE               OFF     CACHE BOOL   "Enable all-in-one build?")
21
22# Optional features
23set(JERRY_CPOINTER_32_BIT           OFF     CACHE BOOL   "Enable 32 bit compressed pointers?")
24set(JERRY_DEBUGGER                  OFF     CACHE BOOL   "Enable JerryScript debugger?")
25set(JERRY_ERROR_MESSAGES            OFF     CACHE BOOL   "Enable error messages?")
26set(JERRY_EXTERNAL_CONTEXT          OFF     CACHE BOOL   "Enable external context?")
27set(JERRY_PARSER                    ON      CACHE BOOL   "Enable javascript-parser?")
28set(JERRY_LINE_INFO                 ON      CACHE BOOL   "Enable line info?")
29set(JERRY_LOGGING                   OFF     CACHE BOOL   "Enable logging?")
30set(JERRY_MEM_STATS                 OFF     CACHE BOOL   "Enable memory statistics?")
31set(JERRY_MEM_GC_BEFORE_EACH_ALLOC  OFF     CACHE BOOL   "Enable mem-stress test?")
32set(JERRY_PARSER_DUMP_BYTE_CODE     OFF     CACHE BOOL   "Enable parser byte-code dumps?")
33set(JERRY_PROFILE                   "es5.1" CACHE STRING "Use default or other profile?")
34set(JERRY_REGEXP_STRICT_MODE        OFF     CACHE BOOL   "Enable regexp strict mode?")
35set(JERRY_REGEXP_DUMP_BYTE_CODE     OFF     CACHE BOOL   "Enable regexp byte-code dumps?")
36set(JERRY_SNAPSHOT_EXEC             OFF     CACHE BOOL   "Enable executing snapshot files?")
37set(JERRY_SNAPSHOT_SAVE             OFF     CACHE BOOL   "Enable saving snapshot files?")
38set(JERRY_SYSTEM_ALLOCATOR          OFF     CACHE BOOL   "Enable system allocator?")
39set(JERRY_VALGRIND                  OFF     CACHE BOOL   "Enable Valgrind support?")
40set(JERRY_VM_EXEC_STOP              OFF     CACHE BOOL   "Enable VM execution stopping?")
41set(JERRY_GLOBAL_HEAP_SIZE          "(512)" CACHE STRING "Size of memory heap, in kilobytes")
42set(JERRY_GC_LIMIT                  "(0)"   CACHE STRING "Heap usage limit to trigger garbage collection")
43set(JERRY_STACK_LIMIT               "(0)"   CACHE STRING "Maximum stack usage size, in kilobytes")
44set(JERRY_GC_MARK_LIMIT             "(8)"   CACHE STRING "Maximum depth of recursion during GC mark phase")
45
46# Option overrides
47if(USING_MSVC)
48  set(ENABLE_ALL_IN_ONE ON) # FIXME: This should not be needed but right now it is. To be tracked down and followed up.
49
50  set(ENABLE_ALL_IN_ONE_MESSAGE " (FORCED BY COMPILER)")
51endif()
52
53if(JERRY_SYSTEM_ALLOCATOR)
54  set(JERRY_CPOINTER_32_BIT ON)
55
56  set(JERRY_CPOINTER_32_BIT_MESSAGE " (FORCED BY SYSTEM ALLOCATOR)")
57endif()
58
59if (JERRY_GLOBAL_HEAP_SIZE GREATER 512)
60  set(JERRY_CPOINTER_32_BIT ON)
61
62  set(JERRY_CPOINTER_32_BIT_MESSAGE " (FORCED BY HEAP SIZE)")
63endif()
64
65if(NOT JERRY_PARSER)
66  set(JERRY_SNAPSHOT_EXEC ON)
67  set(JERRY_PARSER_DUMP   OFF)
68
69  set(JERRY_SNAPSHOT_EXEC_MESSAGE " (FORCED BY DISABLED JS PARSER)")
70  set(JERRY_PARSER_DUMP_MESSAGE   " (FORCED BY DISABLED JS PARSER)")
71endif()
72
73if(JERRY_CMDLINE_SNAPSHOT)
74  set(JERRY_SNAPSHOT_SAVE ON)
75
76  set(JERRY_SNAPSHOT_SAVE_MESSAGE " (FORCED BY SNAPSHOT TOOL)")
77endif()
78
79if(JERRY_MEM_STATS OR JERRY_PARSER_DUMP_BYTE_CODE OR JERRY_REGEXP_DUMP_BYTE_CODE)
80  set(JERRY_LOGGING ON)
81
82  set(JERRYRE_LOGGING_MESSAGE " (FORCED BY STATS OR DUMP)")
83endif()
84
85# Status messages
86message(STATUS "ENABLE_ALL_IN_ONE              " ${ENABLE_ALL_IN_ONE} ${ENABLE_ALL_IN_ONE_MESSAGE})
87message(STATUS "JERRY_CPOINTER_32_BIT          " ${JERRY_CPOINTER_32_BIT} ${JERRY_CPOINTER_32_BIT_MESSAGE})
88message(STATUS "JERRY_DEBUGGER                 " ${JERRY_DEBUGGER})
89message(STATUS "JERRY_ERROR_MESSAGES           " ${JERRY_ERROR_MESSAGES})
90message(STATUS "JERRY_EXTERNAL_CONTEXT         " ${JERRY_EXTERNAL_CONTEXT})
91message(STATUS "JERRY_PARSER                   " ${JERRY_PARSER})
92message(STATUS "JERRY_LINE_INFO                " ${JERRY_LINE_INFO})
93message(STATUS "JERRY_LOGGING                  " ${JERRY_LOGGING} ${JERRY_LOGGING_MESSAGE})
94message(STATUS "JERRY_MEM_STATS                " ${JERRY_MEM_STATS})
95message(STATUS "JERRY_MEM_GC_BEFORE_EACH_ALLOC " ${JERRY_MEM_GC_BEFORE_EACH_ALLOC})
96message(STATUS "JERRY_PARSER_DUMP_BYTE_CODE    " ${JERRY_PARSER_DUMP_BYTE_CODE} ${JERRY_PARSER_DUMP_MESSAGE})
97message(STATUS "JERRY_PROFILE                  " ${JERRY_PROFILE})
98message(STATUS "JERRY_REGEXP_STRICT_MODE       " ${JERRY_REGEXP_STRICT_MODE})
99message(STATUS "JERRY_REGEXP_DUMP_BYTE_CODE    " ${JERRY_REGEXP_DUMP_BYTE_CODE})
100message(STATUS "JERRY_SNAPSHOT_EXEC            " ${JERRY_SNAPSHOT_EXEC} ${JERRY_SNAPSHOT_EXEC_MESSAGE})
101message(STATUS "JERRY_SNAPSHOT_SAVE            " ${JERRY_SNAPSHOT_SAVE} ${JERRY_SNAPSHOT_SAVE_MESSAGE})
102message(STATUS "JERRY_SYSTEM_ALLOCATOR         " ${JERRY_SYSTEM_ALLOCATOR})
103message(STATUS "JERRY_VALGRIND                 " ${JERRY_VALGRIND})
104message(STATUS "JERRY_VM_EXEC_STOP             " ${JERRY_VM_EXEC_STOP})
105message(STATUS "JERRY_GLOBAL_HEAP_SIZE         " ${JERRY_GLOBAL_HEAP_SIZE})
106message(STATUS "JERRY_GC_LIMIT                 " ${JERRY_GC_LIMIT})
107message(STATUS "JERRY_STACK_LIMIT              " ${JERRY_STACK_LIMIT})
108message(STATUS "JERRY_GC_MARK_LIMIT            " ${JERRY_GC_MARK_LIMIT})
109
110# Include directories
111set(INCLUDE_CORE_PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
112set(INCLUDE_CORE_PRIVATE
113    "${CMAKE_CURRENT_SOURCE_DIR}"
114    "${CMAKE_CURRENT_SOURCE_DIR}/api"
115    "${CMAKE_CURRENT_SOURCE_DIR}/debugger"
116    "${CMAKE_CURRENT_SOURCE_DIR}/ecma/base"
117    "${CMAKE_CURRENT_SOURCE_DIR}/ecma/builtin-objects"
118    "${CMAKE_CURRENT_SOURCE_DIR}/ecma/builtin-objects/typedarray"
119    "${CMAKE_CURRENT_SOURCE_DIR}/ecma/operations"
120    "${CMAKE_CURRENT_SOURCE_DIR}/ext"
121    "${CMAKE_CURRENT_SOURCE_DIR}/jcontext"
122    "${CMAKE_CURRENT_SOURCE_DIR}/jmem"
123    "${CMAKE_CURRENT_SOURCE_DIR}/jrt"
124    "${CMAKE_CURRENT_SOURCE_DIR}/lit"
125    "${CMAKE_CURRENT_SOURCE_DIR}/parser/js"
126    "${CMAKE_CURRENT_SOURCE_DIR}/parser/regexp"
127    "${CMAKE_CURRENT_SOURCE_DIR}/vm")
128
129set(INCLUDE_CORE_PUBLIC ${INCLUDE_CORE_PUBLIC} PARENT_SCOPE) # for jerry-port
130set(INCLUDE_CORE_PRIVATE ${INCLUDE_CORE_PRIVATE} PARENT_SCOPE) # for tests/unit-core
131
132# Sources
133# Jerry core
134file(GLOB SOURCE_CORE_FILES
135     api/*.c
136     debugger/*.c
137     ecma/base/*.c
138     ecma/builtin-objects/*.c
139     ecma/builtin-objects/typedarray/*.c
140     ecma/operations/*.c
141     ext/*.c
142     jcontext/*.c
143     jmem/*.c
144     jrt/*.c
145     lit/*.c
146     parser/js/*.c
147     parser/regexp/*.c
148     vm/*.c)
149
150list(FILTER SOURCE_CORE_FILES EXCLUDE REGEX  "api/generate-bytecode.c")
151list(FILTER SOURCE_CORE_FILES EXCLUDE REGEX  "api/external-context-helpers.c")
152list(FILTER SOURCE_CORE_FILES EXCLUDE REGEX  "api/jerryscript_adapter.c")
153
154# All-in-one build
155if(ENABLE_ALL_IN_ONE)
156  set(ALL_IN_FILE "${CMAKE_BINARY_DIR}/jerry-all-in.c")
157  list(SORT SOURCE_CORE_FILES)
158  file(REMOVE ${ALL_IN_FILE})
159
160  foreach(FILE ${SOURCE_CORE_FILES})
161    file(APPEND ${ALL_IN_FILE} "#include \"${FILE}\"\n")
162  endforeach()
163
164  set(SOURCE_CORE_FILES ${ALL_IN_FILE})
165endif()
166
167# "Single" JerryScript source/header build.
168#  The process will create the following files:
169#   * jerryscript.c
170#   * jerryscript.h
171#   * jerryscript-config.h
172if(ENABLE_ALL_IN_ONE_SOURCE)
173
174  # Create single C/H file
175  file(GLOB HEADER_CORE_FILES *.h)
176
177  # Generated files
178  set(ALL_IN_FILE "${CMAKE_BINARY_DIR}/src/jerryscript.c")
179  set(ALL_IN_FILE_H "${CMAKE_BINARY_DIR}/src/jerryscript.h")
180  set(JERRYSCRIPT_CONFIG_H "${CMAKE_BINARY_DIR}/src/jerryscript-config.h")
181
182  add_custom_command(OUTPUT ${ALL_IN_FILE} ${ALL_IN_FILE_H}
183                     COMMAND python ${CMAKE_SOURCE_DIR}/tools/srcgenerator.py
184                             --jerry-core
185                             --output-dir ${CMAKE_BINARY_DIR}/src
186                     DEPENDS ${SOURCE_CORE_FILES}
187                             ${HEADER_CORE_FILES}
188                             ${CMAKE_SOURCE_DIR}/tools/srcgenerator.py
189                             ${CMAKE_SOURCE_DIR}/tools/srcmerger.py
190  )
191
192  # The "true" jerryscript-config.h will be generated by the configure_file below,
193  # which contains the default options and the ones passed for the CMake.
194  # The input for this is the jerryscript-config.h generated by the command above.
195  set(JERRYSCRIPT_GEN_CONFIG_H ${CMAKE_CURRENT_BINARY_DIR}/jerryscript-config.h)
196  add_custom_command(OUTPUT ${JERRYSCRIPT_CONFIG_H}
197                     COMMAND ${CMAKE_COMMAND} -E copy ${JERRYSCRIPT_GEN_CONFIG_H} ${JERRYSCRIPT_CONFIG_H}
198                     DEPENDS ${ALL_IN_FILE_C} ${ALL_IN_FILE_H})
199  add_custom_target(generate-single-source-jerry DEPENDS ${ALL_IN_FILE} ${ALL_IN_FILE_H})
200  add_dependencies(generate-single-source generate-single-source-jerry)
201
202  set(SOURCE_CORE_FILES ${ALL_IN_FILE} ${ALL_IN_FILE_H} ${JERRYSCRIPT_CONFIG_H})
203endif()
204
205# Third-party
206# Valgrind
207set(INCLUDE_THIRD_PARTY_VALGRIND "${CMAKE_SOURCE_DIR}/third-party/valgrind")
208
209# build mode specific compile/link flags
210set(DEFINES_JERRY ${DEFINES_JERRY} $<$<NOT:$<CONFIG:Debug>>:JERRY_NDEBUG>)
211set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_FUNCTION_NAME)
212set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_FUNCTION_BACKTRACE)
213set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_HEAPDUMP)
214set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_REF_TRACKER)
215
216# Jerry heap-section
217if(DEFINED JERRY_ATTR_GLOBAL_HEAP)
218  set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_ATTR_GLOBAL_HEAP=${JERRY_ATTR_GLOBAL_HEAP})
219endif()
220
221# Memory usage limit for triggering garbage collection
222if(JERRY_GC_LIMIT)
223  set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_GC_LIMIT=${JERRY_GC_LIMIT})
224endif()
225
226# Helper macro to set 0/1 switch as Jerry Defines
227macro(jerry_add_define01 NAME)
228  if(${NAME})
229    set(DEFINES_JERRY ${DEFINES_JERRY} ${NAME}=1)
230  else()
231    set(DEFINES_JERRY ${DEFINES_JERRY} ${NAME}=0)
232  endif()
233endmacro(jerry_add_define01)
234
235# Checks the optional features
236# Enable 32 bit cpointers
237jerry_add_define01(JERRY_CPOINTER_32_BIT)
238
239# Fill error messages for builtin error objects
240#jerry_add_define01(JERRY_ERROR_MESSAGES)
241
242# Use external context instead of static one
243jerry_add_define01(JERRY_EXTERNAL_CONTEXT)
244
245# JS-Parser
246jerry_add_define01(JERRY_PARSER)
247
248# JS line info
249jerry_add_define01(JERRY_LINE_INFO)
250
251# Logging
252#jerry_add_define01(JERRY_LOGGING)
253
254# Memory statistics
255#jerry_add_define01(JERRY_MEM_STATS)
256
257# Enable debugger
258jerry_add_define01(JERRY_DEBUGGER)
259
260# Memory management stress-test mode
261jerry_add_define01(JERRY_MEM_GC_BEFORE_EACH_ALLOC)
262
263# Parser byte-code dumps
264jerry_add_define01(JERRY_PARSER_DUMP_BYTE_CODE)
265
266# Profile
267if (NOT IS_ABSOLUTE ${JERRY_PROFILE})
268  set(JERRY_PROFILE "${CMAKE_CURRENT_SOURCE_DIR}/profiles/${JERRY_PROFILE}.profile")
269endif()
270
271if(EXISTS ${JERRY_PROFILE})
272  file(READ "${JERRY_PROFILE}" PROFILE_SETTINGS)
273  string(REGEX REPLACE "^#.*$" "" PROFILE_SETTINGS "${PROFILE_SETTINGS}")
274  string(REGEX REPLACE "[\r|\n]" ";" PROFILE_SETTINGS "${PROFILE_SETTINGS}")
275
276  # Process entries and save them as CMake variables.
277  # This is required to correctly generate the jerryscript-config.h file.
278  foreach(PROFILE_ENTRY ${PROFILE_SETTINGS})
279    string(REPLACE "=" ";" PROFILE_ENTRY "${PROFILE_ENTRY}")
280    list(GET PROFILE_ENTRY 0 PROFILE_KEY)
281    list(GET PROFILE_ENTRY 1 PROFILE_VALUE)
282    set(${PROFILE_KEY} ${PROFILE_VALUE})
283  endforeach()
284
285  set(DEFINES_JERRY ${DEFINES_JERRY} ${PROFILE_SETTINGS})
286else()
287  message(FATAL_ERROR "Profile file: '${JERRY_PROFILE}' doesn't exist!")
288endif()
289
290# RegExp strict mode
291jerry_add_define01(JERRY_REGEXP_STRICT_MODE)
292
293# RegExp byte-code dumps
294jerry_add_define01(JERRY_REGEXP_DUMP_BYTE_CODE)
295
296# Snapshot exec
297#jerry_add_define01(JERRY_SNAPSHOT_EXEC)
298
299# Snapshot save
300#jerry_add_define01(JERRY_SNAPSHOT_SAVE)
301
302# Enable system allocator
303jerry_add_define01(JERRY_SYSTEM_ALLOCATOR)
304
305# Valgrind
306jerry_add_define01(JERRY_VALGRIND)
307if(JERRY_VALGRIND)
308  set(INCLUDE_CORE_PRIVATE ${INCLUDE_CORE_PRIVATE} ${INCLUDE_THIRD_PARTY_VALGRIND})
309endif()
310
311# Enable VM execution stopping
312jerry_add_define01(JERRY_VM_EXEC_STOP)
313
314# Size of heap
315#set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_GLOBAL_HEAP_SIZE=${JERRY_GLOBAL_HEAP_SIZE})
316
317# Maximum size of stack memory usage
318set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_STACK_LIMIT=${JERRY_STACK_LIMIT})
319
320# Maximum depth of recursion during GC mark phase
321set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_GC_MARK_LIMIT=${JERRY_GC_MARK_LIMIT})
322
323## This function is to read "config.h" for default values
324function(read_set_defines FILE PREFIX OUTPUTVAR)
325  file(READ "${CMAKE_CURRENT_SOURCE_DIR}/${FILE}" INPUT_FILE_CONTENTS)
326
327  # match all "#define <PREFIX>\n" lines
328  # notes:
329  #  * before the "#" there must be a newline and any number of spaces.
330  #  * after the "#" there can be any number of spaces.
331  string(REGEX MATCHALL "\r?\n[ ]*#[ ]*define ${PREFIX}[^\n]*"
332         RAW_DEFINES "${INPUT_FILE_CONTENTS}")
333
334  set(SELECTED_VARS )
335
336  # Transform the defines to a list of (<name>; <value>; <name 2>; <value 2>; ...) list
337  foreach(DEFINE_ENTRY ${RAW_DEFINES})
338    # by default every define value is empty
339    set(DEFINE_VALUE " ")
340
341    # split up the define at the space between the define name and value (if there is any)
342
343    # first remove "#define" part of the string
344    string(REGEX REPLACE "\r?\n[ ]*#[ ]*define[ ]+" "" DEFINE_KEY_VALUE "${DEFINE_ENTRY}")
345    string(FIND "${DEFINE_KEY_VALUE}" " " DEFINE_KEY_IDX)
346    string(LENGTH "${DEFINE_KEY_VALUE}" DEFINE_LENGTH)
347
348    if (DEFINE_KEY_IDX EQUAL "-1")
349        set(DEFINE_KEY ${DEFINE_KEY_VALUE})
350    else()
351        string(SUBSTRING "${DEFINE_KEY_VALUE}" 0 ${DEFINE_KEY_IDX} DEFINE_KEY)
352        string(SUBSTRING "${DEFINE_KEY_VALUE}" ${DEFINE_KEY_IDX} -1 DEFINE_VALUE)
353        string(STRIP "${DEFINE_VALUE}" DEFINE_VALUE)
354    endif()
355
356    list(APPEND SELECTED_VARS ${DEFINE_KEY} ${DEFINE_VALUE})
357  endforeach()
358
359  set(${OUTPUTVAR} ${SELECTED_VARS} PARENT_SCOPE)
360endfunction(read_set_defines)
361
362# CONFIG_DEFAULTS contains define name and values which have the JERRY_ prefix
363# as a list of (<name>; <value>; <name 2>; <value 2>; ...)
364read_set_defines("config.h" JERRY_ CONFIG_DEFAULTS)
365
366
367## Process the default values and build options to generate build config defines
368list(LENGTH CONFIG_DEFAULTS CONFIG_DEFAULT_LENGTH)
369math(EXPR CONFIG_DEFAULT_LENGTH "${CONFIG_DEFAULT_LENGTH} - 1")
370
371set(JERRY_MODIFIED_OPTIONS)
372foreach(CONFIG_IDX RANGE 0 ${CONFIG_DEFAULT_LENGTH} 2)
373  list(GET CONFIG_DEFAULTS ${CONFIG_IDX} KEY)
374  math(EXPR VALUE_IDX "${CONFIG_IDX} + 1")
375  list(GET CONFIG_DEFAULTS ${VALUE_IDX} VALUE)
376
377  # ${KEY} is the value for the given variable (aka define)
378  # normalize ON/OFF cmake values to 1/0 for easier processing.
379  if(${KEY} STREQUAL "ON")
380    set(${KEY} 1)
381  elseif(${KEY} STREQUAL "OFF")
382    set(${KEY} 0)
383  endif()
384
385  # Generate "#define JERRY_<CONFIG> <CONFIG_VALUE>" entries if it is different from
386  # the config default.
387
388  # If the define loaded from the config file have a different value than the
389  # relevant option passed for the CMake means that it does not have a default value.
390  if(DEFINED ${KEY} AND NOT (${KEY} STREQUAL ${VALUE}))
391    set(JERRY_MODIFIED_OPTIONS "${JERRY_MODIFIED_OPTIONS}#define ${KEY} ${${KEY}}\n")
392  endif()
393endforeach()
394
395# Generate the jerryscript-config.h file into the build directory
396# This file will contain the options different from the default (aka it's the build config).
397if(JERRY_MODIFIED_OPTIONS)
398  set(JERRY_BUILD_CFG
399      "Generated differences from default by CMake based on build options:\n${JERRY_MODIFIED_OPTIONS}")
400else()
401  set(JERRY_BUILD_CFG "JerryScript configuration")
402endif()
403configure_file(config.h jerryscript-config.h @ONLY)
404
405add_library(${JERRY_CORE_NAME} ${SOURCE_CORE_FILES})
406
407target_compile_definitions(${JERRY_CORE_NAME} PUBLIC ${DEFINES_JERRY})
408target_include_directories(${JERRY_CORE_NAME} PUBLIC ${INCLUDE_CORE_PUBLIC})
409target_include_directories(${JERRY_CORE_NAME} PRIVATE ${INCLUDE_CORE_PRIVATE})
410
411set(JERRY_CORE_PKGCONFIG_REQUIRES)
412set(JERRY_CORE_PKGCONFIG_LIBS)
413set(JERRY_CORE_PKGCONFIG_CFLAGS)
414
415if(ENABLE_LTO)
416  set(JERRY_CORE_PKGCONFIG_CFLAGS "${JERRY_CORE_PKGCONFIG_CFLAGS} -flto")
417endif()
418
419if(JERRY_LIBM)
420  target_link_libraries(${JERRY_CORE_NAME} jerry-libm)
421  set(JERRY_CORE_PKGCONFIG_REQUIRES libjerry-libm)
422endif()
423
424separate_arguments(EXTERNAL_LINK_LIBS)
425foreach(EXT_LIB ${EXTERNAL_LINK_LIBS})
426  target_link_libraries(${JERRY_CORE_NAME} ${EXT_LIB})
427  set(JERRY_CORE_PKGCONFIG_LIBS "${JERRY_CORE_PKGCONFIG_LIBS} -l${EXT_LIB}")
428endforeach()
429
430configure_file(libjerry-core.pc.in libjerry-core.pc @ONLY)
431
432install(TARGETS ${JERRY_CORE_NAME} DESTINATION lib)
433install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libjerry-core.pc DESTINATION lib/pkgconfig)
434install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jerryscript-config.h DESTINATION include)
435install(DIRECTORY ${INCLUDE_CORE_PUBLIC}/ DESTINATION include)
436