ES-DE/CMakeLists.txt
Leon Styhre 79ff784721 Squashed 'external/rlottie/' changes from bf3d272df..875626965
875626965 Check border of color table while generating gradient
d1636c7b4 Ignore animations with objects of unspecified type
f3eed9a33 add formal parameter void to lottie_init() and lottie_shutdown()
519bd08b0 Add lottie_init() and lottie_shutdown() c api.
447cb7dd1 replace unsigned int with uint32_t in Int()
d7cf0a5ab replace uint ushort and uchar typedefs with uint32 uint16 and uint8 -- added format script to run clang format on latest commit.
16beec845 lottiemodel: Improve opacity calculation for gradient stop
327fb7dba Reject reversed frames
625bc4c48 Finite loop in VBezier::tAtLength()
ddbc9dce7 rlottie/capi: Add missing multiply for Path
c0e16e571 Check Layer.mExtra and Transform.mExtra before dereferencing
9f78532c8 Avoid access to last element of empty mChildren vector
4e08acd8c remove RAPIDJSON_ASSERT() by placing the parser in error state
7affa78fe Fix dereferencing of null pointer in model::Layer::solidColor() getter
9d17ff8e6 Skip dash array of size one or zero
f379dfe15 add the /inc folder as an include path at build time
194b31736 Improve matte rendering performance for simple layer
7c5b40cbb CMake: fix MSVC warnings
fa44b753e fix compileing error
41f906480 On windows, stbi__fopen opens a path containing non-English characters or symbols will fail due to encoding problems, so the filename parameter is assumed to be utf-8 and converted to utf-16, and then call _wfopen_s or _wfopen
29b391b95 add lottie_configure_model_cache_size() c api
3cd00151c Fix comparison
bd4c4e1f8 MT and MTd
c593b57eb Remove link warnings on MSVC
132ca0a00 #include "fix" for rust-bindgen
c9780b46d Fix CMake build in subdirectory
1cb2021d6 Fix crash when path animation  data is empty
ad9beaec6 Added support for RoundedCornor objects.
a41bd7383 rlottie: draw line if width or height is 0
ed94baf14 resource: polish player png image.
9b4c4d2af resource: add rlottie_player image.
2d7b1fa2b Fixed build with GCC 11.
9cd9a6e95 vs2019: Add release build option
d733e953b updated AUTHORS
fc760ef92 updated AUTHORS
d92d4aaf6 wasm: Add extra functions for lottie animation to use them in rlottie viewer
09662b89d updated AUTHORS
71fbff5d5 example/win32Player: removed unnecessary files.
d25911e6c add app executables
538dfd9aa rename directory rlottiePlayer to win32Player
6fbb67d49 fix openJSONFileDialog
85856dff3 fix animation replace error
f86e97d65 fix animation bitmap size to be set dynamically
55815b2cb move function prototype to animation.h To prevent function prototype duplicate code in source.cpp.
9a71eeca9 add an example of win32 app that play rlottie animation by vs2019
619320cbb add rlottiePlayer Project
4884e0e9b Modify: Update .gitignore
3ebf0c7e3 Docs: Fix README typo
502cc3638 updated license in spec file.
e812ba9e9 Docs: Fix README typo
c98ec565d Update README.md
33295c22f Fixed README typo
073224e69 fixed readme typo
ff8ddfc49 ci: upgrade windows build chain to VS2017
10c1055a3 fixed sign extension warning
98ed2620a build: use shared_module instead of shared_library

git-subtree-dir: external/rlottie
git-subtree-split: 875626965959d8e269ca22175c8e1ad190696c43
2022-01-07 18:43:06 +01:00

489 lines
20 KiB
CMake

# SPDX-License-Identifier: MIT
#
# EmulationStation Desktop Edition
# CMakeLists.txt
#
# Main CMake configuration file.
# Sets up the overall build environment including dependencies detection, build options,
# compiler and linker flags and preprocessor directives.
#
cmake_minimum_required(VERSION 3.13)
if(APPLE)
# Set this to the operating system version you're building on, and also update
# es-app/assets/EmulationStation-DE_Info.plist accordingly.
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "macOS deployment target")
# This optional variable is used for code signing the DMG installer.
set(MACOS_CODESIGN_IDENTITY "" CACHE STRING "macOS code signing certificate identity")
endif()
project(emulationstation-de)
# Set this to ON to show verbose compiler output (e.g. compiler flags, include directories etc.)
set(CMAKE_VERBOSE_MAKEFILE OFF CACHE BOOL "Show verbose compiler output" FORCE)
# Package type to use for CPack on Linux.
set(LINUX_CPACK_GENERATOR "DEB" CACHE STRING "CPack generator, DEB or RPM")
# Add local find modules to the CMake path.
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake/Utils
${CMAKE_CURRENT_SOURCE_DIR}/CMake/Packages)
# Define the options.
option(GL "Set to ON if targeting Desktop OpenGL" ${GL})
option(GLES "Set to ON if targeting Embedded OpenGL" ${GLES})
option(RPI "Set to ON to enable Raspberry Pi specific build" ${RPI})
option(BUNDLED_CERTS "Set to ON to use bundled TLS/SSL certificates" ${BUNDLED_CERTS})
option(CEC "Set to ON to enable CEC" ${CEC})
option(VIDEO_HW_DECODING "Set to ON to enable FFmpeg HW decoding" ${VIDEO_HW_DECODING})
option(CLANG_TIDY "Set to ON to build using the clang-tidy static analyzer" ${CLANG_TIDY})
option(ASAN "Set to ON to build with AddressSanitizer" ${ASAN})
option(TSAN "Set to ON to build with ThreadSanitizer" ${TSAN})
option(UBSAN "Set to ON to build with UndefinedBehaviorSanitizer" ${UBSAN})
if(CLANG_TIDY)
find_program(CLANG_TIDY_BINARY NAMES clang-tidy)
if(CLANG_TIDY_BINARY STREQUAL "CLANG_TIDY_BINARY-NOTFOUND")
message("-- CLANG_TIDY was set but the clang-tidy binary was not found")
else()
message("-- Building with the clang-tidy static analyzer")
set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=*,\
-fuchsia-*,\
-hicpp-*,\
-llvm-*,\
-readability-braces-*,\
-google-readability-braces-*,\
-readability-uppercase-literal-suffix,\
-modernize-use-trailing-return-type,\
-cppcoreguidelines-avoid-magic-numbers,\
-readability-magic-numbers")
endif()
endif()
#---------------------------------------------------------------------------------------------------
# OpenGL setup.
if(GLES)
set(GLSYSTEM "Embedded OpenGL" CACHE STRING "The OpenGL system to be used")
else()
set(GLSYSTEM "Desktop OpenGL" CACHE STRING "The OpenGL system to be used")
endif()
set_property(CACHE GLSYSTEM PROPERTY STRINGS "Desktop OpenGL" "Embedded OpenGL")
#---------------------------------------------------------------------------------------------------
# Raspberry Pi setup.
# Raspberry Pi OS 32-bit (armv7l)
if(EXISTS "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/bcm_host.h")
set(RPI ON)
set(RPI_32 ON)
set(BCMHOST ON)
message("-- Building on a Raspberry Pi (32-bit OS)")
endif()
# Raspberry Pi OS 64-bit (aarch64)
if(EXISTS "/usr/include/bcm_host.h")
set(RPI ON)
set(RPI_64 ON)
set(BCMHOST ON)
message("-- Building on a Raspberry Pi (64-bit OS)")
endif()
#---------------------------------------------------------------------------------------------------
# Package dependencies.
if(GLSYSTEM MATCHES "Desktop OpenGL")
set(OpenGL_GL_PREFERENCE "GLVND")
find_package(OpenGL REQUIRED)
else()
find_package(OpenGLES REQUIRED)
endif()
# On macOS and Windows all dependencies are kept in-tree in the "external" directory.
if(APPLE)
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/external/FFmpeg)
message(FATAL_ERROR "-- You need to build the dependencies in ./external first")
endif()
find_package(CURL REQUIRED)
elseif(WIN32)
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/external/pugixml/libpugixml.dll AND # MinGW
NOT EXISTS ${PROJECT_SOURCE_DIR}/external/pugixml/pugixml.dll) # MSVC
message(FATAL_ERROR "-- You need to build the dependencies in ./external first")
endif()
else()
find_package(CURL REQUIRED)
find_package(FFmpeg REQUIRED)
find_package(FreeImage REQUIRED)
find_package(Freetype REQUIRED)
find_package(Pugixml REQUIRED)
find_package(SDL2 REQUIRED)
endif()
# Add libCEC support.
if(CEC)
find_package(libCEC REQUIRED)
endif()
# Add ALSA for Linux.
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
find_package(ALSA REQUIRED)
endif()
#---------------------------------------------------------------------------------------------------
# Compiler and linker settings.
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
message("-- Compiler is Clang/LLVM")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0.0)
message(SEND_ERROR "You need at least Clang 5.0.0 to compile EmulationStation-DE")
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
message("-- Compiler is GNU/GCC")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.1)
message(SEND_ERROR "You need at least GCC 7.1 to compile EmulationStation-DE")
endif()
if(WIN32)
set(CMAKE_CXX_FLAGS "-mwindows ${CMAKE_CXX_FLAGS}")
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
message("-- Compiler is MSVC")
# If using the MSVC compiler on Windows, disable the built-in min() and max() macros.
add_definitions(-DNOMINMAX)
endif()
if(CMAKE_BUILD_TYPE)
message("-- Build type is ${CMAKE_BUILD_TYPE}")
endif()
# Set up compiler and linker flags for debug, profiling or release builds.
if(CMAKE_BUILD_TYPE MATCHES Debug)
# Enable the C++17 standard and disable optimizations as it's a debug build.
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17 /Od /DEBUG:FULL")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O0 -g3 -Wall -Wpedantic -Wsign-compare -Wnarrowing -Wmissing-field-initializers")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O0")
endif()
# If using Clang, then add additional debug data needed by GDB.
# Comment this out if you're using LLDB for debugging as this flag makes the binary
# much larger and the application much slower. On macOS this setting is never enabled
# as LLDB is the default debugger on this OS.
if(NOT APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_DEBUG")
endif()
elseif(CMAKE_BUILD_TYPE MATCHES Profiling)
# For the profiling build, we enable optimizations and supply the required profiler flags.
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17 /O2 /DEBUG:FULL")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O2 -g3 -Wall -Wpedantic -Wsign-compare -Wnarrowing -Wmissing-field-initializers")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2")
endif()
else()
# Enable the C++17 standard and enable optimizations as it's a release build.
# This will also disable all assert() macros. Strip the binary too.
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG /std:c++17 /O2 /DEBUG:NONE")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O2 -DNDEBUG -Wall -Wpedantic -Wsign-compare -Wnarrowing -Wmissing-field-initializers")
if(APPLE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2")
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O2 -s")
endif()
endif()
endif()
# Raspberry Pi model 3 and higher (ARM Cortex-A53 minimum).
if(RPI_32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -latomic -mcpu=cortex-a53 -mfpu=neon-fp-armv8")
elseif(RPI_64)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -latomic -mcpu=cortex-a53")
endif()
if(ASAN AND TSAN)
message(FATAL_ERROR "-- AddressSanitizer and ThreadSanitizer can't be combined")
endif()
if(ASAN)
message("-- Building with AddressSanitizer")
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
endif()
endif()
if(TSAN)
message("-- Building with ThreadSanitizer")
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
message(FATAL_ERROR "-- ThreadSanitizer not available for MSVC")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fno-omit-frame-pointer")
endif()
endif()
if(UBSAN)
message("-- Building with UndefinedBehaviorSanitizer")
if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
message(FATAL_ERROR "-- UndefinedBehaviorSanitizer not available for MSVC")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -fno-omit-frame-pointer")
endif()
endif()
# The following removes half of the ranlib warnings on macOS regarding no symbols for files
# that are #ifdef'ed away. There must be a way to remove the other half as well?
if(APPLE)
SET(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
SET(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
endif()
if(APPLE)
if(MACOS_CODESIGN_IDENTITY)
message("-- Code signing certificate identity: " ${MACOS_CODESIGN_IDENTITY})
endif()
if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.14)
set(BUNDLED_CERTS ON)
message("-- macOS version 10.13 or lower has been set, so if code signing is enabled, Hardened Runtime will not be used")
endif()
endif()
if(WIN32)
set(BUNDLED_CERTS ON)
endif()
#---------------------------------------------------------------------------------------------------
# Preprocessor directives.
if(GLSYSTEM MATCHES "Desktop OpenGL")
add_definitions(-DUSE_OPENGL_21)
else()
add_definitions(-DUSE_OPENGLES_10)
endif()
if(RPI)
add_definitions(-D_RPI_)
endif()
if(BUNDLED_CERTS)
add_definitions(-DUSE_BUNDLED_CERTIFICATES)
message("-- Building with bundled TLS/SSL certificates")
endif()
if(DEFINED libCEC_FOUND)
add_definitions(-DHAVE_LIBCEC)
endif()
if(VIDEO_HW_DECODING)
add_definitions(-DVIDEO_HW_DECODING)
endif()
if(APPLE AND CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS 10.14)
add_definitions(-DLEGACY_MACOS)
endif()
# GLM library options.
add_definitions(-DGLM_FORCE_CXX17)
add_definitions(-DGLM_FORCE_XYZW_ONLY)
# For Unix systems, assign the installation prefix. If it's not explicitly set,
# we use /usr on Linux, /usr/pkg on NetBSD and /usr/local on FreeBSD and OpenBSD.
if(NOT WIN32 AND NOT APPLE)
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
set(CMAKE_INSTALL_PREFIX "/usr" CACHE INTERNAL "CMAKE_INSTALL_PREFIX")
elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
set(CMAKE_INSTALL_PREFIX "/usr/pkg" CACHE INTERNAL "CMAKE_INSTALL_PREFIX")
else()
set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE INTERNAL "CMAKE_INSTALL_PREFIX")
endif()
endif()
message("-- Installation prefix is set to " ${CMAKE_INSTALL_PREFIX})
add_definitions(-DES_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}")
endif()
# For Windows, set the minimum OS version to Windows 7.
if(WIN32)
add_compile_definitions(_WIN32_WINNT=0x0601)
add_compile_definitions(WINVER=0x0601)
endif()
#---------------------------------------------------------------------------------------------------
# Include files.
set(COMMON_INCLUDE_DIRS ${CURL_INCLUDE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/external/CImg
${CMAKE_CURRENT_SOURCE_DIR}/external/glm
${CMAKE_CURRENT_SOURCE_DIR}/external/nanosvg/src
${CMAKE_CURRENT_SOURCE_DIR}/external/rapidjson/include
${CMAKE_CURRENT_SOURCE_DIR}/external/rlottie/inc
${CMAKE_CURRENT_SOURCE_DIR}/es-core/src)
if(APPLE)
set(COMMON_INCLUDE_DIRS ${COMMON_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/external/FFmpeg
${CMAKE_CURRENT_SOURCE_DIR}/external/freeimage/FreeImage/Source
${CMAKE_CURRENT_SOURCE_DIR}/external/freetype/include
${CMAKE_CURRENT_SOURCE_DIR}/external/pugixml/src
${CMAKE_CURRENT_SOURCE_DIR}/external/SDL)
elseif(WIN32)
set(COMMON_INCLUDE_DIRS ${COMMON_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/external/curl-7.80.0-win64-mingw/include
${CMAKE_CURRENT_SOURCE_DIR}/external/glew-2.1.0/include
${CMAKE_CURRENT_SOURCE_DIR}/external/ffmpeg-n4.4-latest-win64-gpl-shared-4.4/include
${CMAKE_CURRENT_SOURCE_DIR}/external/FreeImage/Dist/x64
${CMAKE_CURRENT_SOURCE_DIR}/external/freetype/include # MinGW
${CMAKE_CURRENT_SOURCE_DIR}/external/freetype2/include # MSVC
${CMAKE_CURRENT_SOURCE_DIR}/external/pugixml/src
${CMAKE_CURRENT_SOURCE_DIR}/external/SDL2-2.0.18)
else()
set(COMMON_INCLUDE_DIRS ${COMMON_INCLUDE_DIRS}
${FFMPEG_INCLUDE_DIRS}
${FreeImage_INCLUDE_DIRS}
${FREETYPE_INCLUDE_DIRS}
${PUGIXML_INCLUDE_DIRS}
${SDL2_INCLUDE_DIR})
endif()
# Add libCEC include directory.
if(DEFINED libCEC_FOUND)
list(APPEND COMMON_INCLUDE_DIRS ${libCEC_INCLUDE_DIR})
endif()
# For Linux, add the ALSA include directory.
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
list(APPEND COMMON_INCLUDE_DIRS ${ALSA_INCLUDE_DIRS})
endif()
if(RPI_32)
list(APPEND COMMON_INCLUDE_DIRS "${CMAKE_FIND_ROOT_PATH}/opt/vc/include"
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos"
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vmcs_host/linux"
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos/pthreads")
endif()
#---------------------------------------------------------------------------------------------------
# Dependency libraries.
if(APPLE)
set(COMMON_LIBRARIES ${COMMON_LIBRARIES}
${CURL_LIBRARIES}
${PROJECT_SOURCE_DIR}/libavcodec.58.dylib
${PROJECT_SOURCE_DIR}/libavfilter.7.dylib
${PROJECT_SOURCE_DIR}/libavformat.58.dylib
${PROJECT_SOURCE_DIR}/libavutil.56.dylib
${PROJECT_SOURCE_DIR}/libswresample.3.dylib
${PROJECT_SOURCE_DIR}/libswscale.5.dylib
${PROJECT_SOURCE_DIR}/libfreeimage.a
${PROJECT_SOURCE_DIR}/libfreetype.6.dylib
${PROJECT_SOURCE_DIR}/libpugixml.a
${PROJECT_SOURCE_DIR}/libSDL2-2.0.dylib)
elseif(WIN32)
if(DEFINED MSVC)
set(COMMON_LIBRARIES "${PROJECT_SOURCE_DIR}/avcodec.lib"
"${PROJECT_SOURCE_DIR}/avfilter.lib"
"${PROJECT_SOURCE_DIR}/avformat.lib"
"${PROJECT_SOURCE_DIR}/avutil.lib"
"${PROJECT_SOURCE_DIR}/swresample.lib"
"${PROJECT_SOURCE_DIR}/swscale.lib"
"${PROJECT_SOURCE_DIR}/FreeImage.lib"
"${PROJECT_SOURCE_DIR}/glew32.lib"
"${PROJECT_SOURCE_DIR}/libcurl-x64.lib"
"${PROJECT_SOURCE_DIR}/freetype.lib"
"${PROJECT_SOURCE_DIR}/pugixml.lib"
"${PROJECT_SOURCE_DIR}/rlottie.lib"
"${PROJECT_SOURCE_DIR}/SDL2main.lib"
"${PROJECT_SOURCE_DIR}/SDL2.lib"
"Winmm.dll")
else()
set(COMMON_LIBRARIES "${PROJECT_SOURCE_DIR}/avcodec-58.dll"
"${PROJECT_SOURCE_DIR}/avfilter-7.dll"
"${PROJECT_SOURCE_DIR}/avformat-58.dll"
"${PROJECT_SOURCE_DIR}/avutil-56.dll"
"${PROJECT_SOURCE_DIR}/swresample-3.dll"
"${PROJECT_SOURCE_DIR}/swscale-5.dll"
"${PROJECT_SOURCE_DIR}/FreeImage.dll"
"${PROJECT_SOURCE_DIR}/glew32.dll"
"${PROJECT_SOURCE_DIR}/libcurl-x64.dll"
"${PROJECT_SOURCE_DIR}/libfreetype.dll"
"${PROJECT_SOURCE_DIR}/libpugixml.dll"
"${PROJECT_SOURCE_DIR}/libSDL2main.a"
"${PROJECT_SOURCE_DIR}/librlottie.dll"
"${PROJECT_SOURCE_DIR}/SDL2.dll"
"mingw32"
"Winmm.dll")
endif()
else()
set(COMMON_LIBRARIES ${CURL_LIBRARIES}
${FFMPEG_LIBRARIES}
${FreeImage_LIBRARIES}
${FREETYPE_LIBRARIES}
${PUGIXML_LIBRARIES}
${SDL2_LIBRARY})
endif()
# Lottie animation library rlottie.
if(NOT WIN32)
set(COMMON_LIBRARIES ${COMMON_LIBRARIES} ${PROJECT_SOURCE_DIR}/librlottie.a)
endif()
if(APPLE)
# See es-app/CMakeLists.txt for an explation for why an extra "Resources" directory
# has been added to the install prefix.
set(CMAKE_INSTALL_PREFIX "/Applications/EmulationStation Desktop Edition.app/Contents/Resources")
# Set the same rpath links for the install executable as for the build executable.
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_INSTALL_RPATH @executable_path)
endif()
# Add libCEC libraries.
if(DEFINED libCEC_FOUND)
list(APPEND COMMON_LIBRARIES dl ${libCEC_LIBRARIES})
endif()
# Add ALSA for Linux libraries.
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
list(APPEND COMMON_LIBRARIES ${ALSA_LIBRARY})
endif()
# Raspberry Pi.
if(BCMHOST)
list(APPEND COMMON_LIBRARIES bcm_host vchiq_arm)
if(RPI_32)
link_directories("${CMAKE_FIND_ROOT_PATH}/opt/vc/lib")
endif()
endif()
# Note: Building with GLES support on the Raspberry Pi currently seems to be broken.
if(GLES AND RPI_32)
list(APPEND COMMON_LIBRARIES brcmEGL ${OPENGLES_LIBRARIES})
elseif(GLES AND RPI_64)
list(APPEND COMMON_LIBRARIES ${OPENGLES_LIBRARIES})
endif()
# OpenGL.
if(GLSYSTEM MATCHES "Desktop OpenGL")
list(APPEND COMMON_LIBRARIES ${OPENGL_LIBRARIES})
else()
list(APPEND COMMON_LIBRARIES EGL ${OPENGLES_LIBRARIES})
endif()
#---------------------------------------------------------------------------------------------------
# Build directories.
set(dir ${CMAKE_CURRENT_SOURCE_DIR})
set(EXECUTABLE_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
set(LIBRARY_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
# Add each component.
add_subdirectory("external" EXCLUDE_FROM_ALL)
add_subdirectory("es-core")
add_subdirectory("es-app")
# Make sure rlottie is built before es-core and set lottie2gif to not be built.
add_dependencies(es-core rlottie)
set_target_properties(lottie2gif PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)