Skip to content

Commit 39bcfcd

Browse files
committed
Added Podspec
Added README
1 parent 5e5a09c commit 39bcfcd

File tree

4 files changed

+165
-37
lines changed

4 files changed

+165
-37
lines changed

Package.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,12 @@ let package = Package(
104104
publicHeadersPath: "libjxl/lib/include",
105105
cSettings: [.headerSearchPath("generate"),
106106
.headerSearchPath("libjxl"),
107-
.headerSearchPath("libjxl/third_party/highway"),
108107
.define("CMS_NO_REGISTER_KEYWORD")]
109108
),
110109
.target(
111110
name: "brotli",
112111
path: "libjxl/third_party/brotli/c",
113-
exclude: ["fuzz"],
112+
exclude: ["fuzz", "tools"],
114113
publicHeadersPath: "include"
115114
),
116115
.target(
@@ -122,7 +121,7 @@ let package = Package(
122121
"hwy/nanobenchmark_test.cc",
123122
"hwy/targets_test.cc",
124123
"hwy/base_test.cc"],
125-
cSettings: [.headerSearchPath(".")]
124+
publicHeadersPath: "."
126125
),
127126
.target(
128127
name: "lcms",

README.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# libjxl + Xcode
2+
3+
A wrapper for [libjxl](https://github.com/libjxl/libjxl) + Xcode project.
4+
This enables Carthage support
5+
This also contains the Swift Package Manager support
6+
7+
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/SDWebImage/libjxl-Xcode)
8+
[![SwiftPM compatible](https://img.shields.io/badge/SwiftPM-compatible-brightgreen.svg)](https://swift.org/package-manager/)
9+
10+
## Requirements
11+
12+
+ iOS 9+
13+
+ macOS 10.11+
14+
+ tvOS 9.0+
15+
+ watchOS 2.0+
16+
+ visionOS 1.0+
17+
18+
## Installation
19+
20+
#### CocoaPods
21+
22+
libjxl is available through [CocoaPods](http://cocoapods.org). To install it, simply add the following line to your Podfile:
23+
24+
```ruby
25+
pod 'libjxl'
26+
```
27+
28+
### Carthage
29+
30+
libjxl is (via this repo) available through [Carthage](https://github.com/Carthage/Carthage).
31+
32+
```
33+
github "SDWebImage/libjxl-Xcode"
34+
```
35+
36+
### SwiftPM
37+
38+
Libjxl is available through [Swift Package Manager](https://img.shields.io/badge/SwiftPM-compatible-brightgreen.svg).
39+
40+
```swift
41+
let package = Package(
42+
dependencies: [
43+
.package(url: "https://github.com/SDWebImage/libjxl-Xcode", from: "0.10.0")
44+
],
45+
// ...
46+
)
47+
```
48+
49+
## Usage
50+
51+
Use libjxl as you would normally, this is just a repo that adds an Xcode proj.
52+
53+
For Swift Package Manager user, it's recommended to use the modular import instead of C headers.
54+
55+
+ Objective-C
56+
57+
```objective-c
58+
@import libjxl;
59+
// or if you don't use module
60+
#import <jxl/decode.h>
61+
#import <jxl/encode.h>
62+
```
63+
64+
+ Swift
65+
66+
```swift
67+
import libjxl
68+
```
69+
70+
## License
71+
72+
libjxl is available under the BSD 3-Clause license. See [the LICENSE file](https://github.com/libjxl/libjxl/blob/main/LICENSE) for more info.
73+
74+

libjxl.podspec

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#
2+
# Be sure to run `pod lib lint TestLibrary.podspec' to ensure this is a
3+
# valid spec before submitting.
4+
#
5+
# Any lines starting with a # are optional, but their use is encouraged
6+
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
7+
#
8+
9+
Pod::Spec.new do |s|
10+
s.name = 'libjxl'
11+
s.version = '0.10.0'
12+
s.summary = 'JPEG XL image format reference implementation'
13+
14+
# This description is used to generate tags and improve search results.
15+
# * Think: What does it do? Why did you write it? What is the focus?
16+
# * Try to keep it short, snappy and to the point.
17+
# * Write the description between the DESC delimiters below.
18+
# * Finally, don't worry about the indent, CocoaPods strips it!
19+
20+
s.description = <<-DESC
21+
JPEG XL image format reference implementation
22+
DESC
23+
24+
s.homepage = 'https://jpeg.org/jpegxl/'
25+
s.license = { :type => 'BSD 3-Clause' }
26+
s.author = 'Google Inc.', 'Cloudinary Ltd.'
27+
s.source = { :git => 'https://github.com/SDWebImage/libjxl-Xcode.git', :tag => s.version.to_s, :submodules => true }
28+
29+
s.ios.deployment_target = '9.0'
30+
s.osx.deployment_target = '10.11'
31+
s.tvos.deployment_target = '9.0'
32+
s.watchos.deployment_target = '2.0'
33+
s.visionos.deployment_target = '1.0'
34+
35+
s.subspec 'brotli' do |ss|
36+
ss.source_files = 'libjxl/third_party/brotli/c/**/*.{c,cc}'
37+
ss.exclude_files = 'libjxl/third_party/brotli/c/fuzz', 'libjxl/third_party/brotli/c/tools'
38+
ss.pod_target_xcconfig = {
39+
'HEADER_SEARCH_PATHS' => '${PODS_ROOT}/libjxl/libjxl/third_party/brotli/c/include ${PODS_ROOT}/libjxl/libjxl/third_party/brotli/c'
40+
}
41+
end
42+
43+
s.subspec 'lcms' do |ss|
44+
ss.source_files = 'libjxl/third_party/lcms/src/**/*.{c,cc}'
45+
ss.pod_target_xcconfig = {
46+
'HEADER_SEARCH_PATHS' => '${PODS_ROOT}/libjxl/libjxl/third_party/lcms/include ${PODS_ROOT}/libjxl/libjxl/third_party/lcms/src'
47+
}
48+
end
49+
50+
s.subspec 'hwy' do |ss|
51+
ss.source_files = 'libjxl/third_party/highway/hwy/**/*.{c,cc}'
52+
ss.exclude_files = 'libjxl/third_party/highway/hwy/tests', 'libjxl/third_party/highway/hwy/examples', 'libjxl/third_party/highway/hwy/contrib', 'libjxl/third_party/highway/hwy/*_test.{c,cc}'
53+
ss.pod_target_xcconfig = {
54+
'HEADER_SEARCH_PATHS' => '${PODS_ROOT}/libjxl/libjxl/third_party/highway'
55+
}
56+
end
57+
58+
s.subspec 'jxl' do |ss|
59+
ss.dependency 'libjxl/brotli'
60+
ss.dependency 'libjxl/lcms'
61+
ss.dependency 'libjxl/hwy'
62+
ss.source_files = 'libjxl/lib/jxl/**/*.{c,cc}', 'generate/**/*.{c,cc}', 'libjxl/lib/include/**/*.h'
63+
ss.exclude_files = [
64+
'libjxl/lib/jxl/**/*_test.{c,cc}', # gtest
65+
'libjxl/lib/jxl/dec_transforms_testonly.{c,cc}', # test
66+
'libjxl/lib/jxl/test_utils.{c,cc}', # test
67+
'libjxl/lib/jxl/**/*_gbench.{c,cc}' # gbench
68+
]
69+
ss.header_mappings_dir = 'libjxl/lib/include'
70+
ss.public_header_files = 'libjxl/lib/include/**/*.h'
71+
ss.compiler_flags = '-DCMS_NO_REGISTER_KEYWORD', '-fnew-alignment=8', '-fno-cxx-exceptions', '-fno-slp-vectorize', '-fno-vectorize'
72+
ss.pod_target_xcconfig = {
73+
'HEADER_SEARCH_PATHS' => '${PODS_ROOT}/libjxl/libjxl/lib/include ${PODS_ROOT}/libjxl/generate ${PODS_ROOT}/libjxl/libjxl'
74+
}
75+
end
76+
77+
# Copy generate headers into include folder
78+
s.prepare_command = <<-CMD
79+
cp -R './generate/jxl' './libjxl/lib/include/'
80+
CMD
81+
82+
s.default_subspecs = 'jxl'
83+
s.libraries = 'c++'
84+
s.preserve_paths = 'libjxl', 'generate'
85+
end

libjxl.xcodeproj/project.pbxproj

Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,6 @@
373373
323E4E272B88A39D001C4C15 /* jxl_cms_export.h in Headers */ = {isa = PBXBuildFile; fileRef = 323E4E232B88A39D001C4C15 /* jxl_cms_export.h */; };
374374
323E4E282B88A39D001C4C15 /* jxl_threads_export.h in Headers */ = {isa = PBXBuildFile; fileRef = 323E4E242B88A39D001C4C15 /* jxl_threads_export.h */; };
375375
323E4E292B88A39D001C4C15 /* jxl_export.h in Headers */ = {isa = PBXBuildFile; fileRef = 323E4E252B88A39D001C4C15 /* jxl_export.h */; };
376-
32CE8CFF2B8C692500B4E1F4 /* brotli.c in Sources */ = {isa = PBXBuildFile; fileRef = 32CE8C532B8C692500B4E1F4 /* brotli.c */; };
377376
32CE8D002B8C692500B4E1F4 /* dictionary_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 32CE8C622B8C692500B4E1F4 /* dictionary_hash.c */; };
378377
32CE8D012B8C692500B4E1F4 /* backward_references_hq.c in Sources */ = {isa = PBXBuildFile; fileRef = 32CE8C632B8C692500B4E1F4 /* backward_references_hq.c */; };
379378
32CE8D022B8C692500B4E1F4 /* histogram.c in Sources */ = {isa = PBXBuildFile; fileRef = 32CE8C662B8C692500B4E1F4 /* histogram.c */; };
@@ -865,8 +864,6 @@
865864
323E4E252B88A39D001C4C15 /* jxl_export.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jxl_export.h; sourceTree = "<group>"; };
866865
32C268362B88987300CA29AE /* libjxl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = libjxl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
867866
32CE8B242B8C691700B4E1F4 /* libbrotli.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libbrotli.a; sourceTree = BUILT_PRODUCTS_DIR; };
868-
32CE8C522B8C692500B4E1F4 /* brotli.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = brotli.md; sourceTree = "<group>"; };
869-
32CE8C532B8C692500B4E1F4 /* brotli.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = brotli.c; sourceTree = "<group>"; };
870867
32CE8C562B8C692500B4E1F4 /* shared_dictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = shared_dictionary.h; sourceTree = "<group>"; };
871868
32CE8C572B8C692500B4E1F4 /* port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = port.h; sourceTree = "<group>"; };
872869
32CE8C582B8C692500B4E1F4 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
@@ -1609,7 +1606,6 @@
16091606
32CE8C502B8C692500B4E1F4 /* c */ = {
16101607
isa = PBXGroup;
16111608
children = (
1612-
32CE8C512B8C692500B4E1F4 /* tools */,
16131609
32CE8C542B8C692500B4E1F4 /* include */,
16141610
32CE8C5B2B8C692500B4E1F4 /* enc */,
16151611
32CE8C9D2B8C692500B4E1F4 /* common */,
@@ -1618,15 +1614,6 @@
16181614
path = c;
16191615
sourceTree = "<group>";
16201616
};
1621-
32CE8C512B8C692500B4E1F4 /* tools */ = {
1622-
isa = PBXGroup;
1623-
children = (
1624-
32CE8C522B8C692500B4E1F4 /* brotli.md */,
1625-
32CE8C532B8C692500B4E1F4 /* brotli.c */,
1626-
);
1627-
path = tools;
1628-
sourceTree = "<group>";
1629-
};
16301617
32CE8C542B8C692500B4E1F4 /* include */ = {
16311618
isa = PBXGroup;
16321619
children = (
@@ -2404,7 +2391,6 @@
24042391
32CE8D0D2B8C692500B4E1F4 /* utf8_util.c in Sources */,
24052392
32CE8D192B8C692500B4E1F4 /* shared_dictionary.c in Sources */,
24062393
32CE8D022B8C692500B4E1F4 /* histogram.c in Sources */,
2407-
32CE8CFF2B8C692500B4E1F4 /* brotli.c in Sources */,
24082394
32CE8D002B8C692500B4E1F4 /* dictionary_hash.c in Sources */,
24092395
32CE8D102B8C692500B4E1F4 /* brotli_bit_stream.c in Sources */,
24102396
32CE8D0F2B8C692500B4E1F4 /* fast_log.c in Sources */,
@@ -2500,7 +2486,7 @@
25002486
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
25012487
CLANG_ANALYZER_NONNULL = YES;
25022488
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
2503-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
2489+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
25042490
CLANG_ENABLE_MODULES = YES;
25052491
CLANG_ENABLE_OBJC_ARC = YES;
25062492
CLANG_ENABLE_OBJC_WEAK = YES;
@@ -2532,7 +2518,7 @@
25322518
ENABLE_STRICT_OBJC_MSGSEND = YES;
25332519
ENABLE_TESTABILITY = YES;
25342520
ENABLE_USER_SCRIPT_SANDBOXING = YES;
2535-
GCC_C_LANGUAGE_STANDARD = gnu17;
2521+
GCC_C_LANGUAGE_STANDARD = gnu11;
25362522
GCC_DYNAMIC_NO_PIC = NO;
25372523
GCC_NO_COMMON_BLOCKS = YES;
25382524
GCC_OPTIMIZATION_LEVEL = 0;
@@ -2564,7 +2550,7 @@
25642550
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
25652551
CLANG_ANALYZER_NONNULL = YES;
25662552
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
2567-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
2553+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
25682554
CLANG_ENABLE_MODULES = YES;
25692555
CLANG_ENABLE_OBJC_ARC = YES;
25702556
CLANG_ENABLE_OBJC_WEAK = YES;
@@ -2596,7 +2582,7 @@
25962582
ENABLE_NS_ASSERTIONS = NO;
25972583
ENABLE_STRICT_OBJC_MSGSEND = YES;
25982584
ENABLE_USER_SCRIPT_SANDBOXING = YES;
2599-
GCC_C_LANGUAGE_STANDARD = gnu17;
2585+
GCC_C_LANGUAGE_STANDARD = gnu11;
26002586
GCC_NO_COMMON_BLOCKS = YES;
26012587
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
26022588
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
@@ -2616,15 +2602,13 @@
26162602
32C2683E2B88987300CA29AE /* Debug */ = {
26172603
isa = XCBuildConfiguration;
26182604
buildSettings = {
2619-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
26202605
CODE_SIGN_STYLE = Automatic;
26212606
CURRENT_PROJECT_VERSION = 1;
26222607
DEFINES_MODULE = YES;
26232608
DYLIB_COMPATIBILITY_VERSION = 1;
26242609
DYLIB_CURRENT_VERSION = 1;
26252610
DYLIB_INSTALL_NAME_BASE = "@rpath";
26262611
ENABLE_MODULE_VERIFIER = YES;
2627-
GCC_C_LANGUAGE_STANDARD = gnu11;
26282612
GCC_PREPROCESSOR_DEFINITIONS = (
26292613
"DEBUG=1",
26302614
"$(inherited)",
@@ -2680,15 +2664,13 @@
26802664
32C2683F2B88987300CA29AE /* Release */ = {
26812665
isa = XCBuildConfiguration;
26822666
buildSettings = {
2683-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
26842667
CODE_SIGN_STYLE = Automatic;
26852668
CURRENT_PROJECT_VERSION = 1;
26862669
DEFINES_MODULE = YES;
26872670
DYLIB_COMPATIBILITY_VERSION = 1;
26882671
DYLIB_CURRENT_VERSION = 1;
26892672
DYLIB_INSTALL_NAME_BASE = "@rpath";
26902673
ENABLE_MODULE_VERIFIER = YES;
2691-
GCC_C_LANGUAGE_STANDARD = gnu11;
26922674
GCC_PREPROCESSOR_DEFINITIONS = "CMS_NO_REGISTER_KEYWORD=1";
26932675
GENERATE_INFOPLIST_FILE = YES;
26942676
HEADER_SEARCH_PATHS = (
@@ -2740,9 +2722,7 @@
27402722
32CE8B2B2B8C691700B4E1F4 /* Debug */ = {
27412723
isa = XCBuildConfiguration;
27422724
buildSettings = {
2743-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
27442725
CODE_SIGN_STYLE = Automatic;
2745-
GCC_C_LANGUAGE_STANDARD = gnu11;
27462726
HEADER_SEARCH_PATHS = "$(SRCROOT)/libjxl/third_party/brotli/c/include";
27472727
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
27482728
MACOSX_DEPLOYMENT_TARGET = 10.11;
@@ -2760,9 +2740,7 @@
27602740
32CE8B2C2B8C691700B4E1F4 /* Release */ = {
27612741
isa = XCBuildConfiguration;
27622742
buildSettings = {
2763-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
27642743
CODE_SIGN_STYLE = Automatic;
2765-
GCC_C_LANGUAGE_STANDARD = gnu11;
27662744
HEADER_SEARCH_PATHS = "$(SRCROOT)/libjxl/third_party/brotli/c/include";
27672745
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
27682746
MACOSX_DEPLOYMENT_TARGET = 10.11;
@@ -2781,9 +2759,7 @@
27812759
32CE8D2E2B8C6A0C00B4E1F4 /* Debug */ = {
27822760
isa = XCBuildConfiguration;
27832761
buildSettings = {
2784-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
27852762
CODE_SIGN_STYLE = Automatic;
2786-
GCC_C_LANGUAGE_STANDARD = gnu11;
27872763
HEADER_SEARCH_PATHS = "$(SRCROOT)/libjxl/third_party/highway/";
27882764
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
27892765
MACOSX_DEPLOYMENT_TARGET = 10.11;
@@ -2801,9 +2777,7 @@
28012777
32CE8D2F2B8C6A0C00B4E1F4 /* Release */ = {
28022778
isa = XCBuildConfiguration;
28032779
buildSettings = {
2804-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
28052780
CODE_SIGN_STYLE = Automatic;
2806-
GCC_C_LANGUAGE_STANDARD = gnu11;
28072781
HEADER_SEARCH_PATHS = "$(SRCROOT)/libjxl/third_party/highway/";
28082782
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
28092783
MACOSX_DEPLOYMENT_TARGET = 10.11;
@@ -2822,9 +2796,7 @@
28222796
32CE8E922B8C6B2E00B4E1F4 /* Debug */ = {
28232797
isa = XCBuildConfiguration;
28242798
buildSettings = {
2825-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
28262799
CODE_SIGN_STYLE = Automatic;
2827-
GCC_C_LANGUAGE_STANDARD = gnu11;
28282800
HEADER_SEARCH_PATHS = "$(SRCROOT)/libjxl/third_party/lcms/include";
28292801
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
28302802
MACOSX_DEPLOYMENT_TARGET = 10.11;
@@ -2842,9 +2814,7 @@
28422814
32CE8E932B8C6B2E00B4E1F4 /* Release */ = {
28432815
isa = XCBuildConfiguration;
28442816
buildSettings = {
2845-
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
28462817
CODE_SIGN_STYLE = Automatic;
2847-
GCC_C_LANGUAGE_STANDARD = gnu11;
28482818
HEADER_SEARCH_PATHS = "$(SRCROOT)/libjxl/third_party/lcms/include";
28492819
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
28502820
MACOSX_DEPLOYMENT_TARGET = 10.11;

0 commit comments

Comments
 (0)