mirror of
https://github.com/projectM-visualizer/projectm.git
synced 2026-04-01 04:03:31 +00:00
Add macOS Framework build support
Adds ENABLE_MACOS_FRAMEWORK cmake option to build projectM-4.framework and projectM-4-playlist.framework bundles instead of plain dylibs. Only available on macOS with shared library builds. The frameworks include all public headers in the Headers/ directory and use standard macOS framework versioning (Version A). Fixes #924
This commit is contained in:
committed by
Mischa Spiegelmock
parent
a98d21dc0a
commit
ef00cfc8e7
@ -97,6 +97,7 @@ endif()
|
||||
cmake_dependent_option(BUILD_SHARED_LIBS "Build and install libprojectM as a shared libraries. If OFF, builds as static libraries." ON "NOT ENABLE_EMSCRIPTEN" OFF)
|
||||
cmake_dependent_option(ENABLE_GLES "Enable OpenGL ES support" OFF "NOT ENABLE_EMSCRIPTEN AND NOT CMAKE_SYSTEM_NAME STREQUAL Android" ON)
|
||||
cmake_dependent_option(ENABLE_INSTALL "Enable installing projectM libraries and headers." OFF "NOT PROJECT_IS_TOP_LEVEL" ON)
|
||||
cmake_dependent_option(ENABLE_MACOS_FRAMEWORK "Build as macOS Framework bundles instead of plain shared libraries." OFF "CMAKE_SYSTEM_NAME STREQUAL Darwin AND BUILD_SHARED_LIBS" OFF)
|
||||
|
||||
# Experimental/unsupported features
|
||||
option(ENABLE_CXX_INTERFACE "Enable exporting C++ symbols for ProjectM and PCM classes, not only the C API. Warning: This is not very portable." OFF)
|
||||
@ -268,6 +269,7 @@ if(ENABLE_SDL_UI)
|
||||
message(STATUS " SDL2 version: ${SDL2_VERSION}")
|
||||
endif()
|
||||
message(STATUS " OpenGL ES: ${ENABLE_GLES}")
|
||||
message(STATUS " macOS Framework: ${ENABLE_MACOS_FRAMEWORK}")
|
||||
message(STATUS " Emscripten: ${ENABLE_EMSCRIPTEN}")
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL Emscripten)
|
||||
message(STATUS " - PThreads: ${USE_PTHREADS}")
|
||||
|
||||
@ -22,24 +22,27 @@ generate_export_header(projectM_api
|
||||
set(PROJECTM_PUBLIC_HEADERS
|
||||
"${PROJECTM_EXPORT_HEADER}"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/version.h"
|
||||
include/projectM-4/audio.h
|
||||
include/projectM-4/callbacks.h
|
||||
include/projectM-4/core.h
|
||||
include/projectM-4/debug.h
|
||||
include/projectM-4/logging.h
|
||||
include/projectM-4/memory.h
|
||||
include/projectM-4/parameters.h
|
||||
include/projectM-4/projectM.h
|
||||
include/projectM-4/render_opengl.h
|
||||
include/projectM-4/touch.h
|
||||
include/projectM-4/types.h
|
||||
include/projectM-4/user_sprites.h
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/audio.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/callbacks.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/core.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/debug.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/logging.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/memory.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/parameters.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/projectM.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/render_opengl.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/touch.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/types.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include/projectM-4/user_sprites.h"
|
||||
)
|
||||
|
||||
if(ENABLE_CXX_INTERFACE)
|
||||
list(APPEND PROJECTM_PUBLIC_HEADERS ${PROJECTM_CXX_EXPORT_HEADER})
|
||||
endif()
|
||||
|
||||
# Make available to parent scope for framework builds
|
||||
set(PROJECTM_PUBLIC_HEADERS "${PROJECTM_PUBLIC_HEADERS}" PARENT_SCOPE)
|
||||
|
||||
target_sources(projectM_api
|
||||
PRIVATE
|
||||
${PROJECTM_PUBLIC_HEADERS}
|
||||
|
||||
@ -130,6 +130,17 @@ if(BUILD_SHARED_LIBS)
|
||||
PUBLIC
|
||||
${CMAKE_DL_LIBS}
|
||||
)
|
||||
|
||||
if(ENABLE_MACOS_FRAMEWORK)
|
||||
set_target_properties(projectM PROPERTIES
|
||||
FRAMEWORK TRUE
|
||||
FRAMEWORK_VERSION A
|
||||
MACOSX_FRAMEWORK_IDENTIFIER com.github.projectm-visualizer.projectM
|
||||
MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${PROJECT_VERSION}"
|
||||
MACOSX_FRAMEWORK_BUNDLE_VERSION "${PROJECT_VERSION}"
|
||||
PUBLIC_HEADER "${PROJECTM_PUBLIC_HEADERS}"
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
target_compile_definitions(projectM_main
|
||||
PUBLIC
|
||||
@ -158,7 +169,8 @@ if(ENABLE_INSTALL)
|
||||
LIBRARY DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime
|
||||
RUNTIME DESTINATION "${PROJECTM_RUNTIME_DIR}" COMPONENT Runtime
|
||||
ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Devel
|
||||
PUBLIC_HEADER DESTINATION "${PROJECTM_INCLUDE_DIR}/libprojectM" COMPONENT Devel
|
||||
PUBLIC_HEADER DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" COMPONENT Devel
|
||||
FRAMEWORK DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime
|
||||
)
|
||||
|
||||
if(ENABLE_CXX_INTERFACE)
|
||||
|
||||
@ -78,6 +78,16 @@ if(BUILD_SHARED_LIBS)
|
||||
PUBLIC
|
||||
${CMAKE_DL_LIBS}
|
||||
)
|
||||
|
||||
if(ENABLE_MACOS_FRAMEWORK)
|
||||
set_target_properties(projectM_playlist PROPERTIES
|
||||
FRAMEWORK TRUE
|
||||
FRAMEWORK_VERSION A
|
||||
MACOSX_FRAMEWORK_IDENTIFIER com.github.projectm-visualizer.projectM-playlist
|
||||
MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${PROJECT_VERSION}"
|
||||
MACOSX_FRAMEWORK_BUNDLE_VERSION "${PROJECT_VERSION}"
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
target_compile_definitions(projectM_playlist_main
|
||||
PUBLIC
|
||||
@ -111,6 +121,7 @@ if(ENABLE_INSTALL)
|
||||
RUNTIME DESTINATION "${PROJECTM_RUNTIME_DIR}" COMPONENT Runtime
|
||||
ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Devel
|
||||
PUBLIC_HEADER DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" COMPONENT Devel
|
||||
FRAMEWORK DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user