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