cmake_minimum_required(VERSION 3.18.1) project("native_renderer") # --- 1. FFmpeg 빌드 스크립트 실행 --- # NOTE: 이 명령은 CMake 설정 단계에서 딱 한 번 실행되어 FFmpeg 라이브러리를 빌드합니다. # ffmpeg 폴더에 있는 build_ffmpeg.sh 스크립트를 실행합니다. execute_process( COMMAND sh ../../../../ffmpeg/build_ffmpeg.sh WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} RESULT_VARIABLE FFMPEG_BUILD_RESULT ) if(NOT FFMPEG_BUILD_RESULT EQUAL 0) message(FATAL_ERROR "FFmpeg build script failed with exit code: ${FFMPEG_BUILD_RESULT}") endif() # --- 실행 끝 --- # --- 2. 빌드된 라이브러리 참조 --- # NOTE: 이제 FFmpeg은 미리 빌드된 라이브러리(prebuilt)처럼 취급됩니다. # jniLibs 폴더 경로 설정 set(JNI_LIBS_DIR ${CMAKE_SOURCE_DIR}/../../jniLibs/${ANDROID_ABI}) # 헤더 파일 경로 추가 include_directories(${JNI_LIBS_DIR}/include) # 각 .so 파일을 IMPORTED 라이브러리로 추가 add_library(avformat SHARED IMPORTED) set_target_properties(avformat PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/libavformat.so) add_library(avcodec SHARED IMPORTED) set_target_properties(avcodec PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/libavcodec.so) add_library(avutil SHARED IMPORTED) set_target_properties(avutil PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/libavutil.so) add_library(swscale SHARED IMPORTED) set_target_properties(swscale PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/libswscale.so) add_library(swresample SHARED IMPORTED) set_target_properties(swresample PROPERTIES IMPORTED_LOCATION ${JNI_LIBS_DIR}/libswresample.so) # --- 3. 네이티브 렌더러 라이브러리 빌드 및 링크 --- add_library(native_renderer SHARED native_renderer.cpp Renderer.cpp Preloader.cpp MediaAsset.cpp ) find_library(log-lib log) find_library(android-lib android) find_library(nativewindow-lib nativewindow) target_link_libraries(native_renderer avformat avcodec avutil swscale swresample ${log-lib} ${android-lib} ${nativewindow-lib} )