tebako 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Brewfile +0 -5
- data/CMakeLists.txt +94 -46
- data/cmake/tebako-libtfs.cmake +456 -0
- data/common.env +1 -1
- data/include/tebako/tpkg.h +575 -0
- data/lib/tebako/cli.rb +91 -0
- data/lib/tebako/cli_helpers.rb +24 -0
- data/lib/tebako/error.rb +10 -0
- data/lib/tebako/launcher_abi.rb +99 -0
- data/lib/tebako/options_manager.rb +71 -0
- data/lib/tebako/packager/patch_libraries.rb +47 -27
- data/lib/tebako/packager.rb +40 -1
- data/lib/tebako/runtime_manager.rb +347 -0
- data/lib/tebako/stitcher.rb +255 -0
- data/lib/tebako/version.rb +1 -1
- data/src/tebako-main.cpp +577 -9
- data/tools/.github/workflows/test.yml +6 -6
- data/tools/cmake-scripts/macos-environment.cmake +11 -2
- metadata +7 -4
- data/tools/ci-scripts/patch-fbthrift.sh +0 -94
- data/tools/ci-scripts/patch-folly.sh +0 -551
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4f1af67f13e230840eb812871c10cfc25332cc2479f70ca3653bb57b395705ff
|
|
4
|
+
data.tar.gz: ae23b253616c15efdbf92fdb539626b1854a31281ad92802aa9484cf50985cc6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d9c722d8e2bf9544337520357fa9a5ec72896ded55f82f9c501e428f2707fae727bf9ffae837ab16e7a7ebe419266f069b74dbf5435ef4135312460a77a9e8b8
|
|
7
|
+
data.tar.gz: 94f7c668de8aaaecd3ec2ac0e80fb98a0fccfa997a8803f4bfbebb15225bb3cf55493590d715e774f0cbb952a06faaf425250d53fc953a50dfe83539c3977397
|
data/Brewfile
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
brew "zlib"
|
|
4
4
|
brew "ncurses"
|
|
5
|
-
brew "libevent"
|
|
6
5
|
brew "libsodium"
|
|
7
6
|
brew "lz4"
|
|
8
7
|
brew "xz"
|
|
@@ -14,10 +13,6 @@ brew "bison"
|
|
|
14
13
|
brew "flex"
|
|
15
14
|
brew "binutils"
|
|
16
15
|
brew "libffi"
|
|
17
|
-
brew "double-conversion"
|
|
18
|
-
brew "boost"
|
|
19
16
|
brew "jemalloc"
|
|
20
|
-
brew "fmt"
|
|
21
|
-
brew "glog"
|
|
22
17
|
brew "gnu-sed"
|
|
23
18
|
brew "bash"
|
data/CMakeLists.txt
CHANGED
|
@@ -91,7 +91,10 @@ set(IS_MSYS OFF)
|
|
|
91
91
|
set(IS_DARWIN OFF)
|
|
92
92
|
set(RB_W32 OFF)
|
|
93
93
|
set(RUBY_WITHOUT_EXT "dbm,win32,win32ole,-test-/*")
|
|
94
|
-
|
|
94
|
+
option(DWARFS_PRELOAD "Deploy the prebuilt libtfs package from the GitHub release (OFF builds libtfs from source with the vcpkg toolchain)" ON)
|
|
95
|
+
if(DEFINED ENV{DWARFS_PRELOAD})
|
|
96
|
+
set(DWARFS_PRELOAD $ENV{DWARFS_PRELOAD} CACHE BOOL "Deploy the prebuilt libtfs package from the GitHub release" FORCE)
|
|
97
|
+
endif()
|
|
95
98
|
set(WITH_PATCHELF OFF)
|
|
96
99
|
|
|
97
100
|
if("${OSTYPE_TXT}" MATCHES "^linux-gnu.*")
|
|
@@ -103,7 +106,6 @@ elseif("${OSTYPE_TXT}" MATCHES "^linux-musl.*")
|
|
|
103
106
|
set(IS_MUSL ON)
|
|
104
107
|
elseif("${OSTYPE_TXT}" MATCHES "^msys*" OR "${OSTYPE_TXT}" MATCHES "^cygwin*")
|
|
105
108
|
set(IS_MSYS ON)
|
|
106
|
-
# set(DWARFS_PRELOAD ON)
|
|
107
109
|
set(RB_W32 ON)
|
|
108
110
|
set(RUBY_WITHOUT_EXT "dbm,syslog,pty,gdbm,readline,-test-/*")
|
|
109
111
|
elseif("${OSTYPE_TXT}" MATCHES "^darwin.*")
|
|
@@ -168,18 +170,49 @@ set(RUBY_STASH_DIR ${DEPS}/stash_${RUBY_VER})
|
|
|
168
170
|
string(SUBSTRING ${RUBY_VER} 0 3 RUBY_VER_BASE)
|
|
169
171
|
string(CONCAT RUBY_API_VER ${RUBY_VER_BASE} ".0")
|
|
170
172
|
|
|
171
|
-
#
|
|
172
|
-
#
|
|
173
|
-
#
|
|
174
|
-
#
|
|
175
|
-
#
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
#
|
|
179
|
-
#
|
|
180
|
-
#
|
|
181
|
-
|
|
182
|
-
|
|
173
|
+
# libtfs (former libdwarfs-wr): DWARFS_WR_TAG selects the libtfs git tag for
|
|
174
|
+
# the source build and the matching GitHub release for the prebuilt package
|
|
175
|
+
# NOTE: the env override in def_ext_prj_g (tebako-tools) is currently broken
|
|
176
|
+
# (`if (DEFINED ENV{${TAG})` is missing a closing brace, so the test never
|
|
177
|
+
# fires); this default is the operative tag selection.
|
|
178
|
+
def_ext_prj_g(DWARFS_WR "v0.12.8")
|
|
179
|
+
|
|
180
|
+
# Provisions libtfs (prebuilt package or vcpkg toolchain for the source
|
|
181
|
+
# build), the prebuilt mkdwarfs, and -- for the prebuilt path -- the
|
|
182
|
+
# transitive static dependencies the libtfs package does not ship.
|
|
183
|
+
# Sets LIBTFS_* variables summarized below.
|
|
184
|
+
include(${CMAKE_SOURCE_DIR}/cmake/tebako-libtfs.cmake)
|
|
185
|
+
|
|
186
|
+
# incbin (graphitemaster/incbin): single-header asset embedding used by
|
|
187
|
+
# include/tebako/tebako-fs.h and the codegen templates. It was deployed into
|
|
188
|
+
# ${DEPS_INCLUDE_DIR} by the libdwarfs-wr package; libtfs does not carry it,
|
|
189
|
+
# so tebako provisions it directly. The pin matches common.env INCBIN_TAG
|
|
190
|
+
# (which reaches this file only when the tebako-tools env override works --
|
|
191
|
+
# see the DWARFS_WR note above).
|
|
192
|
+
def_ext_prj_g(INCBIN "6e576cae5ab5810f25e2631f2e0b80cbe7dc8cbf")
|
|
193
|
+
set(INCBIN_HEADER "${DEPS_INCLUDE_DIR}/incbin/incbin.h")
|
|
194
|
+
set(INCBIN_SHA256 "70995329299ec55d414ad6df6929ddcfe0a43a40102cf6c05ff3c74ddd2765cb")
|
|
195
|
+
set(__INCBIN_DOWNLOAD ON)
|
|
196
|
+
if(EXISTS "${INCBIN_HEADER}")
|
|
197
|
+
file(SHA256 "${INCBIN_HEADER}" __INCBIN_CURRENT)
|
|
198
|
+
if(__INCBIN_CURRENT STREQUAL INCBIN_SHA256)
|
|
199
|
+
set(__INCBIN_DOWNLOAD OFF)
|
|
200
|
+
endif()
|
|
201
|
+
endif()
|
|
202
|
+
if(__INCBIN_DOWNLOAD)
|
|
203
|
+
message(STATUS "incbin: fetching incbin.h @ ${INCBIN_TAG}")
|
|
204
|
+
file(MAKE_DIRECTORY "${DEPS_INCLUDE_DIR}/incbin")
|
|
205
|
+
file(DOWNLOAD "https://raw.githubusercontent.com/graphitemaster/incbin/${INCBIN_TAG}/incbin.h"
|
|
206
|
+
"${INCBIN_HEADER}" EXPECTED_HASH "SHA256=${INCBIN_SHA256}"
|
|
207
|
+
STATUS __INCBIN_STATUS)
|
|
208
|
+
list(GET __INCBIN_STATUS 0 __INCBIN_CODE)
|
|
209
|
+
list(GET __INCBIN_STATUS 1 __INCBIN_MSG)
|
|
210
|
+
if(NOT __INCBIN_CODE EQUAL 0)
|
|
211
|
+
file(REMOVE "${INCBIN_HEADER}")
|
|
212
|
+
message(FATAL_ERROR "incbin: failed to download incbin.h: ${__INCBIN_MSG}")
|
|
213
|
+
endif()
|
|
214
|
+
message(STATUS "incbin: SHA256 verified (${INCBIN_SHA256})")
|
|
215
|
+
endif()
|
|
183
216
|
|
|
184
217
|
def_ext_prj_g(PATCHELF "65e14792061c298f1d2bc44becd48a10cbf0bc81")
|
|
185
218
|
|
|
@@ -192,10 +225,17 @@ message("Configuration summary:")
|
|
|
192
225
|
message(STATUS "ruby: v${RUBY_VER} at ${RUBY_SOURCE_DIR}")
|
|
193
226
|
|
|
194
227
|
if(DWARFS_PRELOAD)
|
|
195
|
-
message(STATUS "
|
|
228
|
+
message(STATUS "libtfs: v${LIBTFS_VERSION} prebuilt package (${LIBTFS_PLATFORM}) at ${LIBTFS_LIB_DIR}")
|
|
196
229
|
else(DWARFS_PRELOAD)
|
|
197
|
-
message(STATUS "
|
|
230
|
+
message(STATUS "libtfs: source build @${DWARFS_WR_TAG} at ${DWARFS_WR_SOURCE_DIR}")
|
|
198
231
|
endif(DWARFS_PRELOAD)
|
|
232
|
+
message(STATUS "libtfs headers: ${LIBTFS_INCLUDE_DIR}")
|
|
233
|
+
message(STATUS "mkdwarfs: ${LIBTFS_MKDWARFS}")
|
|
234
|
+
if(LIBTFS_VCPKG_TRIPLET_DIR)
|
|
235
|
+
message(STATUS "libtfs transitive dependencies (vcpkg): ${LIBTFS_VCPKG_TRIPLET_DIR}")
|
|
236
|
+
else()
|
|
237
|
+
message(STATUS "libtfs transitive dependencies (vcpkg): ${LIBTFS_VCPKG_INSTALLED_DIR}/<triplet> (resolved during the libtfs build)")
|
|
238
|
+
endif()
|
|
199
239
|
|
|
200
240
|
# ...................................................................
|
|
201
241
|
# Filesystem locations
|
|
@@ -241,43 +281,30 @@ message(STATUS "Removing GLIBC_PRIVATE reference: ${WITH_PATCHELF}")
|
|
|
241
281
|
message(STATUS "Not building Ruby extensions: ${RUBY_WITHOUT_EXT}")
|
|
242
282
|
|
|
243
283
|
# ...................................................................
|
|
244
|
-
# DwarFS
|
|
284
|
+
# DwarFS-based tebako filesystem library (libtfs)
|
|
245
285
|
|
|
246
286
|
# ...................................................................
|
|
247
|
-
# The libraries
|
|
248
|
-
#
|
|
249
|
-
#
|
|
287
|
+
# The libraries provided by libtfs (prebuilt package or source build):
|
|
288
|
+
# libtfs.a plus its pure-C dirent helper. These forward-declarations and
|
|
289
|
+
# BUILD_BYPRODUCTS are required to support 'Ninja'
|
|
250
290
|
# Otherwise add_dependencies would be enough for 'Unix makefiles' generator
|
|
251
291
|
|
|
252
|
-
set(
|
|
253
|
-
set(
|
|
254
|
-
set(__LIBFOLLY "${DEPS_LIB_DIR}/libfolly.a")
|
|
255
|
-
set(__LIBFSST "${DEPS_LIB_DIR}/libfsst.a")
|
|
256
|
-
set(__LIBT_METADATA "${DEPS_LIB_DIR}/libmetadata_thrift.a")
|
|
257
|
-
set(__LIBT_LIGHT "${DEPS_LIB_DIR}/libthrift_light.a")
|
|
258
|
-
set(__LIBXXHASH "${DEPS_LIB_DIR}/libxxhash.a")
|
|
259
|
-
set(__LIBZSTD "${DEPS_LIB_DIR}/libzstd.a")
|
|
260
|
-
set(__LIBARCHIVE "${DEPS_LIB_DIR}/libarchive.a")
|
|
292
|
+
set(__LIBTFS "${DEPS_LIB_DIR}/libtfs.a")
|
|
293
|
+
set(__LIBTFS_HELPER "${DEPS_LIB_DIR}/libtebako_dirent_helper_c.a")
|
|
261
294
|
|
|
262
295
|
if(DWARFS_PRELOAD)
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
UPDATE_COMMAND ""
|
|
270
|
-
CONFIGURE_COMMAND ""
|
|
271
|
-
BUILD_COMMAND ""
|
|
272
|
-
INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS}
|
|
273
|
-
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDWARFS_WR_SOURCE_DIR} ${DEPS}
|
|
274
|
-
TEST_COMMAND ""
|
|
296
|
+
# Everything for the prebuilt path (download, SHA256 verification,
|
|
297
|
+
# deployment to ${DEPS}, vcpkg transitive dependencies) was done at
|
|
298
|
+
# configure time by cmake/tebako-libtfs.cmake; the target only keeps the
|
|
299
|
+
# dependency graph (ruby, setup) intact.
|
|
300
|
+
add_custom_target(${DWARFS_WR_PRJ}
|
|
301
|
+
COMMAND ${CMAKE_COMMAND} -E echo "libtfs v${LIBTFS_VERSION} prebuilt package [${LIBTFS_PLATFORM}] deployed to ${DEPS}"
|
|
275
302
|
)
|
|
276
303
|
else(DWARFS_PRELOAD)
|
|
277
304
|
ExternalProject_Add(${DWARFS_WR_PRJ}
|
|
278
305
|
GIT_SHALLOW true
|
|
279
306
|
PREFIX ${DEPS}
|
|
280
|
-
GIT_REPOSITORY https://github.com/tamatebako/
|
|
307
|
+
GIT_REPOSITORY https://github.com/tamatebako/libtfs.git
|
|
281
308
|
GIT_TAG ${DWARFS_WR_TAG}
|
|
282
309
|
SOURCE_DIR ${DWARFS_WR_SOURCE_DIR}
|
|
283
310
|
BINARY_DIR ${DWARFS_WR_BINARY_DIR}
|
|
@@ -288,13 +315,20 @@ else(DWARFS_PRELOAD)
|
|
|
288
315
|
-DWITH_TESTS:BOOL=OFF
|
|
289
316
|
-DWITH_ASAN:BOOL=OFF
|
|
290
317
|
-DWITH_COVERAGE:BOOL=OFF
|
|
291
|
-
-
|
|
318
|
+
-DWITH_LEGACY_TEBAKO_API:BOOL=ON
|
|
319
|
+
# SquashFS adapter stays off in tebako builds (LGPL; tebako
|
|
320
|
+
# packages use the dwarfs/zip backends only)
|
|
321
|
+
-DWITH_SQUASHFS:BOOL=OFF
|
|
322
|
+
-DMKDWARFS=${DEPS_BIN_DIR}/mkdwarfs
|
|
323
|
+
-DTEBAKO_BUILD_SCOPE=LIB
|
|
292
324
|
-DOPENSSL_VERSION=${OPENSSL_VER}
|
|
293
325
|
-DRB_W32=${RB_W32}
|
|
326
|
+
-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake
|
|
327
|
+
-DVCPKG_INSTALLED_DIR=${LIBTFS_VCPKG_INSTALLED_DIR}
|
|
328
|
+
${LIBTFS_VCPKG_EP_TRIPLET_ARG}
|
|
294
329
|
-GNinja
|
|
295
|
-
BUILD_BYPRODUCTS ${
|
|
296
|
-
${
|
|
297
|
-
${__LIBT_LIGHT} ${__LIBXXHASH} ${__LIBZSTD} ${__LIBARCHIVE}
|
|
330
|
+
BUILD_BYPRODUCTS ${__LIBTFS}
|
|
331
|
+
${__LIBTFS_HELPER}
|
|
298
332
|
)
|
|
299
333
|
endif(DWARFS_PRELOAD)
|
|
300
334
|
|
|
@@ -319,7 +353,21 @@ endif(IS_GNU)
|
|
|
319
353
|
# Ruby
|
|
320
354
|
|
|
321
355
|
set(RUBY_L_FLAGS "-L${DEPS_LIB_DIR} -L${CMAKE_CURRENT_BINARY_DIR}")
|
|
356
|
+
if(LIBTFS_VCPKG_TRIPLET_DIR)
|
|
357
|
+
# Transitive static deps of libtfs (dwarfs reader set, flatbuffers, zip,
|
|
358
|
+
# codecs) live in the vcpkg install tree; referenced as -l:lib<name>.a in
|
|
359
|
+
# the patched ruby MAINLIBS (lib/tebako/packager/patch_libraries.rb)
|
|
360
|
+
string(CONCAT RUBY_L_FLAGS ${RUBY_L_FLAGS} " -L${LIBTFS_VCPKG_TRIPLET_DIR}/lib")
|
|
361
|
+
endif(LIBTFS_VCPKG_TRIPLET_DIR)
|
|
322
362
|
set(RUBY_C_FLAGS "-fPIC -I${DEPS_INCLUDE_DIR} -I${CMAKE_CURRENT_SOURCE_DIR}/include -Wno-incompatible-pointer-types")
|
|
363
|
+
if(LIBTFS_VCPKG_TRIPLET_DIR)
|
|
364
|
+
# The transitive deps' headers (deployed from the libtfs-deps package or
|
|
365
|
+
# installed by vcpkg) live in the triplet include dir. Baked into rbconfig
|
|
366
|
+
# via the ruby build, this -I lets mkmf-driven gem native extensions
|
|
367
|
+
# (e.g. the brotli gem) resolve headers like <brotli/encode.h> when the
|
|
368
|
+
# packaged build runs gem install.
|
|
369
|
+
string(CONCAT RUBY_C_FLAGS ${RUBY_C_FLAGS} " -I${LIBTFS_VCPKG_TRIPLET_DIR}/include")
|
|
370
|
+
endif(LIBTFS_VCPKG_TRIPLET_DIR)
|
|
323
371
|
|
|
324
372
|
if(${RUBY_VER} VERSION_LESS "3.2.0" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "15.0.0" AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
325
373
|
string(CONCAT RUBY_C_FLAGS ${RUBY_C_FLAGS} " -std=gnu17")
|