Skip to content

Commit ea0ebb6

Browse files
progsungshyu-dev
andauthored
feature: add libjpeg-turbo and enable JPEG codec in libtiff/GDAL (#57)
* feature: add libjpeg-turbo and enable JPEG codec in libtiff/GDAL Build libjpeg-turbo 3.1.4.1 statically with emscripten as the @cpp.js/package-jpegturbo (and -wasm) workspace package, then wire it into libtiff via -Djpeg=ON + JPEG_INCLUDE_DIR / JPEG_LIBRARY, and into GDAL via -DGDAL_USE_JPEG=ON + JPEG_INCLUDE_DIR / JPEG_LIBRARY_RELEASE. This lets libtiff's JPEG codec resolve at runtime, so GeoTIFFs with Compression=JPEG decode correctly instead of failing with "Cannot open TIFF file due to missing codec JPEG". Verification: libtiff.a contains tif_jpeg.c.o, tif_jpeg_12.c.o, and tif_ojpeg.c.o (JPEG codec compiled in). GDAL wasm builds successfully with the JPEG driver active. Changes (19 files, +275/-6): - New packages under cppjs-packages/cppjs-package-jpegturbo/ (version 2.0.0-beta.12, nativeVersion 3.1.4.1): * meta sub-package: package.json, cppjs.config.js, README.md, CHANGELOG.md, LICENSE, .npmignore * -wasm sub-package: package.json, cppjs.config.js, cppjs.build.js - root package.json: include @cpp.js/package-jpegturbo in scripts.build:packages before tiff (preserves dependency order). - cppjs-package-tiff-wasm: * cppjs.build.js: add -Djpeg=ON, JPEG_INCLUDE_DIR, JPEG_LIBRARY * cppjs.config.js: add jpegturboWasm to dependencies * package.json: add @cpp.js/package-jpegturbo-wasm workspace dep - cppjs-package-geotiff-wasm: * cppjs.build.js: minor adjustment for jpeg path forwarding * cppjs.config.js: add jpegturboWasm to dependencies (libgeotiff itself does not call libjpeg, but configure's link test against libtiff requires the jpeg path on wasm) * package.json: add @cpp.js/package-jpegturbo-wasm workspace dep - cppjs-package-gdal-wasm: * cppjs.build.js: add -DGDAL_USE_JPEG=ON, JPEG_INCLUDE_DIR, JPEG_LIBRARY_RELEASE * cppjs.config.js: add jpegturboWasm to dependencies * package.json: add @cpp.js/package-jpegturbo-wasm workspace dep libjpeg-turbo cmake flags: -DENABLE_SHARED=OFF -DENABLE_STATIC=ON -DWITH_TURBOJPEG=OFF WITH_TURBOJPEG=OFF: GDAL only uses the standard libjpeg API, so the TurboJPEG wrapper (libturbojpeg.a) would be dead code in the final wasm — skipping it saves build time and intermediate output size. WITH_SIMD is left at cmake default. libjpeg-turbo's cmake auto-disables SIMD on wasm32 since no hand-written backend exists for that target. If upstream adds a wasm32 SIMD backend later, this build will pick it up automatically. * Update pnpm-lock.yaml with jpegturbo-related packages --------- Co-authored-by: shyu_yoga <shyu@ictway.co.kr>
1 parent 6fc0292 commit ea0ebb6

20 files changed

Lines changed: 300 additions & 6 deletions

File tree

cppjs-packages/cppjs-package-gdal/cppjs-package-gdal-wasm/cppjs.build.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export default {
5151
`-DSQLite3_INCLUDE_DIR=${depPaths.sqlite3.header}`, `-DSQLite3_LIBRARY=${depPaths.sqlite3.lib}`,
5252
`-DPROJ_INCLUDE_DIR=${depPaths.proj.header}`, `-DPROJ_LIBRARY_RELEASE=${depPaths.proj.lib}`,
5353
`-DTIFF_INCLUDE_DIR=${depPaths.tiff.header}`, `-DTIFF_LIBRARY_RELEASE=${depPaths.tiff.lib}`,
54+
'-DGDAL_USE_JPEG=ON', `-DJPEG_INCLUDE_DIR=${depPaths.jpeg.header}`, `-DJPEG_LIBRARY_RELEASE=${depPaths.jpeg.lib}`,
5455
`-DGEOTIFF_INCLUDE_DIR=${depPaths.geotiff.header}`, `-DGEOTIFF_LIBRARY_RELEASE=${depPaths.geotiff.lib}`,
5556
`-DZLIB_INCLUDE_DIR=${depPaths.z.header}`, `-DZLIB_LIBRARY_RELEASE=${depPaths.z.lib}`,
5657
`-DSPATIALITE_INCLUDE_DIR=${depPaths.spatialite.header}`, `-DSPATIALITE_LIBRARY=${depPaths.spatialite.lib}`,

cppjs-packages/cppjs-package-gdal/cppjs-package-gdal-wasm/cppjs.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import expatWasm from '@cpp.js/package-expat-wasm/cppjs.config.js';
22
import geosWasm from '@cpp.js/package-geos-wasm/cppjs.config.js';
33
import geotiffWasm from '@cpp.js/package-geotiff-wasm/cppjs.config.js';
44
import iconvWasm from '@cpp.js/package-iconv-wasm/cppjs.config.js';
5+
import jpegturboWasm from '@cpp.js/package-jpegturbo-wasm/cppjs.config.js';
56
import projWasm from '@cpp.js/package-proj-wasm/cppjs.config.js';
67
import spatialiteWasm from '@cpp.js/package-spatialite-wasm/cppjs.config.js';
78
import sqlite3Wasm from '@cpp.js/package-sqlite3-wasm/cppjs.config.js';
@@ -15,6 +16,7 @@ export default {
1516
geosWasm,
1617
geotiffWasm,
1718
iconvWasm,
19+
jpegturboWasm,
1820
projWasm,
1921
spatialiteWasm,
2022
sqlite3Wasm,

cppjs-packages/cppjs-package-gdal/cppjs-package-gdal-wasm/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"@cpp.js/package-geos-wasm": "workspace:^",
2525
"@cpp.js/package-geotiff-wasm": "workspace:^",
2626
"@cpp.js/package-iconv-wasm": "workspace:^",
27+
"@cpp.js/package-jpegturbo-wasm": "workspace:^",
2728
"@cpp.js/package-proj-wasm": "workspace:^",
2829
"@cpp.js/package-spatialite-wasm": "workspace:^",
2930
"@cpp.js/package-sqlite3-wasm": "workspace:^",

cppjs-packages/cppjs-package-geotiff/cppjs-package-geotiff-wasm/cppjs.build.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const platformBuild = {
33
};
44

55
const platformExtraLibs = {
6-
'wasm': ['-lsqlite3'],
6+
'wasm': ['-lsqlite3', '-ljpeg'],
77
};
88

99
export default {

cppjs-packages/cppjs-package-geotiff/cppjs-package-geotiff-wasm/cppjs.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import projWasm from '@cpp.js/package-proj-wasm/cppjs.config.js';
22
import tiffWasm from '@cpp.js/package-tiff-wasm/cppjs.config.js';
33
import zlibWasm from '@cpp.js/package-zlib-wasm/cppjs.config.js';
4+
import jpegturboWasm from '@cpp.js/package-jpegturbo-wasm/cppjs.config.js';
45

56
export default {
67
dependencies: [
78
projWasm,
89
tiffWasm,
910
zlibWasm,
11+
jpegturboWasm,
1012
],
1113
general: {
1214
name: 'geotiff'

cppjs-packages/cppjs-package-geotiff/cppjs-package-geotiff-wasm/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
"dependencies": {
2323
"@cpp.js/package-proj-wasm": "workspace:^",
2424
"@cpp.js/package-tiff-wasm": "workspace:^",
25-
"@cpp.js/package-zlib-wasm": "workspace:^"
25+
"@cpp.js/package-zlib-wasm": "workspace:^",
26+
"@cpp.js/package-jpegturbo-wasm": "workspace:^"
2627
},
2728
"devDependencies": {
2829
"cpp.js": "workspace:^"
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export default {
2+
getURL: (version) => `https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/${version}/libjpeg-turbo-${version}.tar.gz`,
3+
buildType: 'cmake',
4+
getBuildParams: () => [
5+
'-DENABLE_SHARED=OFF',
6+
'-DENABLE_STATIC=ON',
7+
'-DWITH_TURBOJPEG=OFF', // GDAL uses standard libjpeg API only; skip libturbojpeg.a (unused) to save build output.
8+
],
9+
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
export default {
2+
dependencies:[
3+
],
4+
general: {
5+
name: 'jpeg',
6+
},
7+
export: {
8+
type: 'cmake',
9+
libName: [
10+
'jpeg'
11+
],
12+
},
13+
paths: {
14+
config: import.meta.url,
15+
base: '../..',
16+
output: 'dist'
17+
}
18+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"name": "@cpp.js/package-jpegturbo-wasm",
3+
"version": "2.0.0-beta.12",
4+
"nativeVersion": "3.1.4.1",
5+
"description": "This package provides a libjpegturbo library compiled with Cpp.js, enabling seamless usage of JPEG functionalities in JavaScript, WebAssembly and React Native projects.",
6+
"homepage": "https://github.com/bugra9/cpp.js/tree/main/cppjs-packages/cppjs-package-jpegturbo#readme",
7+
"repository": "https://github.com/bugra9/cpp.js.git",
8+
"type": "module",
9+
"license": "(IJG AND BSD-3-Clause AND Zlib)",
10+
"keywords": [
11+
"jpegturbo",
12+
"libjpeg-turbo",
13+
"cpp.js-package",
14+
"webassembly",
15+
"react-native"
16+
],
17+
"private": true,
18+
19+
"scripts": {
20+
"build": "cppjs build -p wasm",
21+
"clear": "rm -rf .cppjs dist",
22+
"prepublishOnly": "cppjs build -p wasm"
23+
},
24+
"dependencies": {
25+
},
26+
"devDependencies": {
27+
"cpp.js": "workspace:^"
28+
}
29+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
*.tgz
2+
.cppjs
3+
*.dylib
4+
dist/prebuilt/Android-arm64-v8a/lib/*.a
5+
dist/prebuilt/Android-x86_64/lib/*.a
6+
dist/prebuilt/**/bin

0 commit comments

Comments
 (0)