Skip to content

Commit

Permalink
Fix the CMakeLists.txt of tgfx. (#118)
Browse files Browse the repository at this point in the history
  • Loading branch information
domchen authored Feb 17, 2022
1 parent 2394ba9 commit 27371b8
Show file tree
Hide file tree
Showing 5 changed files with 274 additions and 309 deletions.
1 change: 1 addition & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

232 changes: 59 additions & 173 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@ elseif (MACOS)
set(PAG_BUILD_TESTS ON CACHE BOOL "Build libpag tests" FORCE)
endif ()

message("PAG_USE_LIBAVC: ${PAG_USE_LIBAVC}")
message("PAG_USE_RTTR: ${PAG_USE_RTTR}")
message("PAG_BUILD_SHARED: ${PAG_BUILD_SHARED}")
message("PAG_BUILD_TESTS: ${PAG_BUILD_TESTS}")

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
cmake_policy(SET CMP0063 NEW)
Expand All @@ -72,32 +77,23 @@ endif (MSVC)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-DDEBUG)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -g -O1")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak -g -O1")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fPIE -g -O1")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=nullability -g -O1")
endif ()

# collects pag include directories.
set(PAG_INCLUDES ./ include src tgfx/include tgfx/src)
set(PAG_INCLUDES ./ include src)

# collects pag source files.
file(GLOB_RECURSE PAG_FILES
src/base/*.*
src/codec/*.*
src/rendering/*.*
tgfx/src/core/utils/*.*
tgfx/src/gpu/gradients/*.*)
src/rendering/*.*)

if (NOT WEB)
file(GLOB PAG_VIDEO_FILES src/video/*.*)
list(APPEND PAG_FILES ${PAG_VIDEO_FILES})
endif ()
file(GLOB PAG_COMMON_FILES
src/platform/*.*
tgfx/src/core/*.*
tgfx/src/core/images/*.*
tgfx/src/core/vectors/*.*
tgfx/src/gpu/*.*
tgfx/src/platform/*.*)

file(GLOB PAG_COMMON_FILES src/platform/*.*)
list(APPEND PAG_FILES ${PAG_COMMON_FILES})

if (PAG_USE_QT)
Expand All @@ -110,93 +106,20 @@ else ()
set(USE_NATIVE_PLATFORM ON)
endif ()

if (PAG_USE_FREETYPE)
# Freetype needs libpng
set(PAG_USE_PNG_DECODE ON)
endif ()

if (PAG_USE_PNG_DECODE)
add_definitions(-DTGFX_USE_PNG_DECODE)
set(PAG_USE_PNG ON)
endif ()

if (PAG_USE_PNG_ENCODE)
add_definitions(-DTGFX_USE_PNG_ENCODE)
set(PAG_USE_PNG ON)
endif ()

if (PAG_USE_PNG)
set(PAG_USE_ZLIB ON)
endif ()

if (PAG_USE_JPEG_DECODE)
add_definitions(-DTGFX_USE_JPEG_DECODE)
set(PAG_USE_JPEG ON)
endif ()

if (PAG_USE_JPEG_ENCODE)
add_definitions(-DTGFX_USE_JPEG_ENCODE)
set(PAG_USE_JPEG ON)
endif ()

if (PAG_USE_WEBP_DECODE)
add_definitions(-DTGFX_USE_WEBP_DECODE)
set(PAG_USE_WEBP ON)
endif ()

if (PAG_USE_WEBP_ENCODE)
add_definitions(-DTGFX_USE_WEBP_ENCODE)
set(PAG_USE_WEBP ON)
endif ()

if (PAG_USE_OPENGL)
file(GLOB GFX_PLATFORM_FILES tgfx/src/gpu/opengl/*.*)
list(APPEND PAG_FILES ${GFX_PLATFORM_FILES})
endif ()

if (PAG_USE_FREETYPE)
add_definitions(-DTGFX_USE_FREETYPE)
list(APPEND PAG_STATIC_VENDORS freetype)
file(GLOB_RECURSE GFX_PLATFORM_FILES tgfx/src/core/vectors/freetype/*.*)
list(APPEND PAG_FILES ${GFX_PLATFORM_FILES})
list(APPEND PAG_INCLUDES third_party/freetype/include)
elseif (WEB)
add_definitions(-DTGFX_BUILD_FOR_WEB)
file(GLOB_RECURSE GFX_PLATFORM_FILES tgfx/src/core/vectors/web/*.*)
list(APPEND PAG_FILES ${GFX_PLATFORM_FILES})
elseif (APPLE)
# Uses CoreGraphics instead.
add_definitions(-DTGFX_USE_CORE_GRAPHICS)
file(GLOB_RECURSE GFX_PLATFORM_FILES tgfx/src/core/vectors/coregraphics/*.*)
list(APPEND PAG_FILES ${GFX_PLATFORM_FILES})
endif ()

if (PAG_USE_JPEG)
list(APPEND PAG_STATIC_VENDORS libjpeg-turbo)
file(GLOB_RECURSE GFX_PLATFORM_FILES tgfx/src/core/images/jpeg/*.*)
list(APPEND PAG_FILES ${GFX_PLATFORM_FILES})
list(APPEND PAG_INCLUDES third_party/out/libjpeg-turbo/${INCLUDE_ENTRY})
endif ()

if (PAG_USE_WEBP)
list(APPEND PAG_STATIC_VENDORS libwebp)
file(GLOB_RECURSE GFX_PLATFORM_FILES tgfx/src/core/images/webp/*.*)
list(APPEND PAG_FILES ${GFX_PLATFORM_FILES})
list(APPEND PAG_INCLUDES third_party/libwebp/src)
endif ()

if (PAG_USE_PNG)
list(APPEND PAG_STATIC_VENDORS libpng)
file(GLOB_RECURSE GFX_PLATFORM_FILES tgfx/src/core/images/png/*.*)
list(APPEND PAG_FILES ${GFX_PLATFORM_FILES})
list(APPEND PAG_INCLUDES third_party/out/libpng/${INCLUDE_ENTRY})
endif ()

if (PAG_USE_ZLIB)
if (NOT ANDROID)
list(APPEND PAG_STATIC_VENDORS zlib)
endif ()
endif ()
set(TGFX_USE_OPENGL ${PAG_USE_OPENGL})
set(TGFX_USE_QT ${PAG_USE_QT})
set(TGFX_USE_SWIFTSHADER ${PAG_USE_SWIFTSHADER})
set(TGFX_USE_FREETYPE ${PAG_USE_FREETYPE})
set(TGFX_USE_PNG_DECODE ${PAG_USE_PNG_DECODE})
set(TGFX_USE_PNG_ENCODE ${PAG_USE_PNG_ENCODE})
set(TGFX_USE_JPEG_DECODE ${PAG_USE_JPEG_DECODE})
set(TGFX_USE_JPEG_ENCODE ${PAG_USE_JPEG_ENCODE})
set(TGFX_USE_WEBP_DECODE ${PAG_USE_WEBP_DECODE})
set(TGFX_USE_WEBP_ENCODE ${PAG_USE_WEBP_ENCODE})

set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
add_subdirectory(tgfx/ EXCLUDE_FROM_ALL)
list(APPEND PAG_INCLUDES tgfx/include tgfx/src)

if (PAG_USE_LIBAVC)
add_definitions(-DPAG_USE_LIBAVC)
Expand All @@ -216,14 +139,10 @@ if (PAG_USE_QT)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${Qt5OpenGL_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Quick_LIBRARIES})
list(APPEND PAG_PLATFORM_INCLUDES ${Qt5OpenGL_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Quick_INCLUDE_DIRS})
file(GLOB_RECURSE PAG_PLATFORM_FILES src/platform/qt/*.*)
file(GLOB GL_PLATFORM_FILES tgfx/src/gpu/opengl/qt/*.*)
list(APPEND PAG_PLATFORM_FILES ${GL_PLATFORM_FILES})
elseif (PAG_USE_SWIFTSHADER)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${SWIFTSHADER_LIBRARIES})
list(APPEND PAG_PLATFORM_INCLUDES ${SWIFTSHADER_INCLUDE_DIRS})
file(GLOB_RECURSE PAG_PLATFORM_FILES src/platform/swiftshader/*.*)
file(GLOB GL_PLATFORM_FILES tgfx/src/gpu/opengl/egl/*.*)
list(APPEND PAG_PLATFORM_FILES ${GL_PLATFORM_FILES})
endif ()

if (PAG_USE_RTTR)
Expand All @@ -242,17 +161,10 @@ function(find_include_dirs out)
set(${out} ${include_dirs} PARENT_SCOPE)
endfunction()

list(APPEND PAG_STATIC_VENDORS pathkit)
list(APPEND PAG_INCLUDES third_party/pathkit)
list(APPEND PAG_STATIC_VENDORS skcms)
list(APPEND PAG_INCLUDES third_party/skcms)

if (WEB)
add_definitions(-DPAG_BUILD_FOR_WEB)
if (USE_NATIVE_PLATFORM)
file(GLOB_RECURSE PAG_PLATFORM_FILES src/platform/web/*.*)
file(GLOB GL_PLATFORM_FILES tgfx/src/gpu/opengl/webgl/*.*)
list(APPEND PAG_PLATFORM_FILES ${GL_PLATFORM_FILES})
endif ()
elseif (IOS)
# finds all required platform libraries.
Expand All @@ -279,22 +191,18 @@ elseif (IOS)
find_library(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${ICONV_LIBRARIES})

if (PAG_USE_OPENGL)
find_library(OpenGLES_LIBS OpenGLES REQUIRED)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${OpenGLES_LIBS})
add_definitions(-DGL_SILENCE_DEPRECATION)
else ()
# Uses Metal instead.
file(GLOB_RECURSE GFX_PLATFORM_FILES tgfx/src/gpu/metal/*.*)
list(APPEND PAG_FILES ${GFX_PLATFORM_FILES})
find_library(Metal_LIBS Metal REQUIRED)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${Metal_LIBS})
endif ()

if (USE_NATIVE_PLATFORM)
if (PAG_USE_OPENGL)
find_library(OpenGLES_LIBS OpenGLES REQUIRED)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${OpenGLES_LIBS})
add_definitions(-DGL_SILENCE_DEPRECATION)
elseif (USE_NATIVE_PLATFORM)
# Uses Metal instead.
find_library(Metal_LIBS Metal REQUIRED)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${Metal_LIBS})
endif ()

file(GLOB_RECURSE PAG_PLATFORM_FILES src/platform/ios/*.* src/platform/cocoa/*.*)
file(GLOB GL_PLATFORM_FILES tgfx/src/gpu/opengl/eagl/*.*)
list(APPEND PAG_PLATFORM_FILES ${GL_PLATFORM_FILES})
find_include_dirs(IOS_PLATFORM_INCLUDES
src/platform/ios/*.h
src/platform/ios/private/*.h
Expand All @@ -319,20 +227,18 @@ elseif (MACOS)
find_library(CORE_MEDIA CoreMedia)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${CORE_MEDIA})

if (PAG_USE_OPENGL)
find_library(OpenGL_LIBS OpenGL REQUIRED)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${OpenGL_LIBS})
add_definitions(-DGL_SILENCE_DEPRECATION)
else ()
# Uses Metal instead.
file(GLOB_RECURSE GFX_PLATFORM_FILES tgfx/src/gpu/metal/*.*)
list(APPEND PAG_FILES ${GFX_PLATFORM_FILES})
endif ()

if (USE_NATIVE_PLATFORM)
if (PAG_USE_OPENGL)
find_library(OpenGL_LIBS OpenGL REQUIRED)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${OpenGL_LIBS})
add_definitions(-DGL_SILENCE_DEPRECATION)
elseif (USE_NATIVE_PLATFORM)
# Uses Metal instead.
find_library(Metal_LIBS Metal REQUIRED)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${Metal_LIBS})
endif ()

file(GLOB_RECURSE PAG_PLATFORM_FILES src/platform/mac/*.* src/platform/cocoa/*.*)
file(GLOB GL_PLATFORM_FILES tgfx/src/gpu/opengl/cgl/*.*)
list(APPEND PAG_PLATFORM_FILES ${GL_PLATFORM_FILES})
find_include_dirs(MAC_PLATFORM_INCLUDES
src/platform/mac/*.h
src/platform/mac/private/*.h
Expand All @@ -341,44 +247,34 @@ elseif (MACOS)
list(APPEND PAG_PLATFORM_INCLUDES ${MAC_PLATFORM_INCLUDES})
endif ()
elseif (ANDROID)

# finds all required platform libraries.
find_library(LOG_LIB log)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${LOG_LIB})
find_library(GLESV2_LIB GLESv2)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${GLESV2_LIB})
find_library(EGL_LIB EGL)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${EGL_LIB})
find_library(ANDROID_LIB android)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${ANDROID_LIB})
find_library(JNIGRAPHICS_LIB jnigraphics)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${JNIGRAPHICS_LIB})
if (PAG_USE_ZLIB)
find_library(Z_LIB z)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${Z_LIB})
endif ()

# optimizes the output size
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/android/libpag/export.def")
add_compile_options(-ffunction-sections -fdata-sections -Os -fno-exceptions -fno-rtti)

if (USE_NATIVE_PLATFORM)
find_library(GLESV2_LIB GLESv2)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${GLESV2_LIB})
find_library(EGL_LIB EGL)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${EGL_LIB})
file(GLOB_RECURSE PAG_PLATFORM_FILES src/platform/android/*.*)
file(GLOB GL_PLATFORM_FILES tgfx/src/gpu/opengl/egl/*.*)
list(APPEND PAG_PLATFORM_FILES ${GL_PLATFORM_FILES})
endif ()
elseif (WIN32)
set(BUILD_USE_64BITS ON)
add_definitions(-DNOMINMAX -D_USE_MATH_DEFINES)

if (USE_NATIVE_PLATFORM)
list(APPEND PAG_PLATFORM_INCLUDES vendor/angle/include)
file(GLOB ANGLE_LIBS vendor/angle/${PLATFORM}/${ARCH}/*${CMAKE_STATIC_LIBRARY_SUFFIX})
list(APPEND PAG_PLATFORM_SHARED_LIBS ${ANGLE_LIBS})
file(GLOB_RECURSE PAG_PLATFORM_FILES src/platform/win/*.*)
file(GLOB GL_PLATFORM_FILES tgfx/src/gpu/opengl/egl/*.*)
list(APPEND PAG_PLATFORM_FILES ${GL_PLATFORM_FILES})
endif ()
file(GLOB ANGLE_LIBS vendor/angle/${PLATFORM}/${ARCH}/*${CMAKE_STATIC_LIBRARY_SUFFIX})
list(APPEND PAG_PLATFORM_STATIC_LIBS ${ANGLE_LIBS})
find_library(Bcrypt_LIB Bcrypt)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${Bcrypt_LIB})
find_library(ws2_32_LIB ws2_32)
Expand All @@ -390,45 +286,35 @@ elseif (CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")
list(APPEND PAG_PLATFORM_SHARED_LIBS dl)
add_compile_options(-fPIC -pthread)
if (USE_NATIVE_PLATFORM)
find_library(GLESV2_LIB GLESv2)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${GLESV2_LIB})
find_library(EGL_LIB EGL)
list(APPEND PAG_PLATFORM_SHARED_LIBS ${EGL_LIB})
file(GLOB_RECURSE PAG_PLATFORM_FILES src/platform/linux/*.*)
file(GLOB GL_PLATFORM_FILES tgfx/src/gpu/opengl/egl/*.*)
list(APPEND PAG_PLATFORM_FILES ${GL_PLATFORM_FILES})
endif ()
endif ()

add_vendor_target(PAG STATIC_VENDORS ${PAG_STATIC_VENDORS} SHARED_VENDORS ${PAG_SHARED_VENDORS})
list(APPEND PAG_PLATFORM_STATIC_LIBS ${PAG_VENDOR_STATIC_LIBRARIES})
list(APPEND PAG_PLATFORM_SHARED_LIBS ${PAG_VENDOR_SHARED_LIBRARIES})

if (WEB)
file(GLOB_RECURSE TGFX_PLATFORM_FILES tgfx/src/platform/web/*.*)
elseif (IOS OR MACOS)
file(GLOB_RECURSE TGFX_PLATFORM_FILES tgfx/src/platform/apple/*.*)
elseif (ANDROID)
file(GLOB_RECURSE TGFX_PLATFORM_FILES tgfx/src/platform/android/*.*)
else ()
file(GLOB_RECURSE TGFX_PLATFORM_FILES tgfx/src/platform/mock/*.*)
endif ()

if (PAG_BUILD_SHARED)
add_library(pag SHARED ${PAG_VENDOR_TARGET} ${PAG_FILES} ${PAG_PLATFORM_FILES} ${TGFX_PLATFORM_FILES})
add_library(pag SHARED ${PAG_VENDOR_TARGET} ${PAG_FILES} ${PAG_PLATFORM_FILES})
target_compile_definitions(pag PUBLIC PAG_DLL)
target_include_directories(pag PUBLIC ${PAG_INCLUDES} ${PAG_PLATFORM_INCLUDES})
target_link_libraries(pag ${PAG_PLATFORM_STATIC_LIBS} ${PAG_PLATFORM_SHARED_LIBS})
target_link_libraries(pag ${PAG_PLATFORM_STATIC_LIBS} $<TARGET_FILE:tgfx> ${PAG_PLATFORM_SHARED_LIBS})
else ()
add_library(pag STATIC ${PAG_VENDOR_TARGET} ${PAG_FILES} ${PAG_PLATFORM_FILES} ${TGFX_PLATFORM_FILES})
merge_libraries_into(pag ${PAG_PLATFORM_STATIC_LIBS})
add_library(pag STATIC ${PAG_VENDOR_TARGET} ${PAG_FILES} ${PAG_PLATFORM_FILES})
merge_libraries_into(pag ${PAG_PLATFORM_STATIC_LIBS} $<TARGET_FILE:tgfx>)
target_include_directories(pag PUBLIC ${PAG_INCLUDES} ${PAG_PLATFORM_INCLUDES})
target_link_libraries(pag)
endif ()

if (PAG_BUILD_TESTS)
file(GLOB_RECURSE SWIFTSHADER_PLATFORM_FILES src/platform/swiftshader/*.*)
list(APPEND SWIFTSHADER_PLATFORM_FILES ${TGFX_PLATFORM_FILES})
file(GLOB GL_PLATFORM_FILES tgfx/src/gpu/opengl/egl/*.*)
list(APPEND SWIFTSHADER_PLATFORM_FILES ${GL_PLATFORM_FILES})
add_library(pag-ss STATIC ${PAG_VENDOR_TARGET} ${PAG_FILES} ${SWIFTSHADER_PLATFORM_FILES})
merge_libraries_into(pag-ss ${PAG_PLATFORM_STATIC_LIBS})
merge_libraries_into(pag-ss ${PAG_PLATFORM_STATIC_LIBS} $<TARGET_FILE:tgfx-ss>)
target_include_directories(pag-ss PUBLIC ${PAG_INCLUDES} ${SWIFTSHADER_INCLUDE_DIRS})
target_link_libraries(pag-ss)

Expand Down
2 changes: 1 addition & 1 deletion DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"common": [
{
"url": "${PAG_GROUP}/vendor_tools.git",
"commit": "9b28c43638b358c05a0a9c26042390e86d1a213d",
"commit": "00907e189429712aafe57da2d937e369f1e9ea84",
"dir": "vendor_tools"
},
{
Expand Down
Loading

0 comments on commit 27371b8

Please sign in to comment.