Add logging support for linux.
JerryScript-DCO-1.0-Signed-off-by: Andrey Shitov a.shitov@samsung.com
This commit is contained in:
@@ -61,6 +61,7 @@ project (Jerry CXX C ASM)
|
|||||||
# Determining platform and defining options
|
# Determining platform and defining options
|
||||||
option(ENABLE_VALGRIND "Enable valgrind helpers in memory allocators" OFF)
|
option(ENABLE_VALGRIND "Enable valgrind helpers in memory allocators" OFF)
|
||||||
option(ENABLE_LTO "Enable LTO build" ON)
|
option(ENABLE_LTO "Enable LTO build" ON)
|
||||||
|
option(ENABLE_LOG "Enable LOG build" OFF)
|
||||||
|
|
||||||
set(PLATFORM "${CMAKE_SYSTEM_NAME}")
|
set(PLATFORM "${CMAKE_SYSTEM_NAME}")
|
||||||
string(TOUPPER "${PLATFORM}" PLATFORM)
|
string(TOUPPER "${PLATFORM}" PLATFORM)
|
||||||
@@ -337,6 +338,10 @@ project (Jerry CXX C ASM)
|
|||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||||
add_custom_target(mcu_header_with_script_to_run.${TARGET_NAME} DEPENDS ${MCU_SCRIPT_GENERATED_HEADER})
|
add_custom_target(mcu_header_with_script_to_run.${TARGET_NAME} DEPENDS ${MCU_SCRIPT_GENERATED_HEADER})
|
||||||
set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_MCU_SCRIPT_HEADER="${MCU_SCRIPT_GENERATED_HEADER}")
|
set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_MCU_SCRIPT_HEADER="${MCU_SCRIPT_GENERATED_HEADER}")
|
||||||
|
elseif("${PLATFORM}" STREQUAL "LINUX")
|
||||||
|
if("${ENABLE_LOG}" STREQUAL "ON")
|
||||||
|
set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_ENABLE_LOG)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set_property(TARGET ${TARGET_NAME}
|
set_property(TARGET ${TARGET_NAME}
|
||||||
|
|||||||
@@ -62,6 +62,12 @@
|
|||||||
LTO := OFF
|
LTO := OFF
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# LOG
|
||||||
|
LOG ?= OFF
|
||||||
|
ifneq ($(LOG),ON)
|
||||||
|
LOG := OFF
|
||||||
|
endif
|
||||||
|
|
||||||
# External build configuration
|
# External build configuration
|
||||||
# List of include paths for external libraries (semicolon-separated)
|
# List of include paths for external libraries (semicolon-separated)
|
||||||
EXTERNAL_LIBS_INTERFACE ?=
|
EXTERNAL_LIBS_INTERFACE ?=
|
||||||
@@ -151,7 +157,7 @@ $(BUILD_DIRS_NATIVE): prerequisites
|
|||||||
fi; \
|
fi; \
|
||||||
mkdir -p $@ && \
|
mkdir -p $@ && \
|
||||||
cd $@ && \
|
cd $@ && \
|
||||||
cmake -DENABLE_VALGRIND=$(VALGRIND) -DENABLE_LTO=$(LTO) -DCMAKE_TOOLCHAIN_FILE=build/configs/toolchain_linux_$$arch.cmake ../../.. &>cmake.log || \
|
cmake -DENABLE_VALGRIND=$(VALGRIND) -DENABLE_LOG=$(LOG) -DENABLE_LTO=$(LTO) -DCMAKE_TOOLCHAIN_FILE=build/configs/toolchain_linux_$$arch.cmake ../../.. &>cmake.log || \
|
||||||
(echo "CMake run failed. See "`pwd`"/cmake.log for details."; exit 1;)
|
(echo "CMake run failed. See "`pwd`"/cmake.log for details."; exit 1;)
|
||||||
|
|
||||||
$(BUILD_DIRS_NUTTX): prerequisites
|
$(BUILD_DIRS_NUTTX): prerequisites
|
||||||
|
|||||||
@@ -140,6 +140,11 @@ project (JerryCore CXX C ASM)
|
|||||||
set(INCLUDE_CORE ${INCLUDE_CORE} ${INCLUDE_THIRD_PARTY_VALGRIND})
|
set(INCLUDE_CORE ${INCLUDE_CORE} ${INCLUDE_THIRD_PARTY_VALGRIND})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Log
|
||||||
|
if("${ENABLE_LOG}" STREQUAL "ON")
|
||||||
|
set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_ENABLE_LOG)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Platform-specific configuration
|
# Platform-specific configuration
|
||||||
set(DEFINES_JERRY ${DEFINES_JERRY} ${DEFINES_JERRY_${PLATFORM_EXT}})
|
set(DEFINES_JERRY ${DEFINES_JERRY} ${DEFINES_JERRY_${PLATFORM_EXT}})
|
||||||
|
|
||||||
|
|||||||
+15
-2
@@ -71,6 +71,11 @@ static bool jerry_api_available;
|
|||||||
*/
|
*/
|
||||||
char jerry_extension_characters_buffer[CONFIG_EXTENSION_CHAR_BUFFER_SIZE];
|
char jerry_extension_characters_buffer[CONFIG_EXTENSION_CHAR_BUFFER_SIZE];
|
||||||
|
|
||||||
|
#ifdef JERRY_ENABLE_LOG
|
||||||
|
int jerry_debug_level = 0;
|
||||||
|
FILE *jerry_log_file = nullptr;
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assert that it is correct to call API in current state.
|
* Assert that it is correct to call API in current state.
|
||||||
*
|
*
|
||||||
@@ -1119,6 +1124,13 @@ jerry_api_eval (const char *source_p, /**< source code */
|
|||||||
void
|
void
|
||||||
jerry_init (jerry_flag_t flags) /**< combination of Jerry flags */
|
jerry_init (jerry_flag_t flags) /**< combination of Jerry flags */
|
||||||
{
|
{
|
||||||
|
if (flags & (JERRY_FLAG_ENABLE_LOG))
|
||||||
|
{
|
||||||
|
#ifndef JERRY_ENABLE_LOG
|
||||||
|
JERRY_WARNING_MSG ("Ignoring log options because of '!JERRY_ENABLE_LOG' build configuration.\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & (JERRY_FLAG_MEM_STATS))
|
if (flags & (JERRY_FLAG_MEM_STATS))
|
||||||
{
|
{
|
||||||
#ifndef MEM_STATS
|
#ifndef MEM_STATS
|
||||||
@@ -1126,14 +1138,15 @@ jerry_init (jerry_flag_t flags) /**< combination of Jerry flags */
|
|||||||
| JERRY_FLAG_MEM_STATS_PER_OPCODE
|
| JERRY_FLAG_MEM_STATS_PER_OPCODE
|
||||||
| JERRY_FLAG_MEM_STATS_SEPARATE);
|
| JERRY_FLAG_MEM_STATS_SEPARATE);
|
||||||
|
|
||||||
printf ("Ignoring memory statistics option because of '!MEM_STATS' build configuration.\n");
|
JERRY_WARNING_MSG ("Ignoring memory statistics option because of '!MEM_STATS' build configuration.\n");
|
||||||
#endif /* !MEM_STATS */
|
#endif /* !MEM_STATS */
|
||||||
}
|
}
|
||||||
else if (flags & (JERRY_FLAG_MEM_STATS_PER_OPCODE | JERRY_FLAG_MEM_STATS_SEPARATE))
|
else if (flags & (JERRY_FLAG_MEM_STATS_PER_OPCODE | JERRY_FLAG_MEM_STATS_SEPARATE))
|
||||||
{
|
{
|
||||||
flags &= ~(JERRY_FLAG_MEM_STATS_PER_OPCODE | JERRY_FLAG_MEM_STATS_SEPARATE);
|
flags &= ~(JERRY_FLAG_MEM_STATS_PER_OPCODE | JERRY_FLAG_MEM_STATS_SEPARATE);
|
||||||
|
|
||||||
printf ("Ignoring detailed memory statistics options because memory statistics dump mode is not enabled.\n");
|
JERRY_WARNING_MSG (
|
||||||
|
"Ignoring detailed memory statistics options because memory statistics dump mode is not enabled.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
jerry_flags = flags;
|
jerry_flags = flags;
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ typedef uint32_t jerry_flag_t;
|
|||||||
#define JERRY_FLAG_MEM_STATS_SEPARATE (1u << 3) /**< dump memory statistics and reset peak values after parse */
|
#define JERRY_FLAG_MEM_STATS_SEPARATE (1u << 3) /**< dump memory statistics and reset peak values after parse */
|
||||||
#define JERRY_FLAG_PARSE_ONLY (1u << 4) /**< parse only, prevents script execution (only for testing)
|
#define JERRY_FLAG_PARSE_ONLY (1u << 4) /**< parse only, prevents script execution (only for testing)
|
||||||
* FIXME: Remove. */
|
* FIXME: Remove. */
|
||||||
|
#define JERRY_FLAG_ENABLE_LOG (1u << 5) /**< enable logging */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Error codes
|
* Error codes
|
||||||
@@ -67,6 +68,11 @@ extern const char *jerry_commit_hash;
|
|||||||
*/
|
*/
|
||||||
extern const char *jerry_branch_name;
|
extern const char *jerry_branch_name;
|
||||||
|
|
||||||
|
#ifdef JERRY_ENABLE_LOG
|
||||||
|
extern int jerry_debug_level;
|
||||||
|
extern FILE *jerry_log_file;
|
||||||
|
#endif /* JERRY_ENABLE_LOG */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Jerry error callback type
|
* Jerry error callback type
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
#ifndef JERRY_GLOBALS_H
|
#ifndef JERRY_GLOBALS_H
|
||||||
#define JERRY_GLOBALS_H
|
#define JERRY_GLOBALS_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
#include "jerry.h"
|
#include "jerry.h"
|
||||||
#include "jrt-types.h"
|
#include "jrt-types.h"
|
||||||
|
|
||||||
@@ -92,6 +93,36 @@ extern void __noreturn jerry_unimplemented (const char *comment, const char *fil
|
|||||||
#define JERRY_ASSERT(x) do { if (false) { (void)(x); } } while (0)
|
#define JERRY_ASSERT(x) do { if (false) { (void)(x); } } while (0)
|
||||||
#endif /* !JERRY_NDEBUG */
|
#endif /* !JERRY_NDEBUG */
|
||||||
|
|
||||||
|
#ifdef JERRY_ENABLE_LOG
|
||||||
|
#define JERRY_LOG(lvl, ...) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
if (lvl <= jerry_debug_level && jerry_log_file) \
|
||||||
|
{ \
|
||||||
|
fprintf (jerry_log_file, __VA_ARGS__); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
#define JERRY_DLOG(...) JERRY_LOG (1, __VA_ARGS__)
|
||||||
|
#define JERRY_DDLOG(...) JERRY_LOG (2, __VA_ARGS__)
|
||||||
|
#define JERRY_DDDLOG(...) JERRY_LOG (3, __VA_ARGS__)
|
||||||
|
#else /* !JERRY_ENABLE_LOG */
|
||||||
|
#define JERRY_DLOG(...) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
if (false) \
|
||||||
|
{ \
|
||||||
|
jerry_ref_unused_variables (0, __VA_ARGS__); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#define JERRY_DDLOG(...) JERRY_DLOG (__VA_ARGS__)
|
||||||
|
#define JERRY_DDDLOG(...) JERRY_DLOG (__VA_ARGS__)
|
||||||
|
#endif /* !JERRY_ENABLE_LOG */
|
||||||
|
|
||||||
|
#define JERRY_ERROR_MSG(...) fprintf (stderr, __VA_ARGS__)
|
||||||
|
#define JERRY_WARNING_MSG(...) JERRY_ERROR_MSG (__VA_ARGS__)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark for unreachable points and unimplemented cases
|
* Mark for unreachable points and unimplemented cases
|
||||||
*/
|
*/
|
||||||
|
|||||||
+60
-2
@@ -17,6 +17,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "jerry.h"
|
#include "jerry.h"
|
||||||
|
#include "jrt/jrt.h"
|
||||||
|
|
||||||
#include "plugins/io/init.h"
|
#include "plugins/io/init.h"
|
||||||
|
|
||||||
@@ -93,7 +94,7 @@ read_sources (const char *script_file_names[],
|
|||||||
|
|
||||||
if (i < files_count)
|
if (i < files_count)
|
||||||
{
|
{
|
||||||
printf ("Failed to read script N%d\n", i + 1);
|
JERRY_ERROR_MSG ("Failed to read script N%d\n", i + 1);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -113,7 +114,7 @@ main (int argc,
|
|||||||
{
|
{
|
||||||
if (argc >= JERRY_MAX_COMMAND_LINE_ARGS)
|
if (argc >= JERRY_MAX_COMMAND_LINE_ARGS)
|
||||||
{
|
{
|
||||||
printf ("Too many command line arguments. Current maximum is %d (JERRY_MAX_COMMAND_LINE_ARGS)\n", argc);
|
JERRY_ERROR_MSG ("Too many command line arguments. Current maximum is %d (JERRY_MAX_COMMAND_LINE_ARGS)\n", argc);
|
||||||
|
|
||||||
return JERRY_STANDALONE_EXIT_CODE_FAIL;
|
return JERRY_STANDALONE_EXIT_CODE_FAIL;
|
||||||
}
|
}
|
||||||
@@ -130,6 +131,9 @@ main (int argc,
|
|||||||
|
|
||||||
jerry_flag_t flags = JERRY_FLAG_EMPTY;
|
jerry_flag_t flags = JERRY_FLAG_EMPTY;
|
||||||
|
|
||||||
|
#ifdef JERRY_ENABLE_LOG
|
||||||
|
const char *log_file_name = nullptr;
|
||||||
|
#endif /* JERRY_ENABLE_LOG */
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (!strcmp ("-v", argv[i]))
|
if (!strcmp ("-v", argv[i]))
|
||||||
@@ -159,6 +163,36 @@ main (int argc,
|
|||||||
{
|
{
|
||||||
flags |= JERRY_FLAG_SHOW_OPCODES;
|
flags |= JERRY_FLAG_SHOW_OPCODES;
|
||||||
}
|
}
|
||||||
|
else if (!strcmp ("--log-level", argv[i]))
|
||||||
|
{
|
||||||
|
flags |= JERRY_FLAG_ENABLE_LOG;
|
||||||
|
if (++i < argc && strlen (argv[i]) == 1 && argv[i][0] >='0' && argv[i][0] <= '3')
|
||||||
|
{
|
||||||
|
#ifdef JERRY_ENABLE_LOG
|
||||||
|
jerry_debug_level = argv[i][0] - '0';
|
||||||
|
#endif /* JERRY_ENABLE_LOG */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
JERRY_ERROR_MSG ("Error: wrong format or invalid argument\n");
|
||||||
|
return JERRY_STANDALONE_EXIT_CODE_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!strcmp ("--log-file", argv[i]))
|
||||||
|
{
|
||||||
|
flags |= JERRY_FLAG_ENABLE_LOG;
|
||||||
|
if (++i < argc)
|
||||||
|
{
|
||||||
|
#ifdef JERRY_ENABLE_LOG
|
||||||
|
log_file_name = argv[i];
|
||||||
|
#endif /* JERRY_ENABLE_LOG */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
JERRY_ERROR_MSG ("Error: wrong format of the arguments\n");
|
||||||
|
return JERRY_STANDALONE_EXIT_CODE_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
file_names[files_counter++] = argv[i];
|
file_names[files_counter++] = argv[i];
|
||||||
@@ -180,6 +214,22 @@ main (int argc,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#ifdef JERRY_ENABLE_LOG
|
||||||
|
if (log_file_name)
|
||||||
|
{
|
||||||
|
jerry_log_file = fopen (log_file_name, "w");
|
||||||
|
if (jerry_log_file == nullptr)
|
||||||
|
{
|
||||||
|
JERRY_ERROR_MSG ("Failed to open log file: %s\n", log_file_name);
|
||||||
|
return JERRY_STANDALONE_EXIT_CODE_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
jerry_log_file = stdout;
|
||||||
|
}
|
||||||
|
#endif /* JERRY_ENABLE_LOG */
|
||||||
|
|
||||||
jerry_init (flags);
|
jerry_init (flags);
|
||||||
|
|
||||||
plugin_io_init ();
|
plugin_io_init ();
|
||||||
@@ -201,6 +251,14 @@ main (int argc,
|
|||||||
|
|
||||||
jerry_cleanup ();
|
jerry_cleanup ();
|
||||||
|
|
||||||
|
#ifdef JERRY_ENABLE_LOG
|
||||||
|
if (jerry_log_file && jerry_log_file != stdout)
|
||||||
|
{
|
||||||
|
fclose (jerry_log_file);
|
||||||
|
jerry_log_file = nullptr;
|
||||||
|
}
|
||||||
|
#endif /* JERRY_ENABLE_LOG */
|
||||||
|
|
||||||
if (ret_code == JERRY_COMPLETION_CODE_OK)
|
if (ret_code == JERRY_COMPLETION_CODE_OK)
|
||||||
{
|
{
|
||||||
return JERRY_STANDALONE_EXIT_CODE_OK;
|
return JERRY_STANDALONE_EXIT_CODE_OK;
|
||||||
|
|||||||
Reference in New Issue
Block a user