From 1b89d84cd383be0330428a38263160747c84eacd Mon Sep 17 00:00:00 2001 From: Jim Derry Date: Mon, 2 Dec 2019 11:06:10 -0500 Subject: [PATCH] Introducing openssl-xcframeworks - Build Mac Catalyst targets - Create XCFrameworks in addition to per platform frameworks. - Package everything into something that Carthage can manage. - Scripts can now target user-specified build directories (anticipating future Cocoapods support) --- .gitignore | 2 + Gemfile | 3 - Gemfile.lock | 83 ---- OPENSSL-LICENSE | 125 ------ OpenSSL-Apple.podspec.template | 28 -- OpenSSL-ContainerFramework.json | 3 + .../project.pbxproj | 352 +++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 32339 bytes .../xcschemes/OpenSSL-Container.xcscheme | 58 +++ .../xcschemes/xcschememanagement.plist | 27 ++ OpenSSL-ContainerFramework/Info.plist | 24 ++ .../OpenSSL-Container.h | 19 + README.md | 147 ++++++- assets/Catalyst/Info.plist | 24 ++ assets/{WatchOS => Watch}/Info.plist | 0 build-libssl.sh | 201 +++++++--- config/20-all-platforms.conf | 21 +- create-openssl-framework.sh | 371 ++++++++++++++---- scripts/build-loop-archs.sh | 15 +- scripts/build-loop-targets.sh | 17 + scripts/min-sdk-versions.sh | 9 + 23 files changed, 1150 insertions(+), 394 deletions(-) delete mode 100755 Gemfile delete mode 100755 Gemfile.lock delete mode 100755 OPENSSL-LICENSE delete mode 100755 OpenSSL-Apple.podspec.template create mode 100644 OpenSSL-ContainerFramework.json create mode 100644 OpenSSL-ContainerFramework.xcodeproj/project.pbxproj create mode 100644 OpenSSL-ContainerFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 OpenSSL-ContainerFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 OpenSSL-ContainerFramework.xcodeproj/project.xcworkspace/xcuserdata/jderry.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 OpenSSL-ContainerFramework.xcodeproj/xcshareddata/xcschemes/OpenSSL-Container.xcscheme create mode 100644 OpenSSL-ContainerFramework.xcodeproj/xcuserdata/jderry.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 OpenSSL-ContainerFramework/Info.plist create mode 100644 OpenSSL-ContainerFramework/OpenSSL-Container.h create mode 100755 assets/Catalyst/Info.plist rename assets/{WatchOS => Watch}/Info.plist (100%) create mode 100644 scripts/min-sdk-versions.sh diff --git a/.gitignore b/.gitignore index 9a83bd9d..08a12ff8 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ bin src lib +frameworks include/openssl *.gz *.framework +Carthage \ No newline at end of file diff --git a/Gemfile b/Gemfile deleted file mode 100755 index d1bf7c6f..00000000 --- a/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source "https://rubygems.org" - -gem "cocoapods" diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100755 index aed9389f..00000000 --- a/Gemfile.lock +++ /dev/null @@ -1,83 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.1) - activesupport (4.2.11.1) - i18n (~> 0.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - algoliasearch (1.27.0) - httpclient (~> 2.8, >= 2.8.3) - json (>= 1.5.1) - atomos (0.1.3) - claide (1.0.3) - cocoapods (1.8.0) - activesupport (>= 4.0.2, < 5) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.8.0) - cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 1.2.2, < 2.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-stats (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.4.0, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.3.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.6.6) - nap (~> 1.0) - ruby-macho (~> 1.4) - xcodeproj (>= 1.11.1, < 2.0) - cocoapods-core (1.8.0) - activesupport (>= 4.0.2, < 6) - algoliasearch (~> 1.0) - concurrent-ruby (~> 1.0) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - cocoapods-deintegrate (1.0.4) - cocoapods-downloader (1.2.2) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.0) - cocoapods-stats (1.1.0) - cocoapods-trunk (1.4.0) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.1.0) - colored2 (3.1.2) - concurrent-ruby (1.1.5) - escape (0.0.4) - fourflusher (2.3.1) - fuzzy_match (2.0.4) - gh_inspector (1.1.3) - httpclient (2.8.3) - i18n (0.9.5) - concurrent-ruby (~> 1.0) - json (2.2.0) - minitest (5.12.0) - molinillo (0.6.6) - nanaimo (0.2.6) - nap (1.1.0) - netrc (0.11.0) - ruby-macho (1.4.0) - thread_safe (0.3.6) - tzinfo (1.2.5) - thread_safe (~> 0.1) - xcodeproj (1.12.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.2.6) - -PLATFORMS - ruby - -DEPENDENCIES - cocoapods - -BUNDLED WITH - 2.0.2 diff --git a/OPENSSL-LICENSE b/OPENSSL-LICENSE deleted file mode 100755 index e953f590..00000000 --- a/OPENSSL-LICENSE +++ /dev/null @@ -1,125 +0,0 @@ - - LICENSE ISSUES - ============== - - The OpenSSL toolkit stays under a double license, i.e. both the conditions of - the OpenSSL License and the original SSLeay license apply to the toolkit. - See below for the actual license texts. - - OpenSSL License - --------------- - -/* ==================================================================== - * Copyright (c) 1998-2018 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ - - Original SSLeay License - ----------------------- - -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - diff --git a/OpenSSL-Apple.podspec.template b/OpenSSL-Apple.podspec.template deleted file mode 100755 index 60e0a384..00000000 --- a/OpenSSL-Apple.podspec.template +++ /dev/null @@ -1,28 +0,0 @@ -Pod::Spec.new do |s| - openssl_version = "%OPENSSL-VERSION%" - script_version = "4" - - s.name = "OpenSSL-Apple" - s.version = "#{openssl_version}.#{script_version}" - s.summary = "A script for compiling OpenSSL for Apple Devices" - s.authors = "Felix Schulze", "Davide De Rosa", "Ezat Hashim" - - s.homepage = "https://github.com/keeshux/openssl-apple.git" - s.source = { :git => s.homepage.to_s, :tag => "v#{script_version}" } - s.license = { :type => 'Apache', :file => 'LICENSE' } - - s.prepare_command = <<-CMD -./build-libssl.sh --version=#{openssl_version} -./create-openssl-framework.sh dynamic - CMD - - s.ios.deployment_target = "11.0" - s.ios.vendored_frameworks = "frameworks/iPhone/openssl.framework" - s.tvos.deployment_target = "11.0" - s.tvos.vendored_frameworks = "frameworks/AppleTV/openssl.framework" - s.osx.deployment_target = "10.11" - s.osx.vendored_frameworks = "frameworks/MacOSX/openssl.framework" - s.watchos.deployment_target = "4.0" - s.watchos.vendored_frameworks = "frameworks/WatchOS/openssl.framework" - s.requires_arc = false -end diff --git a/OpenSSL-ContainerFramework.json b/OpenSSL-ContainerFramework.json new file mode 100644 index 00000000..646610d7 --- /dev/null +++ b/OpenSSL-ContainerFramework.json @@ -0,0 +1,3 @@ +{ + "1.1.14": "https://github.com/balthisar/openssl-xcframeworks/releases/download/1.1.1d/OpenSSL-ContainerFramework.framework.zip" +} diff --git a/OpenSSL-ContainerFramework.xcodeproj/project.pbxproj b/OpenSSL-ContainerFramework.xcodeproj/project.pbxproj new file mode 100644 index 00000000..c3b5f577 --- /dev/null +++ b/OpenSSL-ContainerFramework.xcodeproj/project.pbxproj @@ -0,0 +1,352 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D053F3D42394890800F3B166 /* OpenSSL-Container.h in Headers */ = {isa = PBXBuildFile; fileRef = D05FFEAB238DAFA200E46F46 /* OpenSSL-Container.h */; settings = {ATTRIBUTES = (Public, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D05FFEA8238DAFA200E46F46 /* OpenSSL-ContainerFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = "OpenSSL-ContainerFramework.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + D05FFEAB238DAFA200E46F46 /* OpenSSL-Container.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "OpenSSL-Container.h"; sourceTree = ""; }; + D05FFEAC238DAFA200E46F46 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D05FFEA5238DAFA200E46F46 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D05FFE9E238DAFA200E46F46 = { + isa = PBXGroup; + children = ( + D05FFEAA238DAFA200E46F46 /* OpenSSL-ContainerFramework */, + D05FFEA9238DAFA200E46F46 /* Products */, + ); + sourceTree = ""; + }; + D05FFEA9238DAFA200E46F46 /* Products */ = { + isa = PBXGroup; + children = ( + D05FFEA8238DAFA200E46F46 /* OpenSSL-ContainerFramework.framework */, + ); + name = Products; + sourceTree = ""; + }; + D05FFEAA238DAFA200E46F46 /* OpenSSL-ContainerFramework */ = { + isa = PBXGroup; + children = ( + D05FFEAB238DAFA200E46F46 /* OpenSSL-Container.h */, + D05FFEAC238DAFA200E46F46 /* Info.plist */, + ); + path = "OpenSSL-ContainerFramework"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D05FFEA3238DAFA200E46F46 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D053F3D42394890800F3B166 /* OpenSSL-Container.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D05FFEA7238DAFA200E46F46 /* OpenSSL-ContainerFramework */ = { + isa = PBXNativeTarget; + buildConfigurationList = D05FFEB0238DAFA200E46F46 /* Build configuration list for PBXNativeTarget "OpenSSL-ContainerFramework" */; + buildPhases = ( + D05FFEA3238DAFA200E46F46 /* Headers */, + D05FFEA4238DAFA200E46F46 /* Sources */, + D05FFEA5238DAFA200E46F46 /* Frameworks */, + D05FFEA6238DAFA200E46F46 /* Resources */, + D05FFEB3238DB12500E46F46 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "OpenSSL-ContainerFramework"; + productName = CarthageFakeFramework; + productReference = D05FFEA8238DAFA200E46F46 /* OpenSSL-ContainerFramework.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D05FFE9F238DAFA200E46F46 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1120; + ORGANIZATIONNAME = "Jim Derry"; + TargetAttributes = { + D05FFEA7238DAFA200E46F46 = { + CreatedOnToolsVersion = 11.1; + }; + }; + }; + buildConfigurationList = D05FFEA2238DAFA200E46F46 /* Build configuration list for PBXProject "OpenSSL-ContainerFramework" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = D05FFE9E238DAFA200E46F46; + productRefGroup = D05FFEA9238DAFA200E46F46 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D05FFEA7238DAFA200E46F46 /* OpenSSL-ContainerFramework */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D05FFEA6238DAFA200E46F46 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + D05FFEB3238DB12500E46F46 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + "$(BUILT_PRODUCTS_DIR)/openssl-apple/lib", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "BUILD=\"${BUILT_PRODUCTS_DIR}/OpenSSL-ContainerFramework.framework/Versions/A/Resources/openssl-xcframeworks\"\nmkdir -p \"$BUILD\"\n\nsource \"${HOME}/.zshenv\"\n\n./build-libssl.sh --directory=\"$BUILD\" --verbose\n./create-openssl-framework.sh --directory=\"$BUILD\" --frameworks=\"xcframework-dynamic\" xcdynamic\n./create-openssl-framework.sh --directory=\"$BUILD\" --frameworks=\"xcframework-static\" xcstatic\n./create-openssl-framework.sh --directory=\"$BUILD\" --frameworks=\"framework-dynamic\" dynamic\n./create-openssl-framework.sh --directory=\"$BUILD\" --frameworks=\"framework-static\" static\n\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D05FFEA4238DAFA200E46F46 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D05FFEAE238DAFA200E46F46 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + D05FFEAF238DAFA200E46F46 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + D05FFEB1238DAFA200E46F46 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "OpenSSL-ContainerFramework/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.balthisar.ContainerFramework; + PRODUCT_NAME = "OpenSSL-ContainerFramework"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + D05FFEB2238DAFA200E46F46 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "OpenSSL-ContainerFramework/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.balthisar.ContainerFramework; + PRODUCT_NAME = "OpenSSL-ContainerFramework"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D05FFEA2238DAFA200E46F46 /* Build configuration list for PBXProject "OpenSSL-ContainerFramework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D05FFEAE238DAFA200E46F46 /* Debug */, + D05FFEAF238DAFA200E46F46 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D05FFEB0238DAFA200E46F46 /* Build configuration list for PBXNativeTarget "OpenSSL-ContainerFramework" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D05FFEB1238DAFA200E46F46 /* Debug */, + D05FFEB2238DAFA200E46F46 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D05FFE9F238DAFA200E46F46 /* Project object */; +} diff --git a/OpenSSL-ContainerFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/OpenSSL-ContainerFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..971abac7 --- /dev/null +++ b/OpenSSL-ContainerFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/OpenSSL-ContainerFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/OpenSSL-ContainerFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/OpenSSL-ContainerFramework.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/OpenSSL-ContainerFramework.xcodeproj/project.xcworkspace/xcuserdata/jderry.xcuserdatad/UserInterfaceState.xcuserstate b/OpenSSL-ContainerFramework.xcodeproj/project.xcworkspace/xcuserdata/jderry.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..9605cf4500e53c37ae88d444d29b45087c5d96bd GIT binary patch literal 32339 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 J+uvH}{{y)`dqe;L literal 0 HcmV?d00001 diff --git a/OpenSSL-ContainerFramework.xcodeproj/xcshareddata/xcschemes/OpenSSL-Container.xcscheme b/OpenSSL-ContainerFramework.xcodeproj/xcshareddata/xcschemes/OpenSSL-Container.xcscheme new file mode 100644 index 00000000..97cb050f --- /dev/null +++ b/OpenSSL-ContainerFramework.xcodeproj/xcshareddata/xcschemes/OpenSSL-Container.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OpenSSL-ContainerFramework.xcodeproj/xcuserdata/jderry.xcuserdatad/xcschemes/xcschememanagement.plist b/OpenSSL-ContainerFramework.xcodeproj/xcuserdata/jderry.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 00000000..a534aa55 --- /dev/null +++ b/OpenSSL-ContainerFramework.xcodeproj/xcuserdata/jderry.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + CarthageFakeFramework.xcscheme_^#shared#^_ + + orderHint + 0 + + OpenSSL-Container.xcscheme_^#shared#^_ + + orderHint + 0 + + + SuppressBuildableAutocreation + + D05FFEA7238DAFA200E46F46 + + primary + + + + + diff --git a/OpenSSL-ContainerFramework/Info.plist b/OpenSSL-ContainerFramework/Info.plist new file mode 100644 index 00000000..588f717f --- /dev/null +++ b/OpenSSL-ContainerFramework/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSHumanReadableCopyright + Copyright © 2019 Jim Derry. All rights reserved. + + diff --git a/OpenSSL-ContainerFramework/OpenSSL-Container.h b/OpenSSL-ContainerFramework/OpenSSL-Container.h new file mode 100644 index 00000000..1a6abfe3 --- /dev/null +++ b/OpenSSL-ContainerFramework/OpenSSL-Container.h @@ -0,0 +1,19 @@ +// +// FakeLibraries.h +// FakeLibraries +// +// Created by Jim Derry on 11/26/19. +// Copyright © 2019 Jim Derry. All rights reserved. +// + +#import + +//! Project version number for CarthageFakeFramework. +FOUNDATION_EXPORT double FakeLibrariesVersionNumber; + +//! Project version string for CarthageFakeFramework. +FOUNDATION_EXPORT const unsigned char FakeLibrariesVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/README.md b/README.md index 055addf6..e8290232 100755 --- a/README.md +++ b/README.md @@ -1,41 +1,50 @@ -# OpenSSL-Apple +# openssl-xcframeworks +![macOS support](https://img.shields.io/badge/macOS-10.11+-blue.svg) ![iOS support](https://img.shields.io/badge/iOS-11+-blue.svg) ![tvOS support](https://img.shields.io/badge/tvOS-11+-blue.svg) -![macOS support](https://img.shields.io/badge/macOS-10.11+-blue.svg) ![watchOS support](https://img.shields.io/badge/watchOS-4.0+-blue.svg) -![OpenSSL version](https://img.shields.io/badge/OpenSSL-1.1.0i-green.svg) -![OpenSSL version](https://img.shields.io/badge/OpenSSL-1.0.2o-green.svg) +![macOS Catalyst support](https://img.shields.io/badge/macOS%20Catalyst-10.15+-blue.svg) +![OpenSSL version](https://img.shields.io/badge/OpenSSL-1.1.1d-green.svg) +![OpenSSL version](https://img.shields.io/badge/OpenSSL-1.0.2t-green.svg) [![license](https://img.shields.io/badge/license-Apache%202.0-lightgrey.svg)](LICENSE) -This is a fork of the popular work by [Felix Schulze](https://github.com/x2on), that is a set of scripts for using self-compiled builds of the OpenSSL library on the iPhone and the Apple TV. +This is fork of the [OpenSSL-Apple project](https://github.com/keeshux/openssl-apple) by +Davide De Rosa, which is itself a fork of the popular work by +[Felix Schulze](https://github.com/x2on), that is a set of scripts for using self-compiled +builds of the OpenSSL library on the iPhone, Apple TV, Apple Watch, macOS, and Catalyst. + +However, this repository branches from Davide's repository by emphasizing support for: + +- macOS Catalyst +- building XCFrameworks +- installation via Carthage -However, this repository focuses more on framework-based setups and also adds macOS and watchOS support. # Compile library -Compile OpenSSL 1.0.2k for all archs: +Compile OpenSSL 1.0.2t for default archs: ``` -./build-libssl.sh --version=1.0.2k +./build-libssl.sh --version=1.0.2t ``` -Compile OpenSSL 1.1.0f for all targets: +Compile OpenSSL 1.1.1d for default targets: ``` -./build-libssl.sh --version=1.1.0f +./build-libssl.sh --version=1.1.1d ``` -Compile OpenSSL 1.0.2k for specific archs: +Compile OpenSSL 1.0.2d for specific archs: ``` -./build-libssl.sh --version=1.0.2k --archs="ios_armv7 ios_arm64 mac_i386" +./build-libssl.sh --version=1.0.2d --archs="ios_armv7 ios_arm64 mac_i386" ``` -Compile OpenSSL 1.1.0f for specific targets: +Compile OpenSSL 1.1.1d for specific targets: ``` -./build-libssl.sh --version=1.1.0f --targets="ios-cross-armv7 macos64-x86_64" +./build-libssl.sh --version=1.1.1d --targets="ios-cross-armv7 macos64-x86_64" ``` For all options see: @@ -44,6 +53,7 @@ For all options see: ./build-libssl.sh --help ``` + # Generate frameworks Statically linked: @@ -52,16 +62,123 @@ Statically linked: ./create-openssl-framework.sh static ``` +Statically linked as XCFramework: + +``` +./create-openssl-framework.sh xcstatic +``` + Dynamically linked: ``` ./create-openssl-framework.sh dynamic ``` +Dynamically linked as XCFramework: + +``` +./create-openssl-framework.sh xcdynamic +``` + + +# Use from Carthage + + +## Carthage notes + +Carthage only supports frameworks, and does not support standalone dynamic or static libraries, and +does not currently support XCFrameworks, and so support for all of these is provided by building +these in a fake macOS framework ("OpenSSL-ContainerFramework"), from where you can add whatever you +need to your Xcode project in the usual way. It's kind of a hacky solution, but provides everything +you could need once built or downloaded: + +- `$(SRCROOT)/Carthage/Build/Mac/OpenSSL-ContainerFramework.framework/Versions/A/Resources/openssl-xcframeworks/` + + - `framework-dynamic/*/`: Contains an `openssl.framework` for dynamic linking for each platform. + + - `framework-static/*/`: Contains an `openssl.framework` for static linking for each platform. + + - `xcframework-dynamic/`: Contains the `openssl.xcframework` as a dynamic-linked framework. + + - `xcframework-static/`: Contains the `openssl.xcframework` as a static-linked framework. + + - `lib/`: Contains static `libcrypto-*.a` and `libssl-*.a` for each platform. These are fat + binaries that should cover all current architectures for a platform. + + - `bin/*.sdk/lib/`: Contains static `libcrypto.a` and `libssl.a` for each architecture and + platform. + +Remember, although the `OpenSSL-ContainerFramework.framework` is a macOS project, binaries for +_all_ platforms are in Carthage's `Mac/` build directory. + +When Carthage is eventually updated to support XCFrameworks, then the strategy above is likely to +change. + + +## Installation (will build from **openssl**'s source) + +You can add this repository to your Cartfile as so: + +``` +github "balthisar/openssl-xcframeworks" +``` + +Upon issuing `carthage update`, Carthage will download and build the OpenSSL frameworks for each +platform and architecture. This process can be time consuming, but only has to be performed one +time for each build environment. You can also choose to use the pre-built binaries, next. + +As mentioned above, when Carthage is updated to support XCFrameworks, the framework location in the +Carthage build directory is likely to change. You can freeze Carthage to a certain tag or hash in +your Cartfile, if you like. + + +## Installation (will use binaries that I built) + +Other OpenSSL for macOS/iOS distributions tend to distribute binaries in repositories, which seems +to be pretty popular. It's unwise for a couple of reasons: + +- You have no idea whether or not the maintainer compiled anything nefarious into the binaries; + +- Binaries should not be under version control; they just inflate the repository size. + +If you trust my binaries and prefer not to build your own per the previous section (although it's a +one-time requirement only), you can add the following to your Cartfile instead of the repository as +in the previous section: + +``` +binary "https://raw.githubusercontent.com/balthisar/openssl-xcframeworks/master/OpenSSL-ContainerFramework.json" ~> 1.1.14 +``` + +Upon issuing `carthage update`, the binary framework will be downloaded and unzipped. + +Note: the semantic version "1.1.14" corresponds to **openssl**'s version "1.1.1d"; if **openssl** +releases "1.1.1e" then the real semantic version would be "1.1.15", etc. This is required because +Carthage only works with real semantic version numbers. + + +# Download the Binaries (without Carthage) + +You can download and manually manage binaries with the same zip file that Carthage would manage for +you automatically. Take a look at the Github [releases page](https://github.com/balthisar/openssl-xcframeworks/releases) +for this repository. + + +# Use from Cocoapods + +Not currently possible until Cocoapods is updated to work with XCFrameworks. + + # Original project * + +# Davide de Rosa's project + +* + + # Acknowledgements -This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. () +This product includes software developed by the OpenSSL Project for use in the OpenSSL +Toolkit. () diff --git a/assets/Catalyst/Info.plist b/assets/Catalyst/Info.plist new file mode 100755 index 00000000..1c276cdc --- /dev/null +++ b/assets/Catalyst/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + openssl + CFBundleIdentifier + org.openssl.OpenSSL + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + openssl + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + MinimumOSVersion + 10.15 + + diff --git a/assets/WatchOS/Info.plist b/assets/Watch/Info.plist similarity index 100% rename from assets/WatchOS/Info.plist rename to assets/Watch/Info.plist diff --git a/build-libssl.sh b/build-libssl.sh index 7bc5af89..180d5311 100755 --- a/build-libssl.sh +++ b/build-libssl.sh @@ -1,7 +1,6 @@ #!/bin/sh -# Automatic build script for libssl and libcrypto -# for iPhoneOS and iPhoneSimulator +# Automatic build script for libssl and libcrypto for macOS and other Apple devices. # # Created by Felix Schulze on 16.12.10. # Copyright 2010-2017 Felix Schulze. All rights reserved. @@ -18,67 +17,102 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# 2019-November (Jim Derry ): changes to build for macOS Catalyst and to +# build an XCFramework. Other small updates. +# # -u Attempt to use undefined variable outputs error message, and forces an exit set -u +# Determine script directory +SCRIPTDIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) + +# # SCRIPT DEFAULTS +# # Default version in case no version is specified -DEFAULTVERSION="1.1.0i" +DEFAULTVERSION="1.1.1d" -# Default (=full) set of architectures (OpenSSL <= 1.0.2) or targets (OpenSSL >= 1.1.0) to build -#DEFAULTARCHS="ios_x86_64 ios_arm64 ios_armv7s ios_armv7 tv_x86_64 tv_arm64 mac_x86_64" -#DEFAULTTARGETS="ios-sim-cross-x86_64 ios64-cross-arm64 ios-cross-armv7s ios-cross-armv7 tvos-sim-cross-x86_64 tvos64-cross-arm64 macos64-x86_64" -DEFAULTARCHS="ios_x86_64 ios_arm64 tv_x86_64 tv_arm64 mac_x86_64 watchos_armv7k watchos_arm64_32 watchos_i386" -DEFAULTTARGETS="ios-sim-cross-x86_64 ios64-cross-arm64 tvos-sim-cross-x86_64 tvos64-cross-arm64 macos64-x86_64 watchos-cross-armv7k watchos-cross-arm64_32 watchos-sim-cross-i386" +# Available set of architectures (OpenSSL <= 1.0.2) or targets (OpenSSL >= 1.1.1) to build. +# These are distinct from the default sets, below, in that these are shown in help as available, +# and are supported by OpenSSL, but we don't really want to build all of them all the time. +ARCHS_AVAIL="ios_x86_64 ios_arm64 tv_x86_64 tv_arm64 mac_x86_64 watchos_armv7k watchos_arm64_32 watchos_i386 catalyst_x86_64" +TRGTS_AVAIL="ios-sim-cross-x86_64 ios64-cross-arm64 tvos-sim-cross-x86_64 tvos64-cross-arm64 macos64-x86_64 watchos-cross-armv7k watchos-cross-arm64_32 watchos-sim-cross-i386 mac-catalyst-x86_64" -# Minimum iOS/tvOS SDK version to build for -MACOS_MIN_SDK_VERSION="10.11" -IOS_MIN_SDK_VERSION="11.0" -TVOS_MIN_SDK_VERSION="11.0" -WATCHOS_MIN_SDK_VERSION="4.0" +# Default set of architectures (OpenSSL <= 1.0.2) or targets (OpenSSL >= 1.1.1) to build +ARCHS_DEFAULT="ios_x86_64 ios_arm64 tv_x86_64 tv_arm64 mac_x86_64 watchos_arm64_32 watchos_i386 catalyst_x86_64" +TRGTS_DEFAULT="ios-sim-cross-x86_64 ios64-cross-arm64 tvos-sim-cross-x86_64 tvos64-cross-arm64 macos64-x86_64 watchos-cross-arm64_32 watchos-sim-cross-i386 mac-catalyst-x86_64" + +# Minimum SDK versions to build for +source "${SCRIPTDIR}/scripts/min-sdk-versions.sh" # Init optional env variables (use available variable or default to empty string) CURL_OPTIONS="${CURL_OPTIONS:-}" CONFIG_OPTIONS="${CONFIG_OPTIONS:-}" + +# +# Help +# echo_help() { - echo "Usage: $0 [options...]" - echo "Generic options" - echo " --branch=BRANCH Select OpenSSL branch to build. The script will determine and download the latest release for that branch" - echo " --cleanup Clean up build directories (bin, include/openssl, lib, src) before starting build" - echo " --ec-nistp-64-gcc-128 Enable configure option enable-ec_nistp_64_gcc_128 for 64 bit builds" - echo " -h, --help Print help (this message)" - echo " --macos-sdk=SDKVERSION Override macOS SDK version" - echo " --ios-sdk=SDKVERSION Override iOS SDK version" - echo " --noparallel Disable running make with parallel jobs (make -j)" - echo " --tvos-sdk=SDKVERSION Override tvOS SDK version" - echo " --disable-bitcode Disable embedding Bitcode" - echo " -v, --verbose Enable verbose logging" - echo " --verbose-on-error Dump last 500 lines from log file if an error occurs (for Travis builds)" - echo " --version=VERSION OpenSSL version to build (defaults to ${DEFAULTVERSION})" - echo - echo "Options for OpenSSL 1.0.2 and lower ONLY" - echo " --archs=\"ARCH ARCH ...\" Space-separated list of architectures to build" - echo " Options: ${DEFAULTARCHS}" - echo - echo "Options for OpenSSL 1.1.0 and higher ONLY" - echo " --deprecated Exclude no-deprecated configure option and build with deprecated methods" - echo " --targets=\"TARGET TARGET ...\" Space-separated list of build targets" - echo " Options: ${DEFAULTTARGETS}" - echo - echo "For custom configure options, set variable CONFIG_OPTIONS" - echo "For custom cURL options, set variable CURL_OPTIONS" - echo " Example: CURL_OPTIONS=\"--proxy 192.168.1.1:8080\" ./build-libssl.sh" + cat <= 1.1. The type "archs" matches the key variable +# Significant changes to the build process were introduced with OpenSSL 1.1.1. As a result, this script was updated +# to include two separate build loops for versions < 1.1 and versions >= 1.1. The type "archs" matches the key variable # used to determine for which platforms to build for the 1.0 branch. Since 1.1, all platforms are defined in a separate/ # custom configuration file as build targets. Therefore the key variable and type are called targets for 1.1 (and later). @@ -331,7 +400,7 @@ if [[ "${VERSION}" =~ ^(0\.9|1\.0) ]]; then # Set default for ARCHS if not specified if [ ! -n "${ARCHS}" ]; then - ARCHS="${DEFAULTARCHS}" + ARCHS="${ARCHS_DEFAULT}" fi # OpenSSL branches >= 1.1 @@ -340,7 +409,7 @@ else # Set default for TARGETS if not specified if [ ! -n "${TARGETS}" ]; then - TARGETS="${DEFAULTTARGETS}" + TARGETS="${TRGTS_DEFAULT}" fi # Add no-deprecated config option (if not overwritten) @@ -353,6 +422,9 @@ fi if [ ! -n "${MACOS_SDKVERSION}" ]; then MACOS_SDKVERSION=$(xcrun -sdk macosx --show-sdk-version) fi +if [ ! -n "${CATALYST_SDKVERSION}" ]; then + CATALYST_SDKVERSION=$(xcrun -sdk macosx --show-sdk-version) +fi if [ ! -n "${IOS_SDKVERSION}" ]; then IOS_SDKVERSION=$(xcrun -sdk iphoneos --show-sdk-version) fi @@ -369,17 +441,19 @@ if [ "${PARALLEL}" != "false" ]; then BUILD_THREADS=$(sysctl hw.ncpu | awk '{print $2}') fi -# Determine script directory -SCRIPTDIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) - # Write files relative to current location and validate directory -CURRENTPATH=$(pwd) +CURRENTPATH=${BUILD_DIR:-$(pwd)} case "${CURRENTPATH}" in *\ * ) echo "Your path contains whitespaces, which is not supported by 'make install'." exit 1 ;; esac +if [[ ! -d ${CURRENTPATH} ]]; then + echo "The root build directory must already exist." + exit 1 +fi + cd "${CURRENTPATH}" # Validate Xcode Developer path @@ -410,6 +484,7 @@ else echo " Targets: ${TARGETS}" fi echo " macOS SDK: ${MACOS_SDKVERSION}" +echo " macOS SDK (Catalyst): ${CATALYST_SDKVERSION}" echo " iOS SDK: ${IOS_SDKVERSION}" echo " tvOS SDK: ${TVOS_SDKVERSION}" echo " watchOS SDK: ${WATCHOS_SDKVERSION}" @@ -426,7 +501,7 @@ echo # Download OpenSSL when not present OPENSSL_ARCHIVE_BASE_NAME="openssl-${VERSION}" OPENSSL_ARCHIVE_FILE_NAME="${OPENSSL_ARCHIVE_BASE_NAME}.tar.gz" -if [ ! -e ${OPENSSL_ARCHIVE_FILE_NAME} ]; then +if [ ! -e "${CURRENTPATH}/${OPENSSL_ARCHIVE_FILE_NAME}" ]; then echo "Downloading ${OPENSSL_ARCHIVE_FILE_NAME}..." OPENSSL_ARCHIVE_URL="https://www.openssl.org/source/${OPENSSL_ARCHIVE_FILE_NAME}" @@ -451,13 +526,13 @@ if [ ! -e ${OPENSSL_ARCHIVE_FILE_NAME} ]; then # Archive was found, so proceed with download. # -O Use server-specified filename for download - curl ${CURL_OPTIONS} -O "${OPENSSL_ARCHIVE_URL}" + (cd ${CURRENTPATH} && curl ${CURL_OPTIONS} -O "${OPENSSL_ARCHIVE_URL}") else echo "Using ${OPENSSL_ARCHIVE_FILE_NAME}" fi -# Set reference to custom configuration (OpenSSL 1.1.0) +# Set reference to custom configuration (OpenSSL 1.1.1) # See: https://github.com/openssl/openssl/commit/afce395cba521e395e6eecdaf9589105f61e4411 export OPENSSL_LOCAL_CONFIG_DIR="${SCRIPTDIR}/config" @@ -485,12 +560,15 @@ fi mkdir -p "${CURRENTPATH}/bin" mkdir -p "${CURRENTPATH}/lib" mkdir -p "${CURRENTPATH}/src" +mkdir -p "${CURRENTPATH}/include" # Init vars for library references INCLUDE_DIR="" OPENSSLCONF_ALL=() LIBSSL_MACOS=() LIBCRYPTO_MACOS=() +LIBSSL_CATALYST=() +LIBCRYPTO_CATALYST=() LIBSSL_IOS=() LIBCRYPTO_IOS=() LIBSSL_TVOS=() @@ -512,6 +590,13 @@ if [ ${#LIBSSL_MACOS[@]} -gt 0 ]; then lipo -create ${LIBCRYPTO_MACOS[@]} -output "${CURRENTPATH}/lib/libcrypto-MacOSX.a" fi +#Build catalyst library if selected for build +if [ ${#LIBSSL_CATALYST[@]} -gt 0 ]; then + echo "Build library for catalyst..." + lipo -create ${LIBSSL_CATALYST[@]} -output "${CURRENTPATH}/lib/libssl-Catalyst.a" + lipo -create ${LIBCRYPTO_CATALYST[@]} -output "${CURRENTPATH}/lib/libcrypto-Catalyst.a" +fi + # Build iOS library if selected for build if [ ${#LIBSSL_IOS[@]} -gt 0 ]; then echo "Build library for iOS..." @@ -543,7 +628,7 @@ if [ ${#OPENSSLCONF_ALL[@]} -gt 1 ]; then # Prepare intermediate header file # This overwrites opensslconf.h that was copied from $INCLUDE_DIR OPENSSLCONF_INTERMEDIATE="${CURRENTPATH}/include/openssl/opensslconf.h" - cp "${CURRENTPATH}/include/opensslconf-template.h" "${OPENSSLCONF_INTERMEDIATE}" + cp "${SCRIPTDIR}/include/opensslconf-template.h" "${OPENSSLCONF_INTERMEDIATE}" # Loop all header files LOOPCOUNT=0 @@ -590,6 +675,8 @@ if [ ${#OPENSSLCONF_ALL[@]} -gt 1 ]; then *_watchos_i386.h) DEFINE_CONDITION="TARGET_OS_SIMULATOR && TARGET_CPU_X86 || TARGET_OS_EMBEDDED" ;; + *_catalyst_x86_64.h) + DEFINE_CONDITION="(TARGET_OS_MACCATALYST || (TARGET_OS_IOS && TARGET_OS_SIMULATOR)) && TARGET_CPU_X86_64" ;; *) # Don't run into unexpected cases by setting the default condition to false DEFINE_CONDITION="0" diff --git a/config/20-all-platforms.conf b/config/20-all-platforms.conf index c888c19f..b18434a0 100755 --- a/config/20-all-platforms.conf +++ b/config/20-all-platforms.conf @@ -1,5 +1,7 @@ ## -*- mode: perl; -*- +my %targets = (); + %targets = ( ## Base settings for cross-compile # Based on 10-main.conf: iphoneos-cross @@ -119,7 +121,7 @@ # Based on 10-main.conf: ios64-cross "tvos64-cross-arm64" => { inherit_from => [ "darwin-common", "tvos-cross-base", asm("aarch64_asm") ], - cflags => add("-arch arm64"), + cflags => add("-arch arm64 -fembed-bitcode"), bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", perlasm_scheme => "ios64", sys_id => "tvOS", @@ -136,4 +138,21 @@ inherit_from => [ "darwin-i386-cc", "macos-base" ], sys_id => "macOS", }, + + ## Catalyst + # Based on + "mac-catalyst-base" => { + inherit_from => [ "all-base" ], + template => 1, +# cflags => add(sub { defined($ENV{'CATALYST_MIN_SDK_VERSION'}) ? '-mmacosx-version-min=$(CATALYST_MIN_SDK_VERSION)' : '-mmacosx-version-min=10.15'; }), + }, + + ## Catalyst (armv7s) + # Based on 10-main.conf: ios-cross + "mac-catalyst-x86_64" => { + inherit_from => [ "darwin64-x86_64-cc", "mac-catalyst-base" ], + cflags => add("-target x86_64-apple-ios13.0-macabi"), + sys_id => "MacOSX", + }, + ); diff --git a/create-openssl-framework.sh b/create-openssl-framework.sh index 8506d10d..8be12fe1 100755 --- a/create-openssl-framework.sh +++ b/create-openssl-framework.sh @@ -1,28 +1,52 @@ #!/bin/bash set -euo pipefail +set -x +# Determine script directory +SCRIPTDIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) -if [ $# == 0 ]; then - echo "Usage: `basename $0` static|dynamic" - exit 1 -fi -if [ ! -d lib ]; then - echo "Please run build-libssl.sh first!" - exit 1 -fi +# System types we support. Note the matching directories in assets, and that these are +# used as prefixes for many operations of this script. +ALL_SYSTEMS=("iPhone" "AppleTV" "MacOSX" "Watch" "Catalyst") + + +# Minimum SDK versions to build for +source "${SCRIPTDIR}/scripts/min-sdk-versions.sh" -FWTYPE=$1 -FWNAME=openssl -FWROOT=frameworks -if [ -d $FWROOT ]; then - echo "Removing previous $FWNAME.framework copies" - rm -rf $FWROOT -fi -ALL_SYSTEMS=("iPhone" "AppleTV" "MacOSX" "WatchOS") +# +# Output help information. +# +echo_help() +{ + cat <