From e96c67dc4eafba482ed730a5ff914e49256f41ae Mon Sep 17 00:00:00 2001 From: lateautumn <3487467850@qq.com> Date: Thu, 3 Feb 2022 23:29:49 +0800 Subject: [PATCH] make: switch cmake build Signed-off-by: sekaiacg --- .gitignore | 9 +++--- .gitmodules | 21 ++++++++++++++ CMakeLists.txt | 23 +++++++++++++++ erofs-tools/CMakeLists.txt | 4 +++ erofs-tools/dump.cmake | 26 +++++++++++++++++ erofs-tools/fsck.cmake | 26 +++++++++++++++++ erofs-tools/fuse.cmake | 13 +++++++++ erofs-tools/mkfs.cmake | 26 +++++++++++++++++ include/selinux/android.h | 58 ++++++++++++++++++++++++++++++++++++++ lib/config.c | 2 +- src/CMakeLists.txt | 7 +++++ src/core | 1 + src/e2fsprogs | 1 + src/libbase | 1 + src/libbase.cmake | 26 +++++++++++++++++ src/libcutils.cmake | 36 +++++++++++++++++++++++ src/liberofs.cmake | 12 ++++++++ src/libext2_uuid.cmake | 24 ++++++++++++++++ src/liblog.cmake | 25 ++++++++++++++++ src/libpcre.cmake | 37 ++++++++++++++++++++++++ src/libselinux.cmake | 26 +++++++++++++++++ src/logging | 1 + src/lz4 | 1 + src/pcre | 1 + src/selinux | 1 + 25 files changed, 403 insertions(+), 5 deletions(-) create mode 100644 .gitmodules create mode 100644 CMakeLists.txt create mode 100644 erofs-tools/CMakeLists.txt create mode 100644 erofs-tools/dump.cmake create mode 100644 erofs-tools/fsck.cmake create mode 100644 erofs-tools/fuse.cmake create mode 100644 erofs-tools/mkfs.cmake create mode 100644 include/selinux/android.h create mode 100644 src/CMakeLists.txt create mode 160000 src/core create mode 160000 src/e2fsprogs create mode 160000 src/libbase create mode 100644 src/libbase.cmake create mode 100644 src/libcutils.cmake create mode 100644 src/liberofs.cmake create mode 100644 src/libext2_uuid.cmake create mode 100644 src/liblog.cmake create mode 100644 src/libpcre.cmake create mode 100644 src/libselinux.cmake create mode 160000 src/logging create mode 160000 src/lz4 create mode 160000 src/pcre create mode 160000 src/selinux diff --git a/.gitignore b/.gitignore index 33e5d30a..af87e4ac 100644 --- a/.gitignore +++ b/.gitignore @@ -27,7 +27,8 @@ configure.scan libtool stamp-h stamp-h1 -/mkfs/mkfs.erofs -/fuse/erofsfuse -/dump/dump.erofs -/fsck/fsck.erofs +*.erofs +*.bak +CMakeCache.txt +CMakeFiles +cmake_install.cmake \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..cda52a30 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,21 @@ +[submodule "src/pcre"] + path = src/pcre + url = https://android.googlesource.com/platform/external/pcre.git +[submodule "src/logging"] + path = src/logging + url = https://android.googlesource.com/platform/system/logging.git +[submodule "src/lz4"] + path = src/lz4 + url = https://android.googlesource.com/platform/external/lz4 +[submodule "src/e2fsprogs"] + path = src/e2fsprogs + url = https://android.googlesource.com/platform/external/e2fsprogs.git +[submodule "src/libbase"] + path = src/libbase + url = https://android.googlesource.com/platform/system/libbase +[submodule "src/core"] + path = src/core + url = https://android.googlesource.com/platform/system/core.git +[submodule "src/selinux"] + path = src/selinux + url = https://github.com/SELinuxProject/selinux diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..036df880 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.14.2) +project(erofs-utils) + +set(CMAKE_CXX_STANDARD 17) +# set global cflags and cxxflags +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wno-ignored-qualifiers -Wno-pointer-arith -Wno-unused-parameter -Wno-unused-function -DHAVE_FALLOCATE -DHAVE_LINUX_TYPES_H -DHAVE_LIBSELINUX -DHAVE_LIBUUID -DLZ4_ENABLED -DLZ4HC_ENABLED -DWITH_ANDROID ") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-ignored-qualifiers -Wno-pointer-arith -Wno-unused-parameter -Wno-unused-function -DHAVE_FALLOCATE -DHAVE_LINUX_TYPES_H -DHAVE_LIBSELINUX -DHAVE_LIBUUID -DLZ4_ENABLED -DLZ4HC_ENABLED -DWITH_ANDROID") + +set(CMAKE_EXE_LINKER_FLAGS "-static") + +set(SRC ${PROJECT_SOURCE_DIR}/src) + +# git clone submodule +execute_process(COMMAND git submodule init) +execute_process(COMMAND git submodule update) + +# thrid part library +add_subdirectory(src/lz4/build/cmake) + +# start building +add_subdirectory(src) +add_subdirectory(erofs-tools) + diff --git a/erofs-tools/CMakeLists.txt b/erofs-tools/CMakeLists.txt new file mode 100644 index 00000000..a1c1a312 --- /dev/null +++ b/erofs-tools/CMakeLists.txt @@ -0,0 +1,4 @@ +include(mkfs.cmake) +include(dump.cmake) +#include(fuse.cmake) +include(fsck.cmake) diff --git a/erofs-tools/dump.cmake b/erofs-tools/dump.cmake new file mode 100644 index 00000000..56e5bf56 --- /dev/null +++ b/erofs-tools/dump.cmake @@ -0,0 +1,26 @@ +set(TARGET dump.erofs) + +file(GLOB SRCS "${PROJECT_SOURCE_DIR}/dump/*.c") +add_executable(${TARGET} ${SRCS}) +target_link_libraries(${TARGET} + erofs + cutils + ext2_uuid + log + lz4_static + selinux + pcre + base + ) +include_directories( + ${PROJECT_SOURCE_DIR}/lib + ${PROJECT_SOURCE_DIR}/include + ${SRC}/selinux/libselinux/include + ${SRC}/e2fsprogs/lib/uuid + ${SRC}/core/libcutils/include + ) +link_directories( + ${SRC} + ${SRC}/lz4/build/cmake + ${SRC}/pcre +) diff --git a/erofs-tools/fsck.cmake b/erofs-tools/fsck.cmake new file mode 100644 index 00000000..d2668271 --- /dev/null +++ b/erofs-tools/fsck.cmake @@ -0,0 +1,26 @@ +set(TARGET fsck.erofs) + +file(GLOB SRCS "${PROJECT_SOURCE_DIR}/fsck/*.c") +add_executable(${TARGET} ${SRCS}) +target_link_libraries(${TARGET} + erofs + cutils + ext2_uuid + log + lz4_static + selinux + pcre + base + ) +include_directories( + ${PROJECT_SOURCE_DIR}/lib + ${PROJECT_SOURCE_DIR}/include + ${SRC}/selinux/libselinux/include + ${SRC}/e2fsprogs/lib/uuid + ${SRC}/core/libcutils/include + ) +link_directories( + ${SRC} + ${SRC}/lz4/build/cmake + ${SRC}/pcre +) diff --git a/erofs-tools/fuse.cmake b/erofs-tools/fuse.cmake new file mode 100644 index 00000000..cbe6c4c8 --- /dev/null +++ b/erofs-tools/fuse.cmake @@ -0,0 +1,13 @@ + +file(GLOB SRCS "${PROJECT_SOURCE_DIR}/fuse/*.c") +add_executable(erofs.fuse ${SRCS}) +target_link_libraries(erofs.fuse + libbase + libutils + liblog + ) + +include_directories( + ${PROJECT_SOURCE_DIR}/lib + ${PROJECT_SOURCE_DIR}/include + ) diff --git a/erofs-tools/mkfs.cmake b/erofs-tools/mkfs.cmake new file mode 100644 index 00000000..0b743490 --- /dev/null +++ b/erofs-tools/mkfs.cmake @@ -0,0 +1,26 @@ +set(TARGET mkfs.erofs) + +file(GLOB SRCS "${PROJECT_SOURCE_DIR}/mkfs/*.c") +add_executable(${TARGET} ${SRCS}) +target_link_libraries(${TARGET} + erofs + cutils + ext2_uuid + log + lz4_static + selinux + pcre + base + ) +include_directories( + ${PROJECT_SOURCE_DIR}/lib + ${PROJECT_SOURCE_DIR}/include + ${SRC}/selinux/libselinux/include + ${SRC}/e2fsprogs/lib/uuid + ${SRC}/core/libcutils/include + ) +link_directories( + ${SRC} + ${SRC}/lz4/build/cmake + ${SRC}/pcre +) diff --git a/include/selinux/android.h b/include/selinux/android.h new file mode 100644 index 00000000..4971ff00 --- /dev/null +++ b/include/selinux/android.h @@ -0,0 +1,58 @@ +#ifndef _SELINUX_ANDROID_H_ +#define _SELINUX_ANDROID_H_ + +#include +#include +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern struct selabel_handle* selinux_android_file_context_handle(void); + +extern struct selabel_handle* selinux_android_prop_context_handle(void); + +extern struct selabel_handle* selinux_android_service_context_handle(void); + +extern void selinux_android_set_sehandle(const struct selabel_handle *hndl); + +extern int selinux_android_load_policy(void); + +extern int selinux_android_reload_policy(void); + +extern int selinux_android_setcon(const char *con); + +extern int selinux_android_setcontext(uid_t uid, + bool isSystemServer, + const char *seinfo, + const char *name); + +extern int selinux_android_setfilecon(const char *pkgdir, + const char *pkgname, + const char *seinfo, + uid_t uid); + +extern int selinux_log_callback(int type, const char *fmt, ...) + __attribute__ ((format(printf, 2, 3))); + +#define SELINUX_ANDROID_RESTORECON_NOCHANGE 1 +#define SELINUX_ANDROID_RESTORECON_VERBOSE 2 +#define SELINUX_ANDROID_RESTORECON_RECURSE 4 +#define SELINUX_ANDROID_RESTORECON_FORCE 8 +#define SELINUX_ANDROID_RESTORECON_DATADATA 16 +extern int selinux_android_restorecon(const char *file, unsigned int flags); + +extern int selinux_android_restorecon_pkgdir(const char *pkgdir, + const char *seinfo, + uid_t uid, + unsigned int flags); + +extern int selinux_android_seapp_context_reload(void); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/config.c b/lib/config.c index 848bc590..55e26946 100644 --- a/lib/config.c +++ b/lib/config.c @@ -27,7 +27,7 @@ void erofs_init_configure(void) memset(&cfg, 0, sizeof(cfg)); cfg.c_dbg_lvl = EROFS_WARN; - cfg.c_version = PACKAGE_VERSION; + cfg.c_version = "1.4"; cfg.c_dry_run = false; cfg.c_ignore_mtime = false; cfg.c_force_inodeversion = 0; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 00000000..edb870f8 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,7 @@ +include(libbase.cmake) +include(libext2_uuid.cmake) +include(liblog.cmake) +include(libcutils.cmake) +include(libselinux.cmake) +include(liberofs.cmake) +include(libpcre.cmake) \ No newline at end of file diff --git a/src/core b/src/core new file mode 160000 index 00000000..848fe8ab --- /dev/null +++ b/src/core @@ -0,0 +1 @@ +Subproject commit 848fe8abeac464f1f57f34c363198f22f3b46a1b diff --git a/src/e2fsprogs b/src/e2fsprogs new file mode 160000 index 00000000..51fa8db8 --- /dev/null +++ b/src/e2fsprogs @@ -0,0 +1 @@ +Subproject commit 51fa8db804c75b65c9a83218abd8766ae56e1202 diff --git a/src/libbase b/src/libbase new file mode 160000 index 00000000..25cba3fe --- /dev/null +++ b/src/libbase @@ -0,0 +1 @@ +Subproject commit 25cba3fe6e9a3ff401d2650ca0af78123462b052 diff --git a/src/libbase.cmake b/src/libbase.cmake new file mode 100644 index 00000000..7e784c14 --- /dev/null +++ b/src/libbase.cmake @@ -0,0 +1,26 @@ +set(TARGET base) + +add_library(${TARGET} STATIC + ${SRC}/libbase/abi_compatibility.cpp + ${SRC}/libbase/chrono_utils.cpp + ${SRC}/libbase/cmsg.cpp + ${SRC}/libbase/errors_unix.cpp + ${SRC}/libbase/file.cpp + ${SRC}/libbase/logging.cpp + ${SRC}/libbase/mapped_file.cpp + ${SRC}/libbase/parsebool.cpp + ${SRC}/libbase/parsenetaddress.cpp + ${SRC}/libbase/process.cpp + ${SRC}/libbase/properties.cpp + ${SRC}/libbase/stringprintf.cpp + ${SRC}/libbase/strings.cpp + ${SRC}/libbase/test_utils.cpp + ${SRC}/libbase/threads.cpp + ${SRC}/libbase/posix_strerror_r.cpp + ) + +target_include_directories(${TARGET} PUBLIC + ${SRC}/libbase/include + ${SRC}/core/include + ${SRC}/logging/liblog/include + ) diff --git a/src/libcutils.cmake b/src/libcutils.cmake new file mode 100644 index 00000000..9456aba3 --- /dev/null +++ b/src/libcutils.cmake @@ -0,0 +1,36 @@ +set(TARGET cutils) + +add_library(${TARGET} STATIC + ${SRC}/core/libcutils/android_get_control_file.cpp + ${SRC}/core/libcutils/ashmem-host.cpp + ${SRC}/core/libcutils/canned_fs_config.cpp + ${SRC}/core/libcutils/config_utils.cpp + ${SRC}/core/libcutils/fs.cpp + ${SRC}/core/libcutils/fs_config.cpp + ${SRC}/core/libcutils/hashmap.cpp + ${SRC}/core/libcutils/iosched_policy.cpp + ${SRC}/core/libcutils/load_file.cpp + ${SRC}/core/libcutils/multiuser.cpp + ${SRC}/core/libcutils/native_handle.cpp + ${SRC}/core/libcutils/properties.cpp + ${SRC}/core/libcutils/record_stream.cpp + ${SRC}/core/libcutils/socket_inaddr_any_server_unix.cpp + ${SRC}/core/libcutils/socket_local_client_unix.cpp + ${SRC}/core/libcutils/socket_local_server_unix.cpp + ${SRC}/core/libcutils/socket_network_client_unix.cpp + ${SRC}/core/libcutils/sockets_unix.cpp + ${SRC}/core/libcutils/sockets.cpp + ${SRC}/core/libcutils/str_parms.cpp + ${SRC}/core/libcutils/strlcpy.c + ${SRC}/core/libcutils/trace-host.cpp + ${SRC}/core/libcutils/threads.cpp) + +target_compile_definitions(${TARGET} PRIVATE -D_GNU_SOURCE) + +target_include_directories(${TARGET} PUBLIC + ${SRC}/core/libutils/include + ${SRC}/core/libcutils/include + ${SRC}/logging/liblog/include + ${SRC}/libbase/include + ) + diff --git a/src/liberofs.cmake b/src/liberofs.cmake new file mode 100644 index 00000000..823b79d7 --- /dev/null +++ b/src/liberofs.cmake @@ -0,0 +1,12 @@ +set(TARGET erofs) + +file(GLOB SRCS "${PROJECT_SOURCE_DIR}/lib/*.c") + +add_library(${TARGET} STATIC + ${SRCS} + ) + +include_directories( + ${PROJECT_SOURCE_DIR}/lib + ${PROJECT_SOURCE_DIR}/include + ) diff --git a/src/libext2_uuid.cmake b/src/libext2_uuid.cmake new file mode 100644 index 00000000..45ca8af2 --- /dev/null +++ b/src/libext2_uuid.cmake @@ -0,0 +1,24 @@ +set(TARGET ext2_uuid) + +add_library(${TARGET} STATIC + ${SRC}/e2fsprogs/lib/uuid/clear.c + ${SRC}/e2fsprogs/lib/uuid/compare.c + ${SRC}/e2fsprogs/lib/uuid/copy.c + ${SRC}/e2fsprogs/lib/uuid/gen_uuid.c + ${SRC}/e2fsprogs/lib/uuid/isnull.c + ${SRC}/e2fsprogs/lib/uuid/pack.c + ${SRC}/e2fsprogs/lib/uuid/parse.c + ${SRC}/e2fsprogs/lib/uuid/unpack.c + ${SRC}/e2fsprogs/lib/uuid/unparse.c + ${SRC}/e2fsprogs/lib/uuid/uuid_time.c + ) + +include_directories( + ${SRC}/e2fsprogs/lib + ${SRC}/core/libsparse/include + ${SRC}/e2fsprogs/lib + ${SRC}/e2fsprogs/misc + ${SRC}/e2fsprogs/lib/ext2fs + ${SRC}/selinux/libselinux/include + ${SRC}/core/libcutils/include + ) diff --git a/src/liblog.cmake b/src/liblog.cmake new file mode 100644 index 00000000..3cb83b4c --- /dev/null +++ b/src/liblog.cmake @@ -0,0 +1,25 @@ +set(TARGET log) + +add_library(${TARGET} STATIC + ${SRC}/logging/liblog/log_event_list.cpp + ${SRC}/logging/liblog/log_event_write.cpp + ${SRC}/logging/liblog/logger_name.cpp + ${SRC}/logging/liblog/logger_read.cpp + ${SRC}/logging/liblog/logger_write.cpp + ${SRC}/logging/liblog/properties.cpp + ${SRC}/logging/liblog/logprint.cpp + ) + +target_compile_definitions(${TARGET} PRIVATE + -DLIBLOG_LOG_TAG=1006 + -D_XOPEN_SOURCE=700 + -DFAKE_LOG_DEVICE=1 + -DSNET_EVENT_LOG_TAG=1397638686 + ) + +target_include_directories(${TARGET} PUBLIC + ${SRC}/core/include + ${SRC}/logging/liblog/include + ${SRC}/core/libcutils/include + ${SRC}/libbase/include + ) \ No newline at end of file diff --git a/src/libpcre.cmake b/src/libpcre.cmake new file mode 100644 index 00000000..cedac10c --- /dev/null +++ b/src/libpcre.cmake @@ -0,0 +1,37 @@ +set(TARGET pcre) + +add_library(${TARGET} STATIC + ${SRC}/pcre/src/pcre2_auto_possess.c + ${SRC}/pcre/src/pcre2_compile.c + ${SRC}/pcre/src/pcre2_config.c + ${SRC}/pcre/src/pcre2_context.c + ${SRC}/pcre/src/pcre2_convert.c + ${SRC}/pcre/src/pcre2_dfa_match.c + ${SRC}/pcre/src/pcre2_error.c + ${SRC}/pcre/src/pcre2_extuni.c + ${SRC}/pcre/src/pcre2_find_bracket.c + ${SRC}/pcre/src/pcre2_maketables.c + ${SRC}/pcre/src/pcre2_match.c + ${SRC}/pcre/src/pcre2_match_data.c + ${SRC}/pcre/src/pcre2_jit_compile.c + ${SRC}/pcre/src/pcre2_newline.c + ${SRC}/pcre/src/pcre2_ord2utf.c + ${SRC}/pcre/src/pcre2_pattern_info.c + ${SRC}/pcre/src/pcre2_script_run.c + ${SRC}/pcre/src/pcre2_serialize.c + ${SRC}/pcre/src/pcre2_string_utils.c + ${SRC}/pcre/src/pcre2_study.c + ${SRC}/pcre/src/pcre2_substitute.c + ${SRC}/pcre/src/pcre2_substring.c + ${SRC}/pcre/src/pcre2_tables.c + ${SRC}/pcre/src/pcre2_ucd.c + ${SRC}/pcre/src/pcre2_valid_utf.c + ${SRC}/pcre/src/pcre2_xclass.c + ${SRC}/pcre/src/pcre2_chartables.c) + +target_compile_definitions(${TARGET} PRIVATE -DHAVE_CONFIG_H -DPCRE2_CODE_UNIT_WIDTH=8) + +target_include_directories(${TARGET} PUBLIC + ${SRC}/pcre/include + ) + diff --git a/src/libselinux.cmake b/src/libselinux.cmake new file mode 100644 index 00000000..c2d5be24 --- /dev/null +++ b/src/libselinux.cmake @@ -0,0 +1,26 @@ +set(TARGET selinux) + +set(SRC_LIST + ${SRC}/selinux/libselinux/src/canonicalize_context.c + ${SRC}/selinux/libselinux/src/selinux_config.c + ${SRC}/selinux/libselinux/src/label_file.c + ${SRC}/selinux/libselinux/src/regex.c + ${SRC}/selinux/libselinux/src/callbacks.c + ${SRC}/selinux/libselinux/src/freecon.c + ${SRC}/selinux/libselinux/src/label_backends_android.c + ${SRC}/selinux/libselinux/src/label.c + ${SRC}/selinux/libselinux/src/label_support.c + ${SRC}/selinux/libselinux/src/matchpathcon.c + ${SRC}/selinux/libselinux/src/setrans_client.c + ${SRC}/selinux/libselinux/src/sha1.c + ${SRC}/selinux/libselinux/src/init.c + ${SRC}/selinux/libselinux/src/lgetfilecon.c + #${SRC}/selinux/libselinux/src/load_policy.c + ${SRC}/selinux/libselinux/src/lsetfilecon.c + ) + +add_library(${TARGET} STATIC ${SRC_LIST}) +target_compile_definitions(${TARGET} PRIVATE -DUSE_PCRE2 -DPCRE2_CODE_UNIT_WIDTH=8 -DBUILD_HOST -DNO_DB_BACKEND -DNO_X_BACKEND -DNO_MEDIA_BACKEND -D_GNU_SOURCE -DDISABLE_BOOL -DNO_PERSISTENTLY_STORED_PATTERNS -DDISABLE_SETRANS -DDISABLE_SETRANS) + +target_include_directories(${TARGET} PRIVATE ${SRC}/selinux/libselinux/include) + diff --git a/src/logging b/src/logging new file mode 160000 index 00000000..48f559f3 --- /dev/null +++ b/src/logging @@ -0,0 +1 @@ +Subproject commit 48f559f377b252a47078bd49929fe710d7791a1c diff --git a/src/lz4 b/src/lz4 new file mode 160000 index 00000000..e04083a4 --- /dev/null +++ b/src/lz4 @@ -0,0 +1 @@ +Subproject commit e04083a4ad8f58239710f7e4f0fe7ce6b5b811c9 diff --git a/src/pcre b/src/pcre new file mode 160000 index 00000000..9962dd71 --- /dev/null +++ b/src/pcre @@ -0,0 +1 @@ +Subproject commit 9962dd71e5531d993132afa4f3ebbe93f24834fb diff --git a/src/selinux b/src/selinux new file mode 160000 index 00000000..73850041 --- /dev/null +++ b/src/selinux @@ -0,0 +1 @@ +Subproject commit 7385004162b22554fa651ae521c8bc67bf4b3524