提交 a5b3dea1 编写于 作者: Z zhiru

update


Former-commit-id: 3d3617149b664de4d6af554af6e984163b963fe6
上级 b364c8e3
...@@ -69,9 +69,6 @@ message(STATUS "Milvus version: " ...@@ -69,9 +69,6 @@ message(STATUS "Milvus version: "
"${MILVUS_VERSION_MAJOR}.${MILVUS_VERSION_MINOR}.${MILVUS_VERSION_PATCH} " "${MILVUS_VERSION_MAJOR}.${MILVUS_VERSION_MINOR}.${MILVUS_VERSION_PATCH} "
"(full: '${MILVUS_VERSION}')") "(full: '${MILVUS_VERSION}')")
find_package(CUDA)
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Xcompiler -fPIC -std=c++11 -D_FORCE_INLINES -arch sm_60 --expt-extended-lambda")
set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED on) set(CMAKE_CXX_STANDARD_REQUIRED on)
...@@ -87,6 +84,9 @@ else() ...@@ -87,6 +84,9 @@ else()
set(MILVUS_BUILD_ARCH unknown) set(MILVUS_BUILD_ARCH unknown)
endif() endif()
find_package(CUDA)
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Xcompiler -fPIC -std=c++11 -D_FORCE_INLINES --expt-extended-lambda")
if(CMAKE_BUILD_TYPE STREQUAL "Release") if(CMAKE_BUILD_TYPE STREQUAL "Release")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -fPIC -DELPP_THREAD_SAFE -fopenmp") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -fPIC -DELPP_THREAD_SAFE -fopenmp")
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -O3") set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -O3")
......
...@@ -27,55 +27,55 @@ foreach (dir ${CORE_INCLUDE_DIRS}) ...@@ -27,55 +27,55 @@ foreach (dir ${CORE_INCLUDE_DIRS})
include_directories(${dir}) include_directories(${dir})
endforeach () endforeach ()
aux_source_directory(cache cache_files) aux_source_directory(${MILVUS_ENGINE_SRC}/cache cache_files)
aux_source_directory(config config_files) aux_source_directory(${MILVUS_ENGINE_SRC}/config config_files)
aux_source_directory(db db_main_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db db_main_files)
aux_source_directory(db/engine db_engine_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/engine db_engine_files)
aux_source_directory(db/insert db_insert_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/insert db_insert_files)
aux_source_directory(db/meta db_meta_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/meta db_meta_files)
aux_source_directory(db/scheduler scheduler_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/scheduler db_scheduler_files)
aux_source_directory(db/scheduler/context scheduler_context_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/scheduler/context db_scheduler_context_files)
aux_source_directory(db/scheduler/task scheduler_task_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/scheduler/task db_scheduler_task_files)
set(db_scheduler_files set(db_scheduler_files
${scheduler_files} ${db_scheduler_files}
${scheduler_context_files} ${db_scheduler_context_files}
${scheduler_task_files} ${db_scheduler_task_files}
) )
set(grpc_service_files set(grpc_service_files
grpc/gen-milvus/milvus.grpc.pb.cc ${MILVUS_ENGINE_SRC}/grpc/gen-milvus/milvus.grpc.pb.cc
grpc/gen-milvus/milvus.pb.cc ${MILVUS_ENGINE_SRC}/grpc/gen-milvus/milvus.pb.cc
grpc/gen-status/status.grpc.pb.cc ${MILVUS_ENGINE_SRC}/grpc/gen-status/status.grpc.pb.cc
grpc/gen-status/status.pb.cc ${MILVUS_ENGINE_SRC}/grpc/gen-status/status.pb.cc
) )
aux_source_directory(metrics metrics_files) aux_source_directory(${MILVUS_ENGINE_SRC}/metrics metrics_files)
aux_source_directory(scheduler/action scheduler_action_files) aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler scheduler_main_files)
aux_source_directory(scheduler/event scheduler_event_files) aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/action scheduler_action_files)
aux_source_directory(scheduler/job scheduler_job_files) aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/event scheduler_event_files)
aux_source_directory(scheduler/resource scheduler_resource_files) aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/job scheduler_job_files)
aux_source_directory(scheduler/task scheduler_task_files) aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/resource scheduler_resource_files)
aux_source_directory(scheduler scheduler_root_files) aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/task scheduler_task_files)
set(scheduler_files set(scheduler_files
${scheduler_main_files}
${scheduler_action_files} ${scheduler_action_files}
${scheduler_event_files} ${scheduler_event_files}
${scheduler_job_files} ${scheduler_job_files}
${scheduler_resource_files} ${scheduler_resource_files}
${scheduler_task_files} ${scheduler_task_files}
${scheduler_root_files}
) )
aux_source_directory(server server_files) aux_source_directory(${MILVUS_ENGINE_SRC}/server server_files)
aux_source_directory(server/grpc_impl grpc_server_files) aux_source_directory(${MILVUS_ENGINE_SRC}/server/grpc_impl grpc_server_files)
aux_source_directory(utils utils_files) aux_source_directory(${MILVUS_ENGINE_SRC}/utils utils_files)
aux_source_directory(wrapper/knowhere knowhere_files) aux_source_directory(${MILVUS_ENGINE_SRC}/wrapper/knowhere wrapper_knowhere_files)
set(db_files set(engine_files
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
${cache_files} ${cache_files}
${db_main_files} ${db_main_files}
...@@ -85,30 +85,32 @@ set(db_files ...@@ -85,30 +85,32 @@ set(db_files
${db_scheduler_files} ${db_scheduler_files}
${metrics_files} ${metrics_files}
${utils_files} ${utils_files}
${knowhere_files} ${wrapper_knowhere_files}
) )
include_directories(/usr/include)
include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include") include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include")
include_directories(grpc/gen-status) include_directories(${MILVUS_ENGINE_SRC}/grpc/gen-status)
include_directories(grpc/gen-milvus) include_directories(${MILVUS_ENGINE_SRC}/grpc/gen-milvus)
set(client_grpc_lib set(client_grpc_lib
grpcpp_channelz grpcpp_channelz
grpc++ grpc++
grpc grpc
grpc_protobuf grpc_protobuf
grpc_protoc) grpc_protoc
)
set(prometheus_lib set(prometheus_lib
prometheus-cpp-push prometheus-cpp-push
prometheus-cpp-pull prometheus-cpp-pull
prometheus-cpp-core) prometheus-cpp-core
)
set(boost_lib set(boost_lib
boost_system_static boost_system_static
boost_filesystem_static boost_filesystem_static
boost_serialization_static) boost_serialization_static
)
set(third_party_libs set(third_party_libs
sqlite sqlite
...@@ -149,7 +151,7 @@ if (NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64") ...@@ -149,7 +151,7 @@ if (NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64")
) )
endif () endif ()
cuda_add_library(milvus_engine STATIC ${db_files}) cuda_add_library(milvus_engine STATIC ${engine_files})
target_link_libraries(milvus_engine ${engine_libs} ${third_party_libs}) target_link_libraries(milvus_engine ${engine_libs} ${third_party_libs})
add_library(metrics STATIC ${metrics_files}) add_library(metrics STATIC ${metrics_files})
......
...@@ -20,23 +20,10 @@ ...@@ -20,23 +20,10 @@
aux_source_directory(interface interface_files) aux_source_directory(interface interface_files)
include_directories(/usr/include)
include_directories(include) include_directories(include)
include_directories(/usr/local/include)
aux_source_directory(grpc grpc_client_files) aux_source_directory(grpc grpc_client_files)
include_directories(${CMAKE_SOURCE_DIR}/src/grpc/gen-milvus)
include_directories(${CMAKE_SOURCE_DIR}/src/grpc/gen-status)
set(grpc_service_files
${CMAKE_SOURCE_DIR}/src/grpc/gen-milvus/milvus.grpc.pb.cc
${CMAKE_SOURCE_DIR}/src/grpc/gen-milvus/milvus.pb.cc
${CMAKE_SOURCE_DIR}/src/grpc/gen-status/status.grpc.pb.cc
${CMAKE_SOURCE_DIR}/src/grpc/gen-status/status.pb.cc
)
add_library(milvus_sdk STATIC add_library(milvus_sdk STATIC
${interface_files} ${interface_files}
${grpc_client_files} ${grpc_client_files}
......
...@@ -28,37 +28,37 @@ aux_source_directory(${MILVUS_ENGINE_SRC}/db db_main_files) ...@@ -28,37 +28,37 @@ aux_source_directory(${MILVUS_ENGINE_SRC}/db db_main_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/db/engine db_engine_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/engine db_engine_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/db/insert db_insert_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/insert db_insert_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/db/meta db_meta_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/meta db_meta_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/db/scheduler scheduler_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/scheduler db_scheduler_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/db/scheduler/context scheduler_context_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/scheduler/context db_scheduler_context_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/db/scheduler/task scheduler_task_files) aux_source_directory(${MILVUS_ENGINE_SRC}/db/scheduler/task db_scheduler_task_files)
set(db_scheduler_files set(db_scheduler_files
${scheduler_files} ${db_scheduler_files}
${scheduler_context_files} ${db_scheduler_context_files}
${scheduler_task_files} ${db_scheduler_task_files}
) )
set(grpc_service_files set(grpc_service_files
grpc/gen-milvus/milvus.grpc.pb.cc ${MILVUS_ENGINE_SRC}/grpc/gen-milvus/milvus.grpc.pb.cc
grpc/gen-milvus/milvus.pb.cc ${MILVUS_ENGINE_SRC}/grpc/gen-milvus/milvus.pb.cc
grpc/gen-status/status.grpc.pb.cc ${MILVUS_ENGINE_SRC}/grpc/gen-status/status.grpc.pb.cc
grpc/gen-status/status.pb.cc ${MILVUS_ENGINE_SRC}/grpc/gen-status/status.pb.cc
) )
aux_source_directory(${MILVUS_ENGINE_SRC}/metrics metrics_files) aux_source_directory(${MILVUS_ENGINE_SRC}/metrics metrics_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler scheduler_main_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/action scheduler_action_files) aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/action scheduler_action_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/event scheduler_event_files) aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/event scheduler_event_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/job scheduler_job_files) aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/job scheduler_job_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/resource scheduler_resource_files) aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/resource scheduler_resource_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/task scheduler_task_files) aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler/task scheduler_task_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/scheduler scheduler_root_files)
set(scheduler_files set(scheduler_files
${scheduler_main_files}
${scheduler_action_files} ${scheduler_action_files}
${scheduler_event_files} ${scheduler_event_files}
${scheduler_job_files} ${scheduler_job_files}
${scheduler_resource_files} ${scheduler_resource_files}
${scheduler_task_files} ${scheduler_task_files}
${scheduler_root_files}
) )
aux_source_directory(${MILVUS_ENGINE_SRC}/server server_files) aux_source_directory(${MILVUS_ENGINE_SRC}/server server_files)
...@@ -66,10 +66,7 @@ aux_source_directory(${MILVUS_ENGINE_SRC}/server/grpc_impl grpc_server_files) ...@@ -66,10 +66,7 @@ aux_source_directory(${MILVUS_ENGINE_SRC}/server/grpc_impl grpc_server_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/utils utils_files) aux_source_directory(${MILVUS_ENGINE_SRC}/utils utils_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/wrapper/knowhere knowhere_files) aux_source_directory(${MILVUS_ENGINE_SRC}/wrapper/knowhere wrapper_knowhere_files)
aux_source_directory(${MILVUS_ENGINE_SRC}/db db_srcs)
aux_source_directory(${MILVUS_ENGINE_SRC}/config config_files)
set(unittest_files set(unittest_files
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
...@@ -83,7 +80,26 @@ set(helper_files ...@@ -83,7 +80,26 @@ set(helper_files
${MILVUS_ENGINE_SRC}/utils/easylogging++.cc ${MILVUS_ENGINE_SRC}/utils/easylogging++.cc
) )
set(common_files
${cache_files}
${config_files}
${db_main_files}
${db_engine_files}
${db_insert_files}
${db_meta_files}
${db_scheduler_files}
${metrics_files}
${scheduler_files}
${wrapper_knowhere_files}
${helper_files}
)
set(unittest_libs set(unittest_libs
sqlite
boost_system_static
boost_filesystem_static
lz4
mysqlpp
yaml-cpp yaml-cpp
gtest gtest
gmock gmock
...@@ -107,7 +123,7 @@ foreach(dir ${CORE_INCLUDE_DIRS}) ...@@ -107,7 +123,7 @@ foreach(dir ${CORE_INCLUDE_DIRS})
endforeach() endforeach()
add_subdirectory(db) add_subdirectory(db)
add_subdirectory(knowhere) add_subdirectory(wrapper)
add_subdirectory(metrics) add_subdirectory(metrics)
add_subdirectory(scheduler) add_subdirectory(scheduler)
add_subdirectory(server) add_subdirectory(server)
\ No newline at end of file
...@@ -23,31 +23,13 @@ include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include") ...@@ -23,31 +23,13 @@ include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include")
link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64") link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64")
set(db_test_files set(db_test_files
${cache_files} ${common_files}
${config_files}
${db_main_files}
${db_engine_files}
${db_insert_files}
${db_meta_files}
${db_scheduler_files}
${metrics_files}
${scheduler_files}
${knowhere_files}
${helper_files}
${test_files} ${test_files}
) )
cuda_add_executable(db_test ${db_test_files}) cuda_add_executable(db_test ${db_test_files})
set(db_libs target_link_libraries(db_test knowhere ${unittest_libs})
sqlite
boost_system_static
boost_filesystem_static
lz4
mysqlpp
)
target_link_libraries(db_test ${db_libs} knowhere ${unittest_libs})
install(TARGETS db_test DESTINATION unittest) install(TARGETS db_test DESTINATION unittest)
...@@ -19,35 +19,16 @@ ...@@ -19,35 +19,16 @@
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} test_files) aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} test_files)
include_directories(/usr/include)
include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include") include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include")
link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64") link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64")
set(metrics_test_files set(metrics_test_files
${cache_files} ${common_files}
${config_files}
${db_main_files}
${db_engine_files}
${db_insert_files}
${db_meta_files}
${db_scheduler_files}
${metrics_files}
${scheduler_files}
${knowhere_files}
${helper_files}
${test_files} ${test_files}
) )
add_executable(metrics_test ${metrics_test_files}) add_executable(metrics_test ${metrics_test_files})
target_link_libraries(metrics_test target_link_libraries(metrics_test knowhere ${unittest_libs})
knowhere
sqlite
boost_system_static
boost_filesystem_static
lz4
mysqlpp
${unittest_libs}
)
install(TARGETS metrics_test DESTINATION unittest) install(TARGETS metrics_test DESTINATION unittest)
\ No newline at end of file
...@@ -23,31 +23,14 @@ include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include") ...@@ -23,31 +23,14 @@ include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include")
link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64") link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64")
set(scheduler_test_files set(scheduler_test_files
${cache_files} ${common_files}
${config_files}
${db_main_files}
${db_engine_files}
${db_insert_files}
${db_meta_files}
${db_scheduler_files}
${scheduler_files}
${knowhere_files}
${helper_files}
${unittest_files} ${unittest_files}
${test_files} ${test_files}
) )
cuda_add_executable(scheduler_test ${scheduler_test_files}) cuda_add_executable(scheduler_test ${scheduler_test_files})
set(scheduler_libs target_link_libraries(scheduler_test knowhere ${unittest_libs})
sqlite
boost_system_static
boost_filesystem_static
lz4
mysqlpp
)
target_link_libraries(scheduler_test ${scheduler_libs} knowhere ${unittest_libs})
install(TARGETS scheduler_test DESTINATION unittest) install(TARGETS scheduler_test DESTINATION unittest)
...@@ -19,14 +19,13 @@ ...@@ -19,14 +19,13 @@
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} test_files) aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} test_files)
include_directories(/usr/include)
include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include") include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include")
link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64") link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64")
include_directories(${MILVUS_ENGINE_SRC}/grpc/gen-status) include_directories(${MILVUS_ENGINE_SRC}/grpc/gen-status)
include_directories(${MILVUS_ENGINE_SRC}/grpc/gen-milvus) include_directories(${MILVUS_ENGINE_SRC}/grpc/gen-milvus)
set(helper_files ${helper_files} set(util_files
${MILVUS_ENGINE_SRC}/utils/StringHelpFunctions.cpp ${MILVUS_ENGINE_SRC}/utils/StringHelpFunctions.cpp
${MILVUS_ENGINE_SRC}/utils/LogUtil.cpp ${MILVUS_ENGINE_SRC}/utils/LogUtil.cpp
${MILVUS_ENGINE_SRC}/utils/SignalUtil.cpp) ${MILVUS_ENGINE_SRC}/utils/SignalUtil.cpp)
...@@ -39,19 +38,11 @@ set(grpc_service_files ...@@ -39,19 +38,11 @@ set(grpc_service_files
) )
set(server_test_files set(server_test_files
${cache_files} ${common_files}
${config_files}
${db_main_files}
${db_engine_files}
${db_insert_files}
${db_meta_files}
${db_scheduler_files}
${scheduler_files}
${server_files} ${server_files}
${grpc_server_files} ${grpc_server_files}
${grpc_service_files} ${grpc_service_files}
${knowhere_files} ${util_files}
${helper_files}
${unittest_files} ${unittest_files}
${test_files} ${test_files}
) )
...@@ -65,22 +56,13 @@ set(client_grpc_lib ...@@ -65,22 +56,13 @@ set(client_grpc_lib
grpc_protobuf grpc_protobuf
grpc_protoc) grpc_protoc)
set(require_libs target_link_libraries(server_test
knowhere knowhere
stdc++ stdc++
sqlite
mysqlpp
boost_system_static
boost_filesystem_static
snappy snappy
bz2 bz2
zstd zstd
lz4
${client_grpc_lib} ${client_grpc_lib}
)
target_link_libraries(server_test
${require_libs}
${unittest_libs} ${unittest_libs}
) )
......
...@@ -20,12 +20,12 @@ ...@@ -20,12 +20,12 @@
include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include") include_directories("${CUDA_TOOLKIT_ROOT_DIR}/include")
link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64") link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64")
set(knowhere_files set(wrapper_knowhere_files
${MILVUS_ENGINE_SRC}/wrapper/knowhere/data_transfer.cpp ${MILVUS_ENGINE_SRC}/wrapper/knowhere/data_transfer.cpp
${MILVUS_ENGINE_SRC}/wrapper/knowhere/vec_impl.cpp ${MILVUS_ENGINE_SRC}/wrapper/knowhere/vec_impl.cpp
${MILVUS_ENGINE_SRC}/wrapper/knowhere/vec_index.cpp) ${MILVUS_ENGINE_SRC}/wrapper/knowhere/vec_index.cpp)
set(helper_files set(util_files
utils.cpp utils.cpp
${MILVUS_ENGINE_SRC}/utils/easylogging++.cc ${MILVUS_ENGINE_SRC}/utils/easylogging++.cc
) )
...@@ -36,7 +36,7 @@ set(knowhere_libs ...@@ -36,7 +36,7 @@ set(knowhere_libs
cublas cublas
) )
add_executable(knowhere_test knowhere_test.cpp ${knowhere_files} ${helper_files}) add_executable(wrapper_test wrapper_test.cpp ${wrapper_knowhere_files} ${util_files})
target_link_libraries(knowhere_test ${knowhere_libs} ${unittest_libs}) target_link_libraries(wrapper_test ${knowhere_libs} ${unittest_libs})
install(TARGETS knowhere_test DESTINATION unittest) install(TARGETS wrapper_test DESTINATION unittest)
\ No newline at end of file \ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册