diff --git a/.vscode/settings.json b/.vscode/settings.json index 84ab78f..113c22c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,6 @@ { "files.autoSave": "onFocusChange", - "editor.fontSize": 15, + "editor.fontSize": 14, "editor.fontFamily": "'Source Code Pro', 'Source Code Pro', 'Source Code Pro'", "terminal.integrated.fontFamily": "Source Code Pro", "cmake.configureOnOpen": true, diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a2cefd..c39c4bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16) -project(mlua LANGUAGES CXX) +project(mlua VERSION 1.0.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -8,13 +8,67 @@ if (MSVC) add_compile_options(/source-charset:utf-8) endif() +include(config/MSystem.cmake) +set(COMPILER_ID ${CMAKE_CXX_COMPILER_ID}) message(STATUS "System: ${CMAKE_SYSTEM_NAME}") message(STATUS "Compiler CXX ID: ${CMAKE_CXX_COMPILER_ID}") +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_SYSTEM_NAME MATCHES "Windows") +message(STATUS "add mingw param.") +add_compile_options(-finput-charset=utf-8) +add_compile_options(-fexec-charset=gbk) +add_compile_options(-Wa,-mbig-obj) +set(COMPILER_ID "mingw") +endif() + # Set output directories +string(TOLOWER ${COMPILER_ID} COMPILER_ID) set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/) add_subdirectory(lua) add_subdirectory(fs) -add_subdirectory(gendef) \ No newline at end of file +add_subdirectory(gendef) + +install(TARGETS lua DESTINATION bin) +install(TARGETS luac DESTINATION bin) +install(TARGETS lua_fs RUNTIME DESTINATION bin) + +if (DEFINED USE_BOOST) +install(FILES ${MINGW32_DLLS} DESTINATION bin) +endif() + +# ********************************************************** pack infomation +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH_BIT "64Bit") +elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(ARCH_BIT "32Bit") +else() + message(FATAL_ERROR "Unknown target architecture") +endif() +set(CPACK_PACKAGE_NAME "mlua") +set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") +set(CPACK_PACKAGE_CONTACT "taynpg ") +set(CPACK_PACKAGE_DESCRIPTION "A personal lua.") +set(CPACK_PACKAGE_VENDOR "taynpg") +if(WIN32) +set(CPACK_NSIS_MODIFY_PATH ON) +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(CPACK_GENERATOR "NSIS64;ZIP") +elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(CPACK_GENERATOR "NSIS;ZIP") +else() + message(FATAL_ERROR "Unknown target architecture") +endif() +set(CPACK_NSIS_INSTALL_ROOT "$PROFILE") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "mlua") +elseif(UNIX AND NOT APPLE) + set(CPACK_GENERATOR "DEB;TGZ") + set(CPACK_DEBIAN_PACKAGE_SECTION "utils") + set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "taynpg ") +elseif(APPLE) + set(CPACK_GENERATOR "DragNDrop") +endif() +set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-v${PROJECT_VERSION}-${COMPILER_ID}.${SYSTEM_ARCH}.${ARCH_BIT}") +include(CPack) \ No newline at end of file diff --git a/config/MBoost.cmake b/config/MBoost.cmake new file mode 100644 index 0000000..e620a4d --- /dev/null +++ b/config/MBoost.cmake @@ -0,0 +1,9 @@ +set(MBOOST_INCLUDE_DIR "C:/boost/include/boost-1_83") +set(MBOOST_LIB_DIR "C:/boost/lib") +set(MBOOST_LIBS "boost_filesystem-mgw7-mt-x32-1_83") +get_filename_component(CXX_COMPILER_PATH ${CMAKE_CXX_COMPILER} DIRECTORY) +set(MINGW32_DLLS +"${CXX_COMPILER_PATH}/libgcc_s_dw2-1.dll" +"${CXX_COMPILER_PATH}/libstdc++-6.dll" +"${CXX_COMPILER_PATH}/libwinpthread-1.dll" +) \ No newline at end of file diff --git a/config/MSystem.cmake b/config/MSystem.cmake new file mode 100644 index 0000000..bc41589 --- /dev/null +++ b/config/MSystem.cmake @@ -0,0 +1,46 @@ +# 获取一些常见的本机系统(注意是本机,非交叉编译器的信息)信息 +if (UNIX) +execute_process( + COMMAND uname -a + OUTPUT_VARIABLE UNAME_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +if(UNAME_OUTPUT MATCHES "x86_64") + set(SYSTEM_ARCH "x86_64") +elseif(UNAME_OUTPUT MATCHES "aarch64") + set(SYSTEM_ARCH "aarch64") +elseif(UNAME_OUTPUT MATCHES "armv7l") + set(SYSTEM_ARCH "armv7l") +elseif(UNAME_OUTPUT MATCHES "i686") + set(SYSTEM_ARCH "i686") +elseif(UNAME_OUTPUT MATCHES "riscv64") + set(SYSTEM_ARCH "riscv64") +else() + set(SYSTEM_ARCH "unknown") +endif() +if(UNAME_OUTPUT MATCHES "alpine" OR UNAME_OUTPUT MATCHES "Alpine") + set(SYSTEM_ARCH "musl_${SYSTEM_ARCH}") +endif() +elseif (WIN32) + # 先调用 ver 命令 + execute_process(COMMAND cmd /c ver + OUTPUT_VARIABLE VER_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(VER_OUTPUT MATCHES "XP") + message(STATUS "Windows XP platform.") + set(SYSTEM_ARCH "x86") + else() + execute_process(COMMAND cmd /c wmic os get osarchitecture + OUTPUT_VARIABLE WMIC_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(WMIC_OUTPUT MATCHES "64") + set(SYSTEM_ARCH "x86_64") + else() + set(SYSTEM_ARCH "x86") + endif() + endif() +else() +message(FATAL_ERROR "unknow system type.") +endif() +message(STATUS "SYSTEM_ARCH: ${SYSTEM_ARCH}") diff --git a/fs/CMakeLists.txt b/fs/CMakeLists.txt index b421d89..769c620 100644 --- a/fs/CMakeLists.txt +++ b/fs/CMakeLists.txt @@ -4,9 +4,19 @@ project(lua_fs LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) if (MSVC) - add_compile_options(/source-charset:utf-8) +add_compile_options(/source-charset:utf-8) +endif() +if(DEFINED USE_BOOST) +message(STATUS "lua fs use boost lib.") +include_directories(${MBOOST_INCLUDE_DIR}) +link_directories(${MBOOST_LIB_DIR}) endif() add_library(lua_fs SHARED lib.h lib.cxx) target_link_libraries(lua_fs PRIVATE mlua) -target_compile_definitions(lua_fs PRIVATE FS_LIB_EXPORT) \ No newline at end of file +target_compile_definitions(lua_fs PRIVATE FS_LIB_EXPORT) +set_target_properties(lua_fs PROPERTIES OUTPUT_NAME "lua_fs") +if(DEFINED USE_BOOST) +target_link_directories(lua_fs PRIVATE ${MBOOST_LIB_DIR}) +target_link_libraries(lua_fs PRIVATE ${MBOOST_LIBS}) +endif() \ No newline at end of file diff --git a/lua/CMakeLists.txt b/lua/CMakeLists.txt index 01f3b1e..516945d 100644 --- a/lua/CMakeLists.txt +++ b/lua/CMakeLists.txt @@ -39,10 +39,4 @@ target_link_libraries(lua PRIVATE mlua) # 添加Lua编译器可执行文件 add_executable(luac src/luac.c) -target_link_libraries(luac PRIVATE mlua) - -# 安装目标 -install(TARGETS lua mlua luac - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) \ No newline at end of file +target_link_libraries(luac PRIVATE mlua) \ No newline at end of file