mirror of
https://github.com/opencv/opencv.git
synced 2024-11-30 22:40:17 +08:00
85b0fb2a9c
Support XCFramework builds, Catalyst * Early work on xcframework support * Improve legibility * Somehow this works * Specify ABIs in a place where they won't get erased If you pass in the C/CXX flags from the Python script, they won't be respected. By doing it in the actual toolchain, the options are respected and Catalyst successfully links. * Clean up and push updates * Actually use Catalyst ABI Needed to specify EXE linker flags to get compiler tests to link to the Catalyst ABIs. * Clean up * Revert changes to common toolchain that don't matter * Try some things * Support Catalyst build in OSX scripts * Remove unnecessary iOS reference to AssetsLibrary framework * Getting closer * Try some things, port to Python 3 * Some additional fixes * Point Cmake Plist gen to osx directory for Catalyst targets * Remove dynamic lib references for Catalyst, copy iOS instead of macos * Add flag for building only specified archs, remove iOS catalyst refs * Add build-xcframework.sh * Update build-xcframework.sh * Add presumptive Apple Silicon support * Add arm64 iphonesimulator target * Fix xcframework build * Working on arm64 iOS simulator * Support 2.7 (replace run with check_output) * Correctly check output of uname_m against arch * Clean up * Use lipo for intermediate frameworks, add python script Remove unneeded __init__.py * Simplify python xcframework build script * Add --only-64-bit flag * Add --framework-name flag * Document * Commit to f-strings, improve console output * Add i386 to iphonesimulator platform in xcframework generator * Enable objc for non-Catalyst frameworks * Fix xcframework builder for paths with spaces * Use arch when specifying Catalyst build platform in build command * Fix incorrect settings for framework_name argparse configuration * Prefer underscores instead of hyphens in new flags * Move Catalyst flags to where they'll actually get used * Use --without=objc on Catalyst target for now * Remove get_or_create_folder and simplify logic * Remove unused import * Tighten up help text * Document * Move common functions into cv_build_utils * Improve documentation * Remove old build script * Add readme * Check for required CMake and Xcode versions * Clean up TODOs and re-enable `copy_samples()` Remove TODO Fixup * Add missing print_function import * Clarify CMake dependency documentation * Revert python2 change in gen_objc * Remove unnecessary builtins imports * Remove trailing whitespace * Avoid building Catalyst unless specified This makes Catalyst support a non-breaking change, though defaults should be specified when a breaking change is possible. * Prevent lipoing for the same archs on different platforms before build * Rename build-xcframework.py to build_xcframework.py * Check for duplicate archs more carefully * Prevent sample copying error when directory already exists This can happen when building multiple architectures for the same platform. * Simplify code for checking for default archs * Improve build_xcframework.py header text * Correctly resolve Python script paths * Parse only known args in ios/osx build_framework.py * Pass through uncaptured args in build_xcframework to osx/ios build * Fix typo * Fix typo * Fix unparameterized build path for intermediate frameworks * Fix dyanmic info.plist path for catalyst * Fix utf-8 Python 3 issue * Add dynamic flag to osx script * Rename platform to platforms, remove armv7s and i386 * Fix creation of dynamic framework on maccatalyst and macos * Update platforms/apple/readme.md * Add `macos_archs` flag and deprecate `archs` flag * Allow specification of archs when generating xcframework from terminal * Change xcframework platform argument names to match archs flag names * Remove platforms as a concept and shadow archs flags from ios/osx .py * Improve documentation * Fix building of objc module on Catalyst, excluding Swift * Clean up build folder logic a bit * Fix framework_name flag * Drop passthrough_args, use unknown_args instead * minor: coding style changes Co-authored-by: Chris Ballinger <cballinger@rightpoint.com>
69 lines
2.6 KiB
Plaintext
69 lines
2.6 KiB
Plaintext
cmake_minimum_required(VERSION 3.15)
|
|
|
|
project($framework)
|
|
|
|
set(MODULES "$modules")
|
|
|
|
# Enable C++11
|
|
set (CMAKE_CXX_STANDARD 11)
|
|
set (CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
|
|
|
set (OBJC_COMPILE_FLAGS "-fobjc-arc -fobjc-weak -fvisibility=hidden -fPIC -D__OPENCV_BUILD=1")
|
|
set (SUPPRESS_WARNINGS_FLAGS "-Wno-incomplete-umbrella")
|
|
set (CMAKE_CXX_FLAGS "$${CMAKE_CXX_FLAGS} $${OBJC_COMPILE_FLAGS} $${SUPPRESS_WARNINGS_FLAGS}")
|
|
|
|
# grab the files
|
|
if(SWIFT_DISABLED)
|
|
message(STATUS "Swift wrapper disabled")
|
|
file(GLOB_RECURSE objc_sources "objc/*\.h" "objc/*\.m" "objc/*\.mm" "objc/*\.modulemap")
|
|
else()
|
|
enable_language(Swift)
|
|
file(GLOB_RECURSE objc_sources "objc/*\.h" "objc/*\.m" "objc/*\.mm" "objc/*\.swift" "objc/*\.modulemap")
|
|
endif()
|
|
file(GLOB_RECURSE objc_headers "*\.h")
|
|
|
|
add_library($framework STATIC $${objc_sources})
|
|
|
|
set_target_properties($framework PROPERTIES LINKER_LANGUAGE CXX)
|
|
|
|
target_include_directories($framework PRIVATE "$${BUILD_ROOT}")
|
|
target_include_directories($framework PRIVATE "$${BUILD_ROOT}/install/include")
|
|
target_include_directories($framework PRIVATE "$${BUILD_ROOT}/install/include/opencv2")
|
|
foreach(m $${MODULES})
|
|
target_include_directories($framework PRIVATE "$${BUILD_ROOT}/modules/objc_bindings_generator/$objc_target/gen/objc/$${m}")
|
|
endforeach()
|
|
|
|
install(TARGETS $framework LIBRARY DESTINATION lib)
|
|
|
|
# Additional target properties
|
|
if (CMAKE_XCODE_BUILD_SYSTEM GREATER_EQUAL 12)
|
|
set_target_properties($framework PROPERTIES
|
|
OUTPUT_NAME "$framework"
|
|
ARCHIVE_OUTPUT_DIRECTORY "$${BUILD_ROOT}/lib"
|
|
XCODE_ATTRIBUTE_SWIFT_VERSION 5.0
|
|
XCODE_ATTRIBUTE_DEFINES_MODULE YES
|
|
XCODE_ATTRIBUTE_BUILD_LIBRARY_FOR_DISTRIBUTION YES
|
|
XCODE_ATTRIBUTE_OTHER_SWIFT_FLAGS "-Xcc $${SUPPRESS_WARNINGS_FLAGS}"
|
|
XCODE_ATTRIBUTE_MODULEMAP_FILE objc/$framework.modulemap
|
|
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER org.opencv.$framework
|
|
FRAMEWORK TRUE
|
|
MACOSX_FRAMEWORK_IDENTIFIER org.opencv.$framework
|
|
PUBLIC_HEADER "$${objc_headers}"
|
|
DEFINE_SYMBOL CVAPI_EXPORTS
|
|
)
|
|
else()
|
|
set_target_properties($framework PROPERTIES
|
|
OUTPUT_NAME "$framework"
|
|
ARCHIVE_OUTPUT_DIRECTORY "$${BUILD_ROOT}/lib"
|
|
XCODE_ATTRIBUTE_SWIFT_VERSION 5.0
|
|
XCODE_ATTRIBUTE_DEFINES_MODULE YES
|
|
XCODE_ATTRIBUTE_OTHER_SWIFT_FLAGS "-Xcc $${SUPPRESS_WARNINGS_FLAGS}"
|
|
XCODE_ATTRIBUTE_MODULEMAP_FILE objc/$framework.modulemap
|
|
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER org.opencv.$framework
|
|
FRAMEWORK TRUE
|
|
MACOSX_FRAMEWORK_IDENTIFIER org.opencv.$framework
|
|
PUBLIC_HEADER "$${objc_headers}"
|
|
DEFINE_SYMBOL CVAPI_EXPORTS
|
|
)
|
|
endif()
|