mirror of
https://git.jami.net/savoirfairelinux/jami-daemon.git
synced 2025-08-12 22:09:25 +08:00
cmake: support building multi-arch contrib on macOS
Change-Id: I29f135bb43c2b06cdb57f073e77872d923716f7a
This commit is contained in:
@ -129,6 +129,65 @@ if (BUILD_CONTRIB)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
file(LOCK ${CONTRIB_BUILD_PATH} DIRECTORY)
|
file(LOCK ${CONTRIB_BUILD_PATH} DIRECTORY)
|
||||||
|
message(STATUS "Building contrib for architectures: ${CMAKE_OSX_ARCHITECTURES} ${CMAKE_SYSTEM}")
|
||||||
|
list(LENGTH CMAKE_OSX_ARCHITECTURES CMAKE_OSX_ARCHITECTURES_LENGTH)
|
||||||
|
if (APPLE AND CMAKE_OSX_ARCHITECTURES_LENGTH GREATER 1)
|
||||||
|
message(STATUS "Building for multiple architectures: ${CMAKE_OSX_ARCHITECTURES}")
|
||||||
|
foreach(ARCH ${CMAKE_OSX_ARCHITECTURES})
|
||||||
|
message(STATUS "Building for architecture: ${ARCH}")
|
||||||
|
set(ENV{CMAKE_OSX_ARCHITECTURES} ${ARCH})
|
||||||
|
set(CC_TARGET ${ARCH}-apple-darwin${CMAKE_SYSTEM_VERSION})
|
||||||
|
set(CC_CONTRIB_BUILD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/contrib/native-${CC_TARGET})
|
||||||
|
set(CC_CONTRIB_PATH ${CMAKE_CURRENT_SOURCE_DIR}/contrib/${CC_TARGET})
|
||||||
|
file(MAKE_DIRECTORY ${CC_CONTRIB_BUILD_PATH})
|
||||||
|
file(MAKE_DIRECTORY ${CC_CONTRIB_PATH})
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/contrib/bootstrap --host=${CC_TARGET}
|
||||||
|
WORKING_DIRECTORY ${CC_CONTRIB_BUILD_PATH})
|
||||||
|
execute_process(COMMAND make list
|
||||||
|
WORKING_DIRECTORY ${CC_CONTRIB_BUILD_PATH})
|
||||||
|
execute_process(COMMAND make ${CONTRIB_BUILD_FLAGS}
|
||||||
|
WORKING_DIRECTORY ${CC_CONTRIB_BUILD_PATH})
|
||||||
|
endforeach()
|
||||||
|
# Build fat contrib: merge all .a files
|
||||||
|
set(FAT_CONTRIB_PATH ${CMAKE_CURRENT_SOURCE_DIR}/contrib/apple-darwin${CMAKE_SYSTEM_VERSION})
|
||||||
|
execute_process(COMMAND rm -rf ${FAT_CONTRIB_PATH})
|
||||||
|
list(GET CMAKE_OSX_ARCHITECTURES 0 ARCH_FIRST)
|
||||||
|
set(CONTRIB_PATH_FIRST ${CMAKE_CURRENT_SOURCE_DIR}/contrib/${ARCH_FIRST}-apple-darwin${CMAKE_SYSTEM_VERSION})
|
||||||
|
string(REPLACE "arm64" "aarch64" ARCH_FIRST_LIB ${ARCH_FIRST})
|
||||||
|
set(TARGET_FIRST_LIB ${ARCH_FIRST_LIB}-apple-darwin${CMAKE_SYSTEM_VERSION})
|
||||||
|
execute_process(COMMAND cp -r ${CONTRIB_PATH_FIRST} ${FAT_CONTRIB_PATH})
|
||||||
|
file(GLOB_RECURSE LIB_FILES ${FAT_CONTRIB_PATH}/lib/*.a)
|
||||||
|
foreach(LIB_FILE_PATH ${LIB_FILES})
|
||||||
|
get_filename_component(LIB_FILE ${LIB_FILE_PATH} NAME)
|
||||||
|
get_filename_component(LIB_FILE_NAME ${LIB_FILE_PATH} NAME_WLE)
|
||||||
|
set(LIB_FILES_TO_MERGE "-create")
|
||||||
|
foreach(ARCH ${CMAKE_OSX_ARCHITECTURES})
|
||||||
|
string(REPLACE "arm64" "aarch64" ARCH_LIB ${ARCH})
|
||||||
|
set(CC_TARGET ${ARCH}-apple-darwin${CMAKE_SYSTEM_VERSION})
|
||||||
|
set(CC_CONTRIB_PATH ${CMAKE_CURRENT_SOURCE_DIR}/contrib/${CC_TARGET})
|
||||||
|
string(REPLACE ${TARGET_FIRST_LIB} ${ARCH_LIB}-apple-darwin${CMAKE_SYSTEM_VERSION} CC_LIB_FILE_NAME ${LIB_FILE})
|
||||||
|
set(CC_LIB_FILE_PATH "${CC_CONTRIB_PATH}/lib/${CC_LIB_FILE_NAME}")
|
||||||
|
if(NOT EXISTS ${CC_LIB_FILE_PATH})
|
||||||
|
message(FATAL_ERROR "Required library file not found: ${CC_LIB_FILE_PATH}")
|
||||||
|
endif()
|
||||||
|
list(APPEND LIB_FILES_TO_MERGE ${CC_LIB_FILE_PATH})
|
||||||
|
endforeach()
|
||||||
|
list(APPEND LIB_FILES_TO_MERGE "-output" "${FAT_CONTRIB_PATH}/lib/${LIB_FILE}")
|
||||||
|
execute_process(COMMAND lipo ${LIB_FILES_TO_MERGE})
|
||||||
|
endforeach()
|
||||||
|
# replace all path references in pc and cmake files
|
||||||
|
file(GLOB_RECURSE PC_FILES ${FAT_CONTRIB_PATH}/lib/pkgconfig/*.pc)
|
||||||
|
file(GLOB_RECURSE CMAKE_FILES ${FAT_CONTRIB_PATH}/lib/cmake/*.cmake)
|
||||||
|
list(APPEND ALL_FILES ${PC_FILES} ${CMAKE_FILES})
|
||||||
|
foreach(FILE_PATH ${ALL_FILES})
|
||||||
|
file(READ ${FILE_PATH} PC_FILE_CONTENT)
|
||||||
|
string(REPLACE ${CONTRIB_PATH_FIRST} ${FAT_CONTRIB_PATH} PC_FILE_CONTENT ${PC_FILE_CONTENT})
|
||||||
|
file(WRITE ${FILE_PATH} ${PC_FILE_CONTENT})
|
||||||
|
endforeach()
|
||||||
|
set(CONTRIB_PATH ${FAT_CONTRIB_PATH})
|
||||||
|
else()
|
||||||
|
message(STATUS "Building contrib for ${TARGET}")
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/contrib/bootstrap --host=${TARGET}
|
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/contrib/bootstrap --host=${TARGET}
|
||||||
WORKING_DIRECTORY ${CONTRIB_BUILD_PATH})
|
WORKING_DIRECTORY ${CONTRIB_BUILD_PATH})
|
||||||
@ -136,6 +195,7 @@ if (BUILD_CONTRIB)
|
|||||||
WORKING_DIRECTORY ${CONTRIB_BUILD_PATH})
|
WORKING_DIRECTORY ${CONTRIB_BUILD_PATH})
|
||||||
execute_process(COMMAND make ${CONTRIB_BUILD_FLAGS}
|
execute_process(COMMAND make ${CONTRIB_BUILD_FLAGS}
|
||||||
WORKING_DIRECTORY ${CONTRIB_BUILD_PATH})
|
WORKING_DIRECTORY ${CONTRIB_BUILD_PATH})
|
||||||
|
endif()
|
||||||
file(LOCK ${CONTRIB_BUILD_PATH} DIRECTORY RELEASE)
|
file(LOCK ${CONTRIB_BUILD_PATH} DIRECTORY RELEASE)
|
||||||
else()
|
else()
|
||||||
set(SCRIPTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extras/scripts)
|
set(SCRIPTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/extras/scripts)
|
||||||
|
Reference in New Issue
Block a user