diff --git a/library/build.gradle.kts b/library/build.gradle.kts index b9ad7ef..04bc756 100644 --- a/library/build.gradle.kts +++ b/library/build.gradle.kts @@ -55,10 +55,45 @@ android { defaultConfig { minSdk = androidMinSdkVersion targetSdk = androidTargetSdkVersion - externalNativeBuild { - ndkBuild { - arguments += "-j${Runtime.getRuntime().availableProcessors()}" + cmake { + abiFilters("arm64-v8a", "armeabi-v7a", "x86", "x86_64") + val flags = arrayOf( + "-Wall", + "-Werror", + "-Qunused-arguments", + "-Wno-gnu-string-literal-operator-template", + "-fno-rtti", + "-fvisibility=hidden", + "-fvisibility-inlines-hidden", + "-fno-exceptions", + "-fno-stack-protector", + "-fomit-frame-pointer", + "-Wno-builtin-macro-redefined", + "-Wl,--strip-all", + "-ffunction-sections", + "-fdata-sections", + "-Wno-unused-value", + "-Wl,--gc-sections", + "-D__FILE__=__FILE_NAME__", + "-Wl,--exclude-libs,ALL", + ) + cppFlags("-std=c++20", *flags) + cFlags("-std=c18", *flags) + arguments += "-DCMAKE_VERBOSE_MAKEFILE=ON" + arguments += "-DANDROID_STL=c++_shared" + val configFlags = arrayOf( + "-Oz", + "-DNDEBUG" + ).joinToString(" ") + arguments.addAll( + arrayOf( + "-DCMAKE_CXX_FLAGS_RELEASE=$configFlags", + "-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=$configFlags", + "-DCMAKE_C_FLAGS_RELEASE=$configFlags", + "-DCMAKE_C_FLAGS_RELWITHDEBINFO=$configFlags" + ) + ) } } } @@ -69,8 +104,8 @@ android { } externalNativeBuild { - ndkBuild { - path("jni/Android.mk") + cmake { + path("jni/CMakeLists.txt") } } } diff --git a/library/jni/CMakeLists.txt b/library/jni/CMakeLists.txt new file mode 100644 index 0000000..74deb67 --- /dev/null +++ b/library/jni/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required(VERSION 3.4.1) +project(lsplant) + +add_definitions(-std=c++20) + +set(SOURCES lsplant.cc) + +add_subdirectory(external/dex_builder) + +add_library(${PROJECT_NAME} SHARED ${SOURCES}) +add_library(${PROJECT_NAME}_static STATIC ${SOURCES}) + +target_include_directories(${PROJECT_NAME} PUBLIC include) +target_include_directories(${PROJECT_NAME}_static PUBLIC include) + +target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) +target_include_directories(${PROJECT_NAME}_static PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + +set(CFLAGS + -flto + ) + +target_compile_options(${PROJECT_NAME} PRIVATE ${CFLAGS}) +target_link_options(${PROJECT_NAME} PRIVATE -flto) + +target_compile_options(${PROJECT_NAME}_static PRIVATE ${CFLAGS}) + +target_link_libraries(${PROJECT_NAME} PUBLIC dex_builder log) +target_link_libraries(${PROJECT_NAME}_static PRIVATE dex_builder_static) +target_link_libraries(${PROJECT_NAME}_static PUBLIC log) diff --git a/library/jni/external/dex_builder b/library/jni/external/dex_builder index 850add0..2546d41 160000 --- a/library/jni/external/dex_builder +++ b/library/jni/external/dex_builder @@ -1 +1 @@ -Subproject commit 850add0912f11dc9b52fd13e4b52e5a4b20733eb +Subproject commit 2546d413f3dfe38b633fbba5aaa022959638035b