22# Dullahan CMake file - Callum Prentice - 2020-05-03
33
44###############################################################################
5- cmake_minimum_required (VERSION 3.4.3)
5+ cmake_minimum_required (VERSION 3.11)
6+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
7+ set (CMAKE_CXX_STANDARD 17)
8+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
9+
10+ if (CMAKE_SYSTEM_NAME STREQUAL "Linux" )
11+ add_compile_options ("-Wno-array-bounds" )
12+ endif ()
613
714###############################################################################
815# Dullahan main project/solution
@@ -18,24 +25,50 @@ function(check_exists variable)
1825 endif ()
1926endfunction ()
2027
21- ###############################################################################
22- # The user must pass in CEF_WRAPPER_DIR and CEF_WRAPPER_BUILD_DIR then we
23- # derrive all the other ones we need based on those
24- set (CEF_INCLUDE_DIR ${CEF_WRAPPER_DIR} /include )
25- set (CEF_RELEASE_LIB_DIR ${CEF_WRAPPER_DIR} /Release)
26- set (CEF_RELEASE_DLL_LIB_DIR ${CEF_WRAPPER_BUILD_DIR} /libcef_dll_wrapper/Release)
27- set (CEF_RELEASE_BIN_DIR ${CEF_WRAPPER_DIR} /Release)
28- set (CEF_RESOURCES_DIR ${CEF_WRAPPER_DIR} /Resources)
29-
30- # Check if all our variables exist and bail with
31- # a fatal error if any of them are missing
32- check_exists(CEF_WRAPPER_DIR)
33- check_exists(CEF_WRAPPER_BUILD_DIR)
34- check_exists(CEF_INCLUDE_DIR)
35- check_exists(CEF_RELEASE_LIB_DIR)
36- check_exists(CEF_RELEASE_DLL_LIB_DIR)
37- check_exists(CEF_RELEASE_BIN_DIR)
38- check_exists(CEF_RESOURCES_DIR)
28+ option ( USE_SPOTIFY_CEF "Use a prebuild CEF from spotify" Off )
29+ option ( SPOTIFY_CEF_URL "URL to the prebuild CEF from spotify" "" )
30+
31+ if ( USE_SPOTIFY_CEF )
32+ include (FetchContent)
33+
34+ FetchContent_Declare( cef_prebuild URL ${SPOTIFY_CEF_URL} )
35+ FetchContent_MakeAvailable(cef_prebuild)
36+
37+ set (CEF_ROOT "${cef_prebuild_SOURCE_DIR} " )
38+ set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${cef_prebuild_SOURCE_DIR} /cmake" )
39+ find_package (CEF REQUIRED)
40+ endif ()
41+
42+
43+ if ( NOT USE_SPOTIFY_CEF )
44+ ###############################################################################
45+ # The user must pass in CEF_WRAPPER_DIR and CEF_WRAPPER_BUILD_DIR then we
46+ # derrive all the other ones we need based on those
47+ set (CEF_INCLUDE_DIR ${CEF_WRAPPER_DIR} /include )
48+ set (CEF_RELEASE_LIB_DIR ${CEF_WRAPPER_DIR} /Release)
49+ set (CEF_RELEASE_DLL_LIB_DIR ${CEF_WRAPPER_BUILD_DIR} /libcef_dll_wrapper/Release)
50+ set (CEF_RELEASE_BIN_DIR ${CEF_WRAPPER_DIR} /Release)
51+ set (CEF_RESOURCES_DIR ${CEF_WRAPPER_DIR} /Resources)
52+
53+ # Check if all our variables exist and bail with
54+ # a fatal error if any of them are missing
55+ check_exists(CEF_WRAPPER_DIR)
56+ check_exists(CEF_WRAPPER_BUILD_DIR)
57+ check_exists(CEF_INCLUDE_DIR)
58+ check_exists(CEF_RELEASE_LIB_DIR)
59+ check_exists(CEF_RELEASE_DLL_LIB_DIR)
60+ check_exists(CEF_RELEASE_BIN_DIR)
61+ check_exists(CEF_RESOURCES_DIR)
62+ else ()
63+ set (CEF_INCLUDE_DIR ${cef_prebuild_SOURCE_DIR} /include )
64+ set (CEF_RELEASE_LIB_DIR ${cef_prebuild_SOURCE_DIR} /Release)
65+ set (CEF_RELEASE_DLL_LIB_DIR ${CEF_WRAPPER_BUILD_DIR} /libcef_dll_wrapper/Release)
66+ set (CEF_RELEASE_BIN_DIR ${cef_prebuild_SOURCE_DIR} /Release)
67+ set (CEF_RESOURCES_DIR ${cef_prebuild_SOURCE_DIR} /Resources)
68+
69+ set ( CEF_DLL_LIBRARY libcef_dll_wrapper )
70+ set ( CEF_LIBRARY ${CEF_LIB_RELEASE} )
71+ endif ()
3972
4073###############################################################################
4174# location of CEF libraries we link against
@@ -77,27 +110,32 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
77110 check_exists(COCOA_FRAMEWORK)
78111elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" )
79112 set (CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory -Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../lib' -Wl,--exclude-libs,ALL" )
80- find_library (
81- CEF_LIBRARY_RELEASE
82- NAMES libcef.so
83- PATHS ${CEF_RELEASE_LIB_DIR}
84- PATH_SUFFIXES release
85- )
86- find_library (
87- CEF_DLL_LIBRARY_RELEASE
88- NAMES libcef_dll_wrapper.a
89- PATHS ${CEF_WRAPPER_BUILD_DIR} /libcef_dll_wrapper/
90- PATH_SUFFIXES release
91- )
113+
114+ if ( NOT USE_SPOTIFY_CEF )
115+ find_library (
116+ CEF_LIBRARY_RELEASE
117+ NAMES libcef.so
118+ PATHS ${CEF_RELEASE_LIB_DIR}
119+ PATH_SUFFIXES release
120+ )
121+ find_library (
122+ CEF_DLL_LIBRARY_RELEASE
123+ NAMES libcef_dll_wrapper.a
124+ PATHS ${CEF_WRAPPER_BUILD_DIR} /libcef_dll_wrapper/
125+ PATH_SUFFIXES release
126+ )
127+ set (CEF_LIBRARY ${CEF_LIBRARY_RELEASE} )
128+ set (CEF_DLL_LIBRARY ${CEF_DLL_LIBRARY_RELEASE} )
129+ else ()
130+ set ( CEF_DLL_LIBRARY libcef_dll_wrapper )
131+ set ( CEF_LIBRARY ${CEF_LIB_RELEASE} )
132+ endif ()
92133endif ()
93134
94135###############################################################################
95136# Final layer of finding the right libs for each combination
96137# of name, platform, configuration, type etc.
97- if (CMAKE_SYSTEM_NAME STREQUAL "Linux" )
98- set (CEF_LIBRARY ${CEF_LIBRARY_RELEASE} )
99- set (CEF_DLL_LIBRARY ${CEF_DLL_LIBRARY_RELEASE} )
100- else ()
138+ if (NOT CMAKE_SYSTEM_NAME STREQUAL "Linux" )
101139 set (CEF_LIBRARY
102140 optimized ${CEF_LIBRARY_RELEASE}
103141 )
@@ -121,7 +159,7 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
121159 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11 -xobjective-c++" )
122160elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux" )
123161 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11" )
124- if ( NOT ENABLE_CXX11_ABI )
162+ if ( NOT ENABLE_CXX11_ABI )
125163 add_definitions (-D_GLIBCXX_USE_CXX11_ABI=0)
126164 endif ()
127165endif ()
@@ -274,7 +312,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
274312 COMMENT "Adding custom manifest..." )
275313endif ()
276314
277- # Windows commands to copy CEF binaries and 'resources' folders to
315+ # Windows commands to copy CEF binaries and 'resources' folders to
278316# executable dir since they're needed at runtime
279317
280318if (CMAKE_SYSTEM_NAME STREQUAL "Windows" )
@@ -524,3 +562,27 @@ endif()
524562if (CMAKE_CONFIGURATION_TYPES )
525563 set (CMAKE_CONFIGURATION_TYPES "Release" )
526564endif ()
565+
566+ # Install the Dullahan library and host executable
567+
568+ if ( USE_SPOTIFY_CEF )
569+ install ( TARGETS dullahan_host DESTINATION bin/release )
570+ install ( TARGETS dullahan ${CEF_DLL_LIBRARY} DESTINATION lib/release )
571+
572+ foreach (binFile IN LISTS CEF_BINARY_FILES)
573+ if (IS_DIRECTORY ${CEF_BINARY_DIR_RELEASE} /${binFile} )
574+ install ( DIRECTORY ${CEF_BINARY_DIR_RELEASE} /${binFile} DESTINATION lib/release )
575+ install ( DIRECTORY ${CEF_BINARY_DIR_RELEASE} /${binFile} DESTINATION bin/release )
576+ else ()
577+ install ( PROGRAMS ${CEF_BINARY_DIR_RELEASE} /${binFile} DESTINATION lib/release )
578+ install ( PROGRAMS ${CEF_BINARY_DIR_RELEASE} /${binFile} DESTINATION bin/release )
579+ endif ()
580+ endforeach ()
581+ foreach (resFile IN LISTS CEF_RESOURCE_FILES)
582+ if (IS_DIRECTORY ${CEF_RESOURCE_DIR} /${resFile} )
583+ install ( DIRECTORY ${CEF_RESOURCE_DIR} /${resFile} DESTINATION resources)
584+ else ()
585+ install ( FILES ${CEF_RESOURCE_DIR} /${resFile} DESTINATION resources)
586+ endif ()
587+ endforeach ()
588+ endif ()
0 commit comments