Thanks to visit codestin.com
Credit goes to github.com

Skip to content

MacOS Build Fixes #92

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -1037,4 +1037,4 @@ _deps
modules.order
Module.symvers
Mkfile.old
dkms.conf
dkms.conf
14 changes: 13 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.20 FATAL_ERROR)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD 17) # this can be changed to 14 if Poco is earlier than version 1.13.0
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_POSITION_INDEPENDENT_CODE YES)

Expand All @@ -13,6 +13,12 @@ project(projectMSDL

list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

# the following should be set to the 'install' folder of projectM if you encounter issues with it finding the projectM libraries
#list(APPEND CMAKE_PREFIX_PATH "projectM 'install' folder")

# the following should be set to the 'install' folder of projectM if you encounter issues with it finding the projectM libraries
#list(APPEND CMAKE_PREFIX_PATH "projectM 'install' folder")

# Default install layouts.
option(ENABLE_FLAT_PACKAGE "Creates a \"flat\" install layout with files and preset/texture dirs directly in the main dir." OFF)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND NOT ENABLE_FLAT_PACKAGE)
Expand Down Expand Up @@ -71,6 +77,12 @@ if(NOT SDL2_LINKAGE STREQUAL "shared" AND NOT SDL2_LINKAGE STREQUAL "static")
)
endif()

# Add utf8proc before Poco
#set(UTF8PROC_ROOT "utf8proc/<version>") # if you get build errors about utf8proc, set this to the path to your utf8proc install
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
find_package(utf8proc REQUIRED)
endif()

find_package(projectM4 REQUIRED COMPONENTS Playlist)
find_package(SDL2 REQUIRED)
find_package(Poco REQUIRED COMPONENTS JSON XML Util Foundation)
Expand Down
32 changes: 32 additions & 0 deletions cmake/Findutf8proc.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Find the utf8proc header directory
find_path(UTF8PROC_INCLUDE_DIR
NAMES utf8proc.h
PATHS
$ENV{UTF8PROC_ROOT}/include
/usr/local/include
/usr/include
)

# Find the utf8proc library
find_library(UTF8PROC_LIBRARY
NAMES utf8proc
PATHS
$ENV{UTF8PROC_ROOT}/lib
/usr/local/lib
/usr/lib
)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(utf8proc
REQUIRED_VARS
UTF8PROC_LIBRARY
UTF8PROC_INCLUDE_DIR
)

if(utf8proc_FOUND AND NOT TARGET Utf8Proc::Utf8Proc)
add_library(Utf8Proc::Utf8Proc UNKNOWN IMPORTED)
set_target_properties(Utf8Proc::Utf8Proc PROPERTIES
IMPORTED_LOCATION "${UTF8PROC_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${UTF8PROC_INCLUDE_DIR}"
)
endif()
63 changes: 62 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ target_compile_definitions(projectMSDL
PROJECTMSDL_VERSION="${PROJECT_VERSION}"
)


target_link_libraries(projectMSDL
PRIVATE
ProjectMSDL-GUI
Expand All @@ -70,7 +71,67 @@ target_link_libraries(projectMSDL
SDL2::SDL2main
)

if(MSVC)
# Add the dylib copying for macOS
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
function(copy_dylibs_to_frameworks TARGET_NAME DYLIB_SOURCE_DIR)
# Create Frameworks directory
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$<TARGET_FILE_DIR:${TARGET_NAME}>/../Frameworks"
)

# Find all .dylib files in the source directory
file(GLOB DYLIB_FILES "${DYLIB_SOURCE_DIR}/*.dylib")

# Copy each .dylib file and fix its rpath
foreach(DYLIB_FILE ${DYLIB_FILES})
get_filename_component(DYLIB_NAME ${DYLIB_FILE} NAME)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${DYLIB_FILE}"
"$<TARGET_FILE_DIR:${TARGET_NAME}>/../Frameworks/${DYLIB_NAME}"
)
endforeach()

# Add rpath to the main executable
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD
COMMAND install_name_tool -add_rpath "@executable_path/../Frameworks"
"$<TARGET_FILE:${TARGET_NAME}>"
)
endfunction()

# Try to locate projectm
find_path(PROJECTM_LIBRARY_DIR
NAMES libprojectM-4.dylib # Use a known file from the library directory
PATHS
$ENV{PROJECTM_ROOT}/lib # Check an environment variable
/usr/local/lib/projectm # Common install location
/opt/homebrew/lib/projectm # Homebrew on Apple Silicon
/opt/local/lib/projectm # MacPorts location
PATH_SUFFIXES
lib # Look automatically appended subdirectories like 'lib'
NO_DEFAULT_PATH
)

if (NOT PROJECTM_LIBRARY_DIR)
find_path(PROJECTM_LIBRARY_DIR
NAMES libprojectM.dylib
PATHS ${CMAKE_PREFIX_PATH}
PATH_SUFFIXES lib
)
endif()

if (PROJECTM_LIBRARY_DIR)
message(STATUS "Found projectM libraries at: ${PROJECTM_LIBRARY_DIR}")
# Call the function to copy dylibs found in PROJECTM_LIBRARY_DIR
copy_dylibs_to_frameworks(projectMSDL "${PROJECTM_LIBRARY_DIR}")
else()
message(WARNING "Could not find projectM libraries. Please set PROJECTM_ROOT or specify the library location manually.")
endif()
endif()


if (MSVC)
set_target_properties(projectMSDL
PROPERTIES
VS_DPI_AWARE "PerMonitor"
Expand Down
2 changes: 1 addition & 1 deletion src/gui/ProjectMGUI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ void ProjectMGUI::initialize(Poco::Util::Application& app)
_glContext = renderingWindow.GetGlContext();

ImGui_ImplSDL2_InitForOpenGL(_renderingWindow, _glContext);
ImGui_ImplOpenGL3_Init("#version 130");
ImGui_ImplOpenGL3_Init("#version 150"); // changing this from '130' to '150' fixes the UI not displaying on MacOS 15

UpdateFontSize();

Expand Down