@@ -3,9 +3,15 @@ project("stackplz")
33
44enable_language (C CXX ASM )
55
6+ option (STACKPLZ_BUILD_ALL "Build merged static archive libstackplz_all.a" ON )
7+
68set (CMAKE_CXX_STANDARD 20)
79set (CMAKE_C_STANDARD 11)
810
11+ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR} /lib" )
12+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR} /lib" )
13+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR} /bin" )
14+
915set (C_FLAGS "-Wall -Wextra -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -flto=thin -ffunction-sections -fdata-sections" )
1016set (LINKER_FLAGS "-fuse-ld=lld -flto=thin -ffixed-x18 -Wl,--hash-style=both -Wl,--unresolved-symbols=ignore-all -Wl,--gc-sections" )
1117
@@ -192,6 +198,52 @@ target_include_directories(unwindstack
192198target_compile_options (unwindstack PRIVATE -Wno-c99-designator )
193199target_compile_definitions (unwindstack PRIVATE DEXFILE_SUPPORT=1 )
194200
201+ add_library (stackplz_static STATIC lib.cpp )
202+ set_target_properties (stackplz_static PROPERTIES OUTPUT_NAME stackplz )
203+ target_include_directories (stackplz_static PUBLIC ${EXTERNAL_SRC} /libbase/include )
204+ target_include_directories (stackplz_static PUBLIC ${EXTERNAL_SRC} /bionic/libc/kernel/uapi )
205+ target_include_directories (stackplz_static PUBLIC ${EXTERNAL_SRC} /unwinding/libunwindstack/include )
206+ target_compile_definitions (stackplz_static PRIVATE DEXFILE_SUPPORT=1 )
207+ target_link_libraries (stackplz_static base procinfo lzma dexfile_support unwindstack log )
208+
209+ if (STACKPLZ_BUILD_ALL)
210+ set (STACKPLZ_ALL_ARCHIVE "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} /libstackplz_all.a" )
211+ set (STACKPLZ_ALL_MRI "${CMAKE_CURRENT_BINARY_DIR} /stackplz_all.mri" )
212+ set (STACKPLZ_ALL_AR_SCRIPT "${CMAKE_CURRENT_BINARY_DIR} /stackplz_all_ar.cmake" )
213+
214+ string (CONCAT STACKPLZ_ALL_MRI_CONTENT
215+ "CREATE ${STACKPLZ_ALL_ARCHIVE} \n "
216+ "ADDLIB $<TARGET_FILE :stackplz_static >\n "
217+ "ADDLIB $<TARGET_FILE :base >\n "
218+ "ADDLIB $<TARGET_FILE :procinfo >\n "
219+ "ADDLIB $<TARGET_FILE :lzma >\n "
220+ "ADDLIB $<TARGET_FILE :dexfile_support >\n "
221+ "ADDLIB $<TARGET_FILE :unwindstack >\n "
222+ "SAVE\n "
223+ "END\n " )
224+ file (GENERATE OUTPUT "${STACKPLZ_ALL_MRI} " CONTENT "${STACKPLZ_ALL_MRI_CONTENT} " )
225+
226+ string (CONCAT STACKPLZ_ALL_AR_SCRIPT_CONTENT
227+ "execute_process(\n "
228+ " COMMAND \" ${CMAKE_AR} \" -M\n "
229+ " INPUT_FILE \" ${STACKPLZ_ALL_MRI} \"\n "
230+ " RESULT_VARIABLE stackplz_all_ret\n "
231+ ")\n "
232+ "if(NOT stackplz_all_ret EQUAL 0)\n "
233+ " message(FATAL_ERROR \" failed to generate ${STACKPLZ_ALL_ARCHIVE} , ar return=${stackplz_all_ret} \" )\n "
234+ "endif()\n " )
235+ file (GENERATE OUTPUT "${STACKPLZ_ALL_AR_SCRIPT} " CONTENT "${STACKPLZ_ALL_AR_SCRIPT_CONTENT} " )
236+
237+ add_custom_command (
238+ OUTPUT "${STACKPLZ_ALL_ARCHIVE} "
239+ DEPENDS stackplz_static base procinfo lzma dexfile_support unwindstack
240+ COMMAND "${CMAKE_COMMAND} " -E make_directory "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} "
241+ COMMAND "${CMAKE_COMMAND} " -P "${STACKPLZ_ALL_AR_SCRIPT} "
242+ VERBATIM
243+ )
244+ add_custom_target (stackplz_all DEPENDS "${STACKPLZ_ALL_ARCHIVE} " )
245+ endif ()
246+
195247# check are we top-level project
196248if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
197249
0 commit comments