cmake_minimum_required(VERSION 3.18.4)
project(ldpc)

message("CMAKE_SYSTEM_INFO_FILE           ${CMAKE_SYSTEM_INFO_FILE}")
message("CMAKE_SYSTEM_NAME                ${CMAKE_SYSTEM_NAME}")
message("CMAKE_SYSTEM_PROCESSOR           ${CMAKE_SYSTEM_PROCESSOR}")
message("CMAKE_SYSTEM                     ${CMAKE_SYSTEM}")
#string (REGEX MATCH "\\.el[1-9]" os_version_suffix ${CMAKE_SYSTEM})
#message("os_version_suffix                ${os_version_suffix}")
message("CMAKE_SOURCE_DIR                 ${CMAKE_SOURCE_DIR}")

if ((DEFINED ${ANDROID_NATIVE_API_LEVEL}) OR ("Android" STREQUAL ${CMAKE_SYSTEM_NAME}))
    message("ANDROID_NATIVE_API_LEVEL         ${ANDROID_NATIVE_API_LEVEL}")
    message("CMAKE_TOOLCHAIN_FILE             ${CMAKE_TOOLCHAIN_FILE}")
    message("ANDROID_ABI                      ${ANDROID_ABI}")
    message("-> ANDROID_NATIVE_API_LEVEL is defined building for android")
else()
    message("-> ANDROID_NATIVE_API_LEVEL is not defined building for linux")
    message("CMAKE_SOURCE_DIR + LINUX_ABI   ${CMAKE_SOURCE_DIR}/libs/linux${CMAKE_SYSTEM_PROCESSOR}/")
endif()







if ((DEFINED ${ANDROID_NATIVE_API_LEVEL}) OR ("Android" STREQUAL ${CMAKE_SYSTEM_NAME}))

    message("----------------------")
    message(" building for android")

    find_library(log-lib log)
    message("  log                              ${log-lib}")
    find_library(EGL-lib EGL)
    message("  EGL                              ${EGL-lib}")
    find_library(GLESv2-lib GLESv2)
    message("  GLESv2                           ${GLESv2-lib}")
    find_library(GLESv3-lib GLESv3)
    message("  GLESv3                           ${GLESv3-lib}")
    find_library(c++_shared-lib c++_shared)
    message("  c++_shared                       ${c++_shared-lib}")

    message("----------------------")
    message(" building mpv")

    add_library(player SHARED player.cpp)
    target_include_directories(player PUBLIC ${CMAKE_SOURCE_DIR}/include/${ANDROID_ABI})

    add_library( mpv SHARED IMPORTED )
    set_target_properties( mpv PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libmpv.so )
    add_library( avdevice SHARED IMPORTED )
    set_target_properties( avdevice PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libavdevice.so )
    add_library( avfilter SHARED IMPORTED )
    set_target_properties( avfilter PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libavfilter.so )
    add_library( swscale SHARED IMPORTED )
    set_target_properties( swscale PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libswscale.so )
    add_library( avformat SHARED IMPORTED )
    set_target_properties( avformat PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libavformat.so )
    add_library( avcodec SHARED IMPORTED )
    set_target_properties( avcodec PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libavcodec.so )
    add_library( avutil SHARED IMPORTED )
    set_target_properties( avutil PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libavutil.so )
    add_library( swresample SHARED IMPORTED )
    set_target_properties( swresample PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libswresample.so )
    add_library( pixman SHARED IMPORTED )
    set_target_properties( pixman PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libpixman-1.so )
    add_library( cairo SHARED IMPORTED )
    set_target_properties( cairo PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libcairo.so )
    add_library( freetype STATIC IMPORTED )
    set_target_properties( freetype PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libfreetype.a )

    target_link_options(player PRIVATE "-Wl,-z,max-page-size=16384")
    target_link_libraries(
            player
            ${log-lib}
            ${EGL-lib}
            ${GLESv2-lib}
            ${GLESv3-lib}
            ${c++_shared-lib}
            mpv
            avdevice
            avfilter
            swscale
            avformat
            avcodec
            avutil
            swresample
    )

    #message("----------------------")
    #message(" building thumb")

    #add_library(thumb SHARED thumb.cpp)
    #target_include_directories(thumb PUBLIC ${CMAKE_SOURCE_DIR}/include/${ANDROID_ABI})

    #target_link_options(thumb PRIVATE "-Wl,-z,max-page-size=16384")
    #target_link_libraries(thumb
    #        ${log-lib}
    #        ${c++_shared-lib}
    #        avdevice
    #        avfilter
    #        swscale
    #        avformat
    #        avcodec
    #        avutil
    #        swresample
    #)

    message("----------------------")
    message(" building render")

    add_library(render SHARED renderAndroid.cpp)
    #target_include_directories(render PUBLIC ${CMAKE_SOURCE_DIR}/thumb)
    target_include_directories(render PUBLIC ${CMAKE_SOURCE_DIR}/include/${ANDROID_ABI})
    # cairo-ft.h
    #target_include_directories(render PUBLIC ${CMAKE_SOURCE_DIR}/include/${ANDROID_ABI}/freetype2)

    target_link_options(render PRIVATE "-Wl,-z,max-page-size=16384")
    target_link_libraries(render
            ${log-lib}
            ${c++_shared-lib}
            android
            avdevice
            avfilter
            swscale
            avformat
            avcodec
            avutil
            swresample
            freetype
            pixman
            cairo
    )

    add_subdirectory(Discover)

else()

    message("")
    message(" building for linux : cmake --fresh . && make clean && make")

    add_subdirectory(Thumb)
    add_subdirectory(Discover)

    message("")
    message(" building render : ./render")
    message("")

    set(CMAKE_SKIP_INSTALL_RPATH OFF)
    set(CMAKE_INSTALL_RPATH_USE_LINK_PATH OFF)
    set(CMAKE_SKIP_BUILD_RPATH OFF)
    set(CMAKE_BUILD_RPATH_USE_LINK_PATH OFF)

    add_library( bavdevice SHARED IMPORTED )
    set_target_properties( bavdevice PROPERTIES INSTALL_RPATH "\${ORIGIN}/lib/" BUILD_RPATH "\${ORIGIN}/lib/"
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/linux${CMAKE_SYSTEM_PROCESSOR}/libavdevice.so)
    add_library( bavfilter SHARED IMPORTED )
    set_target_properties( bavfilter PROPERTIES INSTALL_RPATH "\${ORIGIN}/lib/" BUILD_RPATH "\${ORIGIN}/lib/"
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/linux${CMAKE_SYSTEM_PROCESSOR}/libavfilter.so)
    add_library( bswscale SHARED IMPORTED )
    set_target_properties( bswscale PROPERTIES INSTALL_RPATH "\${ORIGIN}/lib/" BUILD_RPATH "\${ORIGIN}/lib/"
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/linux${CMAKE_SYSTEM_PROCESSOR}/libswscale.so)
    add_library( bavformat SHARED IMPORTED )
    set_target_properties( bavformat PROPERTIES INSTALL_RPATH "\${ORIGIN}/lib/" BUILD_RPATH "\${ORIGIN}/lib/"
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/linux${CMAKE_SYSTEM_PROCESSOR}/libavformat.so)
    add_library( bavcodec SHARED IMPORTED )
    set_target_properties( bavcodec PROPERTIES INSTALL_RPATH "\${ORIGIN}/lib/" BUILD_RPATH "\${ORIGIN}/lib/"
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/linux${CMAKE_SYSTEM_PROCESSOR}/libavcodec.so)
    add_library( bavutil SHARED IMPORTED )
    set_target_properties( bavutil PROPERTIES INSTALL_RPATH "\${ORIGIN}/lib/" BUILD_RPATH "\${ORIGIN}/lib/"
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/linux${CMAKE_SYSTEM_PROCESSOR}/libavutil.so)
    add_library( bswresample SHARED IMPORTED )
    set_target_properties( bswresample PROPERTIES INSTALL_RPATH "\${ORIGIN}/lib/" BUILD_RPATH "\${ORIGIN}/lib/"
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/linux${CMAKE_SYSTEM_PROCESSOR}/libswresample.so)

    find_library(gobject-lib gobject-2.0)
    message("  libgobject                          ${gobject-lib}")
    find_library(gtk-lib gtk-3)
    message("  libgtk                              ${gtk-lib}")
    find_library(gdkpixbuf-lib gdk_pixbuf-2.0)
    message("  libgdkpixbuf                        ${gdkpixbuf-lib}")
    find_library(glib-lib glib-2.0)
    message("  libglib                             ${glib-lib}")
    find_library(gdk-lib gdk-3)
    message("  libgdk                              ${gdk-lib}")

    find_library(freetype-lib freetype)
    message("  libfreetype                         ${freetype-lib}")
    find_library(pixman-lib pixman-1)
    message("  libpixman                           ${pixman-lib}")
    find_library(cairo-lib cairo)
    message("  libcairo                            ${cairo-lib}")

    # GTK_TEST_TOUCHSCREEN
    find_package(PkgConfig REQUIRED)
    pkg_check_modules(GTK3 REQUIRED gtk+-3.0) # gtk+-3.0 gtk4
    include_directories(${GTK3_INCLUDE_DIRS})
    #link_directories(${GTK3_LIBRARY_DIRS})
    #add_definitions(${GTK3_CFLAGS_OTHER})

    add_executable(photochiotte renderLinux.cpp)
    set_target_properties(photochiotte PROPERTIES INSTALL_RPATH "\${ORIGIN}/lib/" BUILD_RPATH "\${ORIGIN}/lib/")
    # Find shared libraries next to the executable
    #set_target_properties(photochiotte PROPERTIES BUILD_WITH_INSTALL_RPATH FALSE LINK_FLAGS "-Wl,-rpath,$ORIGIN/")
    #target_include_directories(photochiotte PUBLIC ${CMAKE_SOURCE_DIR}/thumb)
    target_include_directories(photochiotte PUBLIC ${CMAKE_SOURCE_DIR}/include/linux${CMAKE_SYSTEM_PROCESSOR})
    #target_link_directories(photochiotte PUBLIC ${CMAKE_SOURCE_DIR}/libs/linux${CMAKE_SYSTEM_PROCESSOR})
    # cairo-ft.h
    #target_include_directories(photochiotte PUBLIC ${CMAKE_SOURCE_DIR}/include/${CMAKE_SYSTEM_PROCESSOR}/freetype2)

    target_link_options(photochiotte PRIVATE "-Wl,-z,max-page-size=16384")
    target_link_libraries(
            photochiotte
            bavdevice
            bavfilter
            bswscale
            bavformat
            bavcodec
            bavutil
            bswresample
            ${gobject-lib}
            ${gtk-lib}
            ${gdkpixbuf-lib}
            ${glib-lib}
            ${gdk-lib}
            ${freetype-lib}
            ${pixman-lib}
            ${cairo-lib}
    )

endif()












































