diff --git a/3rd/cjson/CMakeLists.txt b/3rd/cjson/CMakeLists.txt index 2cadd692..339b502b 100644 --- a/3rd/cjson/CMakeLists.txt +++ b/3rd/cjson/CMakeLists.txt @@ -2,14 +2,18 @@ cmake_minimum_required(VERSION 3.10) project(cjson) +set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) include_directories(${CMAKE_CURRENT_LIST_DIR}/include) include_directories(${CMAKE_CURRENT_LIST_DIR}/../pocketpy/include) +set(CMAKE_C_FLAGS_RELEASE "-O2") set(CMAKE_CXX_FLAGS_RELEASE "-O2") +set(CMAKE_POSITION_INDEPENDENT_CODE ON) add_library( cjson - ${CMAKE_CURRENT_LIST_DIR}/src/cJSON.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/cJSON.c + ${CMAKE_CURRENT_LIST_DIR}/src/cJSONw.cpp ) diff --git a/3rd/cjson/include/cjson/cJSON.h b/3rd/cjson/include/cJSON.h similarity index 100% rename from 3rd/cjson/include/cjson/cJSON.h rename to 3rd/cjson/include/cJSON.h diff --git a/3rd/cjson/include/cJSONw.hpp b/3rd/cjson/include/cJSONw.hpp new file mode 100644 index 00000000..856165be --- /dev/null +++ b/3rd/cjson/include/cJSONw.hpp @@ -0,0 +1,8 @@ +#include "cJSON.h" +#include "pocketpy/pocketpy.h" + +namespace pkpy { + +void add_module_cjson(VM* vm); + +} // namespace pkpy \ No newline at end of file diff --git a/3rd/cjson/src/cJSON.cpp b/3rd/cjson/src/cJSON.c similarity index 99% rename from 3rd/cjson/src/cJSON.cpp rename to 3rd/cjson/src/cJSON.c index ce271649..f6dd11c5 100644 --- a/3rd/cjson/src/cJSON.cpp +++ b/3rd/cjson/src/cJSON.c @@ -56,7 +56,7 @@ #pragma GCC visibility pop #endif -#include "cjson.hpp" +#include "cJSON.h" /* define our own boolean type */ #ifdef true diff --git a/3rd/cjson/include/cjson.hpp b/3rd/cjson/src/cJSONw.cpp similarity index 97% rename from 3rd/cjson/include/cjson.hpp rename to 3rd/cjson/src/cJSONw.cpp index 422ed7d0..b640eb6b 100644 --- a/3rd/cjson/include/cjson.hpp +++ b/3rd/cjson/src/cJSONw.cpp @@ -1,6 +1,4 @@ -#include "cjson/cJSON.h" -#include "pocketpy/pocketpy.h" - +#include "cJSONw.hpp" namespace pkpy{ @@ -90,7 +88,7 @@ static Dict convert_cjson_to_dict(const cJSON * const item, VM* vm) return output; } -inline void add_module_cjson(VM* vm){ +void add_module_cjson(VM* vm){ PyObject* mod = vm->new_module("cjson"); vm->bind_func<1>(mod, "loads", [](VM* vm, ArgsView args) { diff --git a/CMakeLists.txt b/CMakeLists.txt index dde0843e..7ad2ae5f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,7 @@ include_directories(${CMAKE_CURRENT_LIST_DIR}/include) aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src POCKETPY_SRC) option(PK_USE_BOX2D "Use Box2D" OFF) +option(PK_USE_CJSON "Use cJSON" ON) option(PK_USE_DYLIB "Use dylib" OFF) if(PK_USE_BOX2D) @@ -49,8 +50,11 @@ if(PK_USE_BOX2D) add_definitions(-DPK_USE_BOX2D) endif() -add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/3rd/cjson) -include_directories(${CMAKE_CURRENT_LIST_DIR}/3rd/cjson/include) +if(PK_USE_CJSON) + add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/3rd/cjson) + include_directories(${CMAKE_CURRENT_LIST_DIR}/3rd/cjson/include) + add_definitions(-DPK_USE_CJSON) +endif() # PK_IS_MAIN determines whether the project is being used from root # or if it is added as a dependency (through add_subdirectory for example). diff --git a/src/pocketpy.cpp b/src/pocketpy.cpp index 4be2a2e9..2b4d2bc2 100644 --- a/src/pocketpy.cpp +++ b/src/pocketpy.cpp @@ -4,11 +4,14 @@ #include "box2dw.hpp" #endif +#ifdef PK_USE_CJSON +#include "cJSONw.hpp" +#endif + #if defined (_WIN32) && PK_SUPPORT_DYLIB == 1 #define WIN32_LEAN_AND_MEAN #include #endif -#include "cjson.hpp" namespace pkpy{ @@ -1713,7 +1716,6 @@ void VM::post_init(){ add_module_traceback(this); add_module_time(this); add_module_json(this); - add_module_cjson(this); add_module_math(this); add_module_re(this); add_module_dis(this); @@ -1750,6 +1752,10 @@ void VM::post_init(){ #ifdef PK_USE_BOX2D add_module_box2d(this); #endif +#ifdef PK_USE_CJSON + add_module_cjson(this); +#endif + #endif }