diff mbox series

[1/2] package/libdispatch: add libdispatch package

Message ID 20220329215433.1018660-1-alseycmiller@gmail.com
State Changes Requested
Headers show
Series [1/2] package/libdispatch: add libdispatch package | expand

Commit Message

Alsey Miller March 29, 2022, 9:54 p.m. UTC
Signed-off-by: Alsey Coleman Miller <alseycmiller@gmail.com>
---
 DEVELOPERS                           |  3 ++
 package/Config.in                    |  1 +
 package/libdispatch/Config.in        | 43 +++++++++++++++++++++++
 package/libdispatch/libdispatch.hash |  1 +
 package/libdispatch/libdispatch.mk   | 52 ++++++++++++++++++++++++++++
 5 files changed, 100 insertions(+)
 create mode 100644 package/libdispatch/Config.in
 create mode 100644 package/libdispatch/libdispatch.hash
 create mode 100644 package/libdispatch/libdispatch.mk

Comments

Alsey Miller March 29, 2022, 9:57 p.m. UTC | #1
This patch successfully builds with https://patchwork.ozlabs.org/project/buildroot/patch/20220322232224.2842266-5-james.hilliard1@gmail.com/ <https://patchwork.ozlabs.org/project/buildroot/patch/20220322232224.2842266-5-james.hilliard1@gmail.com/> applied. Although its not required for this package, I suggest merging https://patchwork.ozlabs.org/project/buildroot/patch/20220329145904.63900-1-andreynech@gmail.com/ <https://patchwork.ozlabs.org/project/buildroot/patch/20220329145904.63900-1-andreynech@gmail.com/> as well.

> On Mar 29, 2022, at 2:54 PM, Alsey Coleman Miller <alseycmiller@gmail.com> wrote:
> 
> Signed-off-by: Alsey Coleman Miller <alseycmiller@gmail.com>
> ---
> DEVELOPERS                           |  3 ++
> package/Config.in                    |  1 +
> package/libdispatch/Config.in        | 43 +++++++++++++++++++++++
> package/libdispatch/libdispatch.hash |  1 +
> package/libdispatch/libdispatch.mk   | 52 ++++++++++++++++++++++++++++
> 5 files changed, 100 insertions(+)
> create mode 100644 package/libdispatch/Config.in
> create mode 100644 package/libdispatch/libdispatch.hash
> create mode 100644 package/libdispatch/libdispatch.mk
> 
> diff --git a/DEVELOPERS b/DEVELOPERS
> index a66b9d7eee..555ec0175b 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -122,6 +122,9 @@ F:	boot/opensbi/
> F:	configs/hifive_unleashed_defconfig
> F:	package/xen/
> 
> +N:	Alsey Miller <alseycmiller@gmail.com>
> +F:	package/libdispatch/
> +
> N:	Alvaro G. M <alvaro.gamez@hazent.com>
> F:	package/dcron/
> F:	package/libxmlrpc/
> diff --git a/package/Config.in b/package/Config.in
> index 0d5d763180..e217ff5282 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -1968,6 +1968,7 @@ menu "Other"
> 	source "package/libcrossguid/Config.in"
> 	source "package/libcsv/Config.in"
> 	source "package/libdaemon/Config.in"
> +	source "package/libdispatch/Config.in"
> 	source "package/libeastl/Config.in"
> 	source "package/libee/Config.in"
> 	source "package/libev/Config.in"
> diff --git a/package/libdispatch/Config.in b/package/libdispatch/Config.in
> new file mode 100644
> index 0000000000..f4fa5e47fb
> --- /dev/null
> +++ b/package/libdispatch/Config.in
> @@ -0,0 +1,43 @@
> +config BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS
> +	bool
> +	default y if BR2_x86_64
> +	default y if BR2_aarch64
> +	default y if BR2_arm
> +	default y if BR2_powerpc
> +	default y if BR2_mips
> +	default y if BR2_mipsel
> +	default y if BR2_mips64
> +	default y if BR2_mips64el
> +	default y if BR2_RISCV_64
> +
> +config BR2_PACKAGE_LIBDISPATCH_TARGET_ARCH
> +	string
> +	default "aarch64" if BR2_aarch64
> +	default "armv5" if BR2_ARM_CPU_ARMV5
> +	default "armv6" if BR2_ARM_CPU_ARMV6
> +	default "armv7" if BR2_ARM_CPU_ARMV7A
> +	default "x86_64" if BR2_x86_64
> +	default "powerpc" if BR2_powerpc
> +	default "mips" if BR2_mips
> +	default "mipsel" if BR2_mipsel
> +	default "mips64" if BR2_mips64
> +	default "mips64el" if BR2_mips64el
> +	default "riscv64" if BR2_RISCV_64
> +
> +config BR2_PACKAGE_LIBDISPATCH
> +	bool "libdispatch"
> +	depends on BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS
> +	depends on BR2_TOOLCHAIN_HAS_THREADS
> +	depends on !BR2_STATIC_LIBS
> +	depends on BR2_TOOLCHAIN_USES_GLIBC
> +	select BR2_PACKAGE_LIBBSD
> +	
> +	help
> +	  Grand Central Dispatch (GCD or libdispatch) provides comprehensive support for concurrent code execution on multicore hardware.
> +
> +	  http://swift.org
> +
> +comment "libdispatch needs a toolchain w/ Glibc, wchar, threads, C++, dynamic library"
> +	depends on BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS
> +	depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP \
> +		|| BR2_STATIC_LIBS || !BR2_USE_WCHAR
> \ No newline at end of file
> diff --git a/package/libdispatch/libdispatch.hash b/package/libdispatch/libdispatch.hash
> new file mode 100644
> index 0000000000..64543b56eb
> --- /dev/null
> +++ b/package/libdispatch/libdispatch.hash
> @@ -0,0 +1 @@
> +sha256 d2bbfb5b98d129caa2c6bd7662c850bf57cb434572d09844b56641c4558906ab libdispatch-swift-5.6-RELEASE.tar.gz
> diff --git a/package/libdispatch/libdispatch.mk b/package/libdispatch/libdispatch.mk
> new file mode 100644
> index 0000000000..79fc4f7780
> --- /dev/null
> +++ b/package/libdispatch/libdispatch.mk
> @@ -0,0 +1,52 @@
> +### Grand Central Dispatch
> +LIBDISPATCH_VERSION = 5.6
> +LIBDISPATCH_SITE = $(call github,apple,swift-corelibs-libdispatch,swift-$(LIBDISPATCH_VERSION)-RELEASE)
> +LIBDISPATCH_LICENSE = Apache-2.0
> +LIBDISPATCH_LICENSE_FILES = LICENSE
> +LIBDISPATCH_INSTALL_STAGING = YES
> +LIBDISPATCH_SUPPORTS_IN_SOURCE_BUILD = NO
> +LIBDISPATCH_DEPENDENCIES = host-clang host-lld libbsd
> +
> +LIBDISPATCH_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LIBDISPATCH_TARGET_ARCH))
> +LIBDISPATCH_CLANG_PATH = $(HOST_DIR)/bin
> +
> +ifeq ($(LIBDISPATCH_TARGET_ARCH),armv7)
> +LIBDISPATCH_TARGET_NAME		= armv7-unknown-linux-gnueabihf
> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),armv6)
> +LIBDISPATCH_TARGET_NAME		= armv6-unknown-linux-gnueabihf
> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),armv5)
> +LIBDISPATCH_TARGET_NAME		= armv5-unknown-linux-gnueabi
> +else
> +LIBDISPATCH_TARGET_NAME		= $(LIBDISPATCH_TARGET_ARCH)-unknown-linux-gnu
> +endif
> +
> +ifeq ($(LIBDISPATCH_TARGET_ARCH),armv5)
> +LIBDISPATCH_EXTRA_FLAGS		= -march=armv5te
> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),riscv64)
> +LIBDISPATCH_EXTRA_FLAGS		= -mno-relax -mabi=lp64 -march=rv64imac -mfloat-abi=soft
> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),mipsel)
> +LIBDISPATCH_EXTRA_FLAGS		= -msoft-float
> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),mips64el)
> +LIBDISPATCH_EXTRA_FLAGS		= -msoft-float
> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),powerpc)
> +LIBDISPATCH_EXTRA_FLAGS		= -mcpu=7400
> +else
> +LIBDISPATCH_EXTRA_FLAGS		= 
> +endif
> +
> +LIBDISPATCH_CONF_OPTS += \
> +	-DLibRT_LIBRARIES="${STAGING_DIR}/usr/lib/librt.a" \
> +	-DCMAKE_C_COMPILER=$(LIBDISPATCH_CLANG_PATH)/clang \
> +	-DCMAKE_CXX_COMPILER=$(LIBDISPATCH_CLANG_PATH)/clang++ \
> +	-DCMAKE_C_FLAGS="-w -fuse-ld=lld $(LIBDISPATCH_EXTRA_FLAGS) -target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR) -I$(STAGING_DIR)/usr/include -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \
> +	-DCMAKE_C_LINK_FLAGS="-target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR)" \
> +	-DCMAKE_CXX_FLAGS="-w -fuse-ld=lld $(LIBDISPATCH_EXTRA_FLAGS) -target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR) -I$(STAGING_DIR)/usr/include -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/ -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/$(GNU_TARGET_NAME) -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \
> +	-DCMAKE_CXX_LINK_FLAGS="-target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR)" \
> +
> +define LIBDISPATCH_INSTALL_TARGET_CMDS
> +	(cd $(LIBDISPATCH_BUILDDIR) && \
> +	cp ./*.so $(TARGET_DIR)/usr/lib/ \
> +	)
> +endef
> +
> +$(eval $(cmake-package))
> -- 
> 2.30.2
>
Arnout Vandecappelle Feb. 6, 2023, 11:24 a.m. UTC | #2
Hi Alsey,

  Sorry for the extremely late feedback on this. There were a few issues with 
your contribution and I wasn't able to fix them up myself, so I marked the 
series as Changes Requested. See below for my comments.

On 29/03/2022 23:54, Alsey Coleman Miller wrote:
> Signed-off-by: Alsey Coleman Miller <alseycmiller@gmail.com>
> ---
>   DEVELOPERS                           |  3 ++
>   package/Config.in                    |  1 +
>   package/libdispatch/Config.in        | 43 +++++++++++++++++++++++
>   package/libdispatch/libdispatch.hash |  1 +
>   package/libdispatch/libdispatch.mk   | 52 ++++++++++++++++++++++++++++
>   5 files changed, 100 insertions(+)
>   create mode 100644 package/libdispatch/Config.in
>   create mode 100644 package/libdispatch/libdispatch.hash
>   create mode 100644 package/libdispatch/libdispatch.mk
> 
> diff --git a/DEVELOPERS b/DEVELOPERS
> index a66b9d7eee..555ec0175b 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -122,6 +122,9 @@ F:	boot/opensbi/
>   F:	configs/hifive_unleashed_defconfig
>   F:	package/xen/
>   
> +N:	Alsey Miller <alseycmiller@gmail.com>
> +F:	package/libdispatch/
> +
>   N:	Alvaro G. M <alvaro.gamez@hazent.com>
>   F:	package/dcron/
>   F:	package/libxmlrpc/
> diff --git a/package/Config.in b/package/Config.in
> index 0d5d763180..e217ff5282 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -1968,6 +1968,7 @@ menu "Other"
>   	source "package/libcrossguid/Config.in"
>   	source "package/libcsv/Config.in"
>   	source "package/libdaemon/Config.in"
> +	source "package/libdispatch/Config.in"
>   	source "package/libeastl/Config.in"
>   	source "package/libee/Config.in"
>   	source "package/libev/Config.in"
> diff --git a/package/libdispatch/Config.in b/package/libdispatch/Config.in
> new file mode 100644
> index 0000000000..f4fa5e47fb
> --- /dev/null
> +++ b/package/libdispatch/Config.in
> @@ -0,0 +1,43 @@
> +config BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS
> +	bool
> +	default y if BR2_x86_64
> +	default y if BR2_aarch64
> +	default y if BR2_arm
> +	default y if BR2_powerpc
> +	default y if BR2_mips
> +	default y if BR2_mipsel
> +	default y if BR2_mips64
> +	default y if BR2_mips64el
> +	default y if BR2_RISCV_64

  Please add an explanation in the commit log about where this range of 
supported architectures comes from.

  Also, I expect that on ARM and possibly powerpc there are tighter constraints 
than this.


> +config BR2_PACKAGE_LIBDISPATCH_TARGET_ARCH
> +	string
> +	default "aarch64" if BR2_aarch64
> +	default "armv5" if BR2_ARM_CPU_ARMV5
> +	default "armv6" if BR2_ARM_CPU_ARMV6
> +	default "armv7" if BR2_ARM_CPU_ARMV7A

  We also have armv7m and armv4 which are not covered here.

> +	default "x86_64" if BR2_x86_64
> +	default "powerpc" if BR2_powerpc
> +	default "mips" if BR2_mips
> +	default "mipsel" if BR2_mipsel
> +	default "mips64" if BR2_mips64
> +	default "mips64el" if BR2_mips64el
> +	default "riscv64" if BR2_RISCV_64

  You can simplify BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS like this:

config BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS
	bool
	default y
	depends on BR2_PACKAGE_LIBDISPATCH_TARGET_ARCH != ""

> +
> +config BR2_PACKAGE_LIBDISPATCH
> +	bool "libdispatch"
> +	depends on BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS
> +	depends on BR2_TOOLCHAIN_HAS_THREADS
> +	depends on !BR2_STATIC_LIBS
> +	depends on BR2_TOOLCHAIN_USES_GLIBC

  Again, please explain in the commit message where the glibc dependency comes from.

> +	select BR2_PACKAGE_LIBBSD

  Please include the libbsd dependencies (as far as they're not covered by the 
libdispatch dependencies themselves):

	depends on BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS # libbsd
	depends on BR2_USE_WCHAR # libbsd


> +	
> +	help
> +	  Grand Central Dispatch (GCD or libdispatch) provides comprehensive support for concurrent code execution on multicore hardware.

  Please wrap at 72 columns (where the tab counts as 8 spaces).
utils/check-package will warn about this.

> +
> +	  http://swift.org

  Is there no URL specific to libdispatch?

> +
> +comment "libdispatch needs a toolchain w/ Glibc, wchar, threads, C++, dynamic library"
> +	depends on BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS
> +	depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP \

  There is no C++ dependency in the package itself...

> +		|| BR2_STATIC_LIBS || !BR2_USE_WCHAR
> \ No newline at end of file

  Please add a newline at the end of the file.

> diff --git a/package/libdispatch/libdispatch.hash b/package/libdispatch/libdispatch.hash
> new file mode 100644
> index 0000000000..64543b56eb
> --- /dev/null
> +++ b/package/libdispatch/libdispatch.hash
> @@ -0,0 +1 @@
> +sha256 d2bbfb5b98d129caa2c6bd7662c850bf57cb434572d09844b56641c4558906ab libdispatch-swift-5.6-RELEASE.tar.gz

  Please add a hash for the license files.

> diff --git a/package/libdispatch/libdispatch.mk b/package/libdispatch/libdispatch.mk
> new file mode 100644
> index 0000000000..79fc4f7780
> --- /dev/null
> +++ b/package/libdispatch/libdispatch.mk
> @@ -0,0 +1,52 @@
> +### Grand Central Dispatch
> +LIBDISPATCH_VERSION = 5.6
> +LIBDISPATCH_SITE = $(call github,apple,swift-corelibs-libdispatch,swift-$(LIBDISPATCH_VERSION)-RELEASE)

  I guess this is a swift-specific fork of libdispatch? If yes, then the swift 
bit should probably still be in _VERSION, i.e.

LIBDISPATH_VERSION = swift-5.6

  Alternatively, the package should be named something like libdispatch-swift.


> +LIBDISPATCH_LICENSE = Apache-2.0
> +LIBDISPATCH_LICENSE_FILES = LICENSE
> +LIBDISPATCH_INSTALL_STAGING = YES
> +LIBDISPATCH_SUPPORTS_IN_SOURCE_BUILD = NO
> +LIBDISPATCH_DEPENDENCIES = host-clang host-lld libbsd

  clang and lld (if they're supposed to build for the target) need a dependency 
on BR2_PACKAGE_LLVM_ARCH_SUPPORTS and BR2_HOST_GCC_AT_LEAST_5

  Also you should select BR2_PACKAGE_HOST_LLD in Config.in.

> +
> +LIBDISPATCH_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LIBDISPATCH_TARGET_ARCH))
> +LIBDISPATCH_CLANG_PATH = $(HOST_DIR)/bin

  It's not worth adding a variable for this, just use $(HOST_DIR)/bin directly 
below.

> +
> +ifeq ($(LIBDISPATCH_TARGET_ARCH),armv7)
> +LIBDISPATCH_TARGET_NAME		= armv7-unknown-linux-gnueabihf
> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),armv6)
> +LIBDISPATCH_TARGET_NAME		= armv6-unknown-linux-gnueabihf
> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),armv5)
> +LIBDISPATCH_TARGET_NAME		= armv5-unknown-linux-gnueabi
> +else
> +LIBDISPATCH_TARGET_NAME		= $(LIBDISPATCH_TARGET_ARCH)-unknown-linux-gnu

  Instead of defining this here, define it like that in LIBDISPATCH_TARGET_ARCH 
directly, i.e. include the unknown-linux-gnu* in 
BR2_PACKAGE_LIBDISPATCH_TARGET_ARCH.


> +endif
> +
> +ifeq ($(LIBDISPATCH_TARGET_ARCH),armv5)
> +LIBDISPATCH_EXTRA_FLAGS		= -march=armv5te

  Not all our armv5 variants are armv5te I believe...

> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),riscv64)
> +LIBDISPATCH_EXTRA_FLAGS		= -mno-relax -mabi=lp64 -march=rv64imac -mfloat-abi=soft

  Having to specify all of this sounds very very wrong. We define the ABI and 
arch elsewhere depending on config options, if you're overriding here it's not 
going to be compatible with libc.

  I'm not sure about the -mno-relax, that might be needed. But please document 
in the commit message why.

> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),mipsel)
> +LIBDISPATCH_EXTRA_FLAGS		= -msoft-float
> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),mips64el)
> +LIBDISPATCH_EXTRA_FLAGS		= -msoft-float

  Again, floating point ABI should be defined in our ABI definition or it's not 
going to be compatible. If it requires soft float, we need to depend on 
BR2_MIPS_SOFT_FLOAT in Config.in.

  -msoft-float and other ABI options are passed along by the toolchain wrapper, 
so if these are somehow needed in EXTRA_FLAGS after all, something somewhere is 
really broken. This needs to be analyzed and explained in detail.

> +else ifeq ($(LIBDISPATCH_TARGET_ARCH),powerpc)
> +LIBDISPATCH_EXTRA_FLAGS		= -mcpu=7400

  We support many, many other powerpc CPUs, so please explain why this is needed 
and why it works on all other CPUs.

> +else
> +LIBDISPATCH_EXTRA_FLAGS		=
> +endif
> +
> +LIBDISPATCH_CONF_OPTS += \
> +	-DLibRT_LIBRARIES="${STAGING_DIR}/usr/lib/librt.a" \
> +	-DCMAKE_C_COMPILER=$(LIBDISPATCH_CLANG_PATH)/clang \
> +	-DCMAKE_CXX_COMPILER=$(LIBDISPATCH_CLANG_PATH)/clang++ \
> +	-DCMAKE_C_FLAGS="-w -fuse-ld=lld $(LIBDISPATCH_EXTRA_FLAGS) -target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR) -I$(STAGING_DIR)/usr/include -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \

  Please wrap this extremely long line. Also, since it's reused for CXX flags, 
it probably makes sense to define a variable for this.

  -fuse-ld should probably be given a full path to $(HOST_DIR)/bin/lld instead 
of relying on $PATH.

  --sysroot, -I, -B, -L options shouldn't be needed, they should already be part 
of the toolchain wrapper. However, the toolchain wrapper for clang is fairly 
recent and doesn't see that much use, so something may be missing there. Still, 
if there is a problem, it should probably be handled in the toolchain wrapper an 
not here.

> +	-DCMAKE_C_LINK_FLAGS="-target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR)" \

  Again, --sysrot should already be handled by the toolchain wrapper.

> +	-DCMAKE_CXX_FLAGS="-w -fuse-ld=lld $(LIBDISPATCH_EXTRA_FLAGS) -target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR) -I$(STAGING_DIR)/usr/include -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/ -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/$(GNU_TARGET_NAME) -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \
> +	-DCMAKE_CXX_LINK_FLAGS="-target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR)" \
> +
> +define LIBDISPATCH_INSTALL_TARGET_CMDS
> +	(cd $(LIBDISPATCH_BUILDDIR) && \
> +	cp ./*.so $(TARGET_DIR)/usr/lib/ \

  Doesn't the CMakeLists.txt have proper install commands? If not, please 
document in the commit message.

  Also, no need to cd, just do

	cp $(LIBDISPATCH_BUILDDIR)/*.so $(TARGET_DIR)/usr/lib/


  Regards,
  Arnout


> +	)
> +endef
> +
> +$(eval $(cmake-package))
diff mbox series

Patch

diff --git a/DEVELOPERS b/DEVELOPERS
index a66b9d7eee..555ec0175b 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -122,6 +122,9 @@  F:	boot/opensbi/
 F:	configs/hifive_unleashed_defconfig
 F:	package/xen/
 
+N:	Alsey Miller <alseycmiller@gmail.com>
+F:	package/libdispatch/
+
 N:	Alvaro G. M <alvaro.gamez@hazent.com>
 F:	package/dcron/
 F:	package/libxmlrpc/
diff --git a/package/Config.in b/package/Config.in
index 0d5d763180..e217ff5282 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1968,6 +1968,7 @@  menu "Other"
 	source "package/libcrossguid/Config.in"
 	source "package/libcsv/Config.in"
 	source "package/libdaemon/Config.in"
+	source "package/libdispatch/Config.in"
 	source "package/libeastl/Config.in"
 	source "package/libee/Config.in"
 	source "package/libev/Config.in"
diff --git a/package/libdispatch/Config.in b/package/libdispatch/Config.in
new file mode 100644
index 0000000000..f4fa5e47fb
--- /dev/null
+++ b/package/libdispatch/Config.in
@@ -0,0 +1,43 @@ 
+config BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS
+	bool
+	default y if BR2_x86_64
+	default y if BR2_aarch64
+	default y if BR2_arm
+	default y if BR2_powerpc
+	default y if BR2_mips
+	default y if BR2_mipsel
+	default y if BR2_mips64
+	default y if BR2_mips64el
+	default y if BR2_RISCV_64
+
+config BR2_PACKAGE_LIBDISPATCH_TARGET_ARCH
+	string
+	default "aarch64" if BR2_aarch64
+	default "armv5" if BR2_ARM_CPU_ARMV5
+	default "armv6" if BR2_ARM_CPU_ARMV6
+	default "armv7" if BR2_ARM_CPU_ARMV7A
+	default "x86_64" if BR2_x86_64
+	default "powerpc" if BR2_powerpc
+	default "mips" if BR2_mips
+	default "mipsel" if BR2_mipsel
+	default "mips64" if BR2_mips64
+	default "mips64el" if BR2_mips64el
+	default "riscv64" if BR2_RISCV_64
+
+config BR2_PACKAGE_LIBDISPATCH
+	bool "libdispatch"
+	depends on BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS
+	depends on BR2_TOOLCHAIN_HAS_THREADS
+	depends on !BR2_STATIC_LIBS
+	depends on BR2_TOOLCHAIN_USES_GLIBC
+	select BR2_PACKAGE_LIBBSD
+	
+	help
+	  Grand Central Dispatch (GCD or libdispatch) provides comprehensive support for concurrent code execution on multicore hardware.
+
+	  http://swift.org
+
+comment "libdispatch needs a toolchain w/ Glibc, wchar, threads, C++, dynamic library"
+	depends on BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS
+	depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP \
+		|| BR2_STATIC_LIBS || !BR2_USE_WCHAR
\ No newline at end of file
diff --git a/package/libdispatch/libdispatch.hash b/package/libdispatch/libdispatch.hash
new file mode 100644
index 0000000000..64543b56eb
--- /dev/null
+++ b/package/libdispatch/libdispatch.hash
@@ -0,0 +1 @@ 
+sha256 d2bbfb5b98d129caa2c6bd7662c850bf57cb434572d09844b56641c4558906ab libdispatch-swift-5.6-RELEASE.tar.gz
diff --git a/package/libdispatch/libdispatch.mk b/package/libdispatch/libdispatch.mk
new file mode 100644
index 0000000000..79fc4f7780
--- /dev/null
+++ b/package/libdispatch/libdispatch.mk
@@ -0,0 +1,52 @@ 
+### Grand Central Dispatch
+LIBDISPATCH_VERSION = 5.6
+LIBDISPATCH_SITE = $(call github,apple,swift-corelibs-libdispatch,swift-$(LIBDISPATCH_VERSION)-RELEASE)
+LIBDISPATCH_LICENSE = Apache-2.0
+LIBDISPATCH_LICENSE_FILES = LICENSE
+LIBDISPATCH_INSTALL_STAGING = YES
+LIBDISPATCH_SUPPORTS_IN_SOURCE_BUILD = NO
+LIBDISPATCH_DEPENDENCIES = host-clang host-lld libbsd
+
+LIBDISPATCH_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LIBDISPATCH_TARGET_ARCH))
+LIBDISPATCH_CLANG_PATH = $(HOST_DIR)/bin
+
+ifeq ($(LIBDISPATCH_TARGET_ARCH),armv7)
+LIBDISPATCH_TARGET_NAME		= armv7-unknown-linux-gnueabihf
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),armv6)
+LIBDISPATCH_TARGET_NAME		= armv6-unknown-linux-gnueabihf
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),armv5)
+LIBDISPATCH_TARGET_NAME		= armv5-unknown-linux-gnueabi
+else
+LIBDISPATCH_TARGET_NAME		= $(LIBDISPATCH_TARGET_ARCH)-unknown-linux-gnu
+endif
+
+ifeq ($(LIBDISPATCH_TARGET_ARCH),armv5)
+LIBDISPATCH_EXTRA_FLAGS		= -march=armv5te
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),riscv64)
+LIBDISPATCH_EXTRA_FLAGS		= -mno-relax -mabi=lp64 -march=rv64imac -mfloat-abi=soft
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),mipsel)
+LIBDISPATCH_EXTRA_FLAGS		= -msoft-float
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),mips64el)
+LIBDISPATCH_EXTRA_FLAGS		= -msoft-float
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),powerpc)
+LIBDISPATCH_EXTRA_FLAGS		= -mcpu=7400
+else
+LIBDISPATCH_EXTRA_FLAGS		= 
+endif
+
+LIBDISPATCH_CONF_OPTS += \
+	-DLibRT_LIBRARIES="${STAGING_DIR}/usr/lib/librt.a" \
+	-DCMAKE_C_COMPILER=$(LIBDISPATCH_CLANG_PATH)/clang \
+	-DCMAKE_CXX_COMPILER=$(LIBDISPATCH_CLANG_PATH)/clang++ \
+	-DCMAKE_C_FLAGS="-w -fuse-ld=lld $(LIBDISPATCH_EXTRA_FLAGS) -target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR) -I$(STAGING_DIR)/usr/include -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \
+	-DCMAKE_C_LINK_FLAGS="-target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR)" \
+	-DCMAKE_CXX_FLAGS="-w -fuse-ld=lld $(LIBDISPATCH_EXTRA_FLAGS) -target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR) -I$(STAGING_DIR)/usr/include -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/ -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/$(GNU_TARGET_NAME) -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \
+	-DCMAKE_CXX_LINK_FLAGS="-target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR)" \
+
+define LIBDISPATCH_INSTALL_TARGET_CMDS
+	(cd $(LIBDISPATCH_BUILDDIR) && \
+	cp ./*.so $(TARGET_DIR)/usr/lib/ \
+	)
+endef
+
+$(eval $(cmake-package))