diff --git a/CMakeLists.txt b/CMakeLists.txt index 98d1ece..38752f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,9 @@ cmake_minimum_required(VERSION 3.5) project( - project-name - VERSION 0.0.0 - DESCRIPTION "" - HOMEPAGE_URL "" + weaseljson + VERSION 0.0.1 + DESCRIPTION "A constant memory streaming json parser." + HOMEPAGE_URL "https://git.weaselab.dev/weaselab/weaseljson" LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 20) @@ -44,6 +44,55 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") include(CTest) include(doctest) +add_library(${PROJECT_NAME}-object OBJECT src/lib.cpp) +target_compile_options(${PROJECT_NAME}-object PRIVATE -fno-exceptions + -fvisibility=hidden) +target_include_directories(${PROJECT_NAME}-object + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) + +if(NOT LD_EXE) + set(LD_EXE ld) +endif() + +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "") + +add_custom_command( + OUTPUT ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.o + COMMAND ${LD_EXE} -r $ -o + ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.o + DEPENDS $ + COMMAND_EXPAND_LISTS) + +add_library(${PROJECT_NAME} SHARED ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.o) +if(CMAKE_BUILD_TYPE STREQUAL Debug) + set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX) +else() + set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C) +endif() + +if(HAS_VERSION_SCRIPT) + target_link_options( + ${PROJECT_NAME} PRIVATE + LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/linker.map) +endif() + +add_library(${PROJECT_NAME}-static STATIC ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.o) +if(CMAKE_BUILD_TYPE STREQUAL Debug) + set_target_properties(${PROJECT_NAME}-static PROPERTIES LINKER_LANGUAGE CXX) +else() + set_target_properties(${PROJECT_NAME}-static PROPERTIES LINKER_LANGUAGE C) +endif() +if(NOT APPLE) + add_custom_command( + TARGET ${PROJECT_NAME}-static + POST_BUILD + COMMAND + ${CMAKE_OBJCOPY} + --keep-global-symbols=${CMAKE_CURRENT_SOURCE_DIR}/symbol-exports.txt + $ || echo + "Proceeding with all symbols global in static library") +endif() + add_executable(mytest src/test.cpp) target_include_directories(mytest PRIVATE include) target_link_libraries(mytest PRIVATE doctest nanobench simdjson) diff --git a/src/lib.cpp b/src/lib.cpp new file mode 100644 index 0000000..6672b2a --- /dev/null +++ b/src/lib.cpp @@ -0,0 +1,25 @@ +#include "parser3.h" +#include "weaseljson.h" + +extern "C" { + +/** Create a parser. Increasing stack size increases memory usage but also + * increases the depth of nested json accepted. `callbacks` and `data` must + * outlive the returned parser. */ +__attribute__((visibility("default"))) WeaselJsonParser * +WeaselJsonParser_create(int stackSize, const WeaselJsonCallbacks *callbacks, + void *data) {} + +/** Restore the parser to its newly-created state */ +__attribute__((visibility("default"))) void +WeaselJsonParser_reset(WeaselJsonParser *parser) {} + +/** Destroy the parser */ +__attribute__((visibility("default"))) void +WeaselJsonParser_destroy(WeaselJsonParser *parser) {} + +/** Incrementally parse `len` more bytes starting at `buf`. `buf` may be + * modified. Call with `len` 0 to indicate end of data */ +__attribute__((visibility("default"))) WeaselJsonStatus +WeaselJsonParser_parse(WeaselJsonParser *parser, char *buf, int len) {} +} diff --git a/symbol-exports.txt b/symbol-exports.txt new file mode 100644 index 0000000..8280675 --- /dev/null +++ b/symbol-exports.txt @@ -0,0 +1,4 @@ +WeaselJsonParser_create +WeaselJsonParser_reset +WeaselJsonParser_destroy +WeaselJsonParser_parse