diff --git a/cross/berkeleydb/Makefile b/cross/berkeleydb/Makefile index 103d1f5d0ab..bc0f62923d5 100644 --- a/cross/berkeleydb/Makefile +++ b/cross/berkeleydb/Makefile @@ -13,6 +13,7 @@ COMMENT = Berkeley DB is a family of embedded key-value database libraries prov LICENSE = AGPLv3 CONFIGURE_TARGET = db_configure +POST_CONFIGURE_TARGET = db_post_configure CONFIGURE_ARGS = $(TC_CONFIGURE_ARGS) CONFIGURE_ARGS += --prefix=$(INSTALL_DIR)/$(INSTALL_PREFIX) CONFIGURE_ARGS += --enable-compat185 @@ -25,3 +26,9 @@ include ../../mk/spksrc.cross-cc.mk .PHONY: db_configure db_configure: @$(RUN) dist/configure $(CONFIGURE_ARGS) + +# Fix with GCC_DEBUG_INFO whereas additional spaces makes the build to fail +.PHONY: db_post_configure +db_post_configure: + @$(RUN) sed -i 's/-L /-L/g' Makefile + @$(RUN) sed -i 's/-I /-I/g' Makefile diff --git a/cross/codec2/Makefile b/cross/codec2/Makefile index d0a7f0ae303..1894f8eb6df 100644 --- a/cross/codec2/Makefile +++ b/cross/codec2/Makefile @@ -1,10 +1,10 @@ PKG_NAME = codec2 -PKG_VERS = 1.1.1 +PKG_VERS = 1.2.0 PKG_EXT = tar.gz -PKG_DIST_NAME = v$(PKG_VERS).$(PKG_EXT) -PKG_DIST_SITE = https://github.com/drowe67/codec2-dev/archive +PKG_DIST_NAME = $(PKG_VERS).$(PKG_EXT) +PKG_DIST_SITE = https://github.com/drowe67/codec2/archive PKG_DIST_FILE = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT) -PKG_DIR = $(PKG_NAME)-dev-$(PKG_VERS) +PKG_DIR = $(PKG_NAME)-$(PKG_VERS) DEPENDS = diff --git a/cross/codec2/PLIST b/cross/codec2/PLIST index 491e3582e27..f486561bd17 100644 --- a/cross/codec2/PLIST +++ b/cross/codec2/PLIST @@ -1,2 +1,2 @@ lnk:lib/libcodec2.so -lib:lib/libcodec2.so.1.1 +lib:lib/libcodec2.so.1.2 diff --git a/cross/codec2/digests b/cross/codec2/digests index 60752a7536e..35f3c1fe90a 100644 --- a/cross/codec2/digests +++ b/cross/codec2/digests @@ -1,3 +1,3 @@ -codec2-1.1.1.tar.gz SHA1 91442ccf51e2dbb4d5b9da1bb71c622d16bb0173 -codec2-1.1.1.tar.gz SHA256 e3f287314a0cd125c42db9a7dc7f2e8cf4589bcc0e8def3e7188b45cb0f8e2fc -codec2-1.1.1.tar.gz MD5 bcb5b40673f5f47ec357d83ada44d835 +codec2-1.2.0.tar.gz SHA1 ff3d34e19ff40aee9b1c5fdcecc545a3bd69b7bf +codec2-1.2.0.tar.gz SHA256 cbccae52b2c2ecc5d2757e407da567eb681241ff8dadce39d779a7219dbcf449 +codec2-1.2.0.tar.gz MD5 8186452c6d3cfc89cc6c880a6a7130d0 diff --git a/cross/codec2/patches/001-force-host-tools.patch b/cross/codec2/patches/001-force-host-tools.patch new file mode 100644 index 00000000000..018f89641ce --- /dev/null +++ b/cross/codec2/patches/001-force-host-tools.patch @@ -0,0 +1,138 @@ +--- src/CMakeLists.txt-orig 2023-07-19 23:29:48.000000000 +0000 ++++ src/CMakeLists.txt 2025-09-29 20:58:59.099005682 +0000 +@@ -63,25 +63,39 @@ set(CODEBOOKSNEWAMP2_ENERGY + + # when crosscompiling we need a native executable + if(CMAKE_CROSSCOMPILING) +- set(CMAKE_DISABLE_SOURCE_CHANGES OFF) +- include(ExternalProject) +- ExternalProject_Add(codec2_native +- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/.. +- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/codec2_native +- BUILD_COMMAND ${CMAKE_COMMAND} --build . --target generate_codebook +- INSTALL_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/codec2_native/src/generate_codebook ${CMAKE_CURRENT_BINARY_DIR} +- BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/generate_codebook ++ # Use native tools for build machine ++ if(NOT DEFINED CMAKE_C_COMPILER_FOR_BUILD) ++ find_program(CMAKE_C_COMPILER_FOR_BUILD NAMES gcc cc clang REQUIRED) ++ endif() ++ ++ # Set the path for the native executable ++ set(GENERATE_CODEBOOK_BIN ${CMAKE_CURRENT_BINARY_DIR}/generate_codebook_native) ++ ++ # Build native generate_codebook using host compiler as a custom target ++ add_custom_command( ++ OUTPUT ${GENERATE_CODEBOOK_BIN} ++ COMMAND ${CMAKE_C_COMPILER_FOR_BUILD} ++ ${CMAKE_CURRENT_SOURCE_DIR}/generate_codebook.c ++ -o ${GENERATE_CODEBOOK_BIN} ++ -lm ++ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/generate_codebook.c ++ COMMENT "Building native generate_codebook for build machine" ++ VERBATIM + ) +- add_executable(generate_codebook IMPORTED) +- set_target_properties(generate_codebook PROPERTIES +- IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/generate_codebook) +- add_dependencies(generate_codebook codec2_native) +- set(CMAKE_DISABLE_SOURCE_CHANGES ON) ++ ++ add_custom_target(generate_codebook_target ALL ++ DEPENDS ${GENERATE_CODEBOOK_BIN} ++ ) ++ + else(CMAKE_CROSSCOMPILING) +-# Build code generator binaries. These do not get installed. ++ # Build code generator binaries. These do not get installed. + # generate_codebook + add_executable(generate_codebook generate_codebook.c) + target_link_libraries(generate_codebook m) ++ ++ # Set the path for the native executable ++ set(GENERATE_CODEBOOK_BIN $) ++ + # Make native builds available for cross-compiling. + export(TARGETS generate_codebook + FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake) +@@ -91,57 +105,65 @@ endif(CMAKE_CROSSCOMPILING) + # codebook.c + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebook.c +- COMMAND generate_codebook lsp_cb ${CODEBOOKS} > ${CMAKE_CURRENT_BINARY_DIR}/codebook.c +- DEPENDS generate_codebook ${CODEBOOKS} ++ COMMAND ${GENERATE_CODEBOOK_BIN} lsp_cb ${CODEBOOKS} > ${CMAKE_CURRENT_BINARY_DIR}/codebook.c ++ DEPENDS ${GENERATE_CODEBOOK_BIN} ${CODEBOOKS} ++ VERBATIM + ) + + # codebookd.c + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c +- COMMAND generate_codebook lsp_cbd ${CODEBOOKSD} > ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c +- DEPENDS generate_codebook ${CODEBOOKSD} ++ COMMAND ${GENERATE_CODEBOOK_BIN} lsp_cbd ${CODEBOOKSD} > ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c ++ DEPENDS ${GENERATE_CODEBOOK_BIN} ${CODEBOOKSD} ++ VERBATIM + ) + + # codebookjmv.c + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookjmv.c +- COMMAND generate_codebook lsp_cbjmv ${CODEBOOKSJMV} > ${CMAKE_CURRENT_BINARY_DIR}/codebookjmv.c +- DEPENDS generate_codebook ${CODEBOOKSJMV} ++ COMMAND ${GENERATE_CODEBOOK_BIN} lsp_cbjmv ${CODEBOOKSJMV} > ${CMAKE_CURRENT_BINARY_DIR}/codebookjmv.c ++ DEPENDS ${GENERATE_CODEBOOK_BIN} ${CODEBOOKSJMV} ++ VERBATIM + ) + + # codebookge.c + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c +- COMMAND generate_codebook ge_cb ${CODEBOOKSGE} > ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c +- DEPENDS generate_codebook ${CODEBOOKSGE} ++ COMMAND ${GENERATE_CODEBOOK_BIN} ge_cb ${CODEBOOKSGE} > ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c ++ DEPENDS ${GENERATE_CODEBOOK_BIN} ${CODEBOOKSGE} ++ VERBATIM + ) + + # codebooknewamp1.c + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1.c +- COMMAND generate_codebook newamp1vq_cb ${CODEBOOKSNEWAMP1} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1.c +- DEPENDS generate_codebook ${CODEBOOKSNEWAMP1} ++ COMMAND ${GENERATE_CODEBOOK_BIN} newamp1vq_cb ${CODEBOOKSNEWAMP1} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1.c ++ DEPENDS ${GENERATE_CODEBOOK_BIN} ${CODEBOOKSNEWAMP1} ++ VERBATIM + ) + + # codebooknewamp1_energy.c + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1_energy.c +- COMMAND generate_codebook newamp1_energy_cb ${CODEBOOKSNEWAMP1_ENERGY} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1_energy.c +- DEPENDS generate_codebook ${CODEBOOKSNEWAMP1_ENERGY} ++ COMMAND ${GENERATE_CODEBOOK_BIN} newamp1_energy_cb ${CODEBOOKSNEWAMP1_ENERGY} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1_energy.c ++ DEPENDS ${GENERATE_CODEBOOK_BIN} ${CODEBOOKSNEWAMP1_ENERGY} ++ VERBATIM + ) + + # codebooknewamp2.c + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2.c +- COMMAND generate_codebook newamp2vq_cb ${CODEBOOKSNEWAMP2} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2.c +- DEPENDS generate_codebook ${CODEBOOKSNEWAMP2} ++ COMMAND ${GENERATE_CODEBOOK_BIN} newamp2vq_cb ${CODEBOOKSNEWAMP2} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2.c ++ DEPENDS ${GENERATE_CODEBOOK_BIN} ${CODEBOOKSNEWAMP2} ++ VERBATIM + ) + + # codebooknewamp2_energy.c + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2_energy.c +- COMMAND generate_codebook newamp2_energy_cb ${CODEBOOKSNEWAMP2_ENERGY} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2_energy.c +- DEPENDS generate_codebook ${CODEBOOKSNEWAMP2_ENERGY} ++ COMMAND ${GENERATE_CODEBOOK_BIN} newamp2_energy_cb ${CODEBOOKSNEWAMP2_ENERGY} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2_energy.c ++ DEPENDS ${GENERATE_CODEBOOK_BIN} ${CODEBOOKSNEWAMP2_ENERGY} ++ VERBATIM + ) + + # diff --git a/cross/curl/Makefile b/cross/curl/Makefile index c6f04bc8a97..89c113bfd78 100644 --- a/cross/curl/Makefile +++ b/cross/curl/Makefile @@ -35,6 +35,13 @@ CONFIGURE_ARGS += --enable-ares CONFIGURE_ARGS += --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt CONFIGURE_ARGS += --with-ca-path=/usr/share/ca-certificates/mozilla +# Do not fail on warnings when built in debug mode +ifeq ($(GCC_DEBUG_INFO),1) +CONFIGURE_ARGS += --disable-code-coverage +CONFIGURE_ARGS += --disable-maintainer-mode +CONFIGURE_ARGS += --disable-debug +endif + ifneq ($(strip $(CURL_INCLUDE_EXECUTABLE)),1) PLIST_TRANSFORM = sed -e '/bin:bin/d' endif diff --git a/cross/ffmpeg6/Makefile b/cross/ffmpeg6/Makefile index 719e65cc3e8..f5112d2167a 100644 --- a/cross/ffmpeg6/Makefile +++ b/cross/ffmpeg6/Makefile @@ -10,15 +10,17 @@ COMMENT = FFmpeg is a complete, cross-platform solution to record, convert and LICENSE = GPLv2 CONFIGURE_ARGS = --target-os=linux --cross-prefix=$(TC_PATH)$(TC_PREFIX) --prefix=$(INSTALL_PREFIX) -CONFIGURE_ARGS += --extra-cflags="-I$(WORK_DIR)/install$(INSTALL_PREFIX)/include" -CONFIGURE_ARGS += --extra-ldflags="-L$(WORK_DIR)/install$(INSTALL_PREFIX)/lib" -CONFIGURE_ARGS += --extra-libs="-lxml2 -ldl -lm" --pkg-config=/usr/bin/pkg-config --ranlib=$(RANLIB) +CONFIGURE_ARGS += --pkg-config=/usr/bin/pkg-config CONFIGURE_ARGS += --enable-cross-compile --enable-rpath --enable-pic CONFIGURE_ARGS += --enable-shared CONFIGURE_ARGS += --enable-gpl --enable-version3 -CONFIGURE_ARGS += --disable-debug CONFIGURE_ARGS += --disable-static CONFIGURE_ARGS += --disable-doc +ifeq ($(strip $(GCC_DEBUG_INFO)),1) + CONFIGURE_ARGS += --enable-debug=3 --disable-stripping --disable-optimizations --assert-level=2 --enable-ftrapv +else + CONFIGURE_ARGS += --disable-debug +endif # Must match $(SPK_REV) from spk/ffmpeg6/Makefile CONFIGURE_ARGS += --extra-version=$(shell sed -n 's/^SPK_REV = \(.*\)/\1/p' $(WORK_DIR)/../../../spk/ffmpeg6/Makefile) @@ -214,7 +216,7 @@ endif ifeq ($(findstring $(ARCH),$(ARMv7_ARCHS) $(ARMv7L_ARCHS)),$(ARCH)) CONFIGURE_ARGS += --arch=arm --enable-neon --enable-thumb --disable-armv6 --disable-armv6t2 --disable-vfp --disable-armv5te -ifneq ($(findstring $(ARCH),alpine),$(ARCH)) +ifeq ($(findstring $(ARCH),alpine),$(ARCH)) CONFIGURE_ARGS += --extra-cflags=-DSYNO_ALPINE_NEON endif endif diff --git a/cross/ffmpeg7/Makefile b/cross/ffmpeg7/Makefile index c1a8075eeaa..54e990d7555 100644 --- a/cross/ffmpeg7/Makefile +++ b/cross/ffmpeg7/Makefile @@ -1,5 +1,5 @@ PKG_NAME = ffmpeg -PKG_VERS = 7.0.2 +PKG_VERS = 7.0.3 PKG_EXT = tar.bz2 PKG_DIST_NAME = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT) PKG_DIST_SITE = https://www.ffmpeg.org/releases @@ -13,15 +13,18 @@ LICENSE = GPLv2 UNSUPPORTED_ARCHS = $(ARMv5_ARCHS) $(OLD_PPC_ARCHS) CONFIGURE_ARGS = --target-os=linux --cross-prefix=$(TC_PATH)$(TC_PREFIX) --prefix=$(INSTALL_PREFIX) -CONFIGURE_ARGS += --extra-cflags="-I$(WORK_DIR)/install$(INSTALL_PREFIX)/include" -CONFIGURE_ARGS += --extra-ldflags="-L$(WORK_DIR)/install$(INSTALL_PREFIX)/lib" -CONFIGURE_ARGS += --extra-libs="-lxml2 -ldl -lm" --pkg-config=/usr/bin/pkg-config --ranlib=$(RANLIB) +CONFIGURE_ARGS += --pkg-config=/usr/bin/pkg-config +CONFIGURE_ARGS += --ranlib=$(RANLIB) CONFIGURE_ARGS += --enable-cross-compile --enable-rpath --enable-pic CONFIGURE_ARGS += --enable-shared CONFIGURE_ARGS += --enable-gpl --enable-version3 -CONFIGURE_ARGS += --disable-debug CONFIGURE_ARGS += --disable-static CONFIGURE_ARGS += --disable-doc +ifeq ($(strip $(GCC_DEBUG_INFO)),1) + CONFIGURE_ARGS += --enable-debug=3 --disable-stripping --disable-optimizations --assert-level=2 --enable-ftrapv +else + CONFIGURE_ARGS += --disable-debug +endif # Must match $(SPK_REV) from spk/ffmpeg7/Makefile CONFIGURE_ARGS += --extra-version=$(shell sed -n 's/^SPK_REV = \(.*\)/\1/p' $(WORK_DIR)/../../../spk/ffmpeg7/Makefile) @@ -212,7 +215,7 @@ CONFIGURE_ARGS += --disable-armv5te CONFIGURE_ARGS += --disable-armv6 CONFIGURE_ARGS += --disable-armv6t2 CONFIGURE_ARGS += --disable-vfp -ifneq ($(findstring $(ARCH),alpine),$(ARCH)) +ifeq ($(findstring $(ARCH),alpine),$(ARCH)) CONFIGURE_ARGS += --extra-cflags=-DSYNO_ALPINE_NEON endif endif diff --git a/cross/ffmpeg7/digests b/cross/ffmpeg7/digests index f40e36a804f..703e357c519 100644 --- a/cross/ffmpeg7/digests +++ b/cross/ffmpeg7/digests @@ -1,3 +1,3 @@ -ffmpeg-7.0.2.tar.bz2 SHA1 ea4652903adfd69541ba1eb5b793296c5103ff0d -ffmpeg-7.0.2.tar.bz2 SHA256 1ed250407ea8f955cca2f1139da3229fbc13032a0802e4b744be195865ff1541 -ffmpeg-7.0.2.tar.bz2 MD5 6a0d7d8c3f1f22c894381b48e358f2f3 +ffmpeg-7.0.3.tar.bz2 SHA1 0b2628a6f3088454af733fafbe84e5d167817943 +ffmpeg-7.0.3.tar.bz2 SHA256 7f883369a494623127aaf408ad05b71a7168536564b67ba8762e9b1c76057a3f +ffmpeg-7.0.3.tar.bz2 MD5 7e5b0fa0903b62afd4a46b5816397dd8 diff --git a/cross/ffmpeg7/patches/1007-jellyfin-0007-add-bt2390-eetf-and-code-refactor-to-opencl-tonemap.patch b/cross/ffmpeg7/patches/1007-jellyfin-0007-add-bt2390-eetf-and-code-refactor-to-opencl-tonemap.patch index d93c3df845b..7a4327e1245 100644 --- a/cross/ffmpeg7/patches/1007-jellyfin-0007-add-bt2390-eetf-and-code-refactor-to-opencl-tonemap.patch +++ b/cross/ffmpeg7/patches/1007-jellyfin-0007-add-bt2390-eetf-and-code-refactor-to-opencl-tonemap.patch @@ -1922,7 +1922,7 @@ Index: FFmpeg/libavfilter/vf_tonemap_opencl.c local_work[0] = 16; local_work[1] = 16; -@@ -338,13 +854,10 @@ static int tonemap_opencl_filter_frame(A +@@ -338,10 +854,10 @@ static int tonemap_opencl_filter_frame(A AVFilterContext *avctx = inlink->dst; AVFilterLink *outlink = avctx->outputs[0]; TonemapOpenCLContext *ctx = avctx->priv; @@ -1931,12 +1931,9 @@ Index: FFmpeg/libavfilter/vf_tonemap_opencl.c cl_int cle; int err; - double peak = ctx->peak; -- -- AVHWFramesContext *input_frames_ctx = -- (AVHWFramesContext*)input->hw_frames_ctx->data; - av_log(ctx, AV_LOG_DEBUG, "Filter input: %s, %ux%u (%"PRId64").\n", - av_get_pix_fmt_name(input->format), + AVHWFramesContext *input_frames_ctx; + @@ -363,9 +876,6 @@ static int tonemap_opencl_filter_frame(A if (err < 0) goto fail; diff --git a/cross/ffmpeg7/patches/1018-jellyfin-0018-backport-fixes-for-vaapi-from-upstream.patch b/cross/ffmpeg7/patches/1018-jellyfin-0018-backport-fixes-for-vaapi-from-upstream.patch index 587970f6c9a..88c5af6f7e3 100644 --- a/cross/ffmpeg7/patches/1018-jellyfin-0018-backport-fixes-for-vaapi-from-upstream.patch +++ b/cross/ffmpeg7/patches/1018-jellyfin-0018-backport-fixes-for-vaapi-from-upstream.patch @@ -1,200 +1,3 @@ -Index: FFmpeg/libavcodec/vaapi_av1.c -=================================================================== ---- libavcodec/vaapi_av1.c -+++ libavcodec/vaapi_av1.c -@@ -19,6 +19,7 @@ - */ - - #include "libavutil/frame.h" -+#include "libavutil/mem.h" - #include "hwaccel_internal.h" - #include "vaapi_decode.h" - #include "internal.h" -@@ -42,6 +43,9 @@ typedef struct VAAPIAV1DecContext { - */ - VAAPIAV1FrameRef ref_tab[AV1_NUM_REF_FRAMES]; - AVFrame *tmp_frame; -+ -+ int nb_slice_params; -+ VASliceParameterBufferAV1 *slice_params; - } VAAPIAV1DecContext; - - static VASurfaceID vaapi_av1_surface_id(AV1Frame *vf) -@@ -97,6 +101,8 @@ static int vaapi_av1_decode_uninit(AVCod - for (int i = 0; i < FF_ARRAY_ELEMS(ctx->ref_tab); i++) - av_frame_free(&ctx->ref_tab[i].frame); - -+ av_freep(&ctx->slice_params); -+ - return ff_vaapi_decode_uninit(avctx); - } - -@@ -393,13 +399,25 @@ static int vaapi_av1_decode_slice(AVCode - { - const AV1DecContext *s = avctx->priv_data; - VAAPIDecodePicture *pic = s->cur_frame.hwaccel_picture_private; -- VASliceParameterBufferAV1 slice_param; -- int err = 0; -+ VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; -+ int err, nb_params; - -- for (int i = s->tg_start; i <= s->tg_end; i++) { -- memset(&slice_param, 0, sizeof(VASliceParameterBufferAV1)); -+ nb_params = s->tg_end - s->tg_start + 1; -+ if (ctx->nb_slice_params < nb_params) { -+ VASliceParameterBufferAV1 *tmp = av_realloc_array(ctx->slice_params, -+ nb_params, -+ sizeof(*ctx->slice_params)); -+ if (!tmp) { -+ ctx->nb_slice_params = 0; -+ err = AVERROR(ENOMEM); -+ goto fail; -+ } -+ ctx->slice_params = tmp; -+ ctx->nb_slice_params = nb_params; -+ } - -- slice_param = (VASliceParameterBufferAV1) { -+ for (int i = s->tg_start; i <= s->tg_end; i++) { -+ ctx->slice_params[i - s->tg_start] = (VASliceParameterBufferAV1) { - .slice_data_size = s->tile_group_info[i].tile_size, - .slice_data_offset = s->tile_group_info[i].tile_offset, - .slice_data_flag = VA_SLICE_DATA_FLAG_ALL, -@@ -408,18 +426,20 @@ static int vaapi_av1_decode_slice(AVCode - .tg_start = s->tg_start, - .tg_end = s->tg_end, - }; -- -- err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &slice_param, -- sizeof(VASliceParameterBufferAV1), -- buffer, -- size); -- if (err) { -- ff_vaapi_decode_cancel(avctx, pic); -- return err; -- } - } - -+ err = ff_vaapi_decode_make_slice_buffer(avctx, pic, ctx->slice_params, nb_params, -+ sizeof(VASliceParameterBufferAV1), -+ buffer, -+ size); -+ if (err) -+ goto fail; -+ - return 0; -+ -+fail: -+ ff_vaapi_decode_cancel(avctx, pic); -+ return err; - } - - const FFHWAccel ff_av1_vaapi_hwaccel = { -Index: FFmpeg/libavcodec/vaapi_decode.c -=================================================================== ---- libavcodec/vaapi_decode.c -+++ libavcodec/vaapi_decode.c -@@ -62,6 +62,7 @@ int ff_vaapi_decode_make_param_buffer(AV - int ff_vaapi_decode_make_slice_buffer(AVCodecContext *avctx, - VAAPIDecodePicture *pic, - const void *params_data, -+ int nb_params, - size_t params_size, - const void *slice_data, - size_t slice_size) -@@ -72,13 +73,14 @@ int ff_vaapi_decode_make_slice_buffer(AV - - av_assert0(pic->nb_slices <= pic->slices_allocated); - if (pic->nb_slices == pic->slices_allocated) { -- pic->slice_buffers = -+ VABufferID *tmp = - av_realloc_array(pic->slice_buffers, - pic->slices_allocated ? pic->slices_allocated * 2 : 64, - 2 * sizeof(*pic->slice_buffers)); -- if (!pic->slice_buffers) -+ if (!tmp) - return AVERROR(ENOMEM); - -+ pic->slice_buffers = tmp; - pic->slices_allocated = pic->slices_allocated ? pic->slices_allocated * 2 : 64; - } - av_assert0(pic->nb_slices + 1 <= pic->slices_allocated); -@@ -87,7 +89,7 @@ int ff_vaapi_decode_make_slice_buffer(AV - - vas = vaCreateBuffer(ctx->hwctx->display, ctx->va_context, - VASliceParameterBufferType, -- params_size, 1, (void*)params_data, -+ params_size, nb_params, (void*)params_data, - &pic->slice_buffers[index]); - if (vas != VA_STATUS_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to create slice " -@@ -155,6 +157,11 @@ int ff_vaapi_decode_issue(AVCodecContext - VAStatus vas; - int err; - -+ if (pic->nb_slices <= 0) { -+ err = AVERROR(EINVAL); -+ goto fail; -+ } -+ - av_log(avctx, AV_LOG_DEBUG, "Decode to surface %#x.\n", - pic->output_surface); - -@@ -598,22 +605,26 @@ static int vaapi_decode_make_config(AVCo - if (err < 0) - goto fail; - -- frames->initial_pool_size = 1; -- // Add per-codec number of surfaces used for storing reference frames. -- switch (avctx->codec_id) { -- case AV_CODEC_ID_H264: -- case AV_CODEC_ID_HEVC: -- case AV_CODEC_ID_AV1: -- frames->initial_pool_size += 16; -- break; -- case AV_CODEC_ID_VP9: -- frames->initial_pool_size += 8; -- break; -- case AV_CODEC_ID_VP8: -- frames->initial_pool_size += 3; -- break; -- default: -- frames->initial_pool_size += 2; -+ if (CONFIG_VAAPI_1) -+ frames->initial_pool_size = 0; -+ else { -+ frames->initial_pool_size = 1; -+ // Add per-codec number of surfaces used for storing reference frames. -+ switch (avctx->codec_id) { -+ case AV_CODEC_ID_H264: -+ case AV_CODEC_ID_HEVC: -+ case AV_CODEC_ID_AV1: -+ frames->initial_pool_size += 16; -+ break; -+ case AV_CODEC_ID_VP9: -+ frames->initial_pool_size += 8; -+ break; -+ case AV_CODEC_ID_VP8: -+ frames->initial_pool_size += 3; -+ break; -+ default: -+ frames->initial_pool_size += 2; -+ } - } - } - -Index: FFmpeg/libavcodec/vaapi_decode.h -=================================================================== ---- libavcodec/vaapi_decode.h -+++ libavcodec/vaapi_decode.h -@@ -73,6 +73,7 @@ int ff_vaapi_decode_make_param_buffer(AV - int ff_vaapi_decode_make_slice_buffer(AVCodecContext *avctx, - VAAPIDecodePicture *pic, - const void *params_data, -+ int nb_params, - size_t params_size, - const void *slice_data, - size_t slice_size); Index: FFmpeg/libavcodec/vaapi_encode_av1.c =================================================================== --- libavcodec/vaapi_encode_av1.c @@ -440,115 +243,6 @@ Index: FFmpeg/libavcodec/vaapi_h264.c fill_vaapi_pic(&dpb->va_pics[dpb->size++], pic, 0); return 0; } -@@ -375,7 +383,7 @@ static int vaapi_h264_decode_slice(AVCod - slice_param.chroma_offset_l1); - - err = ff_vaapi_decode_make_slice_buffer(avctx, pic, -- &slice_param, sizeof(slice_param), -+ &slice_param, 1, sizeof(slice_param), - buffer, size); - if (err) { - ff_vaapi_decode_cancel(avctx, pic); -Index: FFmpeg/libavcodec/vaapi_hevc.c -=================================================================== ---- libavcodec/vaapi_hevc.c -+++ libavcodec/vaapi_hevc.c -@@ -353,7 +353,7 @@ static int vaapi_hevc_end_frame(AVCodecC - if (pic->last_size) { - last_slice_param->LongSliceFlags.fields.LastSliceOfPic = 1; - ret = ff_vaapi_decode_make_slice_buffer(avctx, &pic->pic, -- &pic->last_slice_param, slice_param_size, -+ &pic->last_slice_param, 1, slice_param_size, - pic->last_buffer, pic->last_size); - if (ret < 0) - goto fail; -@@ -471,7 +471,7 @@ static int vaapi_hevc_decode_slice(AVCod - - if (!sh->first_slice_in_pic_flag) { - err = ff_vaapi_decode_make_slice_buffer(avctx, &pic->pic, -- &pic->last_slice_param, slice_param_size, -+ &pic->last_slice_param, 1, slice_param_size, - pic->last_buffer, pic->last_size); - pic->last_buffer = NULL; - pic->last_size = 0; -Index: FFmpeg/libavcodec/vaapi_mjpeg.c -=================================================================== ---- libavcodec/vaapi_mjpeg.c -+++ libavcodec/vaapi_mjpeg.c -@@ -131,7 +131,7 @@ static int vaapi_mjpeg_decode_slice(AVCo - sp.components[i].ac_table_selector = s->ac_index[i]; - } - -- err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &sp, sizeof(sp), buffer, size); -+ err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &sp, 1, sizeof(sp), buffer, size); - if (err) - goto fail; - -Index: FFmpeg/libavcodec/vaapi_mpeg2.c -=================================================================== ---- libavcodec/vaapi_mpeg2.c -+++ libavcodec/vaapi_mpeg2.c -@@ -162,7 +162,7 @@ static int vaapi_mpeg2_decode_slice(AVCo - }; - - err = ff_vaapi_decode_make_slice_buffer(avctx, pic, -- &slice_param, sizeof(slice_param), -+ &slice_param, 1, sizeof(slice_param), - buffer, size); - if (err < 0) { - ff_vaapi_decode_cancel(avctx, pic); -Index: FFmpeg/libavcodec/vaapi_mpeg4.c -=================================================================== ---- libavcodec/vaapi_mpeg4.c -+++ libavcodec/vaapi_mpeg4.c -@@ -169,7 +169,7 @@ static int vaapi_mpeg4_decode_slice(AVCo - }; - - err = ff_vaapi_decode_make_slice_buffer(avctx, pic, -- &slice_param, sizeof(slice_param), -+ &slice_param, 1, sizeof(slice_param), - buffer, size); - if (err < 0) { - ff_vaapi_decode_cancel(avctx, pic); -Index: FFmpeg/libavcodec/vaapi_vc1.c -=================================================================== ---- libavcodec/vaapi_vc1.c -+++ libavcodec/vaapi_vc1.c -@@ -489,7 +489,7 @@ static int vaapi_vc1_decode_slice(AVCode - }; - - err = ff_vaapi_decode_make_slice_buffer(avctx, pic, -- &slice_param, sizeof(slice_param), -+ &slice_param, 1, sizeof(slice_param), - buffer, size); - if (err < 0) { - ff_vaapi_decode_cancel(avctx, pic); -Index: FFmpeg/libavcodec/vaapi_vp8.c -=================================================================== ---- libavcodec/vaapi_vp8.c -+++ libavcodec/vaapi_vp8.c -@@ -209,7 +209,7 @@ static int vaapi_vp8_decode_slice(AVCode - for (i = 0; i < 8; i++) - sp.partition_size[i+1] = s->coeff_partition_size[i]; - -- err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &sp, sizeof(sp), data, data_size); -+ err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &sp, 1, sizeof(sp), data, data_size); - if (err) - goto fail; - -Index: FFmpeg/libavcodec/vaapi_vp9.c -=================================================================== ---- libavcodec/vaapi_vp9.c -+++ libavcodec/vaapi_vp9.c -@@ -158,7 +158,7 @@ static int vaapi_vp9_decode_slice(AVCode - } - - err = ff_vaapi_decode_make_slice_buffer(avctx, pic, -- &slice_param, sizeof(slice_param), -+ &slice_param, 1, sizeof(slice_param), - buffer, size); - if (err) { - ff_vaapi_decode_cancel(avctx, pic); Index: FFmpeg/libavfilter/vaapi_vpp.c =================================================================== --- libavfilter/vaapi_vpp.c diff --git a/cross/ffmpeg7/patches/1047-jellyfin-0047-add-full-hwa-pipeline-for-rockchip-rk3588-platform.patch b/cross/ffmpeg7/patches/1047-jellyfin-0047-add-full-hwa-pipeline-for-rockchip-rk3588-platform.patch index 1c4ef73d78e..352bb4184ad 100644 --- a/cross/ffmpeg7/patches/1047-jellyfin-0047-add-full-hwa-pipeline-for-rockchip-rk3588-platform.patch +++ b/cross/ffmpeg7/patches/1047-jellyfin-0047-add-full-hwa-pipeline-for-rockchip-rk3588-platform.patch @@ -949,25 +949,19 @@ Index: FFmpeg/libavcodec/rkmppdec.c + light = av_content_light_metadata_create_side_data(frame); + if (!light) + return AVERROR(ENOMEM); -+ -+ light->MaxCLL = mpp_light.MaxCLL; -+ light->MaxFALL = mpp_light.MaxFALL; - mpp_frame_deinit(&framecontext->frame); - av_buffer_unref(&framecontext->decoder_ref); - av_buffer_unref(&framecontextref); -+ return 0; -+} ++ light->MaxCLL = mpp_light.MaxCLL; ++ light->MaxFALL = mpp_light.MaxFALL; - av_free(desc); -+static void rkmpp_free_mpp_frame(void *opaque, uint8_t *data) -+{ -+ MppFrame mpp_frame = (MppFrame)opaque; -+ mpp_frame_deinit(&mpp_frame); ++ return 0; } -static int rkmpp_retrieve_frame(AVCodecContext *avctx, AVFrame *frame) -+static void rkmpp_free_drm_desc(void *opaque, uint8_t *data) ++static void rkmpp_free_mpp_frame(void *opaque, uint8_t *data) { - RKMPPDecodeContext *rk_context = avctx->priv_data; - RKMPPDecoder *decoder = (RKMPPDecoder *)rk_context->decoder_ref->data; @@ -977,6 +971,12 @@ Index: FFmpeg/libavcodec/rkmppdec.c - MppFrame mppframe = NULL; - MppBuffer buffer = NULL; - AVDRMFrameDescriptor *desc = NULL; ++ MppFrame mpp_frame = (MppFrame)opaque; ++ mpp_frame_deinit(&mpp_frame); ++} ++ ++static void rkmpp_free_drm_desc(void *opaque, uint8_t *data) ++{ + AVRKMPPDRMFrameDescriptor *drm_desc = (AVRKMPPDRMFrameDescriptor *)opaque; + av_free(drm_desc); +} @@ -1258,8 +1258,8 @@ Index: FFmpeg/libavcodec/rkmppdec.c - frame->hw_frames_ctx = av_buffer_ref(decoder->frames_ref); - if (!frame->hw_frames_ctx) { -- ret = AVERROR(ENOMEM); -- goto fail; +- av_frame_unref(frame); +- return AVERROR(ENOMEM); - } +static int rkmpp_get_frame(AVCodecContext *avctx, AVFrame *frame, int timeout) +{ diff --git a/cross/ffmpeg7/patches/1069-jellyfin-0069-add-fixes-x265-build-from-upstream.patch b/cross/ffmpeg7/patches/1069-jellyfin-0069-add-fixes-x265-build-from-upstream.patch deleted file mode 100644 index 9839bde29e6..00000000000 --- a/cross/ffmpeg7/patches/1069-jellyfin-0069-add-fixes-x265-build-from-upstream.patch +++ /dev/null @@ -1,79 +0,0 @@ -Index: FFmpeg/libavcodec/libx265.c -=================================================================== ---- libavcodec/libx265.c -+++ libavcodec/libx265.c -@@ -646,7 +646,13 @@ static int libx265_encode_frame(AVCodecC - { - libx265Context *ctx = avctx->priv_data; - x265_picture x265pic; -- x265_picture x265pic_out = { 0 }; -+#if X265_BUILD >= 210 -+ x265_picture x265pic_layers_out[MAX_SCALABLE_LAYERS]; -+ x265_picture* x265pic_lyrptr_out[MAX_SCALABLE_LAYERS]; -+#else -+ x265_picture x265pic_solo_out = { 0 }; -+#endif -+ x265_picture* x265pic_out; - x265_nal *nal; - x265_sei *sei; - uint8_t *dst; -@@ -764,8 +770,16 @@ static int libx265_encode_frame(AVCodecC - } - } - -+#if X265_BUILD >= 210 -+ for (i = 0; i < MAX_SCALABLE_LAYERS; i++) -+ x265pic_lyrptr_out[i] = &x265pic_layers_out[i]; -+ -+ ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal, -+ pic ? &x265pic : NULL, x265pic_lyrptr_out); -+#else - ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal, -- pic ? &x265pic : NULL, &x265pic_out); -+ pic ? &x265pic : NULL, &x265pic_solo_out); -+#endif - - for (i = 0; i < sei->numPayloads; i++) - av_free(sei->payloads[i].payload); -@@ -795,10 +809,16 @@ static int libx265_encode_frame(AVCodecC - pkt->flags |= AV_PKT_FLAG_KEY; - } - -- pkt->pts = x265pic_out.pts; -- pkt->dts = x265pic_out.dts; -+#if X265_BUILD >= 210 -+ x265pic_out = x265pic_lyrptr_out[0]; -+#else -+ x265pic_out = &x265pic_solo_out; -+#endif -+ -+ pkt->pts = x265pic_out->pts; -+ pkt->dts = x265pic_out->dts; - -- switch (x265pic_out.sliceType) { -+ switch (x265pic_out->sliceType) { - case X265_TYPE_IDR: - case X265_TYPE_I: - pict_type = AV_PICTURE_TYPE_I; -@@ -816,16 +836,16 @@ static int libx265_encode_frame(AVCodecC - } - - #if X265_BUILD >= 130 -- if (x265pic_out.sliceType == X265_TYPE_B) -+ if (x265pic_out->sliceType == X265_TYPE_B) - #else -- if (x265pic_out.frameData.sliceType == 'b') -+ if (x265pic_out->frameData.sliceType == 'b') - #endif - pkt->flags |= AV_PKT_FLAG_DISPOSABLE; - -- ff_side_data_set_encoder_stats(pkt, x265pic_out.frameData.qp * FF_QP2LAMBDA, NULL, 0, pict_type); -+ ff_side_data_set_encoder_stats(pkt, x265pic_out->frameData.qp * FF_QP2LAMBDA, NULL, 0, pict_type); - -- if (x265pic_out.userData) { -- int idx = (int)(intptr_t)x265pic_out.userData - 1; -+ if (x265pic_out->userData) { -+ int idx = (int)(intptr_t)x265pic_out->userData - 1; - ReorderedData *rd = &ctx->rd[idx]; - - pkt->duration = rd->duration; diff --git a/cross/intel-gpu-tools/Makefile b/cross/intel-gpu-tools/Makefile index 14234c75f51..f7df20068e2 100644 --- a/cross/intel-gpu-tools/Makefile +++ b/cross/intel-gpu-tools/Makefile @@ -19,7 +19,8 @@ LICENSE = MIT License UNSUPPORTED_ARCHS = $(ARM_ARCHS) $(PPC_ARCHS) -CONFIGURE_ARGS = -Ddocs=disabled +CONFIGURE_ARGS = -Db_ndebug=false +CONFIGURE_ARGS += -Ddocs=disabled CONFIGURE_ARGS += -Dman=disabled CONFIGURE_ARGS += -Dtestplan=disabled CONFIGURE_ARGS += -Dtests=disabled diff --git a/cross/intel-graphics-compiler/Makefile b/cross/intel-graphics-compiler/Makefile index 0072e323292..d0926ecf808 100644 --- a/cross/intel-graphics-compiler/Makefile +++ b/cross/intel-graphics-compiler/Makefile @@ -120,7 +120,7 @@ include ../../mk/spksrc.cross-cmake.mk # Requires access to: # CMCLTranslatorTool (during build time): IGC/Release/CMCLTranslatorTool # llvm-tblgen, clang-tool (symlink -> clang-14), llvm-link, opt: native/llvm-14.0 -ENV += PATH=$(CMAKE_BUILD_DIR)/IGC/Release:$(abspath $(PWD)/../../native/llvm-14.0/work-native/install/usr/local/bin):$$PATH +ENV += PATH=$(CMAKE_BUILD_DIR)/IGC/$(CMAKE_BUILD_TYPE):$(abspath $(PWD)/../../native/llvm-14.0/work-native/install/usr/local/bin):$$PATH # Associate external projects to LLVM build, this replaces (and cannot be combined): # -DLLVM_EXTERNAL_PROJECTS='llvm-spirv;opencl-clang' diff --git a/cross/lame/Makefile b/cross/lame/Makefile index 3ced943c589..dd0c24e3009 100644 --- a/cross/lame/Makefile +++ b/cross/lame/Makefile @@ -6,7 +6,6 @@ PKG_DIST_SITE = https://downloads.sourceforge.net/project/lame/$(PKG_NAME)/$(PKG PKG_DIR = $(PKG_NAME)-$(PKG_VERS) DEPENDS = -OPTIONAL_DEPENDS = native/nasm HOMEPAGE = https://lame.sourceforge.net/ COMMENT = High quality MPEG Audio Layer III encoder. @@ -17,9 +16,5 @@ GNU_CONFIGURE = 1 include ../../mk/spksrc.cross-cc.mk ifeq ($(findstring $(ARCH),$(x64_ARCHS) $(i686_ARCHS)),$(ARCH)) -BUILD_DEPENDS = native/nasm -NASM_PATH = $(realpath $(WORK_DIR)/../../../native/nasm/work-native/install/usr/local/bin) -ENV += AS=$(NASM_PATH)/nasm -ENV += PATH=$(NASM_PATH):$$PATH CONFIGURE_ARGS += --enable-nasm endif diff --git a/cross/lame/patches/001-disable-fpu-on-non-x86.patch b/cross/lame/patches/001-disable-fpu-on-non-x86.patch new file mode 100644 index 00000000000..e4052d61a60 --- /dev/null +++ b/cross/lame/patches/001-disable-fpu-on-non-x86.patch @@ -0,0 +1,11 @@ +--- libmp3lame/util.c-orig 2017-09-06 19:33:36.000000000 +0000 ++++ libmp3lame/util.c 2025-09-28 18:39:54.425769102 +0000 +@@ -911,7 +911,7 @@ disable_FPE(void) + mask &= ~(_EM_OVERFLOW | _EM_ZERODIVIDE | _EM_INVALID); + _FPU_SETCW(mask); + } +-# elif defined(__linux__) ++# elif defined(__linux__) && (defined(__i386__) || defined(__x86_64__)) + { + + # include diff --git a/cross/libaom-3.8/Makefile b/cross/libaom-3.8/Makefile new file mode 100644 index 00000000000..1dea25e46e4 --- /dev/null +++ b/cross/libaom-3.8/Makefile @@ -0,0 +1,69 @@ +PKG_NAME = libaom +# Max version compatible due to >= 3.9.0 +# CHANGELOG: Documented minimum required SIMD support: SSE4.1 on x86 +PKG_VERS = 3.8.3 +PKG_EXT = tar.gz +PKG_DIST_NAME = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT) +PKG_DIST_SITE = https://storage.googleapis.com/aom-releases +PKG_DIR = $(PKG_NAME)-$(PKG_VERS) + +DEPENDS = + +HOMEPAGE = https://aomedia.googlesource.com/aom/ +COMMENT = AOMedia Video 1 (AV1) is an open, royalty-free video coding format designed for video transmissions over the Internet. +LICENSE = Royalty-free + +UNSUPPORTED_ARCHS = $(ARMv5_ARCHS) $(OLD_PPC_ARCHS) + +# Set working directory +PKG_WORK_DIR = $(WORK_DIR)/$(PKG_NAME)_$(PKG_VERS)-build + +CMAKE_USE_NASM = 1 + +# libaom specific cmake options +CMAKE_ARGS += -DCONFIG_AV1_ENCODER=1 + +CMAKE_ARGS += -DENABLE_TESTS=0 +CMAKE_ARGS += -DENABLE_DOCS=0 +CMAKE_ARGS += -DAOM_EXTRA_C_FLAGS=-O +CMAKE_ARGS += -DAOM_EXTRA_CXX_FLAGS=-O + +include ../../mk/spksrc.common.mk + +ifeq ($(findstring $(ARCH),$(ARMv5_ARCHS)),$(ARCH)) +CMAKE_ARGS += -DAOM_TARGET_CPU=arm +endif + +ifeq ($(findstring $(ARCH),$(ARMv7_ARCHS) $(ARMv7L_ARCHS)),$(ARCH)) +CMAKE_ARGS += -DAOM_TARGET_CPU=arm +CMAKE_ARGS += -DENABLE_NEON=OFF +endif + +ifeq ($(findstring $(ARCH),$(ARMv8_ARCHS)),$(ARCH)) +CMAKE_ARGS += -DAOM_TARGET_CPU=arm64 +ifeq ($(call version_lt, $(TCVERSION), 7.0),1) +CMAKE_ARGS += -DENABLE_NEON=OFF +endif +endif + +ifeq ($(findstring $(ARCH),$(PPC_ARCHS)),$(ARCH)) +CMAKE_ARGS += -DAOM_TARGET_CPU=ppc +# avoid error: AltiVec and SPE instructions cannot coexist +CMAKE_ARGS += -DENABLE_VSX=0 +endif + +ifeq ($(findstring $(ARCH),$(x64_ARCHS)),$(ARCH)) +CMAKE_ARGS += -DAOM_TARGET_CPU=x86_64 +endif + +ifeq ($(findstring $(ARCH),$(i686_ARCHS)),$(ARCH)) +CMAKE_ARGS += -DAOM_TARGET_CPU=x86 +endif + +include ../../mk/spksrc.cross-cmake.mk + +# Fix compilation with newer compilers +# Flags to be added to CMake toolchain file +ifeq ($(call version_ge, $(TC_GCC), 7.5),1) +ADDITIONAL_CXXFLAGS += -D_GLIBCXX_USE_C99 -D_GLIBCXX_USE_C99_MATH +endif diff --git a/cross/libaom/PLIST b/cross/libaom-3.8/PLIST similarity index 100% rename from cross/libaom/PLIST rename to cross/libaom-3.8/PLIST diff --git a/cross/libaom/digests b/cross/libaom-3.8/digests similarity index 100% rename from cross/libaom/digests rename to cross/libaom-3.8/digests diff --git a/cross/libaom-latest/Makefile b/cross/libaom-latest/Makefile new file mode 100644 index 00000000000..d4e336d2b68 --- /dev/null +++ b/cross/libaom-latest/Makefile @@ -0,0 +1,60 @@ +PKG_NAME = libaom +PKG_VERS = 3.13.1 +PKG_EXT = tar.gz +PKG_DIST_NAME = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT) +PKG_DIST_SITE = https://storage.googleapis.com/aom-releases +PKG_DIR = $(PKG_NAME)-$(PKG_VERS) + +DEPENDS = + +HOMEPAGE = https://aomedia.googlesource.com/aom/ +COMMENT = AOMedia Video 1 (AV1) is an open, royalty-free video coding format designed for video transmissions over the Internet. +LICENSE = Royalty-free + +REQUIRED_MIN_DSM = 7.0 +UNSUPPORTED_ARCHS = comcerto2k + +# Set working directory +PKG_WORK_DIR = $(WORK_DIR)/$(PKG_NAME)_$(PKG_VERS)-build + +# libaom specific cmake options +CMAKE_ARGS += -DCONFIG_AV1_ENCODER=1 +CMAKE_ARGS += -DENABLE_TESTS=0 +CMAKE_ARGS += -DENABLE_DOCS=0 +CMAKE_ARGS += -DAOM_EXTRA_C_FLAGS=-O +CMAKE_ARGS += -DAOM_EXTRA_CXX_FLAGS=-O + +# Adjusting debug flags for libaom compatibility +# Debug mode with -O0 fails to build neon and x86 asm +ifeq ($(strip $(GCC_DEBUG_INFO)),1) + GCC_DEBUG_FLAGS = -ggdb3 -g3 -O1 -gz +endif + +include ../../mk/spksrc.common.mk + +ifeq ($(findstring $(ARCH),$(ARMv7_ARCHS)),$(ARCH)) +CMAKE_ARGS += -DAOM_TARGET_CPU=arm +CMAKE_ARGS += -DENABLE_NEON=OFF +endif + +ifeq ($(findstring $(ARCH),$(ARMv8_ARCHS)),$(ARCH)) +CMAKE_ARGS += -DAOM_TARGET_CPU=arm64 +endif + +ifeq ($(findstring $(ARCH),$(x64_ARCHS)),$(ARCH)) +CMAKE_ARGS += -DAOM_TARGET_CPU=x86_64 +CMAKE_ARGS += -DENABLE_NASM=ON +endif + +ifeq ($(findstring $(ARCH),$(i686_ARCHS)),$(ARCH)) +CMAKE_ARGS += -DAOM_TARGET_CPU=x86 +CMAKE_ARGS += -DENABLE_NASM=ON +endif + +include ../../mk/spksrc.cross-cmake.mk + +# Fix compilation with newer compilers +# Flags to be added to CMake toolchain file +ifeq ($(call version_ge, $(TC_GCC), 7.5),1) +ADDITIONAL_CXXFLAGS += -D_GLIBCXX_USE_C99 -D_GLIBCXX_USE_C99_MATH +endif diff --git a/cross/libaom-latest/PLIST b/cross/libaom-latest/PLIST new file mode 100644 index 00000000000..205de5a2bcf --- /dev/null +++ b/cross/libaom-latest/PLIST @@ -0,0 +1,5 @@ +bin:bin/aomdec +bin:bin/aomenc +lnk:lib/libaom.so +lnk:lib/libaom.so.3 +lib:lib/libaom.so.3.13.1 diff --git a/cross/libaom-latest/digests b/cross/libaom-latest/digests new file mode 100644 index 00000000000..9cdb1ce8356 --- /dev/null +++ b/cross/libaom-latest/digests @@ -0,0 +1,3 @@ +libaom-3.13.1.tar.gz SHA1 4bfe91433c37212727175a116011ac7a9ed174a9 +libaom-3.13.1.tar.gz SHA256 19e45a5a7192d690565229983dad900e76b513a02306c12053fb9a262cbeca7d +libaom-3.13.1.tar.gz MD5 d615c4dbe062fc307d70d7fb85b678b2 diff --git a/cross/libaom/Makefile b/cross/libaom/Makefile index 1dea25e46e4..8e5b6887b38 100644 --- a/cross/libaom/Makefile +++ b/cross/libaom/Makefile @@ -1,69 +1,15 @@ -PKG_NAME = libaom -# Max version compatible due to >= 3.9.0 -# CHANGELOG: Documented minimum required SIMD support: SSE4.1 on x86 -PKG_VERS = 3.8.3 -PKG_EXT = tar.gz -PKG_DIST_NAME = $(PKG_NAME)-$(PKG_VERS).$(PKG_EXT) -PKG_DIST_SITE = https://storage.googleapis.com/aom-releases -PKG_DIR = $(PKG_NAME)-$(PKG_VERS) +PKG_NAME = libaom-main -DEPENDS = - -HOMEPAGE = https://aomedia.googlesource.com/aom/ -COMMENT = AOMedia Video 1 (AV1) is an open, royalty-free video coding format designed for video transmissions over the Internet. -LICENSE = Royalty-free +OPTIONAL_DEPENDS = cross/libaom-latest +OPTIONAL_DEPENDS += cross/libaom-3.8 UNSUPPORTED_ARCHS = $(ARMv5_ARCHS) $(OLD_PPC_ARCHS) -# Set working directory -PKG_WORK_DIR = $(WORK_DIR)/$(PKG_NAME)_$(PKG_VERS)-build - -CMAKE_USE_NASM = 1 - -# libaom specific cmake options -CMAKE_ARGS += -DCONFIG_AV1_ENCODER=1 - -CMAKE_ARGS += -DENABLE_TESTS=0 -CMAKE_ARGS += -DENABLE_DOCS=0 -CMAKE_ARGS += -DAOM_EXTRA_C_FLAGS=-O -CMAKE_ARGS += -DAOM_EXTRA_CXX_FLAGS=-O - -include ../../mk/spksrc.common.mk - -ifeq ($(findstring $(ARCH),$(ARMv5_ARCHS)),$(ARCH)) -CMAKE_ARGS += -DAOM_TARGET_CPU=arm -endif - -ifeq ($(findstring $(ARCH),$(ARMv7_ARCHS) $(ARMv7L_ARCHS)),$(ARCH)) -CMAKE_ARGS += -DAOM_TARGET_CPU=arm -CMAKE_ARGS += -DENABLE_NEON=OFF -endif - -ifeq ($(findstring $(ARCH),$(ARMv8_ARCHS)),$(ARCH)) -CMAKE_ARGS += -DAOM_TARGET_CPU=arm64 -ifeq ($(call version_lt, $(TCVERSION), 7.0),1) -CMAKE_ARGS += -DENABLE_NEON=OFF -endif -endif - -ifeq ($(findstring $(ARCH),$(PPC_ARCHS)),$(ARCH)) -CMAKE_ARGS += -DAOM_TARGET_CPU=ppc -# avoid error: AltiVec and SPE instructions cannot coexist -CMAKE_ARGS += -DENABLE_VSX=0 -endif - -ifeq ($(findstring $(ARCH),$(x64_ARCHS)),$(ARCH)) -CMAKE_ARGS += -DAOM_TARGET_CPU=x86_64 -endif - -ifeq ($(findstring $(ARCH),$(i686_ARCHS)),$(ARCH)) -CMAKE_ARGS += -DAOM_TARGET_CPU=x86 -endif - -include ../../mk/spksrc.cross-cmake.mk +include ../../mk/spksrc.main-depends.mk -# Fix compilation with newer compilers -# Flags to be added to CMake toolchain file +# gcc >= 7.5 ifeq ($(call version_ge, $(TC_GCC), 7.5),1) -ADDITIONAL_CXXFLAGS += -D_GLIBCXX_USE_C99 -D_GLIBCXX_USE_C99_MATH +DEPENDS = cross/libaom-latest +else +DEPENDS = cross/libaom-3.8 endif diff --git a/cross/libpng/Makefile b/cross/libpng/Makefile index c50eb32fdce..2f29a48197d 100644 --- a/cross/libpng/Makefile +++ b/cross/libpng/Makefile @@ -17,4 +17,11 @@ CMAKE_ARGS += -DPNG_TESTS=OFF ADDITIONAL_CFLAGS = -O -lm +# Version scripts fails in Debug build mode +# By default generates a libpng16d.so -> libpng$(PNG_DEBUG_POSTFIX).so +ifeq ($(GCC_DEBUG_INFO),1) + CMAKE_ARGS += -Dld-version-script=OFF + CMAKE_ARGS += -DPNG_DEBUG_POSTFIX="" +endif + include ../../mk/spksrc.cross-cmake.mk diff --git a/cross/libzmq/Makefile b/cross/libzmq/Makefile index 745f1979151..108c7a981a2 100644 --- a/cross/libzmq/Makefile +++ b/cross/libzmq/Makefile @@ -1,5 +1,5 @@ PKG_NAME = libzmq -PKG_VERS = 4.3.4 +PKG_VERS = 4.3.5 PKG_EXT = tar.gz PKG_DIST_NAME = v$(PKG_VERS).$(PKG_EXT) PKG_DIST_SITE = https://github.com/zeromq/libzmq/archive @@ -22,3 +22,6 @@ endif # Build ZeroMQ with encryption support CMAKE_ARGS += -DWITH_LIBSODIUM=ON + +# Disable benchmarking performance tools +CMAKE_ARGS += -DWITH_PERF_TOOL=OFF diff --git a/cross/libzmq/PLIST b/cross/libzmq/PLIST index 5cd7e376a55..800c5085e4a 100644 --- a/cross/libzmq/PLIST +++ b/cross/libzmq/PLIST @@ -1,10 +1,3 @@ -bin:bin/inproc_lat -bin:bin/inproc_thr -bin:bin/local_lat -bin:bin/local_thr -bin:bin/proxy_thr -bin:bin/remote_lat -bin:bin/remote_thr lnk:lib/libzmq.so lnk:lib/libzmq.so.5 -lib:lib/libzmq.so.5.2.4 +lib:lib/libzmq.so.5.2.5 diff --git a/cross/libzmq/digests b/cross/libzmq/digests index ee45924ec3e..ee3a7e6e58b 100644 --- a/cross/libzmq/digests +++ b/cross/libzmq/digests @@ -1,3 +1,3 @@ -libzmq-4.3.4.tar.gz SHA1 9c91ef047885531877e0ad5f5593b97ccd2c1023 -libzmq-4.3.4.tar.gz SHA256 0ff5a531c9ffaf0dfdc7dc78d13d1383088f454896d252934c429b2554d10559 -libzmq-4.3.4.tar.gz MD5 cc20b769ac10afa352e5ed2769bb23b3 +libzmq-4.3.5.tar.gz SHA1 150dfa24fa5322975c5f5746914bb22cf94ff4e6 +libzmq-4.3.5.tar.gz SHA256 6c972d1e6a91a0ecd79c3236f04cf0126f2f4dfbbad407d72b4606a7ba93f9c6 +libzmq-4.3.5.tar.gz MD5 cfb80c6ad694cacc2f7c99bf44e8b686 diff --git a/cross/svt-av1/Makefile b/cross/svt-av1/Makefile index 0b94c5c6313..9d520de20d7 100644 --- a/cross/svt-av1/Makefile +++ b/cross/svt-av1/Makefile @@ -1,5 +1,5 @@ PKG_NAME = SVT-AV1 -PKG_VERS = 2.2.0 +PKG_VERS = 2.3.0 PKG_EXT = tar.bz2 PKG_DIST_NAME = $(PKG_NAME)-v$(PKG_VERS).$(PKG_EXT) PKG_DIST_SITE = https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v$(PKG_VERS)/ @@ -11,9 +11,11 @@ HOMEPAGE = https://github.com/OpenVisualCloud/SVT-AV1 COMMENT = The Scalable Video Technology for AV1 (SVT-AV1 Encoder and Decoder) is an AV1-compliant encoder/decoder library core. LICENSE = SPDX short identifier: BSD-2-Clause-Patent -UNSUPPORTED_ARCHS = $(ARMv5_ARCHS) $(PPC_ARCHS) +# Avoids ffmpeg to fail detecting SVT-AV1 on unresolved math synbols +ADDITIONAL_LDFLAGS = -lm +POST_INSTALL_TARGET = svt-av1_post_install_target -CMAKE_USE_NASM = 1 +UNSUPPORTED_ARCHS = $(ARMv5_ARCHS) $(PPC_ARCHS) include ../../mk/spksrc.cross-cmake.mk @@ -22,3 +24,7 @@ ifeq ($(call version_lt, ${TC_GCC}, 5),1) CMAKE_ARGS += -DCOMPILE_C_ONLY=ON endif endif + +.PHONY: svt-av1_post_install_target +svt-av1_post_install_target: + $(RUN) sed -i 's|^prefix=.*|prefix=$(STAGING_INSTALL_PREFIX)|' $(STAGING_INSTALL_PREFIX)/lib/pkgconfig/SvtAv1Enc.pc diff --git a/cross/svt-av1/PLIST b/cross/svt-av1/PLIST index 732a7a6a50c..f52332a7f8f 100644 --- a/cross/svt-av1/PLIST +++ b/cross/svt-av1/PLIST @@ -1,4 +1,4 @@ bin:bin/SvtAv1EncApp -lib:lib/libSvtAv1Enc.so.2.2.0 +lib:lib/libSvtAv1Enc.so.2.3.0 lnk:lib/libSvtAv1Enc.so.2 lnk:lib/libSvtAv1Enc.so diff --git a/cross/svt-av1/digests b/cross/svt-av1/digests index 0410e64d1af..08208d4d40b 100644 --- a/cross/svt-av1/digests +++ b/cross/svt-av1/digests @@ -1,3 +1,3 @@ -SVT-AV1-v2.2.0.tar.bz2 SHA1 d18c7d8adfa3b06c2c7db343291e45de1e95f8ec -SVT-AV1-v2.2.0.tar.bz2 SHA256 9ebeda4602f9a3f851670e1a1cf922e05f44eef0d8f582f78c53e544c575e978 -SVT-AV1-v2.2.0.tar.bz2 MD5 9ebc6ca66bfc8a097fbd964c08e63278 +SVT-AV1-v2.3.0.tar.bz2 SHA1 6ce61979de8ab2b11aaa863197e4674de8ad93e1 +SVT-AV1-v2.3.0.tar.bz2 SHA256 f65358499f572a47d6b076dda73681a8162b02c0b619a551bc2d62ead8ee719a +SVT-AV1-v2.3.0.tar.bz2 MD5 a86cac2227942f6d8e17ca1fdcac1627 diff --git a/cross/x265/Makefile b/cross/x265/Makefile index da3c0aa5822..f1313792577 100644 --- a/cross/x265/Makefile +++ b/cross/x265/Makefile @@ -23,7 +23,7 @@ CMAKE_BUILD_10B = $(WORK_DIR)/$(PKG_DIR)/build10bit CMAKE_ARGS_BITLIB += -DHIGH_BIT_DEPTH=ON -DEXPORT_C_API=OFF CMAKE_ARGS_BITLIB += -DENABLE_SHARED=OFF -DENABLE_CLI=OFF -DEXTRA_LINK_FLAGS="-ldl" # provide cmake toolchain path when building bitlibs -CMAKE_ARGS_BITLIB += -DCMAKE_TOOLCHAIN_FILE=$(CMAKE_TOOLCHAIN_PKG) +CMAKE_ARGS_BITLIB += -DCMAKE_TOOLCHAIN_FILE=$(CMAKE_TOOLCHAIN_FILE_PKG) # additional cmake args for the final multilib build ADDITIONAL_CMAKE_ARGS += -DEXTRA_LIB="x265_main10.a;x265_main12.a" -DEXTRA_LINK_FLAGS="-ldl -L." @@ -70,11 +70,11 @@ PLIST_TRANSFORM = cat endif .PHONY: x265_pre_configure -x265_pre_configure: $(CMAKE_TOOLCHAIN_PKG) +x265_pre_configure: $(CMAKE_TOOLCHAIN_FILE_PKG) @$(MSG) Configure 12BIT libraries - $(RUN) cmake -S $(WORK_DIR)/$(PKG_DIR)/source -B $(CMAKE_BUILD_12B) $(CMAKE_ARGS) $(CMAKE_ARGS_BITLIB) -DMAIN12=ON -G Ninja + $(RUN_CMAKE) cmake -S $(WORK_DIR)/$(PKG_DIR)/source -B $(CMAKE_BUILD_12B) $(CMAKE_ARGS) $(CMAKE_ARGS_BITLIB) -DMAIN12=ON -G Ninja @$(MSG) Configure 10BIT libraries - $(RUN) cmake -S $(WORK_DIR)/$(PKG_DIR)/source -B $(CMAKE_BUILD_10B) $(CMAKE_ARGS) $(CMAKE_ARGS_BITLIB) -G Ninja + $(RUN_CMAKE) cmake -S $(WORK_DIR)/$(PKG_DIR)/source -B $(CMAKE_BUILD_10B) $(CMAKE_ARGS) $(CMAKE_ARGS_BITLIB) -G Ninja .PHONY: x265_pre_compile x265_pre_compile: diff --git a/mk/spksrc.common.mk b/mk/spksrc.common.mk index a3e2753f764..092dfa202b3 100644 --- a/mk/spksrc.common.mk +++ b/mk/spksrc.common.mk @@ -20,6 +20,22 @@ default: all # Stop on first error SHELL := $(SHELL) -e +# Define $(empty) and $(space) +empty := +space := $(empty) $(empty) + +# Define all variable needing cleaning +# Used for native, CMake and Meson builds +# Exception for PKG_CONFIG_LIBDIR to force default pkgconfig. +ENV_VARS_TO_CLEAN = AR AS CC CPP CXX FC LD LDSHARED NM OBJCOPY OBJDUMP RANLIB READELF STRIP \ + CFLAGS ADDITIONAL_CFLAGS CPPFLAGS ADDITIONAL_CPPFLAGS \ + CXXFLAGS ADDITIONAL_CXXFLAGS FFLAGS ADDITIONAL_FFLAGS \ + LDFLAGS ADDITIONAL_LDFLAGS PKG_CONFIG_PATH SYSROOT +ENV_FILTERED = $(shell env -i $(ENV) sh -c 'env' | \ + grep -v -E '^($(subst $(space),|,$(ENV_VARS_TO_CLEAN)))=' | \ + awk -F'=' '{if($$2 ~ / /) print $$1"=\""$$2"\""; else print $$0}' | \ + tr '\n' ' ') + # Display message in a consistent way MSG = echo "===> " diff --git a/mk/spksrc.configure.mk b/mk/spksrc.configure.mk index 0138a6d492e..6650d82f1ef 100644 --- a/mk/spksrc.configure.mk +++ b/mk/spksrc.configure.mk @@ -36,12 +36,18 @@ endif REAL_CONFIGURE_ARGS = ifneq ($(strip $(GNU_CONFIGURE)),) -REAL_CONFIGURE_ARGS += $(TC_CONFIGURE_ARGS) -REAL_CONFIGURE_ARGS += --prefix=$(INSTALL_PREFIX) -# DSM7 appdir -ifeq ($(call version_ge, ${TCVERSION}, 7.0),1) -REAL_CONFIGURE_ARGS += --localstatedir=$(INSTALL_PREFIX_VAR) -endif + REAL_CONFIGURE_ARGS += $(TC_CONFIGURE_ARGS) + REAL_CONFIGURE_ARGS += --prefix=$(INSTALL_PREFIX) + + # DSM7 appdir + ifeq ($(call version_ge, ${TCVERSION}, 7.0),1) + REAL_CONFIGURE_ARGS += --localstatedir=$(INSTALL_PREFIX_VAR) + endif + + # Enable debug + ifeq ($(strip $(GCC_DEBUG_INFO)),1) + REAL_CONFIGURE_ARGS += --enable-debug + endif endif REAL_CONFIGURE_ARGS += $(CONFIGURE_ARGS) diff --git a/mk/spksrc.copy.mk b/mk/spksrc.copy.mk index ad8a3df02bf..0a1c32b828e 100644 --- a/mk/spksrc.copy.mk +++ b/mk/spksrc.copy.mk @@ -42,6 +42,7 @@ copy_msg: pre_copy_target: copy_msg copy_target: SHELL:=/bin/bash +copy_target: .SHELLFLAGS := -o pipefail -c copy_target: $(PRE_COPY_TARGET) $(INSTALL_PLIST) ifeq ($(call version_ge, ${TCVERSION}, 7.0),1) @$(MSG) [DSM7+] Copy target to staging, discard var directory diff --git a/mk/spksrc.cross-cmake-env.mk b/mk/spksrc.cross-cmake-env.mk index b0e42b6317c..84fb3fae9b5 100644 --- a/mk/spksrc.cross-cmake-env.mk +++ b/mk/spksrc.cross-cmake-env.mk @@ -6,10 +6,13 @@ endif # We normally build regular Release ifeq ($(strip $(CMAKE_BUILD_TYPE)),) -CMAKE_ARGS += -DCMAKE_BUILD_TYPE=Release -else -CMAKE_ARGS += -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) + ifeq ($(strip $(GCC_DEBUG_INFO)),1) + CMAKE_BUILD_TYPE = Debug + else + CMAKE_BUILD_TYPE = Release + endif endif +CMAKE_ARGS += -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) # Set the default install prefix CMAKE_ARGS += -DCMAKE_INSTALL_PREFIX=$(INSTALL_PREFIX) @@ -39,11 +42,6 @@ ifeq ($(filter -DBUILD_SHARED_LIBS%,$(CMAKE_ARGS)),) BUILD_SHARED_LIBS = ON endif -# Configuration for CMake build -CMAKE_TOOLCHAIN_NAME = $(ARCH)-toolchain.cmake -CMAKE_TOOLCHAIN_WRK = $(WORK_DIR)/tc_vars.cmake -CMAKE_TOOLCHAIN_PKG = $(WORK_DIR)/$(PKG_DIR)/$(CMAKE_TOOLCHAIN_NAME) - # Ensure to unset cross-compiler target toolchain # so host toolset can be available to CMAKE ifeq ($(strip $(CMAKE_USE_TOOLCHAIN_FILE)),ON) @@ -171,6 +169,10 @@ ifneq ($(strip $(CMAKE_USE_TOOLCHAIN_FILE)),ON) CMAKE_ARGS += -DCMAKE_SYSTEM_PROCESSOR=$(CMAKE_SYSTEM_PROCESSOR) CMAKE_ARGS += -DCMAKE_C_FLAGS="$(CMAKE_C_FLAGS) $(ADDITIONAL_CFLAGS)" CMAKE_ARGS += -DCMAKE_CXX_FLAGS="$(CMAKE_CXX_FLAGS) $(ADDITIONAL_CXXFLAGS)" +ifeq ($(GCC_DEBUG_INFO),1) +CMAKE_ARGS += -DCMAKE_C_FLAGS_DEBUG="$(CMAKE_C_FLAGS) $(ADDITIONAL_CFLAGS) $(GCC_DEBUG_FLAGS)" +CMAKE_ARGS += -DCMAKE_CXX_FLAGS_DEBUG="$(CMAKE_CXX_FLAGS) $(ADDITIONAL_CXXFLAGS) $(GCC_DEBUG_FLAGS)" +endif ifneq ($(strip $(CROSS_COMPILE_ARM)),) CMAKE_ARGS += -DCROSS_COMPILE_ARM=$(CROSS_COMPILE_ARM) diff --git a/mk/spksrc.cross-cmake-toolchainfile.mk b/mk/spksrc.cross-cmake-toolchainfile.mk new file mode 100644 index 00000000000..dd815f9d227 --- /dev/null +++ b/mk/spksrc.cross-cmake-toolchainfile.mk @@ -0,0 +1,61 @@ +# CMake toolchain-file definitions + +# Per-dependency configuration for CMake build +CMAKE_TOOLCHAIN_FILE_NAME = $(ARCH)-toolchain.cmake +CMAKE_TOOLCHAIN_FILE_WRK = $(WORK_DIR)/tc_vars.cmake +CMAKE_TOOLCHAIN_FILE_PKG = $(WORK_DIR)/$(PKG_DIR)/$(CMAKE_TOOLCHAIN_FILE_NAME) + +ifeq ($(strip $(CMAKE_USE_TOOLCHAIN_FILE)),ON) +CMAKE_ARGS += -DCMAKE_TOOLCHAIN_FILE=$(CMAKE_TOOLCHAIN_FILE_PKG) +endif + +# Enforce running in a clean environement to avoid +# issues between 'build' and 'host' environments +ENV_CMAKE = $(addprefix -u ,$(VARS_TO_CLEAN)) $(ENV_FILTERED) +RUN_CMAKE = cd $(WORK_DIR)/$(PKG_DIR) && env $(ENV_CMAKE) + +.PHONY: $(CMAKE_TOOLCHAIN_FILE_PKG) +$(CMAKE_TOOLCHAIN_FILE_PKG): + @$(MSG) Generating $(CMAKE_TOOLCHAIN_FILE_PKG) + env $(MAKE) --no-print-directory cmake_pkg_toolchain > $(CMAKE_TOOLCHAIN_FILE_PKG) 2>/dev/null; + +.PHONY: cmake_pkg_toolchain +cmake_pkg_toolchain: + @cat $(CMAKE_TOOLCHAIN_FILE_WRK) ; \ + echo +ifeq ($(strip $(CMAKE_USE_NASM)),1) +ifeq ($(findstring $(ARCH),$(i686_ARCHS) $(x64_ARCHS)),$(ARCH)) + @echo "# set assembly compiler" ; \ + echo "set(ENABLE_ASSEMBLY $(ENABLE_ASSEMBLY))" ; \ + echo "set(CMAKE_ASM_COMPILER $(CMAKE_ASM_COMPILER))" ; \ + echo +endif +endif + @echo "# set default compiler flags for cross-compiling" ; \ + echo 'set(CMAKE_C_FLAGS $(strip "$(CFLAGS) $(CMAKE_C_FLAGS) $(ADDITIONAL_CFLAGS)"))' ; \ + echo 'set(CMAKE_CPP_FLAGS $(strip "$(CPPFLAGS) $(CMAKE_CPP_FLAGS) $(ADDITIONAL_CPPFLAGS)"))' ; \ + echo 'set(CMAKE_CXX_FLAGS $(strip "$(CXXFLAGS) $(CMAKE_CXX_FLAGS) $(ADDITIONAL_CXXFLAGS)"))' ; \ + echo +ifeq ($(GCC_DEBUG_INFO),1) + @echo "# set Debug compiler extra flags for cross-compiling (and deactivate C/C++ assert)" ; \ + echo 'set(CMAKE_C_FLAGS_DEBUG $(strip "$(GCC_DEBUG_FLAGS) -DNDEBUG") CACHE STRING "Debug C flags" FORCE)' ; \ + echo 'set(CMAKE_CPP_FLAGS_DEBUG $(strip "$(GCC_DEBUG_FLAGS) -DNDEBUG") CACHE STRING "Debug CPP flags" FORCE)' ; \ + echo 'set(CMAKE_CXX_FLAGS_DEBUG $(strip "$(GCC_DEBUG_FLAGS) -DNDEBUG") CACHE STRING "Debug CXX flags" FORCE)' ; \ + echo +endif +ifneq ($(strip $(CMAKE_DISABLE_EXE_LINKER_FLAGS)),1) + @echo 'set(CMAKE_EXE_LINKER_FLAGS $(strip "$(LDFLAGS) $(CMAKE_EXE_LINKER_FLAGS) $(ADDITIONAL_LDFLAGS)"))' +endif + @echo 'set(CMAKE_SHARED_LINKER_FLAGS $(strip "$(LDFLAGS) $(CMAKE_SHARED_LINKER_FLAGS) $(ADDITIONAL_LDFLAGS)"))' ; \ + echo +ifneq ($(strip $(BUILD_SHARED_LIBS)),) + @echo "# build shared library" ; \ + echo "set(BUILD_SHARED_LIBS $(BUILD_SHARED_LIBS))" +endif + @echo "# define library rpath" ; \ + echo "set(CMAKE_INSTALL_RPATH $(subst $() $(),:,$(CMAKE_INSTALL_RPATH)))" ; \ + echo "set(CMAKE_INSTALL_RPATH_USE_LINK_PATH $(CMAKE_INSTALL_RPATH_USE_LINK_PATH))" ; \ + echo "set(CMAKE_BUILD_WITH_INSTALL_RPATH $(CMAKE_BUILD_WITH_INSTALL_RPATH))" ; \ + echo + @echo "# set pkg-config path" ; \ + echo 'set(ENV{PKG_CONFIG_LIBDIR} "$(abspath $(PKG_CONFIG_LIBDIR))")' diff --git a/mk/spksrc.cross-cmake.mk b/mk/spksrc.cross-cmake.mk index e581c1c5d2b..b1311d16e05 100644 --- a/mk/spksrc.cross-cmake.mk +++ b/mk/spksrc.cross-cmake.mk @@ -37,6 +37,9 @@ include ../../mk/spksrc.directories.mk # cmake specific configurations include ../../mk/spksrc.cross-cmake-env.mk +# meson toolchain-file usage definition +include ../../mk/spksrc.cross-cmake-toolchainfile.mk + # configure using cmake ifeq ($(strip $(CONFIGURE_TARGET)),) CONFIGURE_TARGET = cmake_configure_target @@ -68,10 +71,6 @@ endif endif endif -ifeq ($(strip $(CMAKE_USE_TOOLCHAIN_FILE)),ON) -CMAKE_ARGS += -DCMAKE_TOOLCHAIN_FILE=$(CMAKE_TOOLCHAIN_PKG) -endif - ### include ../../mk/spksrc.pre-check.mk @@ -107,58 +106,20 @@ all: install plist ### -.PHONY: $(CMAKE_TOOLCHAIN_PKG) -$(CMAKE_TOOLCHAIN_PKG): - @$(MSG) Generating $(CMAKE_TOOLCHAIN_PKG) - env $(MAKE) --no-print-directory cmake_pkg_toolchain > $(CMAKE_TOOLCHAIN_PKG) 2>/dev/null; - -.PHONY: cmake_pkg_toolchain -cmake_pkg_toolchain: - @cat $(CMAKE_TOOLCHAIN_WRK) ; \ - echo -ifeq ($(strip $(CMAKE_USE_NASM)),1) -ifeq ($(findstring $(ARCH),$(i686_ARCHS) $(x64_ARCHS)),$(ARCH)) - @echo "# set assembly compiler" ; \ - echo "set(ENABLE_ASSEMBLY $(ENABLE_ASSEMBLY))" ; \ - echo "set(CMAKE_ASM_COMPILER $(CMAKE_ASM_COMPILER))" ; \ - echo -endif -endif - @echo "# set compiler flags for cross-compiling" ; \ - echo 'set(CMAKE_C_FLAGS "$(CFLAGS) $(CMAKE_C_FLAGS) $(ADDITIONAL_CFLAGS)")' ; \ - echo 'set(CMAKE_CPP_FLAGS "$(CPPFLAGS) $(CMAKE_CPP_FLAGS) $(ADDITIONAL_CPPFLAGS)")' ; \ - echo 'set(CMAKE_CXX_FLAGS "$(CXXFLAGS) $(CMAKE_CXX_FLAGS) $(ADDITIONAL_CXXFLAGS)")' -ifneq ($(strip $(CMAKE_DISABLE_EXE_LINKER_FLAGS)),1) - @echo 'set(CMAKE_EXE_LINKER_FLAGS "$(LDFLAGS) $(CMAKE_EXE_LINKER_FLAGS) $(ADDITIONAL_LDFLAGS)")' -endif - @echo 'set(CMAKE_SHARED_LINKER_FLAGS "$(LDFLAGS) $(CMAKE_SHARED_LINKER_FLAGS) $(ADDITIONAL_LDFLAGS)")' ; \ - echo -ifneq ($(strip $(BUILD_SHARED_LIBS)),) - @echo "# build shared library" ; \ - echo "set(BUILD_SHARED_LIBS $(BUILD_SHARED_LIBS))" -endif - @echo "# define library rpath" ; \ - echo "set(CMAKE_INSTALL_RPATH $(subst $() $(),:,$(CMAKE_INSTALL_RPATH)))" ; \ - echo "set(CMAKE_INSTALL_RPATH_USE_LINK_PATH $(CMAKE_INSTALL_RPATH_USE_LINK_PATH))" ; \ - echo "set(CMAKE_BUILD_WITH_INSTALL_RPATH $(CMAKE_BUILD_WITH_INSTALL_RPATH))" ; \ - echo - @echo "# set pkg-config path" ; \ - echo 'set(ENV{PKG_CONFIG_LIBDIR} "$(abspath $(PKG_CONFIG_LIBDIR))")' - .PHONY: cmake_configure_target -cmake_configure_target: $(CMAKE_TOOLCHAIN_PKG) +cmake_configure_target: $(CMAKE_TOOLCHAIN_FILE_PKG) @$(MSG) - CMake configure @$(MSG) - Dependencies = $(DEPENDS) @$(MSG) - Optional Dependencies = $(OPTIONAL_DEPENDS) - @$(MSG) - Use Toolchain File = $(CMAKE_USE_TOOLCHAIN_FILE) [$(CMAKE_TOOLCHAIN_PKG)] + @$(MSG) - Use Toolchain File = $(CMAKE_USE_TOOLCHAIN_FILE) [$(CMAKE_TOOLCHAIN_FILE_PKG)] @$(MSG) - Use NASM = $(CMAKE_USE_NASM) @$(MSG) - Use DESTDIR = $(CMAKE_USE_DESTDIR) @$(MSG) - CMake = $(shell which cmake) [$(shell cmake --version | head -1 | awk '{print $$NF}')] @$(MSG) - Path DESTDIR = $(CMAKE_DESTDIR) @$(MSG) - Path BUILD_DIR = $(CMAKE_BUILD_DIR) @$(MSG) - Path CMAKE_SOURCE_DIR = $(CMAKE_SOURCE_DIR) - $(RUN) rm -rf CMakeCache.txt CMakeFiles - $(RUN) cmake -S $(CMAKE_SOURCE_DIR) -B $(CMAKE_BUILD_DIR) $(CMAKE_ARGS) $(ADDITIONAL_CMAKE_ARGS) $(CMAKE_DIR) + @$(RUN) rm -rf CMakeCache.txt CMakeFiles + $(RUN_CMAKE) cmake -S $(CMAKE_SOURCE_DIR) -B $(CMAKE_BUILD_DIR) $(CMAKE_ARGS) $(ADDITIONAL_CMAKE_ARGS) $(CMAKE_DIR) .PHONY: cmake_compile_target @@ -166,7 +127,7 @@ cmake_configure_target: $(CMAKE_TOOLCHAIN_PKG) cmake_compile_target: @$(MSG) - CMake compile @$(MSG) $$(date +%Y%m%d-%H%M%S) MAKELEVEL: $(MAKELEVEL), PARALLEL_MAKE: $(PARALLEL_MAKE), ARCH: $(ARCH)-$(TCVERSION), NAME: $(NAME) >> $(PSTAT_LOG) - $(RUN) cmake --build $(CMAKE_BUILD_DIR) -j $(NCPUS) + $(RUN_CMAKE) cmake --build $(CMAKE_BUILD_DIR) -j $(NCPUS) .PHONY: cmake_install_target @@ -174,9 +135,9 @@ cmake_compile_target: cmake_install_target: @$(MSG) - CMake install ifeq ($(strip $(CMAKE_USE_DESTDIR)),0) - $(RUN) cmake --install $(CMAKE_BUILD_DIR) + $(RUN_CMAKE) cmake --install $(CMAKE_BUILD_DIR) else - $(RUN) DESTDIR=$(CMAKE_DESTDIR) cmake --install $(CMAKE_BUILD_DIR) + $(RUN_CMAKE) DESTDIR=$(CMAKE_DESTDIR) cmake --install $(CMAKE_BUILD_DIR) endif .PHONY: cmake_post_install_target @@ -185,7 +146,7 @@ endif # only called when GCC_NO_DEBUG_INFO=1 cmake_post_install_target: @$(MSG) - CMake post-install \(clean\) - $(RUN) cmake --build $(CMAKE_BUILD_DIR) --target clean + $(RUN_CMAKE) cmake --build $(CMAKE_BUILD_DIR) --target clean ### For arch-* and all- diff --git a/mk/spksrc.cross-env.mk b/mk/spksrc.cross-env.mk index f9e6c53e5ca..cffa783a6d4 100644 --- a/mk/spksrc.cross-env.mk +++ b/mk/spksrc.cross-env.mk @@ -21,30 +21,6 @@ TOOLKIT_ROOT = $(WORK_DIR)/../../../toolkit/syno-$(ARCH)-$(TCVERSION)/work ENV += TOOLKIT_ROOT=$(TOOLKIT_ROOT) endif -ifeq ($(strip $(GCC_DEBUG_INFO)),1) -GCC_DEBUG_FLAGS = -O0 -g3 -ADDITIONAL_CFLAGS := $(patsubst -O%,,$(ADDITIONAL_CFLAGS)) $(GCC_DEBUG_FLAGS) -ADDITIONAL_CPPFLAGS := $(patsubst -O%,,$(ADDITIONAL_CPPFLAGS)) $(GCC_DEBUG_FLAGS) -ADDITIONAL_CXXFLAGS := $(patsubst -O%,,$(ADDITIONAL_CXXFLAGS)) $(GCC_DEBUG_FLAGS) -endif - -# gcc: -# -g0 deactivates debug information generation -# -Os enable some optimizations while avoiding those that increases space -# -flto enable optimization at link time (Link Time Optimization) -# -ffunction-sections -fdata-sections allows placing functions in their own ELF section -# ld: -# -Wl,--gc-sections allows removing unused functions set previously (-f*-sections) -# -w omits the DWARF symbol table removing debugging information -# -s strips the symbol table and debug information from the binary -ifeq ($(strip $(GCC_NO_DEBUG_INFO)),1) -GCC_NO_DEBUG_FLAGS = -g0 -Os -ffunction-sections -fdata-sections -fvisibility=hidden -ADDITIONAL_CFLAGS := $(patsubst -O%,,$(ADDITIONAL_CFLAGS)) $(GCC_NO_DEBUG_FLAGS) -ADDITIONAL_CPPFLAGS := $(patsubst -O%,,$(ADDITIONAL_CPPFLAGS)) $(GCC_NO_DEBUG_FLAGS) -ADDITIONAL_CXXFLAGS := $(patsubst -O%,,$(ADDITIONAL_CXXFLAGS)) $(GCC_NO_DEBUG_FLAGS) -ADDITIONAL_LDFLAGS := $(ADDITIONAL_LDFLAGS) -w -s -Wl,--gc-sections -endif - ifneq ($(strip $(TC)),) TC_VARS_MK = $(WORK_DIR)/tc_vars.mk TC_VARS_CMAKE = $(WORK_DIR)/tc_vars.cmake @@ -82,11 +58,9 @@ else endif -include $(TC_VARS_MK) -ifneq ($(strip $(CMAKE_USE_TOOLCHAIN_FILE)),ON) ENV += TC=$(TC) ENV += $(TC_ENV) endif -endif # Allow toolchain mandatory variables to # be available at all build stages in @@ -94,3 +68,40 @@ endif ENV += TC_GCC=$$(eval $$(echo $(WORK_DIR)/../../../toolchain/syno-$(ARCH)-$(TCVERSION)/work/$(TC_TARGET)/bin/$(TC_PREFIX)gcc -dumpversion) 2>/dev/null || true) ENV += TC_GLIBC=$(TC_GLIBC) ENV += TC_KERNEL=$(TC_KERNEL) + +# Debug flags (remove any other -O%): +# -ggdb3 generates extensive debug info optimized for GDB +# -g3 includes macro definitions in debug info +# -O0 disables optimizations for predictable debugging +# -gz compresses debug sections to reduce file size (60-80% smaller) +ifeq ($(strip $(GCC_DEBUG_INFO)),1) + ifeq ($(strip $(GCC_DEBUG_FLAGS)),) + GCC_DEBUG_FLAGS = -ggdb3 -g3 -O0 + + # Check compression support and add to flags + GCC_SUPPORTS_GZ := $(shell echo | $(WORK_DIR)/../../../toolchain/syno-$(ARCH)-$(TCVERSION)/work/$(TC_TARGET)/bin/$(TC_PREFIX)gcc -gz -E - 2>/dev/null 1>&2 && echo yes) + ifeq ($(strip $(GCC_SUPPORTS_GZ)),yes) + GCC_DEBUG_FLAGS += -gz + endif + endif + + ADDITIONAL_CFLAGS := $(patsubst -O%,,$(ADDITIONAL_CFLAGS)) + ADDITIONAL_CPPFLAGS := $(patsubst -O%,,$(ADDITIONAL_CPPFLAGS)) + ADDITIONAL_CXXFLAGS := $(patsubst -O%,,$(ADDITIONAL_CXXFLAGS)) + +# gcc: +# -g0 deactivates debug information generation +# -Os enable some optimizations while avoiding those that increases space +# -flto enable optimization at link time (Link Time Optimization) +# -ffunction-sections -fdata-sections allows placing functions in their own ELF section +# ld: +# -Wl,--gc-sections allows removing unused functions set previously (-f*-sections) +# -w omits the DWARF symbol table removing debugging information +# -s strips the symbol table and debug information from the binary +else ifeq ($(strip $(GCC_NO_DEBUG_INFO)),1) + GCC_NO_DEBUG_FLAGS = -g0 -Os -ffunction-sections -fdata-sections -fvisibility=hidden + ADDITIONAL_CFLAGS := $(patsubst -O%,,$(ADDITIONAL_CFLAGS)) $(GCC_NO_DEBUG_FLAGS) + ADDITIONAL_CPPFLAGS := $(patsubst -O%,,$(ADDITIONAL_CPPFLAGS)) $(GCC_NO_DEBUG_FLAGS) + ADDITIONAL_CXXFLAGS := $(patsubst -O%,,$(ADDITIONAL_CXXFLAGS)) $(GCC_NO_DEBUG_FLAGS) + ADDITIONAL_LDFLAGS := $(ADDITIONAL_LDFLAGS) -w -s -Wl,--gc-sections +endif diff --git a/mk/spksrc.cross-meson-crossfile.mk b/mk/spksrc.cross-meson-crossfile.mk index 97a7ff2eade..a3fb0b35681 100644 --- a/mk/spksrc.cross-meson-crossfile.mk +++ b/mk/spksrc.cross-meson-crossfile.mk @@ -5,35 +5,10 @@ MESON_CROSS_FILE_NAME = $(ARCH)-crossfile.meson MESON_CROSS_FILE_PKG = $(WORK_DIR)/$(PKG_DIR)/$(MESON_CROSS_FILE_NAME) CONFIGURE_ARGS += --cross-file=$(MESON_CROSS_FILE_PKG) -# Enforce unsetting all flags as using cross-file with the -# exception of PKG_CONFIG_LIBDIR to force default pkgconfig. -# -# Also due to meson bug, keep LDFLAGS for rpath management. -# This only occurs when there are multiple rpath definitions. -# Ref: https://github.com/mesonbuild/meson/issues/14354 -# https://github.com/mesonbuild/meson/issues/6541 -# -# Note0: The only way to get rpath defined in resulting *.so -# is from using LDFLAGS variable part of environment. -# Note1: Adding options --enable-new-dtags or --strip-all to -# *_link_args has no effect on resulting rpath and runpath. -# Note2: Defining build_rpath and install_rpath has no effect. -# It should normally affect the runpath and not the rpath. -# Note3: Similarly, re-defining -Wl,--rpath-link and -Wl,--rpath -# part of *_link_args has no effect neither as LDFLAGS -# needs to be set anyway and already has rpath defined. -# Note4: Defining runpath (instead of rpath) using install_rpath -# or -Wl,--enable-new-dtags has no effect neither. -# -ENV_MESON = -u AR -u AS -u CC -u CPP -u CXX -u LD -u LDSHARED -ENV_MESON += -u OBJCOPY -u OBJDUMP -u RANLIB -u READELF -u STRIP -ENV_MESON += -u CFLAGS -u ADDITIONAL_CFLAGS -ENV_MESON += -u CPPFLAGS -u ADDITIONAL_CPPFLAGS -ENV_MESON += -u CXXFLAGS -u ADDITIONAL_CXXFLAGS -ENV_MESON += -u FFLAGS -u ADDITIONAL_FFLAGS -#ENV_MESON += -u LDFLAGS -u ADDITIONAL_LDFLAGS -ENV_MESON += -u PKG_CONFIG_PATH -u SYSROOT -ENV_MESON += $(ENV) +# Enforce running in a clean environement to avoid +# issues between 'build' and 'host' environments +ENV_MESON = $(addprefix -u ,$(VARS_TO_CLEAN)) $(ENV_FILTERED) +RUN_MESON = cd $(MESON_BASE_DIR) && env $(ENV_MESON) .PHONY: $(MESON_CROSS_FILE_PKG) $(MESON_CROSS_FILE_PKG): @@ -54,57 +29,77 @@ ifeq ($(strip $(MESON_PYTHON)),1) echo "meson = '$$(which meson)'" ; \ echo "python = '$$(which cross-python)'" endif - @echo - @echo "[built-in options]" ; \ - echo "prefix = '$(INSTALL_PREFIX)'" @echo @echo "[properties]" ; \ echo "# Not needed due to PKG_CONFIG_LIBDIR" ; \ echo "#pkg_config_path = '$(abspath $(PKG_CONFIG_LIBDIR))'" @echo - @echo "[built-in]" ; \ - echo "c_args = [" + @echo "[built-in options]" ; \ + echo "prefix = '$(INSTALL_PREFIX)'" +ifeq ($(GCC_DEBUG_INFO),1) + @echo "debug = 'true'" ; \ + echo "b_ndebug = 'true'" ; \ + echo "optimization = '0'" ; \ + echo +endif +# @echo "install_rpath = [" ; \ +# echo $(LDFLAGS) $(ADDITIONAL_LDFLAGS) | tr ' ' '\n' | grep '^-Wl,--rpath,' | sed -e "s/^-Wl,--rpath,//" -e "s/^/\t'/" -e "s/$$/',/" ; \ +# echo -ne "\t]\n" ; \ +# echo +# @echo "runtime_rpath = [" ; \ +# echo $(LDFLAGS) $(ADDITIONAL_LDFLAGS) | tr ' ' '\n' | grep '^-Wl,--rpath,' | sed -e "s/^-Wl,--rpath,//" -e "s/^/\t'/" -e "s/$$/',/" ; \ +# echo -ne "\t]\n" ; \ +# echo + @echo "c_args = [" ifneq ($(strip $(MESON_BUILTIN_C_ARGS)),) @echo -ne "\t'$(MESON_BUILTIN_C_ARGS)',\n" endif - @echo $(CFLAGS) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" ; \ - echo -ne "\t]\n" +ifeq ($(GCC_DEBUG_INFO),1) + @echo $(patsubst -O%,,$(CFLAGS) $(GCC_DEBUG_FLAGS)) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" +else + @echo $(CFLAGS) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" +endif + @echo -ne "\t]\n" @echo @echo "c_link_args = [" ifneq ($(strip $(MESON_BUILTIN_C_LINK_ARGS)),) @echo -ne "\t'$(MESON_BUILTIN_C_LINK_ARGS)',\n" endif - @echo $(LDFLAGS) | tr ' ' '\n' | grep -v rpath | sed -e "s/^/\t'/" -e "s/$$/',/" ; \ + @echo $(LDFLAGS) $(ADDITIONAL_LDFLAGS) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" ; \ echo -ne "\t]\n" @echo @echo "cpp_args = [" ifneq ($(strip $(MESON_BUILTIN_CPP_ARGS)),) @echo -ne "\t'$(MESON_BUILTIN_CPP_ARGS)',\n" endif - @echo $(CPPFLAGS) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" ; \ - echo -ne "\t]\n" +ifeq ($(GCC_DEBUG_INFO),1) + @echo $(patsubst -O%,,$(CPPFLAGS) $(GCC_DEBUG_FLAGS)) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" +else + @echo $(CPPFLAGS) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" +endif + @echo -ne "\t]\n" @echo @echo "cpp_link_args = [" ifneq ($(strip $(MESON_BUILTIN_CPP_LINK_ARGS)),) @echo -ne "\t'$(MESON_BUILTIN_CPP_LINK_ARGS)',\n" endif - @echo $(LDFLAGS) | tr ' ' '\n' | grep -v rpath | sed -e "s/^/\t'/" -e "s/$$/',/" ; \ + @echo $(LDFLAGS) $(ADDITIONAL_LDFLAGS) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" ; \ echo -ne "\t]\n" @echo - @echo "cxx_args = [" - @echo $(CXXFLAGS) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" ; \ - echo -ne "\t]\n" - @echo - @echo "fc_args = [" + @echo "fortran_args = [" ifneq ($(strip $(MESON_BUILTIN_FC_ARGS)),) @echo -ne "\t'$(MESON_BUILTIN_FC_ARGS)',\n" endif - @echo $(FFLAGS) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" ; \ - echo -ne "\t]\n" +ifeq ($(GCC_DEBUG_INFO),1) + @echo $(patsubst -O%,,$(FFLAGS) $(GCC_DEBUG_FLAGS)) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" +else + @echo $(FFLAGS) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" +endif + @echo -ne "\t]\n" @echo - @echo "fc_link_args = [" + @echo "fortran_link_args = [" ifneq ($(strip $(MESON_BUILTIN_FC_LINK_ARGS)),) @echo -ne "\t'$(MESON_BUILTIN_FC_LINK_ARGS)',\n" endif - @echo $(LDFLAGS) | tr ' ' '\n' | grep -v rpath | sed -e "s/^/\t'/" -e "s/$$/',/" ; \ + @echo $(LDFLAGS) $(ADDITIONAL_LDFLAGS) | tr ' ' '\n' | sed -e "s/^/\t'/" -e "s/$$/',/" ; \ echo -ne "\t]\n" diff --git a/mk/spksrc.cross-meson-env.mk b/mk/spksrc.cross-meson-env.mk index eabceb77f16..bb909f57be9 100644 --- a/mk/spksrc.cross-meson-env.mk +++ b/mk/spksrc.cross-meson-env.mk @@ -14,9 +14,13 @@ endif # Set other build options # We normally build regular Release ifeq ($(strip $(MESON_BUILD_TYPE)),) -CONFIGURE_ARGS += -Dbuildtype=release + ifeq ($(strip $(GCC_DEBUG_INFO)),1) + CONFIGURE_ARGS += -Dbuildtype=debug + else + CONFIGURE_ARGS += -Dbuildtype=release + endif else -CONFIGURE_ARGS += -Dbuildtype=$(MESON_BUILD_TYPE) + CONFIGURE_ARGS += -Dbuildtype=$(MESON_BUILD_TYPE) endif # Generic cross-file and native-file configurations diff --git a/mk/spksrc.cross-meson.mk b/mk/spksrc.cross-meson.mk index c56748ae731..3082172d670 100644 --- a/mk/spksrc.cross-meson.mk +++ b/mk/spksrc.cross-meson.mk @@ -53,7 +53,7 @@ meson_configure_target: $(MESON_CROSS_FILE_PKG) @$(MSG) - Configure ARGS = $(CONFIGURE_ARGS) @$(MSG) - Install prefix = $(INSTALL_PREFIX) @$(MSG) meson setup $(MESON_BUILD_DIR) -Dprefix=$(INSTALL_PREFIX) $(CONFIGURE_ARGS) - @cd $(MESON_BASE_DIR) && env $(ENV_MESON) meson setup $(MESON_BUILD_DIR) -Dprefix=$(INSTALL_PREFIX) $(CONFIGURE_ARGS) + $(RUN_MESON) meson setup $(MESON_BUILD_DIR) -Dprefix=$(INSTALL_PREFIX) $(CONFIGURE_ARGS) # call-up regular build process include ../../mk/spksrc.cross-cc.mk diff --git a/mk/spksrc.cross-ninja.mk b/mk/spksrc.cross-ninja.mk index 5c85e3bca7e..d4947e96b5f 100644 --- a/mk/spksrc.cross-ninja.mk +++ b/mk/spksrc.cross-ninja.mk @@ -10,6 +10,9 @@ ENV += PKG_CONFIG=/usr/bin/pkg-config # CMake - begin ifeq ($(strip $(CMAKE_USE_NINJA)),1) +# Set default run environment +RUN_NINJA = $(RUN_CMAKE) + # Set default build directory ifeq ($(strip $(NINJA_BUILD_DIR)),) NINJA_BUILD_DIR = $(CMAKE_BUILD_DIR) @@ -31,6 +34,9 @@ endif # Meson - begin (default) else +# Set default run environment +RUN_NINJA = $(RUN_MESON) + # Set default build directory NINJA_BUILD_DIR = $(MESON_BUILD_DIR) # set default use destdir @@ -69,7 +75,7 @@ ninja_compile_target: ifeq ($(strip $(CMAKE_USE_NINJA)),1) @$(MSG) - Use NASM = $(CMAKE_USE_NASM) endif - $(RUN) ninja -C $(NINJA_BUILD_DIR) + $(RUN_NINJA) ninja -C $(NINJA_BUILD_DIR) .PHONY: ninja_install_target @@ -79,9 +85,9 @@ ninja_install_target: @$(MSG) - Ninja installation path = $(NINJA_DESTDIR) @$(MSG) - Ninja use DESTDIR = $(NINJA_USE_DESTDIR) ifeq ($(strip $(NINJA_USE_DESTDIR)),0) - $(RUN) ninja -C $(NINJA_BUILD_DIR) install + $(RUN_NINJA) ninja -C $(NINJA_BUILD_DIR) install else - $(RUN) DESTDIR=$(NINJA_DESTDIR) ninja -C $(NINJA_BUILD_DIR) install + $(RUN_NINJA) DESTDIR=$(NINJA_DESTDIR) ninja -C $(NINJA_BUILD_DIR) install endif .PHONY: ninja_post_install_target @@ -89,6 +95,6 @@ endif # default ninja post-install: clean ninja_post_install_target: @$(MSG) - Ninja post-install \(clean\) - $(RUN) ninja -C $(NINJA_BUILD_DIR) clean + $(RUN_NINJA) ninja -C $(NINJA_BUILD_DIR) clean $(RUN) rm -f $(NINJA_BUILD_DIR)/build.ninja $(RUN) rm -f $(NINJA_BUILD_DIR)/compile_commands.json diff --git a/mk/spksrc.tc.mk b/mk/spksrc.tc.mk index c983679ec1a..55d53295f52 100644 --- a/mk/spksrc.tc.mk +++ b/mk/spksrc.tc.mk @@ -104,23 +104,47 @@ endif @echo "# Disable developer warnings" ; \ echo 'set(CMAKE_SUPPRESS_DEVELOPER_WARNINGS ON CACHE BOOL "Disable developer warnings")' @echo - @echo "# define toolchain location (used with CMAKE_TOOLCHAIN_PKG)" ; \ + @echo "# define toolchain location (used with CMAKE_TOOLCHAIN_FILE_PKG)" ; \ echo "set(_CMAKE_TOOLCHAIN_LOCATION $(_CMAKE_TOOLCHAIN_LOCATION))" ; \ echo "set(_CMAKE_TOOLCHAIN_PREFIX $(_CMAKE_TOOLCHAIN_PREFIX))" ; \ echo - @echo "# define compilers and tools to use" ; \ + @echo "# define cross-compilers and tools to use" ; \ for tool in $(TOOLS) ; \ do \ target=$$(echo $${tool} | sed 's/\(.*\):\(.*\)/\1/' | tr [:lower:] [:upper:] ) ; \ source=$$(echo $${tool} | sed 's/\(.*\):\(.*\)/\2/' ) ; \ if [ "$${target}" = "CC" ] ; then \ - echo "set(CMAKE_C_COMPILER $(WORK_DIR)/$(TC_TARGET)/bin/$(TC_PREFIX)$${source})" ; \ + printf "set(%-25s %s)\n" CMAKE_C_COMPILER $(WORK_DIR)/$(TC_TARGET)/bin/$(TC_PREFIX)$${source} ; \ elif [ "$${target}" = "CPP" -o "$${target}" = "CXX" ] ; then \ - echo "set(CMAKE_$${target}_COMPILER $(WORK_DIR)/$(TC_TARGET)/bin/$(TC_PREFIX)$${source})" ; \ + printf "set(%-25s %s)\n" CMAKE_$${target}_COMPILER $(WORK_DIR)/$(TC_TARGET)/bin/$(TC_PREFIX)$${source} ; \ elif [ "$${target}" = "LD" ] ; then \ - echo "set(CMAKE_LINKER $(WORK_DIR)/$(TC_TARGET)/bin/$(TC_PREFIX)$${source})" ; \ + printf "set(%-25s %s)\n" CMAKE_LINKER $(WORK_DIR)/$(TC_TARGET)/bin/$(TC_PREFIX)$${source} ; \ + elif [ "$${target}" = "LDSHARED" ] ; then \ + printf "set(%-25s %s)\n" CMAKE_SHARED_LINKER_FLAGS $$(echo $${source} | cut -f2 -d' ') ; \ + elif [ "$${target}" = "FC" ] ; then \ + printf "set(%-25s %s)\n" CMAKE_Fortran_COMPILER $(WORK_DIR)/$(TC_TARGET)/bin/$(TC_PREFIX)$$(echo $${source} | cut -f2 -d' ') ; \ else \ - echo "set(CMAKE_$${target} $(WORK_DIR)/$(TC_TARGET)/bin/$(TC_PREFIX)$${source})" ; \ + printf "set(%-25s %s)\n" CMAKE_$${target} $(WORK_DIR)/$(TC_TARGET)/bin/$(TC_PREFIX)$${source} ; \ + fi ; \ + done ; \ + echo + @echo "# define 'build' compilers and tools to use" ; \ + for tool in $(TOOLS) ; \ + do \ + target=$$(echo $${tool} | sed 's/\(.*\):\(.*\)/\1/' | tr [:lower:] [:upper:] ) ; \ + source=$$(echo $${tool} | sed 's/\(.*\):\(.*\)/\2/' ) ; \ + if [ "$${target}" = "CC" ] ; then \ + printf "set(%-35s %s)\n" CMAKE_C_COMPILER_FOR_BUILD $$(which $${source}) ; \ + elif [ "$${target}" = "CPP" -o "$${target}" = "CXX" ] ; then \ + printf "set(%-35s %s)\n" CMAKE_$${target}_COMPILER_FOR_BUILD $$(which $${source}) ; \ + elif [ "$${target}" = "LD" ] ; then \ + printf "set(%-35s %s)\n" CMAKE_LINKER_FOR_BUILD $$(which $${source}) ; \ + elif [ "$${target}" = "LDSHARED" ] ; then \ + printf "set(%-25s %s)\n" CMAKE_SHARED_LINKER_FLAGS_FOR_BUILD $$(echo $${source} | cut -f2 -d' ') ; \ + elif [ "$${target}" = "FC" ] ; then \ + printf "set(%-35s %s)\n" CMAKE_Fortran_COMPILER_FOR_BUILD $$(which $${source}) ; \ + else \ + printf "set(%-35s %s)\n" CMAKE_$${target}_FOR_BUILD $$(which $${source}) ; \ fi ; \ done ; \ echo @@ -192,11 +216,11 @@ tc_vars: flag gcc_version=$$(eval $$(echo $(WORK_DIR)/$(TC_TARGET)/bin/$(TC_PREFIX)$${source} -dumpversion) 2>/dev/null || true) ; \ fi ; \ done ; \ - echo TC_ENV += CFLAGS=\"$(CFLAGS) $(GCC_DEBUG) $$\(ADDITIONAL_CFLAGS\)\" ; \ - echo TC_ENV += CPPFLAGS=\"$(CPPFLAGS) $(GCC_DEBUG) $$\(ADDITIONAL_CPPFLAGS\)\" ; \ - echo TC_ENV += CXXFLAGS=\"$(CXXFLAGS) $(GCC_DEBUG) $$\(ADDITIONAL_CXXFLAGS\)\" ; \ + echo TC_ENV += CFLAGS=\"$(CFLAGS) $$\(GCC_DEBUG_FLAGS\) $$\(ADDITIONAL_CFLAGS\)\" ; \ + echo TC_ENV += CPPFLAGS=\"$(CPPFLAGS) $$\(GCC_DEBUG_FLAGS\) $$\(ADDITIONAL_CPPFLAGS\)\" ; \ + echo TC_ENV += CXXFLAGS=\"$(CXXFLAGS) $$\(GCC_DEBUG_FLAGS\) $$\(ADDITIONAL_CXXFLAGS\)\" ; \ if [ "$$(printf '%s\n' "7" "$(TC_VERS)" | sort -V | tail -n1)" = "$(TC_VERS)" ]; then \ - echo TC_ENV += FFLAGS=\"$(FFLAGS) $(GCC_DEBUG) $$\(ADDITIONAL_FFLAGS\)\" ; \ + echo TC_ENV += FFLAGS=\"$(FFLAGS) $$\(GCC_DEBUG_FLAGS\) $$\(ADDITIONAL_FFLAGS\)\" ; \ fi ; \ echo TC_ENV += LDFLAGS=\"$(LDFLAGS) $$\(ADDITIONAL_LDFLAGS\)\" ; \ echo TC_ENV += CARGO_HOME=\"$(realpath $(CARGO_HOME))\" ; \ @@ -212,11 +236,11 @@ tc_vars: flag echo TC_TARGET := $(TC_TARGET) ; \ echo TC_PREFIX := $(TC_PREFIX) ; \ echo TC_PATH := $(WORK_DIR)/$(TC_TARGET)/bin/ ; \ - echo CFLAGS := $(CFLAGS) $(GCC_DEBUG) $$\(ADDITIONAL_CFLAGS\) ; \ - echo CPPFLAGS := $(CPPFLAGS) $(GCC_DEBUG) $$\(ADDITIONAL_CPPFLAGS\) ; \ - echo CXXFLAGS := $(CXXFLAGS) $(GCC_DEBUG) $$\(ADDITIONAL_CXXFLAGS\) ; \ + echo CFLAGS := $(CFLAGS) $$\(GCC_DEBUG_FLAGS\) $$\(ADDITIONAL_CFLAGS\) ; \ + echo CPPFLAGS := $(CPPFLAGS) $$\(GCC_DEBUG_FLAGS\) $$\(ADDITIONAL_CPPFLAGS\) ; \ + echo CXXFLAGS := $(CXXFLAGS) $$\(GCC_DEBUG_FLAGS\) $$\(ADDITIONAL_CXXFLAGS\) ; \ if [ "$$(printf '%s\n' "7" "$(TC_VERS)" | sort -V | tail -n1)" = "$(TC_VERS)" ]; then \ - echo FFLAGS := $(FFLAGS) $(GCC_DEBUG) $$\(ADDITIONAL_FFLAGS\) ; \ + echo FFLAGS := $(FFLAGS) $$\(GCC_DEBUG_FLAGS\) $$\(ADDITIONAL_FFLAGS\) ; \ fi ; \ echo LDFLAGS := $(LDFLAGS) $$\(ADDITIONAL_LDFLAGS\) ; \ echo TC_INCLUDE := $(TC_INCLUDE) ; \ diff --git a/spk/ffmpeg7/Makefile b/spk/ffmpeg7/Makefile index 0fdb0f2c3bd..7bed419f29e 100644 --- a/spk/ffmpeg7/Makefile +++ b/spk/ffmpeg7/Makefile @@ -1,8 +1,8 @@ SPK_NAME = ffmpeg7 -SPK_VERS = 7.0.2 -SPK_REV = 2 +SPK_VERS = 7.0.3 +SPK_REV = 4 SPK_ICON = src/ffmpeg.png -CHANGELOG = "1. Fix issue on ppc-qoriq arch" +CHANGELOG = "1. Update to version 7.0.3" DEPENDS = cross/ffmpeg7