Message ID | 20220329215433.1018660-1-alseycmiller@gmail.com |
---|---|
State | Changes Requested |
Headers | show |
Series | [1/2] package/libdispatch: add libdispatch package | expand |
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 >
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 --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))
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