diff --git a/lang/rust/maturin/Makefile b/lang/maturin/Makefile similarity index 70% rename from lang/rust/maturin/Makefile rename to lang/maturin/Makefile index c2ed4bcd1..e1c7ca50f 100644 --- a/lang/rust/maturin/Makefile +++ b/lang/maturin/Makefile @@ -5,26 +5,23 @@ include $(TOPDIR)/rules.mk PKG_NAME:=maturin -PKG_VERSION:=0.14.10 +PKG_VERSION:=0.14.15 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/PyO3/maturin/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=8fc9bcdcb7f1535d5e3e8bb500c348ca1bff5a6dce87b0ab7dbc5a49723da28a +PKG_HASH:=60cbf8ff73a36333c3f5483ca679a52169839db381f06683d8e61a6c00c28cf7 PKG_MAINTAINER:=Luca Barbato PKG_LICENSE:=Apache-2.0 MIT PKG_LICENSE_FILES:=license-apache license-mit HOST_BUILD_DEPENDS:=rust/host -PKG_BUILD_DEPENDS:=rust/host - -PKG_BUILD_PARALLEL:=1 PKG_HOST_ONLY:=1 -include ../rust-package.mk include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/package.mk +include ../rust/rust-host-build.mk define Package/maturin SECTION:=lang @@ -35,19 +32,11 @@ define Package/maturin URL:=https://maturin.rs endef -define Host/Compile - $(call Host/Compile/Cargo) -endef - define Package/maturin/description Build and publish crates with pyo3, rust-cpython, cffi and uniffi bindings as well as rust binaries as python packages. endef -define Host/Install - $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/bin - $(INSTALL_BIN) $(HOST_INSTALL_DIR)/bin/maturin $(STAGING_DIR_HOSTPKG)/bin/maturin -endef - +$(eval $(call RustBinHostBuild)) $(eval $(call HostBuild)) $(eval $(call BuildPackage,maturin)) diff --git a/lang/rust/Config.in b/lang/rust/Config.in deleted file mode 100644 index 490322f48..000000000 --- a/lang/rust/Config.in +++ /dev/null @@ -1,95 +0,0 @@ -# Rust Language Options -menu "Compiler Options" - visible if PACKAGE_rust - - config RUST_DEBUG - bool "Enables Debugging Environment (--enable-debug)" - - config RUST_DOCS - bool "Build standard library documentation (--enable-docs)" - - config RUST_COMPILER_DOCS - bool "Build compiler documentation (--enable-compiler-docs)" - - config RUST_OPTIMIZE_TESTS - bool "Build tests with optimizations (--enable-optimized-tests)" - - config RUST_PARALLEL - bool "Build with multi-threaded support (--enable-parallel-compiler)" - - config RUST_VERBOSE_TESTS - bool "Enable verbose output when running tests (--enable-verbose-tests)" - - config RUST_CCACHE - bool "Build with ccache enabled (--enable-ccache)" - - config RUST_LLVM_STATIC - bool "Statically link to libstdc++ to LLVM (--enable-llvm-static-stdccp)" - - config RUST_LLVM_SHARED - bool "Prefer shared linking to LLVM (--enable-llvm-link-shared)" - - config RUST_CODEGEN_TESTS - bool "Run the src/test/codegen tests (--enable-codegen-tests)" - - config RUST_OPTION_CHECKING - bool "Complain about unrecognized options in this configure script (--enable-option-checking)" - default y - - config RUST_ENABLE_NINJA - bool "Build LLVM using the Ninja generator (--enable-ninja)" - default y - - config RUST_LOCKED_DEPS - bool "Force Cargo.lock to be up to date (--enable-locked-deps)" - - config RUST_VENDOR - bool "Enable usage of vendored Rust crates (--enable-vendor)" - - config RUST_SANITIZERS - bool "Build the sanitizer runtimes (asan, lsan, msan, tsan) (--enable-sanitizers)" - - config RUST_DIST_SRC - bool "When building tarballs enables building a source tarball (--enable-dist-src)" - - config RUST_CARGO_NATIVE_STATIC - bool "Build static native libraries in Cargo (--enable-cargo-native-static)" - - config RUST_PROFILER - bool "Build the profiler runtime (--enable-profiler)" - - config RUST_FULL_TOOLS - bool "Build all tools (--enable-full-tools)" - - config RUST_MISSING_TOOLS - bool "Allow failures when building tools (--enable-missing-tools)" - default y - - config RUST_USE_LIBCXX - bool "Build LLVM with libc++ (--enable-use-libcxx)" - - config RUST_CONTROL_FLOW_GUARD - bool "Enable Control Flow Guard (--enable-control-flow-guard)" - - config RUST_OPTIMIZE_LLVM - bool "Build optimized LLVM (--enable-optimize-llvm)" - default y - - config RUST_LLVM_ASSERTIONS - bool "Build LLVM with assertions (--enable-llvm-assertions)" - - config RUST_DEBUG_ASSERTIONS - bool "Build with debugging assertions (--enable-debug-assertions)" - - config RUST_LLVM_RELEASE_DEBUGINFO - bool "Build LLVM with debugger metadata (--enable-llvm-release-debuginfo)" - - config RUST_MANAGE_SUBMODULES - bool "Let the build manage the git submodules (--enable-manage-submodules)" - default y - - config RUST_FULL_BOOTSTRAP - bool "Full Bootstrap - Build three compilers instead of two (--enable-full-bootstrap)" - -endmenu - diff --git a/lang/rust/Makefile b/lang/rust/Makefile index 2b247069a..ca5437aeb 100644 --- a/lang/rust/Makefile +++ b/lang/rust/Makefile @@ -11,7 +11,7 @@ PKG_RELEASE:=1 PKG_SOURCE:=rustc-$(PKG_VERSION)-src.tar.gz PKG_SOURCE_URL:=https://static.rust-lang.org/dist/ PKG_HASH:=eaf4d8b19f23a232a4770fb53ab5e7acdedec11da1d02b0e5d491ca92ca96d62 -HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/rustc-$(PKG_VERSION)-src/ +HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/rustc-$(PKG_VERSION)-src PKG_MAINTAINER:=Luca Barbato PKG_LICENSE:=Apache-2.0 MIT @@ -20,17 +20,24 @@ PKG_LICENSE_FILES:=LICENSE-APACHE LICENSE-MIT HOST_BUILD_DEPENDS:=python3/host PKG_HOST_ONLY:=1 -include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/host-build.mk +include $(INCLUDE_DIR)/package.mk +include ./rust-values.mk -# rust environment variables -include ./rust-host.mk +define Package/rust + SECTION:=lang + CATEGORY:=Languages + SUBMENU:=Rust + TITLE:=Rust Programming Language Compiler + URL:=https://www.rust-lang.org/ + DEPENDS:=$(RUST_ARCH_DEPENDS) +endef -# Rust Temp Directory -RUST_TMP_DIR:=$(TMP_DIR)/rust-install - -RUST_INSTALL_HOST_FILENAME:=$(PKG_NAME)-$(PKG_VERSION)-$(RUSTC_HOST_ARCH)-install.tar.xz -RUST_INSTALL_TARGET_FILENAME:=$(PKG_NAME)-$(PKG_VERSION)-$(RUSTC_TARGET_ARCH)-install.tar.xz +define Package/rust/description + Rust is a multi-paradigm, general-purpose programming language designed for performance + and safety, especially safe concurrency. Rust is syntactically similar to C++, but can + guarantee memory safety by using a borrow checker to validate references. +endef # Rust-lang has an uninstall script RUST_UNINSTALL:=$(CARGO_HOME)/lib/rustlib/uninstall.sh @@ -41,8 +48,8 @@ TARGET_CONFIGURE_ARGS = \ --set=target.$(RUSTC_TARGET_ARCH).cc=$(TARGET_CC_NOCACHE) \ --set=target.$(RUSTC_TARGET_ARCH).cxx=$(TARGET_CXX_NOCACHE) \ --set=target.$(RUSTC_TARGET_ARCH).linker=$(TARGET_CC_NOCACHE) \ - --set=target.$(RUSTC_TARGET_ARCH).musl-root=$(TOOLCHAIN_DIR) \ - --set=target.$(RUSTC_TARGET_ARCH).ranlib=$(TARGET_RANLIB) + --set=target.$(RUSTC_TARGET_ARCH).ranlib=$(TARGET_RANLIB) \ + $(if $(CONFIG_USE_MUSL),--set=target.$(RUSTC_TARGET_ARCH).musl-root=$(TOOLCHAIN_DIR)) # CARGO_HOME is an environmental HOST_CONFIGURE_OPTS += CARGO_HOME="$(CARGO_HOME)" @@ -59,82 +66,38 @@ HOST_CONFIGURE_ARGS = \ --datadir=$(CARGO_HOME)/share \ --mandir=$(CARGO_HOME)/man \ --dist-compression-formats=xz \ - --enable-llvm-link-shared \ - --enable-llvm-plugins \ --enable-missing-tools \ - --enable-ninja \ --disable-sanitizers \ --release-channel=stable \ --enable-cargo-native-static \ + --set=llvm.download-ci-llvm=true \ $(TARGET_CONFIGURE_ARGS) -define Host/Prepare - # Ensure rust temp directory - [ -d $(RUST_TMP_DIR) ] || \ - mkdir -p $(RUST_TMP_DIR) - - $(call Host/Prepare/Default) -endef - define Host/Uninstall # Call the Uninstall script [ -f $(RUST_UNINSTALL) ] && \ - $(BASH) $(RUST_UNINSTALL) || echo No Uninstall - - rm -rf $(RUST_TMP_DIR) + $(BASH) $(RUST_UNINSTALL) || echo No Uninstall endef -# Makes and then packages the dist artifacts define Host/Compile - cd $(HOST_BUILD_DIR) && \ - $(PYTHON) x.py --config ./config.toml dist build-manifest cargo llvm-tools \ - rustc rust-std rust-src - - $(call Host/PackageDist) -endef - -# Distribution Artifacts are packaged by Host/PackageDist -# We just need to extract and install -define Host/Install - $(TAR) -C $(RUST_TMP_DIR) -xJf $(DL_DIR)/$(RUST_INSTALL_HOST_FILENAME) && \ - $(TAR) -C $(RUST_TMP_DIR) -xJf $(DL_DIR)/$(RUST_INSTALL_TARGET_FILENAME) - - cd $(RUST_TMP_DIR) && \ - find -iname "*.xz" -exec tar -xJf {} ";" && \ - find ./* -type f -name install.sh -execdir sh {} --prefix=$(CARGO_HOME) --disable-ldconfig \; - - echo -e "[target.$(RUSTC_TARGET_ARCH)]\nlinker = \"$(TARGET_CC_NOCACHE)\"\nrustflags = [\"-Ctarget-feature=-crt-static\", \"-Clink-args=$(RUSTC_LDFLAGS)\"]" > $(CARGO_HOME)/config - echo -e "\n[profile.stripped]\ninherits = \"release\"\nopt-level = \"s\"\nstrip = true" >> $(CARGO_HOME)/config -endef - -# Packages the Distribution Artifacts into HOST and TARGET bundles. -define Host/PackageDist ( \ - cd $(HOST_BUILD_DIR)/build/dist ; \ - $(TAR) -cJf $(DL_DIR)/$(RUST_INSTALL_TARGET_FILENAME) \ - rust-*-$(RUSTC_TARGET_ARCH).tar.xz ; \ - $(TAR) -cJf $(DL_DIR)/$(RUST_INSTALL_HOST_FILENAME) \ - --exclude rust-*-$(RUSTC_TARGET_ARCH).tar.xz *.xz ; \ + cd $(HOST_BUILD_DIR) ; \ + $(PYTHON) x.py --config ./config.toml dist build-manifest cargo llvm-tools \ + rustc rust-std rust-src ; \ ) endef -define Package/rust - SECTION:=lang - CATEGORY:=Languages - TITLE:=Rust Programming Language Compiler - URL:=https://www.rust-lang.org/ - DEPENDS:=$(RUST_ARCH_DEPENDS) \ - +pkg-config +libunwind +libopenssl +liblzma +libc -endef - -define Package/rust/description - Rust is a multi-paradigm, general-purpose programming language designed for performance - and safety, especially safe concurrency. Rust is syntactically similar to C++, but can - guarantee memory safety by using a borrow checker to validate references. -endef - -define Package/rust/config - source "$(SOURCE)/Config.in" +define Host/Install + ( \ + cd $(HOST_BUILD_DIR)/build/dist ; \ + find -iname "*.xz" -exec tar -xJf {} \; ; \ + find ./* -type f -name install.sh -execdir sh {} --prefix=$(CARGO_HOME) --disable-ldconfig \; ; \ + \ + sed -e 's|@RUSTC_TARGET_ARCH@|$(RUSTC_TARGET_ARCH)|g' \ + -e 's|@TARGET_CC_NOCACHE@|$(TARGET_CC_NOCACHE)|g' \ + -e 's|@RUSTC_LDFLAGS@|$(RUSTC_LDFLAGS)|g' \ + $(CURDIR)/files/cargo-config > $(CARGO_HOME)/config ; \ + ) endef $(eval $(call HostBuild)) diff --git a/lang/rust/files/cargo-config b/lang/rust/files/cargo-config new file mode 100644 index 000000000..2ed512931 --- /dev/null +++ b/lang/rust/files/cargo-config @@ -0,0 +1,8 @@ +[target.@RUSTC_TARGET_ARCH@] +linker = "@TARGET_CC_NOCACHE@" +rustflags = ["-Ctarget-feature=-crt-static", "-Clink-args=@RUSTC_LDFLAGS@"] + +[profile.stripped] +inherits = "release" +opt-level = "s" +strip = true diff --git a/lang/rust/rust-host-build.mk b/lang/rust/rust-host-build.mk new file mode 100644 index 000000000..39cf1f23c --- /dev/null +++ b/lang/rust/rust-host-build.mk @@ -0,0 +1,45 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Copyright (C) 2023 Luca Barbato and Donald Hoskins + +ifeq ($(origin RUST_INCLUDE_DIR),undefined) + RUST_INCLUDE_DIR:=$(dir $(lastword $(MAKEFILE_LIST))) +endif +include $(RUST_INCLUDE_DIR)/rust-values.mk + +# $(1) path to the package (optional) +# $(2) additional arguments to cargo (optional) +define Host/Compile/Cargo + ( \ + cd $(HOST_BUILD_DIR) ; \ + export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \ + CARGO_HOME=$(CARGO_HOME) \ + CC=$(HOSTCC_NOCACHE) \ + cargo install -v \ + --profile stripped \ + $(if $(RUST_PKG_FEATURES),--features "$(RUST_PKG_FEATURES)") \ + --root $(HOST_INSTALL_DIR) \ + --path "$(if $(strip $(1)),$(strip $(1)),.)" $(2) ; \ + ) +endef + +define Host/Uninstall/Cargo + ( \ + cd $(HOST_BUILD_DIR) ; \ + export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \ + CARGO_HOME=$(CARGO_HOME) \ + CC=$(HOSTCC_NOCACHE) \ + cargo uninstall -v \ + --root $(HOST_INSTALL_DIR) || true ; \ + ) +endef + +define RustBinHostBuild + define Host/Install + $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/bin + $(INSTALL_BIN) $(HOST_INSTALL_DIR)/bin/* $(STAGING_DIR_HOSTPKG)/bin/ + endef +endef + +Host/Compile=$(call Host/Compile/Cargo) +Host/Uninstall=$(call Host/Uninstall/Cargo) diff --git a/lang/rust/rust-package.mk b/lang/rust/rust-package.mk index 54c2aa89a..4e39009cc 100644 --- a/lang/rust/rust-package.mk +++ b/lang/rust/rust-package.mk @@ -2,27 +2,49 @@ # # Copyright (C) 2023 Luca Barbato and Donald Hoskins -rust_mk_path:=$(dir $(lastword $(MAKEFILE_LIST))) -include $(rust_mk_path)rust-host.mk +# Variables (all optional) to be set in package Makefiles: +# +# RUST_PKG_FEATURES - list of options, default empty +# +# Space or comma separated list of features to activate +# +# e.g. RUST_PKG_FEATURES:=enable-foo,with-bar -# $(1) path to the package -# $(2) additional arguments to cargo -define Host/Compile/Cargo - ( \ - cd $(HOST_BUILD_DIR) ; \ - export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \ - CARGO_HOME=$(CARGO_HOME) CC=$(HOSTCC) \ - cargo install -v --profile stripped --root $(HOST_INSTALL_DIR) --path "$(if $(strip $(1)),$(strip $(1)),.)" $(2) ; \ - ) -endef +ifeq ($(origin RUST_INCLUDE_DIR),undefined) + RUST_INCLUDE_DIR:=$(dir $(lastword $(MAKEFILE_LIST))) +endif +include $(RUST_INCLUDE_DIR)/rust-values.mk -# $(1) path to the package -# $(2) additional arguments to cargo +# Support only a subset for now. +RUST_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mipsel||mips64||mips64el||mipsel||powerpc64||x86_64) + +# $(1) path to the package (optional) +# $(2) additional arguments to cargo (optional) define Build/Compile/Cargo ( \ cd $(PKG_BUILD_DIR) ; \ export PATH="$(CARGO_HOME)/bin:$(PATH)" ; \ - CARGO_HOME=$(CARGO_HOME) TARGET_CFLAGS="$(TARGET_CFLAGS) $(RUST_CFLAGS)" TARGET_CC=$(TARGET_CC_NOCACHE) CC=cc \ - cargo install -v --profile stripped --target $(RUSTC_TARGET_ARCH) --root $(PKG_INSTALL_DIR) --path "$(if $(strip $(1)),$(strip $(1)),.)" $(2) ; \ + CARGO_HOME=$(CARGO_HOME) \ + TARGET_CFLAGS="$(TARGET_CFLAGS) $(RUST_CFLAGS)" \ + TARGET_CC=$(TARGET_CC_NOCACHE) \ + CC=$(HOSTCC) \ + cargo install -v \ + --profile stripped \ + --target $(RUSTC_TARGET_ARCH) \ + $(if $(strip $(RUST_PKG_FEATURES)),--features "$(strip $(RUST_PKG_FEATURES))") \ + --root $(PKG_INSTALL_DIR) \ + --path "$(if $(strip $(1)),$(strip $(1)),.)" \ + $(2) ; \ ) endef + +define RustBinPackage + ifndef Package/$(1)/install + define Package/$(1)/install + $$(INSTALL_DIR) $$(1)/usr/bin/ + $$(INSTALL_BIN) $$(PKG_INSTALL_DIR)/bin/* $$(1)/usr/bin/ + endef + endif +endef + +Build/Compile=$(call Build/Compile/Cargo) diff --git a/lang/rust/rust-host.mk b/lang/rust/rust-values.mk similarity index 75% rename from lang/rust/rust-host.mk rename to lang/rust/rust-values.mk index acc93c521..c9eb26f08 100644 --- a/lang/rust/rust-host.mk +++ b/lang/rust/rust-values.mk @@ -5,19 +5,10 @@ # Rust Environmental Vars CONFIG_HOST_SUFFIX:=$(word 4, $(subst -, ,$(GNU_HOST_NAME))) RUSTC_HOST_ARCH:=$(HOST_ARCH)-unknown-linux-$(CONFIG_HOST_SUFFIX) -CARGO_HOME:=$(STAGING_DIR_HOST)/cargo +CARGO_HOME:=$(STAGING_DIR_HOSTPKG)/cargo -# Support only a subset for now. -RUST_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mipsel||mips64||mips64el||mipsel||powerpc64||x86_64) - -# Common Build Flags -RUST_BUILD_FLAGS = \ - CARGO_HOME="$(CARGO_HOME)" - -# This adds the rust environmental variables to Make calls -MAKE_FLAGS += $(RUST_BUILD_FLAGS) - -# Force linking of the SSP library +ifeq ($(CONFIG_USE_MUSL),y) +# Force linking of the SSP library for musl ifdef CONFIG_PKG_CC_STACKPROTECTOR_REGULAR ifeq ($(strip $(PKG_SSP)),1) RUSTC_LDFLAGS += -lssp_nonshared @@ -28,6 +19,7 @@ ifdef CONFIG_PKG_CC_STACKPROTECTOR_STRONG TARGET_CFLAGS += -lssp_nonshared endif endif +endif # mips64 openwrt has a specific targed in rustc ifeq ($(ARCH),mips64) diff --git a/lang/rust/rust_config.mk b/lang/rust/rust_config.mk deleted file mode 100644 index 75017f8a7..000000000 --- a/lang/rust/rust_config.mk +++ /dev/null @@ -1,119 +0,0 @@ -ifeq ($(CONFIG_RUST_DEBUG),y) -CONFIGURE_ARGS += --enable-debug -endif - -ifeq ($(CONFIG_RUST_DOCS),y) -CONFIGURE_ARGS += --enable-docs -else -CONFIGURE_ARGS += --disable-docs -endif - -ifeq ($(CONFIG_RUST_COMPILER_DOCS),y) -CONFIGURE_ARGS += --enable-compiler-docs -else -CONFIGURE_ARGS += --disable-compiler-docs -endif - -ifeq ($(CONFIG_RUST_OPTIMIZE_TESTS),y) -CONFIGURE_ARGS += --enable-optimize-tests -endif - -ifeq ($(CONFIG_RUST_PARALLEL),y) -CONFIGURE_ARGS += --enable-parallel-compiler -endif - -ifeq ($(CONFIG_RUST_VERBOSE_TESTS),y) -CONFIGURE_ARGS += --enable-verbose-tests -endif - -ifeq ($(filter $(CONFIG_RUST_CCACHE) $(CCACHE),y),) -CONFIGURE_ARGS += --enable-ccache -endif - -ifeq ($(CONFIG_RUST_CCACHE),y) -CONFIGURE_ARGS += --enable-ccache -endif - -ifeq ($(CONFIG_RUST_LLVM_STATIC),y) -CONFIGURE_ARGS += --enable-llvm-static-stdcpp -endif - -ifeq ($(CONFIG_RUST_LLVM_SHARED),y) -CONFIGURE_ARGS += --enable-llvm-link-shared -endif - -ifeq ($(CONFIG_RUST_CODEGEN_TESTS),y) -CONFIGURE_ARGS += --enable-codegen-tests -endif - -ifeq ($(CONFIG_RUST_OPTION_CHECKING),y) -CONFIGURE_ARGS += --enable-option-checking -endif - -ifeq ($(CONFIG_RUST_ENABLE_NINJA),y) -CONFIGURE_ARGS += --enable-ninja -endif - -ifeq ($(CONFIG_RUST_LOCKED_DEPS),y) -CONFIGURE_ARGS += --enable-locked-deps -endif - -ifeq ($(CONFIG_RUST_VENDOR),y) -CONFIGURE_ARGS += --enable-vendor -endif - -ifeq ($(CONFIG_RUST_SANITIZERS),y) -CONFIGURE_ARGS += --enable-sanitizers -endif - -ifeq ($(CONFIG_RUST_DIST_SRC),y) -CONFIGURE_ARGS += --enable-dist-src -endif - -ifeq ($(CONFIG_RUST_CARGO_NATIVE_STATIC),y) -CONFIGURE_ARGS += --enable-cargo-native-static -endif - -ifeq ($(CONFIG_RUST_PROFILER),y) -CONFIGURE_ARGS += --enable-profiler -endif - -ifeq ($(CONFIG_RUST_FULL_TOOLS),y) -CONFIGURE_ARGS += --enable-full-tools -endif - -ifeq ($(CONFIG_RUST_MISSING_TOOLS),y) -CONFIGURE_ARGS += --enable-missing-tools -endif - -ifeq ($(CONFIG_RUST_USE_LIBCXX),y) -CONFIGURE_ARGS += --enable-use-libcxx -endif - -ifeq ($(CONFIG_RUST_CONTROL_FLOW_GUARD),y) -CONFIGURE_ARGS += --enable-control-flow-guard -endif - -ifeq ($(CONFIG_RUST_OPTIMIZE_LLVM),y) -CONFIGURE_ARGS += --enable-optimize-llvm -endif - -ifeq ($(CONFIG_RUST_LLVM_ASSERTIONS),y) -CONFIGURE_ARGS += --enable-llvm-assertions -endif - -ifeq ($(CONFIG_RUST_DEBUG_ASSERTIONS),y) -CONFIGURE_ARGS += --enable-debug-assertions -endif - -ifeq ($(CONFIG_RUST_LLVM_RELEASE_DEBUGINFO),y) -CONFIGURE_ARGS += --enable-llvm-release-debuginfo -endif - -ifeq ($(CONFIG_RUST_MANAGE_SUBMODULES),y) -CONFIGURE_ARGS += --enable-manage-submodules -endif - -ifeq ($(CONFIG_RUST_FULL_BOOTSTRAP),y) -CONFIGURE_ARGS += --enable-full-bootstrap -endif diff --git a/libs/pcre2/Makefile b/libs/pcre2/Makefile index 1bd6d2759..8abdd5d71 100644 --- a/libs/pcre2/Makefile +++ b/libs/pcre2/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=pcre2 PKG_VERSION:=10.37 -PKG_RELEASE:=$(AUTORELEASE) +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=@SF/pcre/$(PKG_NAME)/$(PKG_VERSION) @@ -28,6 +28,7 @@ PKG_CONFIG_DEPENDS:=\ PKG_BUILD_DEPENDS:=zlib include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/cmake.mk define Package/libpcre2/default @@ -55,6 +56,18 @@ define Package/libpcre2-32 TITLE:=A Perl Compatible Regular Expression library (32bit support) endef +CMAKE_HOST_OPTIONS += \ + -DBUILD_SHARED_LIBS=ON \ + -DPCRE2_BUILD_PCRE2_8=ON \ + -DPCRE2_BUILD_PCRE2_16=ON \ + -DPCRE2_BUILD_PCRE2_32=ON \ + -DPCRE2_DEBUG=OFF \ + -DPCRE2_DISABLE_PERCENT_ZT=ON \ + -DPCRE2_SUPPORT_JIT=OFF \ + -DPCRE2_SHOW_REPORT=OFF \ + -DPCRE2_BUILD_PCRE2GREP=OFF \ + -DPCRE2_BUILD_TESTS=OFF + CMAKE_OPTIONS += \ -DBUILD_SHARED_LIBS=ON \ -DPCRE2_BUILD_PCRE2_8=ON \ @@ -92,3 +105,4 @@ endef $(eval $(call BuildPackage,libpcre2)) $(eval $(call BuildPackage,libpcre2-16)) $(eval $(call BuildPackage,libpcre2-32)) +$(eval $(call HostBuild)) diff --git a/net/banip/Makefile b/net/banip/Makefile index 7e1d5265a..9983e08b0 100644 --- a/net/banip/Makefile +++ b/net/banip/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=banip PKG_VERSION:=0.8.2 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_LICENSE:=GPL-3.0-or-later PKG_MAINTAINER:=Dirk Brenken diff --git a/net/banip/files/README.md b/net/banip/files/README.md index 8e7afa35d..f4502816b 100644 --- a/net/banip/files/README.md +++ b/net/banip/files/README.md @@ -148,6 +148,7 @@ Available commands: | ban_dev | list | - / autodetect | wan device(s), e.g. 'eth2' | | ban_trigger | list | - | logical startup trigger interface(s), e.g. 'wan' | | ban_triggerdelay | option | 10 | trigger timeout before banIP processing begins | +| ban_triggeraction | option | start | trigger action on ifup events, e.g. start, restart or reload | | ban_deduplicate | option | 1 | deduplicate IP addresses across all active sets | | ban_splitsize | option | 0 | split ext. sets after every n lines/members (saves RAM) | | ban_cores | option | - / autodetect | limit the cpu cores used by banIP (saves RAM) | @@ -168,6 +169,7 @@ Available commands: | ban_mailsender | option | no-reply@banIP | sender address for banIP related notification E-Mails | | ban_mailtopic | option | banIP notification | topic for banIP related notification E-Mails | | ban_mailprofile | option | ban_notify | mail profile used in 'msmtp' for banIP related notification E-Mails | +| ban_mailnotification | option | 0 | receive E-Mail notifications with every banIP run | | ban_reportelements | option | 1 | list set elements in the report, disable this to speed up the report significantly | | ban_resolver | option | - | external resolver used for DNS lookups | diff --git a/net/banip/files/banip-functions.sh b/net/banip/files/banip-functions.sh index 6e231a652..692a9bd49 100644 --- a/net/banip/files/banip-functions.sh +++ b/net/banip/files/banip-functions.sh @@ -34,6 +34,7 @@ ban_mailsender="no-reply@banIP" ban_mailreceiver="" ban_mailtopic="banIP notification" ban_mailprofile="ban_notify" +ban_mailnotifcation="0" ban_reportelements="1" ban_nftloglevel="warn" ban_nftpriority="-200" @@ -168,6 +169,7 @@ f_log() { fi if [ "${class}" = "err" ]; then f_genstatus "error" + [ "${ban_mailnotification}" = "1" ] && [ -n "${ban_mailreceiver}" ] && [ -x "${ban_mailcmd}" ] && f_mail f_rmdir "${ban_tmpdir}" rm -rf "${ban_lock}" exit 1 @@ -351,10 +353,10 @@ f_getif() { # get wan devices # f_getdev() { - local dev iface update="0" cnt="0" cnt_max="10" + local dev iface update="0" cnt="0" cnt_max="30" if [ "${ban_autodetect}" = "1" ]; then - while [ -z "${ban_dev}" ] && [ "${cnt}" -le "${cnt_max}" ]; do + while [ "${cnt}" -lt "${cnt_max}" ] && [ -z "${ban_dev}" ]; do network_flush_cache for iface in ${ban_ifv4} ${ban_ifv6}; do network_get_device dev "${iface}" @@ -1032,6 +1034,7 @@ f_report() { local detail set_details jsnval timestamp autoadd_allow autoadd_block sum_sets sum_setinput sum_setforwardwan sum_setforwardlan sum_setelements sum_cntinput sum_cntforwardwan sum_cntforwardlan [ -z "${ban_dev}" ] && f_conf + f_system f_mkdir "${ban_reportdir}" report_jsn="${ban_reportdir}/ban_report.jsn" report_txt="${ban_reportdir}/ban_report.txt" @@ -1182,9 +1185,10 @@ f_report() { [ -s "${report_jsn}" ] && cat "${report_jsn}" ;; "mail") - [ -x "${ban_mailcmd}" ] && f_mail + [ -n "${ban_mailreceiver}" ] && [ -x "${ban_mailcmd}" ] && f_mail ;; esac + rm -f "${report_txt}" } # set search @@ -1212,7 +1216,7 @@ f_search() { printf "%s\n%s\n%s\n" ":::" "::: banIP Search" ":::" printf "%s\n" " Looking for IP '${ip}' on $(date "+%Y-%m-%d %H:%M:%S")" printf "%s\n" " ---" - cnt=1 + cnt="1" for set in ${table_sets}; do ( if "${ban_nftcmd}" get element inet banIP "${set}" "{ ${ip} }" >/dev/null 2>&1; then @@ -1257,11 +1261,8 @@ f_mail() { # load mail template # - [ ! -r "${ban_mailtemplate}" ] && f_log "err" "the mail template is missing" - . "${ban_mailtemplate}" - - [ -z "${ban_mailreceiver}" ] && f_log "err" "the option 'ban_mailreceiver' is missing" - [ -z "${mail_text}" ] && f_log "err" "the 'mail_text' is empty" + [ -r "${ban_mailtemplate}" ] && . "${ban_mailtemplate}" || f_log "info" "the mail template is missing" + [ -z "${mail_text}" ] && f_log "info" "the 'mail_text' template variable is empty" [ "${ban_debug}" = "1" ] && msmtp_debug="--debug" # send mail @@ -1273,7 +1274,7 @@ f_mail() { f_log "info" "failed to send status mail (${?})" fi - f_log "debug" "f_mail ::: template: ${ban_mailtemplate}, profile: ${ban_mailprofile}, receiver: ${ban_mailreceiver}, rc: ${?}" + f_log "debug" "f_mail ::: notification: ${ban_mailnotification}, template: ${ban_mailtemplate}, profile: ${ban_mailprofile}, receiver: ${ban_mailreceiver}, rc: ${?}" } # check banIP availability and initial sourcing diff --git a/net/banip/files/banip-service.sh b/net/banip/files/banip-service.sh index 94c1d47ed..7e3cdb3bb 100755 --- a/net/banip/files/banip-service.sh +++ b/net/banip/files/banip-service.sh @@ -29,12 +29,12 @@ f_mkfile "${ban_allowlist}" # if [ "${ban_action}" != "reload" ]; then if [ -x "${ban_fw4cmd}" ]; then - cnt=0 - while [ "${cnt}" -lt "10" ] && ! /etc/init.d/firewall status | grep -q "^active"; do + cnt="0" + while [ "${cnt}" -lt "30" ] && ! /etc/init.d/firewall status >/dev/null 2>&1; do cnt="$((cnt + 1))" sleep 1 done - if ! /etc/init.d/firewall status | grep -q "^active"; then + if ! /etc/init.d/firewall status >/dev/null 2>&1; then f_log "err" "nft based firewall/fw4 not functional" fi else @@ -125,7 +125,7 @@ for feed in allowlist ${ban_feed} blocklist; do done wait -# start domain lookup +# start background domain lookup # f_log "info" "start detached banIP domain lookup" (f_lookup "allowlist") & @@ -133,15 +133,16 @@ hold="$((cnt % ban_cores))" [ "${hold}" = "0" ] && wait (f_lookup "blocklist") & -# tidy up +# end processing # f_rmset f_rmdir "${ban_tmpdir}" f_genstatus "active" +[ "${ban_mailnotification}" = "1" ] && [ -n "${ban_mailreceiver}" ] && [ -x "${ban_mailcmd}" ] && f_mail f_log "info" "finished banIP download processes" rm -rf "${ban_lock}" -# start log service +# start detached log service # if [ -x "${ban_logreadcmd}" ] && [ -n "${ban_logterm%%??}" ]; then f_log "info" "start detached banIP log service" @@ -184,7 +185,7 @@ if [ -x "${ban_logreadcmd}" ] && [ -n "${ban_logterm%%??}" ]; then fi done -# start no-op service loop +# start detached no-op service loop # else f_log "info" "start detached no-op banIP service (logterms are missing)" diff --git a/net/banip/files/banip.init b/net/banip/files/banip.init index c56004279..46df4d7fc 100755 --- a/net/banip/files/banip.init +++ b/net/banip/files/banip.init @@ -94,14 +94,15 @@ survey() { } service_triggers() { - local iface trigger delay + local iface trigger trigger_action delay trigger="$(uci_get banip global ban_trigger)" + trigger_action="$(uci_get banip global ban_triggeraction "start")" delay="$(uci_get banip global ban_triggerdelay "10")" PROCD_RELOAD_DELAY=$((delay * 1000)) for iface in ${trigger}; do - procd_add_interface_trigger "interface.*.up" "${iface}" "${ban_init}" "start" + procd_add_interface_trigger "interface.*.up" "${iface}" "${ban_init}" "${trigger_action}" done procd_add_reload_trigger "banip" } diff --git a/net/dnslookup/Makefile b/net/dnslookup/Makefile index 522e49812..d4da7b21b 100644 --- a/net/dnslookup/Makefile +++ b/net/dnslookup/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=dnslookup -PKG_VERSION:=1.8.1 +PKG_VERSION:=1.9.1 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/ameshkov/dnslookup/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=51b9cbc626e091eb7a98bc326ad026f36d95f8b5917f71f13011466fcdddb3f9 +PKG_HASH:=ac108b80f5d7b510ce1fdb1880470d177c5b89cf228c34302442527cf68bb76e PKG_MAINTAINER:=Tianling Shen PKG_LICENSE:=MIT diff --git a/net/gensio/Makefile b/net/gensio/Makefile index 2744a2acc..c49da8e13 100644 --- a/net/gensio/Makefile +++ b/net/gensio/Makefile @@ -33,7 +33,7 @@ PKG_CONFIG_DEPENDS:= \ CONFIG_GENSIO_TCL \ CONFIG_GENSIO_SSHD -PKG_BUILD_DEPENDS:=PACKAGE_python3-gensio:swig +PKG_BUILD_DEPENDS:=PACKAGE_python3-gensio:swig/host include $(INCLUDE_DIR)/package.mk include ../../lang/python/python3-package.mk @@ -129,10 +129,11 @@ endef define Package/python3-gensio $(call Package/gensio/Default) - TITLE+= (Python3-bindings) + TITLE+= (Python bindings) SECTION:=lang CATEGORY:=Languages - DEPENDS:=+PACKAGE_python3-gensio:python3-light +libgensio + SUBMENU:=Python + DEPENDS:=+PACKAGE_python3-gensio:python3-light +libgensiocpp endef define Package/python3-gensio/description diff --git a/net/sing-box/Makefile b/net/sing-box/Makefile index 7103e36e1..9150c06c5 100644 --- a/net/sing-box/Makefile +++ b/net/sing-box/Makefile @@ -1,12 +1,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=sing-box -PKG_VERSION:=1.1.6 +PKG_VERSION:=1.2.0 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=2fdf93fd49c9375cd14b2fe2e2163cbad4b65d0cfa422c592855e7810036ef56 +PKG_HASH:=ec70c2eecf85788e82c29ec4ca129e25292d5fc66a510b4b713fe337650740a9 PKG_LICENSE:=GPL-3.0-or-later PKG_LICENSE_FILES:=LICENSE @@ -19,6 +19,8 @@ PKG_USE_MIPS16:=0 GO_PKG:=github.com/sagernet/sing-box GO_PKG_BUILD_PKG:=$(GO_PKG)/cmd/sing-box +GO_PKG_LDFLAGS_X:=$(GO_PKG)/constant.Version=$(PKG_VERSION) + include $(INCLUDE_DIR)/package.mk include ../../lang/golang/golang-package.mk @@ -47,6 +49,9 @@ define Package/sing-box/config bool "Build with Clash API support" default y + config SINGBOX_WITH_DHCP + bool "Build with DHCP support, see DHCP DNS transport." + config SINGBOX_WITH_ECH bool "Build with TLS ECH extension support for TLS outbound" @@ -67,6 +72,10 @@ define Package/sing-box/config bool "Build with QUIC support" default y + config SINGBOX_WITH_REALITY_SERVER + bool "Build with reality TLS server support, see TLS." + default y + config SINGBOX_WITH_SHADOWSOCKSR bool "Build with ShadowsocksR support" @@ -86,12 +95,14 @@ endef PKG_CONFIG_DEPENDS:= \ CONFIG_SINGBOX_WITH_ACME \ CONFIG_SINGBOX_WITH_CLASH_API \ + CONFIG_SINGBOX_WITH_DHCP \ CONFIG_SINGBOX_WITH_ECH \ CONFIG_SINGBOX_WITH_EMBEDDED_TOR \ CONFIG_SINGBOX_WITH_GRPC \ CONFIG_SINGBOX_WITH_GVISOR \ CONFIG_SINGBOX_WITH_LWIP \ CONFIG_SINGBOX_WITH_QUIC \ + CONFIG_SINGBOX_WITH_REALITY_SERVER \ CONFIG_SINGBOX_WITH_SHADOWSOCKSR \ CONFIG_SINGBOX_WITH_UTLS \ CONFIG_SINGBOX_WITH_V2RAY_API \ @@ -100,6 +111,7 @@ PKG_CONFIG_DEPENDS:= \ GO_PKG_TAGS:=$(subst $(space),$(comma),$(strip \ $(if $(CONFIG_SINGBOX_WITH_ACME),with_acme) \ $(if $(CONFIG_SINGBOX_WITH_CLASH_API),with_clash_api) \ + $(if $(CONFIG_SINGBOX_WITH_DHCP),with_dhcp) \ $(if $(CONFIG_SINGBOX_WITH_ECH),with_ech) \ $(if $(CONFIG_SINGBOX_WITH_EMBEDDED_TOR),with_embedded_tor) \ $(if $(CONFIG_SINGBOX_WITH_GRPC),with_grpc) \ @@ -107,6 +119,7 @@ GO_PKG_TAGS:=$(subst $(space),$(comma),$(strip \ $(if $(CONFIG_SINGBOX_WITH_LWIP),with_lwip) \ $(if $(CONFIG_SINGBOX_WITH_QUIC),with_quic) \ $(if $(CONFIG_SINGBOX_WITH_SHADOWSOCKSR),with_shadowsocksr) \ + $(if $(CONFIG_SINGBOX_WITH_REALITY_SERVER),with_reality_server) \ $(if $(CONFIG_SINGBOX_WITH_UTLS),with_utls) \ $(if $(CONFIG_SINGBOX_WITH_V2RAY_API),with_v2ray_api) \ $(if $(CONFIG_SINGBOX_WITH_WIREGUARD),with_wireguard) \ diff --git a/utils/ripgrep/Makefile b/utils/ripgrep/Makefile index fe449bc2d..56658540f 100644 --- a/utils/ripgrep/Makefile +++ b/utils/ripgrep/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ripgrep PKG_VERSION:=13.0.0 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/BurntSushi/ripgrep/tar.gz/$(PKG_VERSION)? @@ -18,12 +18,10 @@ PKG_LICENSE_FILES:=LICENSE-MIT UNLICENSE PKG_BUILD_DEPENDS:=rust/host -include ../../lang/rust/rust-package.mk -include $(INCLUDE_DIR)/package.mk +RUST_PKG_FEATURES:=pcre2 -define Build/Compile - $(call Build/Compile/Cargo,, --features 'pcre2') -endef +include $(INCLUDE_DIR)/package.mk +include ../../lang/rust/rust-package.mk define Package/ripgrep SECTION:=utils @@ -38,9 +36,5 @@ define Package/ripgrep/description while respecting your gitignore endef -define Package/ripgrep/install - $(INSTALL_DIR) $(1)/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/target/$(RUSTC_TARGET_ARCH)/stripped/rg $(1)/bin/rg -endef - +$(eval $(call RustBinPackage,ripgrep)) $(eval $(call BuildPackage,ripgrep)) diff --git a/utils/swig/Makefile b/utils/swig/Makefile index 03378e196..ecd128f52 100644 --- a/utils/swig/Makefile +++ b/utils/swig/Makefile @@ -20,6 +20,7 @@ PKG_LICENSE_FILES:=LICENSE PKG_HOST_ONLY:=1 HOST_BUILD_PARALLEL:=1 +HOST_BUILD_DEPENDS:=pcre2/host include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/package.mk @@ -33,7 +34,7 @@ define Package/swig endef HOST_CONFIGURE_ARGS += \ - --without-pcre + --with-pcre define Package/swig/description tool that generates bindings for various languages