Skip to content

Commit

Permalink
New USE_SHARED_LIBS option to promote using of shared libraries
Browse files Browse the repository at this point in the history
  • Loading branch information
awawa-dev committed Jun 10, 2024
1 parent 6656a47 commit f3a633d
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 45 deletions.
14 changes: 11 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ SET ( DEFAULT_PRECOMPILED_HEADERS ON )
SET ( DEFAULT_XZ ON )
SET ( DEFAULT_POWER_MANAGEMENT ON )
SET ( DEFAULT_SYSTRAY ON )
SET ( DEFAULT_SHARED_LIBS ON )

# Configure CCache if available
find_program(CCACHE_FOUND ccache)
Expand Down Expand Up @@ -338,6 +339,10 @@ if (WIN32)
endif (SEVENZIP_BIN)
endif()

if (CMAKE_CROSSCOMPILING)
SET ( DEFAULT_SHARED_LIBS OFF )
endif()

# set the build options
if(NOT WIN32)
string(ASCII 27 EscChar)
Expand Down Expand Up @@ -432,14 +437,14 @@ colorMe("ENABLE_PROTOBUF = " ${ENABLE_PROTOBUF})
option(ENABLE_SYSTRAY "Enable SYSTRAY" ${DEFAULT_SYSTRAY})
colorMe("ENABLE_SYSTRAY = " ${ENABLE_SYSTRAY})

option(USE_STATIC_QT_PLUGINS "Enable static QT plugins" ${DEFAULT_STATIC_QT_PLUGINS})
colorMe("USE_STATIC_QT_PLUGINS = " ${USE_STATIC_QT_PLUGINS})

option(ENABLE_XZ "Enable XZ support" ${DEFAULT_XZ})
colorMe("ENABLE_XZ = " ${ENABLE_XZ})

message( STATUS "\n${CyanColor}BUILD FEATURES${ColorReset}")

option(USE_SHARED_LIBS "Prefer shared libraries over static ones" ${DEFAULT_SHARED_LIBS})
colorMe("USE_SHARED_LIBS = " ${USE_SHARED_LIBS})

option(USE_PRECOMPILED_HEADERS "Enable precompiled headers (PCH)" ${DEFAULT_PRECOMPILED_HEADERS})
colorMe("USE_PRECOMPILED_HEADERS = " ${USE_PRECOMPILED_HEADERS})

Expand All @@ -449,6 +454,9 @@ colorMe("USE_SYSTEM_MQTT_LIBS = " ${USE_SYSTEM_MQTT_LIBS})
option(USE_SYSTEM_FLATBUFFERS_LIBS "Use system flatbuffers libs" ${DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS})
colorMe("USE_SYSTEM_FLATBUFFERS_LIBS = " ${USE_SYSTEM_FLATBUFFERS_LIBS})

option(USE_STATIC_QT_PLUGINS "Enable static QT plugins" ${DEFAULT_STATIC_QT_PLUGINS})
colorMe("USE_STATIC_QT_PLUGINS = " ${USE_STATIC_QT_PLUGINS})

if(UNIX AND NOT APPLE)
option(USE_STANDARD_INSTALLER_NAME "Use the standardized Linux installer name" OFF)
colorMe("USE_STANDARD_INSTALLER_NAME = " ${USE_STANDARD_INSTALLER_NAME})
Expand Down
43 changes: 20 additions & 23 deletions cmake/Dependencies.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,17 @@ macro(DeployApple TARGET)
install(FILES "${PROJECT_SOURCE_DIR}/LICENSE" DESTINATION "hyperhdr.app/Contents/Resources" COMPONENT "HyperHDR")
install(FILES "${PROJECT_SOURCE_DIR}/3RD_PARTY_LICENSES" DESTINATION "hyperhdr.app/Contents/Resources" COMPONENT "HyperHDR")

# Copy QMQTT
if (USE_SHARED_LIBS)
install(CODE [[ file(INSTALL FILES $<TARGET_FILE:qmqtt> DESTINATION "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/lib" TYPE SHARED_LIBRARY) ]] COMPONENT "HyperHDR")
install(CODE [[ file(INSTALL FILES $<TARGET_SONAME_FILE:qmqtt> DESTINATION "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/lib" TYPE SHARED_LIBRARY) ]] COMPONENT "HyperHDR")
endif()

# Copy SQLITE3
if (USE_SHARED_LIBS)
install(CODE [[ file(INSTALL FILES $<TARGET_FILE:sqlite3> DESTINATION "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/lib" TYPE SHARED_LIBRARY) ]] COMPONENT "HyperHDR")
endif()

if ( Qt5Core_FOUND )
get_target_property(MYQT_QMAKE_EXECUTABLE ${Qt5Core_QMAKE_EXECUTABLE} IMPORTED_LOCATION)
else()
Expand All @@ -27,6 +38,7 @@ macro(DeployApple TARGET)
OUTPUT_VARIABLE MYQT_PLUGINS_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)

install(CODE "set(MYQT_PLUGINS_DIR \"${MYQT_PLUGINS_DIR}\")" COMPONENT "HyperHDR")
install(CODE "set(MY_DEPENDENCY_PATHS \"${TARGET_FILE}\")" COMPONENT "HyperHDR")
install(CODE "set(MY_SYSTEM_LIBS_SKIP \"${SYSTEM_LIBS_SKIP}\")" COMPONENT "HyperHDR")
Expand Down Expand Up @@ -107,23 +119,7 @@ macro(DeployApple TARGET)
FILES "${_file}"
)
endif()
endforeach()

if (NOT Qt5Core_FOUND AND EXISTS "/usr/local/lib/libbrotlicommon.1.dylib")
file(INSTALL
DESTINATION "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/lib"
TYPE SHARED_LIBRARY
FOLLOW_SYMLINK_CHAIN
FILES "/usr/local/lib/libbrotlicommon.1.dylib")
endif()

if (EXISTS "/usr/local/lib/libsharpyuv.0.dylib")
file(INSTALL
DESTINATION "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/lib"
TYPE SHARED_LIBRARY
FOLLOW_SYMLINK_CHAIN
FILES "/usr/local/lib/libsharpyuv.0.dylib")
endif()
endforeach()

list(LENGTH _u_deps _u_length)
if("${_u_length}" GREATER 0)
Expand Down Expand Up @@ -160,9 +156,6 @@ macro(DeployApple TARGET)
endif()
endforeach()

# Copy SQLITE3
file(INSTALL FILES $<TARGET_FILE:sqlite3> DESTINATION "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/lib" TYPE SHARED_LIBRARY)

include(BundleUtilities)
fixup_bundle("${CMAKE_INSTALL_PREFIX}/hyperhdr.app" "${MYQT_PLUGINS}" "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/lib")

Expand Down Expand Up @@ -517,11 +510,15 @@ macro(DeployWindows TARGET)
# Copy TurboJPEG Libs
install(FILES ${TurboJPEG_INSTALL_LIB} DESTINATION "bin" COMPONENT "HyperHDR" )

# Copy MQTT
install(CODE [[ file(INSTALL FILES $<TARGET_FILE:qmqtt> DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE SHARED_LIBRARY) ]] COMPONENT "HyperHDR")
# Copy QMQTT
if (USE_SHARED_LIBS)
install(CODE [[ file(INSTALL FILES $<TARGET_FILE:qmqtt> DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE SHARED_LIBRARY) ]] COMPONENT "HyperHDR")
endif()

# Copy SQLITE3
install(CODE [[ file(INSTALL FILES $<TARGET_FILE:sqlite3> DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE SHARED_LIBRARY) ]] COMPONENT "HyperHDR")
if (USE_SHARED_LIBS)
install(CODE [[ file(INSTALL FILES $<TARGET_FILE:sqlite3> DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE SHARED_LIBRARY) ]] COMPONENT "HyperHDR")
endif()

# Create a qt.conf file in 'bin' to override hard-coded search paths in Qt plugins
file(WRITE "${CMAKE_BINARY_DIR}/qt.conf" "[Paths]\nPlugins=../lib/\n")
Expand Down
49 changes: 30 additions & 19 deletions external/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,30 @@
# SQLite
#=============================================================================

add_library(sqlite3 SHARED "${CMAKE_CURRENT_SOURCE_DIR}/sqlite/sqlite3.c")
if (NOT USE_SHARED_LIBS)
add_library(sqlite3 "${CMAKE_CURRENT_SOURCE_DIR}/sqlite/sqlite3.c")
else()
add_library(sqlite3 SHARED "${CMAKE_CURRENT_SOURCE_DIR}/sqlite/sqlite3.c")
if(WIN32)
target_compile_definitions(sqlite3
INTERFACE
"SQLITE_API=__declspec(dllimport)"
PRIVATE
"SQLITE_API=__declspec(dllexport)"
)
else()
target_compile_definitions(sqlite3
INTERFACE
"SQLITE_API=__attribute__((visibility(\"default\")))"
)
endif()
endif()

target_include_directories(sqlite3 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/sqlite")
target_link_libraries(sqlite3 PRIVATE ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS})

install(
TARGETS sqlite3
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
)
Expand All @@ -26,20 +43,6 @@ target_compile_definitions(sqlite3 PUBLIC
SQLITE_OMIT_DEPRECATED
)

if(WIN32)
target_compile_definitions(sqlite3
INTERFACE
"SQLITE_API=__declspec(dllimport)"
PRIVATE
"SQLITE_API=__declspec(dllexport)"
)
else()
target_compile_definitions(sqlite3
INTERFACE
"SQLITE_API=__attribute__((visibility(\"default\")))"
)
endif()

#=============================================================================
# RPi ws281x
#=============================================================================
Expand Down Expand Up @@ -83,6 +86,8 @@ if (USE_SYSTEM_FLATBUFFERS_LIBS AND NOT CMAKE_CROSSCOMPILING)
endif()

if (NOT USE_SYSTEM_FLATBUFFERS_LIBS OR CMAKE_CROSSCOMPILING)
cmake_policy(PUSH)

set(CMAKE_POLICY_DEFAULT_CMP0071 NEW)
set(FLATBUFFERS_BUILD_TESTS OFF CACHE BOOL "")

Expand Down Expand Up @@ -125,9 +130,11 @@ if (NOT USE_SYSTEM_FLATBUFFERS_LIBS OR CMAKE_CROSSCOMPILING)

IF (NOT CMAKE_CROSSCOMPILING)
set(FLATBUFFERS_FLATC_EXECUTABLE "$<TARGET_FILE:flatc>")
endif()
else()
message( STATUS "Using host flatc compiler: ${FLATBUFFERS_FLATC_EXECUTABLE}")
endif()

message( STATUS "Using host flatc compiler: ${FLATBUFFERS_FLATC_EXECUTABLE}")
cmake_policy(POP)
endif()

set(FLATBUFFERS_FLATC_EXECUTABLE ${FLATBUFFERS_FLATC_EXECUTABLE} PARENT_SCOPE)
Expand Down Expand Up @@ -180,12 +187,16 @@ if ( ENABLE_MQTT )
string(REPLACE "find_package" "#find_package" FILE_CONTENTS "${FILE_CONTENTS}")
file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/qmqtt/CMakeLists.txt" "${FILE_CONTENTS}")

if (NOT WIN32)
cmake_policy(PUSH)

if (NOT USE_SHARED_LIBS)
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
set(qmqtt_SHARED OFF)
endif()

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/qmqtt)

cmake_policy(POP)
endif()
endif()

Expand Down

0 comments on commit f3a633d

Please sign in to comment.