From d64d955fb879f41bce36cc2e2855919eb084d4d4 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sun, 9 Jul 2023 01:56:40 +0800 Subject: [PATCH] ... --- .github/workflows/main.yml | 4 ---- CMakeLists.txt | 14 +++++++++++--- include/pocketpy/memory.h | 4 ++-- src2/main.cpp | 18 ++++++++++++++++-- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e6d9595b..74502865 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,8 +14,6 @@ jobs: cd build cmake .. cmake --build . --config Release - cmake .. -DPK_BUILD_SHARED_LIB=1 - cmake --build . --config Release cp Release/pocketpy.exe ../output/windows/x86_64 cp Release/pocketpy.dll ../output/windows/x86_64 cp Release/pocketpy.exe ../ @@ -53,8 +51,6 @@ jobs: cd build cmake .. cmake --build . --config Release - cmake .. -DPK_BUILD_SHARED_LIB=1 - cmake --build . --config Release cp pocketpy ../output/linux/x86_64 cp libpocketpy.so ../output/linux/x86_64 cp pocketpy ../ diff --git a/CMakeLists.txt b/CMakeLists.txt index 844c414a..2ca14b84 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ endif() if(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR- /EHsc /utf-8 /O2") else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fexceptions -O2 -ldl") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fexceptions -O2") endif() option(PK_EXPORT_C_API "Export C API" ON) @@ -40,10 +40,18 @@ aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src POCKETPY_SRC) option(PK_BUILD_SHARED_LIB "Build shared library" OFF) option(PK_BUILD_STATIC_LIB "Build static library" OFF) +set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) + if(PK_BUILD_SHARED_LIB) add_library(${PROJECT_NAME} SHARED ${POCKETPY_SRC} ${PK_LIB_CPP}) elseif(PK_BUILD_STATIC_LIB) add_library(${PROJECT_NAME} STATIC ${POCKETPY_SRC} ${PK_LIB_CPP}) else() - add_executable(${PROJECT_NAME} ${POCKETPY_SRC} src2/main.cpp) -endif() \ No newline at end of file + add_library(${PROJECT_NAME} SHARED ${POCKETPY_SRC} ${PK_LIB_CPP}) + add_executable(${PROJECT_NAME}_EXE src2/main.cpp) + set_target_properties(${PROJECT_NAME}_EXE PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME}_EXE ${PROJECT_NAME}) + target_link_libraries(${PROJECT_NAME}_EXE ${CMAKE_DL_LIBS}) +endif() + +target_link_libraries(${PROJECT_NAME} ${CMAKE_DL_LIBS}) \ No newline at end of file diff --git a/include/pocketpy/memory.h b/include/pocketpy/memory.h index 54a1a905..51d54d17 100644 --- a/include/pocketpy/memory.h +++ b/include/pocketpy/memory.h @@ -246,8 +246,8 @@ struct MemoryPool{ } }; -inline MemoryPool<64> pool64; -inline MemoryPool<128> pool128; +PK_EXPORT inline MemoryPool<64> pool64; +PK_EXPORT inline MemoryPool<128> pool128; template struct shared_ptr { diff --git a/src2/main.cpp b/src2/main.cpp index 26e59c89..c968adc7 100644 --- a/src2/main.cpp +++ b/src2/main.cpp @@ -7,9 +7,23 @@ std::string f_input(){ return pkpy::platform_getline(); } -int main(int argc, char** argv){ - pkpy::VM* vm = pkpy_new_vm(); +#define ABS_PATH(x) std::filesystem::absolute(x).c_str() +int main(int argc, char** argv){ +#if _WIN32 + SetConsoleOutputCP(CP_UTF8); + void* p = LoadLibraryA(ABS_PATH("pocketpy.dll")); +#elif __linux__ + void* p = dlopen(ABS_PATH("libpocketpy.so"), RTLD_NOW | RTLD_GLOBAL); +#elif __APPLE__ + void* p = dlopen(ABS_PATH("libpocketpy.dylib"), RTLD_NOW | RTLD_GLOBAL); +#endif + if(p == nullptr){ + std::cerr << "unable to load dynamic library" << std::endl; + return 1; + } + + pkpy::VM* vm = pkpy_new_vm(); pkpy::_bind(vm, vm->builtins, "input() -> str", &f_input); if(argc == 1){