mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-10 13:04:15 -04:00
VCPKG & WINFSP support
This commit is contained in:
parent
a0635d7ab6
commit
499dca4551
@ -15,6 +15,10 @@
|
|||||||
# You should have received a copy of the GNU General Public License along with
|
# You should have received a copy of the GNU General Public License along with
|
||||||
# dwarfs. If not, see <https://www.gnu.org/licenses/>.
|
# dwarfs. If not, see <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
if(WIN32)
|
||||||
|
set(VCPKG_TARGET_TRIPLET x64-windows-static)
|
||||||
|
endif()
|
||||||
|
|
||||||
project(dwarfs)
|
project(dwarfs)
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
|
|
||||||
@ -87,6 +91,10 @@ elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
add_compile_options(/wd4267 /wd4244 /wd5219)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||||
set(CMAKE_C_LINK_LIBRARY_USING_WHOLE_ARCHIVE "-force_load <LIB_ITEM>")
|
set(CMAKE_C_LINK_LIBRARY_USING_WHOLE_ARCHIVE "-force_load <LIB_ITEM>")
|
||||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
@ -203,7 +211,7 @@ if(NOT PREFER_SYSTEM_LIBARCHIVE)
|
|||||||
set(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_BINARY_DIR}/libarchive-install;${CMAKE_PREFIX_PATH}")
|
set(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_BINARY_DIR}/libarchive-install;${CMAKE_PREFIX_PATH}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
list(APPEND DWARFS_BOOST_MODULES chrono date_time filesystem iostreams program_options system)
|
list(APPEND DWARFS_BOOST_MODULES chrono iostreams program_options)
|
||||||
|
|
||||||
if(WITH_PYTHON)
|
if(WITH_PYTHON)
|
||||||
# TODO: would be nicer to be able to support a range of python versions
|
# TODO: would be nicer to be able to support a range of python versions
|
||||||
@ -263,7 +271,13 @@ if(XXHASH_FOUND)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
# TODO
|
if(NOT WINFSP_PATH)
|
||||||
|
set(WINFSP_PATH "C:/Program Files (x86)/WinFsp")
|
||||||
|
endif()
|
||||||
|
find_library(WINFSP winfsp-x64.lib "${WINFSP_PATH}/lib")
|
||||||
|
if (NOT WINFSP)
|
||||||
|
message(FATAL_ERROR "No WinFsp library found")
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
if(NOT FUSE_FOUND AND NOT FUSE3_FOUND)
|
if(NOT FUSE_FOUND AND NOT FUSE3_FOUND)
|
||||||
message(FATAL_ERROR "No FUSE or FUSE3 library found")
|
message(FATAL_ERROR "No FUSE or FUSE3 library found")
|
||||||
@ -279,6 +293,14 @@ if(USE_JEMALLOC)
|
|||||||
pkg_check_modules(JEMALLOC IMPORTED_TARGET jemalloc>=5.2.1)
|
pkg_check_modules(JEMALLOC IMPORTED_TARGET jemalloc>=5.2.1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||||
|
foreach(CompilerFlag CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE)
|
||||||
|
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(MSVC_USE_STATIC_RUNTIME ON CACHE BOOL "static build")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(ZSTD_INCLUDE_DIR
|
set(ZSTD_INCLUDE_DIR
|
||||||
""
|
""
|
||||||
CACHE PATH "don't build folly with zstd" FORCE)
|
CACHE PATH "don't build folly with zstd" FORCE)
|
||||||
@ -290,15 +312,24 @@ set(THRIFT_COMPILER_ONLY
|
|||||||
# TODO: this is due to a bug in folly's Portability.h
|
# TODO: this is due to a bug in folly's Portability.h
|
||||||
add_compile_definitions(FOLLY_CFG_NO_COROUTINES)
|
add_compile_definitions(FOLLY_CFG_NO_COROUTINES)
|
||||||
|
|
||||||
|
add_compile_definitions(GLOG_NO_ABBREVIATED_SEVERITIES NOMINMAX NOGDI)
|
||||||
|
|
||||||
set(
|
set(
|
||||||
CXX_STD "gnu++20"
|
CXX_STD "gnu++20"
|
||||||
CACHE STRING
|
CACHE STRING
|
||||||
"The C++ standard argument to pass to the compiler."
|
"The C++ standard argument to pass to the compiler."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set(
|
||||||
|
MSVC_LANGUAGE_VERSION "c++20"
|
||||||
|
CACHE STRING
|
||||||
|
"The C++ standard argument to pass to the compiler."
|
||||||
|
)
|
||||||
|
|
||||||
add_subdirectory(folly EXCLUDE_FROM_ALL)
|
add_subdirectory(folly EXCLUDE_FROM_ALL)
|
||||||
add_subdirectory(fbthrift EXCLUDE_FROM_ALL)
|
add_subdirectory(fbthrift EXCLUDE_FROM_ALL)
|
||||||
if(NOT (ZSTD_FOUND AND PREFER_SYSTEM_ZSTD))
|
if(NOT (ZSTD_FOUND AND PREFER_SYSTEM_ZSTD))
|
||||||
|
set(ZSTD_BUILD_SHARED OFF)
|
||||||
add_subdirectory(zstd/build/cmake EXCLUDE_FROM_ALL)
|
add_subdirectory(zstd/build/cmake EXCLUDE_FROM_ALL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -468,46 +499,61 @@ add_executable(mkdwarfs src/mkdwarfs.cpp)
|
|||||||
add_executable(dwarfsck src/dwarfsck.cpp)
|
add_executable(dwarfsck src/dwarfsck.cpp)
|
||||||
add_executable(dwarfsbench src/dwarfsbench.cpp)
|
add_executable(dwarfsbench src/dwarfsbench.cpp)
|
||||||
add_executable(dwarfsextract src/dwarfsextract.cpp)
|
add_executable(dwarfsextract src/dwarfsextract.cpp)
|
||||||
|
if(NOT WIN32)
|
||||||
add_executable(dwarfsuniversal src/universal.cpp)
|
add_executable(dwarfsuniversal src/universal.cpp)
|
||||||
|
endif()
|
||||||
|
|
||||||
target_link_libraries(mkdwarfs mkdwarfs_main)
|
target_link_libraries(mkdwarfs mkdwarfs_main)
|
||||||
target_link_libraries(dwarfsck dwarfsck_main)
|
target_link_libraries(dwarfsck dwarfsck_main)
|
||||||
target_link_libraries(dwarfsbench dwarfsbench_main)
|
target_link_libraries(dwarfsbench dwarfsbench_main)
|
||||||
target_link_libraries(dwarfsextract dwarfsextract_main)
|
target_link_libraries(dwarfsextract dwarfsextract_main)
|
||||||
|
if(NOT WIN32)
|
||||||
target_link_libraries(dwarfsuniversal mkdwarfs_main dwarfsck_main
|
target_link_libraries(dwarfsuniversal mkdwarfs_main dwarfsck_main
|
||||||
dwarfsbench_main dwarfsextract_main)
|
dwarfsbench_main dwarfsextract_main)
|
||||||
set_target_properties(dwarfsuniversal PROPERTIES
|
set_target_properties(dwarfsuniversal PROPERTIES
|
||||||
RUNTIME_OUTPUT_DIRECTORY universal
|
RUNTIME_OUTPUT_DIRECTORY universal
|
||||||
OUTPUT_NAME dwarfs)
|
OUTPUT_NAME dwarfs-universal)
|
||||||
foreach(bin mkdwarfs dwarfsck dwarfsextract dwarfsbench)
|
foreach(bin mkdwarfs dwarfsck dwarfsextract dwarfsbench)
|
||||||
add_custom_command(OUTPUT universal/${bin}
|
add_custom_command(OUTPUT universal/${bin}
|
||||||
COMMAND ${CMAKE_COMMAND} -E create_symlink dwarfs universal/${bin}
|
COMMAND ${CMAKE_COMMAND} -E create_symlink dwarfs universal/${bin}
|
||||||
DEPENDS dwarfsuniversal)
|
DEPENDS dwarfsuniversal)
|
||||||
list(APPEND SYMLINKS ${CMAKE_CURRENT_BINARY_DIR}/universal/${bin})
|
list(APPEND SYMLINKS ${CMAKE_CURRENT_BINARY_DIR}/universal/${bin})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
install(TARGETS mkdwarfs dwarfsck dwarfsbench dwarfsextract RUNTIME DESTINATION bin)
|
install(TARGETS mkdwarfs dwarfsck dwarfsbench dwarfsextract RUNTIME DESTINATION bin)
|
||||||
|
|
||||||
list(APPEND BINARY_TARGETS mkdwarfs dwarfsck dwarfsbench dwarfsextract
|
list(APPEND BINARY_TARGETS mkdwarfs dwarfsck dwarfsbench dwarfsextract)
|
||||||
dwarfsuniversal)
|
if(NOT WIN32)
|
||||||
|
list(APPEND BINARY_TARGETS dwarfsuniversal)
|
||||||
|
endif()
|
||||||
list(APPEND MAIN_TARGETS mkdwarfs_main dwarfsck_main dwarfsbench_main
|
list(APPEND MAIN_TARGETS mkdwarfs_main dwarfsck_main dwarfsbench_main
|
||||||
dwarfsextract_main)
|
dwarfsextract_main)
|
||||||
|
|
||||||
if(FUSE3_FOUND)
|
if(FUSE3_FOUND OR WINFSP)
|
||||||
add_library(dwarfs_main src/dwarfs_main.cpp)
|
add_library(dwarfs_main src/dwarfs_main.cpp)
|
||||||
target_compile_definitions(dwarfs_main PRIVATE _FILE_OFFSET_BITS=64
|
target_compile_definitions(dwarfs_main PRIVATE _FILE_OFFSET_BITS=64)
|
||||||
FUSE_USE_VERSION=35)
|
if(WINFSP)
|
||||||
|
target_compile_definitions(dwarfs_main PRIVATE FUSE_USE_VERSION=32
|
||||||
|
DWARFS_FUSE_LOWLEVEL=0)
|
||||||
|
target_include_directories(dwarfs_main PRIVATE "${WINFSP_PATH}/inc")
|
||||||
|
target_link_libraries(dwarfs_main ${WINFSP})
|
||||||
|
else()
|
||||||
|
target_compile_definitions(dwarfs_main PRIVATE FUSE_USE_VERSION=35)
|
||||||
target_link_libraries(dwarfs_main PkgConfig::FUSE3)
|
target_link_libraries(dwarfs_main PkgConfig::FUSE3)
|
||||||
|
endif()
|
||||||
add_executable(dwarfs-bin src/dwarfs.cpp)
|
add_executable(dwarfs-bin src/dwarfs.cpp)
|
||||||
target_link_libraries(dwarfs-bin dwarfs_main)
|
target_link_libraries(dwarfs-bin dwarfs_main)
|
||||||
target_link_libraries(dwarfsuniversal dwarfs_main)
|
|
||||||
set_target_properties(dwarfs-bin PROPERTIES OUTPUT_NAME dwarfs)
|
set_target_properties(dwarfs-bin PROPERTIES OUTPUT_NAME dwarfs)
|
||||||
|
if(NOT WIN32)
|
||||||
|
target_link_libraries(dwarfsuniversal dwarfs_main)
|
||||||
add_custom_command(OUTPUT mount.dwarfs
|
add_custom_command(OUTPUT mount.dwarfs
|
||||||
COMMAND ${CMAKE_COMMAND} -E create_symlink dwarfs mount.dwarfs
|
COMMAND ${CMAKE_COMMAND} -E create_symlink dwarfs mount.dwarfs
|
||||||
DEPENDS dwarfs)
|
DEPENDS dwarfs)
|
||||||
list(APPEND SYMLINKS mount.dwarfs)
|
list(APPEND SYMLINKS mount.dwarfs)
|
||||||
install(TARGETS dwarfs-bin RUNTIME DESTINATION sbin)
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mount.dwarfs DESTINATION sbin)
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mount.dwarfs DESTINATION sbin)
|
||||||
|
endif()
|
||||||
|
install(TARGETS dwarfs-bin RUNTIME DESTINATION sbin)
|
||||||
list(APPEND BINARY_TARGETS dwarfs-bin)
|
list(APPEND BINARY_TARGETS dwarfs-bin)
|
||||||
list(APPEND MAIN_TARGETS dwarfs_main)
|
list(APPEND MAIN_TARGETS dwarfs_main)
|
||||||
endif()
|
endif()
|
||||||
@ -560,7 +606,9 @@ if(WITH_TESTS)
|
|||||||
gtest_discover_tests(dwarfs_test)
|
gtest_discover_tests(dwarfs_test)
|
||||||
gtest_discover_tests(dwarfs_compat_test)
|
gtest_discover_tests(dwarfs_compat_test)
|
||||||
gtest_discover_tests(dwarfs_badfs_test)
|
gtest_discover_tests(dwarfs_badfs_test)
|
||||||
|
if(NOT WIN32)
|
||||||
gtest_discover_tests(dwarfs_tools_test)
|
gtest_discover_tests(dwarfs_tools_test)
|
||||||
|
endif()
|
||||||
|
|
||||||
target_compile_definitions(dwarfs_compat_test
|
target_compile_definitions(dwarfs_compat_test
|
||||||
PRIVATE TEST_DATA_DIR=\"${CMAKE_SOURCE_DIR}/test\")
|
PRIVATE TEST_DATA_DIR=\"${CMAKE_SOURCE_DIR}/test\")
|
||||||
@ -978,11 +1026,14 @@ endif(STATIC_BUILD_DO_NOT_USE)
|
|||||||
add_custom_target(
|
add_custom_target(
|
||||||
realclean
|
realclean
|
||||||
COMMAND
|
COMMAND
|
||||||
rm -rf CMake* CPack* CTest* Makefile Testing bin lib man folly fbthrift
|
${CMAKE_COMMAND} -E rm -rf CMakeCache.txt CMakeFiles CPackConfig.cmake
|
||||||
thrift zstd dwarfs* mkdwarfs mount.dwarfs mount.dwarfs2 lib*.a *.cmake
|
CPackSourceConfig.cmake CTestTestfile.cmake Makefile Testing bin lib man
|
||||||
googletest-* _CPack_Packages install_manifest.txt share build.ninja
|
folly fbthrift thrift zstd dwarfs dwarfs2 dwarfsck dwarfsextract mkdwarfs
|
||||||
compile_commands.json .ninja_* rules.ninja man1 man5 libarchive fmtlib*
|
mount.dwarfs mount.dwarfs2 cmake_install.cmake lib*.a
|
||||||
universal)
|
googletest-download googletest-build googletest-src _CPack_Packages
|
||||||
|
install_manifest.txt share build.ninja compile_commands.json
|
||||||
|
.ninja_deps .ninja_log rules.ninja man1 man5 libarchive fmtlib
|
||||||
|
fmtlib-download fmtlib-install universal)
|
||||||
|
|
||||||
file(GLOB_RECURSE ALL_SOURCES LIST_DIRECTORIES false
|
file(GLOB_RECURSE ALL_SOURCES LIST_DIRECTORIES false
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include/*.h
|
${CMAKE_CURRENT_SOURCE_DIR}/include/*.h
|
||||||
|
@ -417,7 +417,7 @@ int op_readlink(char const* path, char* buf, size_t buflen) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (err == 0) {
|
if (err == 0) {
|
||||||
::strncpy(buf, symlink.data(), buflen);
|
::strncpy_s(buf, buflen, symlink.data(), symlink.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
return -err;
|
return -err;
|
||||||
@ -797,13 +797,13 @@ int op_getxattr(char const* path, char const* name, char* value, size_t size) {
|
|||||||
std::string_view pv(path);
|
std::string_view pv(path);
|
||||||
|
|
||||||
if ((pv == "" || pv == "/") && name == pid_xattr) {
|
if ((pv == "" || pv == "/") && name == pid_xattr) {
|
||||||
auto pidstr = std::to_string(::getpid());
|
auto pidstr = std::to_string(::_getpid());
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
return pidstr.size();
|
return pidstr.size();
|
||||||
} else if (size < pidstr.size()) {
|
} else if (size < pidstr.size()) {
|
||||||
return -ERANGE;
|
return -ERANGE;
|
||||||
}
|
}
|
||||||
::strncpy(value, pidstr.c_str(), size);
|
::strncpy_s(value, size, pidstr.data(), pidstr.size());
|
||||||
return pidstr.size();
|
return pidstr.size();
|
||||||
}
|
}
|
||||||
} catch (dwarfs::system_error const& e) {
|
} catch (dwarfs::system_error const& e) {
|
||||||
|
24
vcpkg.json
Normal file
24
vcpkg.json
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"dependencies": [
|
||||||
|
"boost-asio",
|
||||||
|
"boost-chrono",
|
||||||
|
"boost-context",
|
||||||
|
"boost-crc",
|
||||||
|
"boost-filesystem",
|
||||||
|
"boost-iostreams",
|
||||||
|
"boost-multi-index",
|
||||||
|
"boost-process",
|
||||||
|
"boost-program-options",
|
||||||
|
"boost-thread",
|
||||||
|
"boost-variant",
|
||||||
|
"brotli",
|
||||||
|
"double-conversion",
|
||||||
|
"fmt",
|
||||||
|
"glog",
|
||||||
|
"libarchive",
|
||||||
|
"libevent",
|
||||||
|
"openssl",
|
||||||
|
"xxhash",
|
||||||
|
"zstd"
|
||||||
|
]
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user