this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Couple of improvements to the CMake helper functions

`InstallSymlink.cmake`:
* Automatically create the destination directory if necessary

`darling_framework.cmake`:
* Port over some features from `add_framework` to `add_separated_framework`
* Build `add_separated_framework` sources as a fat object library used by both targets (i386 and x86_64)
* This is to reduce unnecessary recompilation
* This is fine for all the cases where we use it; we only use it to add arch-specific link flags
* If you ever want to get back the old behavior, you could add a "SEPARATE_OBJECTS" option (or something like that) to enable the old behavior

`use_ld64.cmake`:
* Update libsystem_dnssd `dylib_file` entry

+39 -12
+1
cmake/InstallSymlink.cmake
··· 27 27 # scripting the symlink installation at install time should work 28 28 # for CMake 2.6.x and 2.8.x 29 29 install(CODE " 30 + execute_process(COMMAND \"${CMAKE_COMMAND}\" -E make_directory ${_installdir}) 30 31 if (\"\$ENV{DESTDIR}\" STREQUAL \"\") 31 32 execute_process(COMMAND \"${CMAKE_COMMAND}\" -E create_symlink 32 33 ${_filepath}
+37 -11
cmake/darling_framework.cmake
··· 107 107 endfunction(add_framework) 108 108 109 109 function(add_separated_framework name) 110 - cmake_parse_arguments(FRAMEWORK "CURRENT_VERSION;PRIVATE;IOSSUPPORT" "VERSION;LINK_FLAGS" "SOURCES;ARCHS;DEPENDENCIES;CIRCULAR_DEPENDENCIES" ${ARGN}) 110 + cmake_parse_arguments(FRAMEWORK "CURRENT_VERSION;PRIVATE;IOSSUPPORT" "VERSION;LINK_FLAGS" "SOURCES;ARCHS;DEPENDENCIES;CIRCULAR_DEPENDENCIES;UPWARD_DEPENDENCIES;OBJECTS;STRONG_DEPENDENCIES;RESOURCES" ${ARGN}) 111 111 if (FRAMEWORK_CURRENT_VERSION) 112 112 set(my_name "${name}") 113 113 else (FRAMEWORK_CURRENT_VERSION) ··· 128 128 129 129 set(DYLIB_INSTALL_NAME "/${sys_library_dir}/${dir_name}/${name}.framework/Versions/${FRAMEWORK_VERSION}/${name}") 130 130 131 + # reduce unnecessary recompilation by creating a single object library 132 + # `add_darling_object_library` automatically adds arch flags based on the same variables we use, so this works fine 133 + add_darling_object_library(${my_name}_obj ${FRAMEWORK_SOURCES}) 134 + 131 135 if (TARGET_i386) 132 136 set(DARLING_LIB_i386_ONLY TRUE) 133 - if (FRAMEWORK_CIRCULAR_DEPENDENCIES) 137 + if (FRAMEWORK_CIRCULAR_DEPENDENCIES OR FRAMEWORK_UPWARD_DEPENDENCIES) 134 138 add_circular(${my_name}_i386 135 - SOURCES ${FRAMEWORK_SOURCES} 136 139 SIBLINGS ${FRAMEWORK_CIRCULAR_DEPENDENCIES} 140 + UPWARD ${FRAMEWORK_UPWARD_DEPENDENCIES} 141 + OBJECTS $<TARGET_OBJECTS:${my_name}_obj> ${FRAMEWORK_OBJECTS} 142 + STRONG_DEPENDENCIES ${FRAMEWORK_STRONG_DEPENDENCIES} 137 143 ) 138 - else (FRAMEWORK_CIRCULAR_DEPENDENCIES) 139 - add_darling_library(${my_name}_i386 ${FRAMEWORK_SOURCES}) 140 - endif (FRAMEWORK_CIRCULAR_DEPENDENCIES) 144 + else (FRAMEWORK_CIRCULAR_DEPENDENCIES OR FRAMEWORK_UPWARD_DEPENDENCIES) 145 + add_darling_library(${my_name}_i386 $<TARGET_OBJECTS:${my_name}_obj> ${FRAMEWORK_OBJECTS}) 146 + target_link_libraries(${my_name}_i386 PRIVATE ${FRAMEWORK_STRONG_DEPENDENCIES}) 147 + endif (FRAMEWORK_CIRCULAR_DEPENDENCIES OR FRAMEWORK_UPWARD_DEPENDENCIES) 141 148 set(DARLING_LIB_i386_ONLY FALSE) 142 149 set_target_properties(${my_name}_i386 PROPERTIES 143 150 OUTPUT_NAME "${name}_i386" ··· 162 169 163 170 if (TARGET_x86_64) 164 171 set(DARLING_LIB_x86_64_ONLY TRUE) 165 - if (FRAMEWORK_CIRCULAR_DEPENDENCIES) 172 + if (FRAMEWORK_CIRCULAR_DEPENDENCIES OR FRAMEWORK_UPWARD_DEPENDENCIES) 166 173 add_circular(${my_name}_x86_64 167 - SOURCES ${FRAMEWORK_SOURCES} 168 174 SIBLINGS ${FRAMEWORK_CIRCULAR_DEPENDENCIES} 175 + UPWARD ${FRAMEWORK_UPWARD_DEPENDENCIES} 176 + OBJECTS $<TARGET_OBJECTS:${my_name}_obj> ${FRAMEWORK_OBJECTS} 177 + STRONG_DEPENDENCIES ${FRAMEWORK_STRONG_DEPENDENCIES} 169 178 ) 170 - else (FRAMEWORK_CIRCULAR_DEPENDENCIES) 171 - add_darling_library(${my_name}_x86_64 ${FRAMEWORK_SOURCES}) 172 - endif (FRAMEWORK_CIRCULAR_DEPENDENCIES) 179 + else (FRAMEWORK_CIRCULAR_DEPENDENCIES OR FRAMEWORK_UPWARD_DEPENDENCIES) 180 + add_darling_library(${my_name}_x86_64 $<TARGET_OBJECTS:${my_name}_obj> ${FRAMEWORK_OBJECTS}) 181 + target_link_libraries(${my_name}_x86_64 PRIVATE ${FRAMEWORK_STRONG_DEPENDENCIES}) 182 + endif (FRAMEWORK_CIRCULAR_DEPENDENCIES OR FRAMEWORK_UPWARD_DEPENDENCIES) 173 183 set(DARLING_LIB_x86_64_ONLY FALSE) 174 184 set_target_properties(${my_name}_x86_64 PROPERTIES 175 185 OUTPUT_NAME "${name}_x86_64" ··· 307 317 endif (TARGET_i386 AND TARGET_x86_64) 308 318 309 319 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${my_name} DESTINATION "libexec/darling/${sys_library_dir}/${dir_name}/${name}.framework/Versions/${FRAMEWORK_VERSION}/") 320 + 321 + if (FRAMEWORK_RESOURCES) 322 + if (FRAMEWORK_CURRENT_VERSION) 323 + InstallSymlink("Versions/Current/Resources" "${CMAKE_INSTALL_PREFIX}/libexec/darling/${sys_library_dir}/${dir_name}/${name}.framework/Resources") 324 + endif (FRAMEWORK_CURRENT_VERSION) 325 + while (FRAMEWORK_RESOURCES) 326 + list(GET FRAMEWORK_RESOURCES 0 res_install_path) 327 + list(GET FRAMEWORK_RESOURCES 1 res_source_path) 328 + get_filename_component(res_install_dir ${res_install_path} DIRECTORY) 329 + get_filename_component(res_install_name ${res_install_path} NAME) 330 + install(FILES ${res_source_path} 331 + DESTINATION libexec/darling/${sys_library_dir}/${dir_name}/${name}.framework/Versions/${FRAMEWORK_VERSION}/Resources/${res_install_dir} 332 + RENAME ${res_install_name}) 333 + list(REMOVE_AT FRAMEWORK_RESOURCES 0 1) 334 + endwhile (FRAMEWORK_RESOURCES) 335 + endif (FRAMEWORK_RESOURCES) 310 336 311 337 if (FRAMEWORK_CURRENT_VERSION) 312 338 InstallSymlink(${FRAMEWORK_VERSION} "${CMAKE_INSTALL_PREFIX}/libexec/darling/${sys_library_dir}/${dir_name}/${name}.framework/Versions/Current")
+1 -1
cmake/use_ld64.cmake
··· 31 31 -Wl,-dylib_file,/usr/lib/system/libsystem_platform.dylib:${CMAKE_BINARY_DIR}/src/external/libplatform/libplatform_firstpass.dylib \ 32 32 -Wl,-dylib_file,/usr/lib/system/libsystem_trace.dylib:${CMAKE_BINARY_DIR}/src/external/libtrace/libsystem_trace_firstpass.dylib \ 33 33 -Wl,-dylib_file,/usr/lib/system/libcorecrypto.dylib:${CMAKE_BINARY_DIR}/src/external/corecrypto/libcorecrypto_firstpass.dylib \ 34 - -Wl,-dylib_file,/usr/lib/system/libsystem_dnssd.dylib:${CMAKE_BINARY_DIR}/src/lib/system/dnssd/libsystem_dnssd.dylib \ 34 + -Wl,-dylib_file,/usr/lib/system/libsystem_dnssd.dylib:${CMAKE_BINARY_DIR}/src/external/mDNSResponder/libsystem_dnssd.dylib \ 35 35 -Wl,-dylib_file,/usr/lib/system/libsystem_networkextension.dylib:${CMAKE_BINARY_DIR}/src/networkextension/libsystem_networkextension.dylib \ 36 36 -Wl,-dylib_file,/usr/lib/system/libsystem_coretls.dylib:${CMAKE_BINARY_DIR}/src/external/coretls/libsystem_coretls.dylib \ 37 37 -Wl,-dylib_file,/usr/lib/system/libcommonCrypto.dylib:${CMAKE_BINARY_DIR}/src/external/commoncrypto/libcommonCrypto.dylib \