Skip to contentSkip to conversation

package: add hwloc 1.10.1

PATCH Superseded Steven Noonan 2 participants 4 messages Mar 19, 2015 – Mar 20, 2015

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 package: add hwloc 1.10.1

---
v2
- Fixed description in Config.in.
v3
- Fixed source URL for hwloc.hash entries.
- Copied dependencies from libpciaccess/numactl.

 package/Config.in        |  1 +
 package/hwloc/Config.in  | 18 ++++++++++++++++++
 package/hwloc/hwloc.hash |  2 ++
 package/hwloc/hwloc.mk   | 14 ++++++++++++++
 4 files changed, 35 insertions(+)
 create mode 100644 package/hwloc/Config.in
 create mode 100644 package/hwloc/hwloc.hash
 create mode 100644 package/hwloc/hwloc.mk
package/Config.in +1 -0
index 96e373a..4ee489c 100644
@@ -331,6 +331,7 @@ if BR2_PACKAGE_BUSYBOX_SHOW_OTHERS
 	source "package/hdparm/Config.in"
 endif
 	source "package/hwdata/Config.in"
+	source "package/hwloc/Config.in"
 	source "package/i2c-tools/Config.in"
 	source "package/input-event-daemon/Config.in"
 	source "package/input-tools/Config.in"
package/hwloc/Config.in new file +18 -0
new file mode 100644
index 0000000..332536b
@@ -0,0 +1,18 @@
+config BR2_PACKAGE_HWLOC
+	bool "hwloc"
+	# libpciaccess dependency
+	depends on BR2_LARGEFILE
+	# numactl dependency
+	depends on BR2_i386 || BR2_mips || BR2_mipsel || \
+	    BR2_mips64 || BR2_mips64el || BR2_powerpc || BR2_x86_64
+	select BR2_PACKAGE_LIBPCIACCESS
+	select BR2_PACKAGE_NUMACTL
+	help
+	  Portable Hardware Locality
+
+	  Provides a portable abstraction (across OS, versions, architectures, ...)
+	  of the hierarchical topology of modern architectures, including NUMA
+	  memory nodes, sockets, shared caches, cores and simultaneous
+	  multithreading.
+
+	  http://www.open-mpi.org/projects/hwloc/
package/hwloc/hwloc.hash new file +2 -0
new file mode 100644
index 0000000..53563dd
@@ -0,0 +1,2 @@
+# From http://www.open-mpi.org/software/hwloc/v1.10/
+sha1	76291124e4638b2fbd4deb4cc3cd680e153077b5	hwloc-1.10.1.tar.bz2
package/hwloc/hwloc.mk new file +14 -0
new file mode 100644
index 0000000..ced3627
@@ -0,0 +1,14 @@
+################################################################################
+#
+# hwloc
+#
+################################################################################
+
+HWLOC_VERSION = 1.10.1
+HWLOC_SOURCE = hwloc-$(HWLOC_VERSION).tar.bz2
+HWLOC_SITE = http://www.open-mpi.org/software/hwloc/v1.10/downloads
+HWLOC_DEPENDENCIES = libpciaccess numactl
+HWLOC_LICENSE = BSD-3c
+HWLOC_LICENSE_FILES = COPYING
+
+$(eval $(autotools-package))
Signature · 1 line
2.3.3
#1 lore raw

PATCH v3 1/1 package: add hwloc 1.10.1

Dear Steven Noonan,

Quoted 6 lines · Steven Noonan
package/hwloc/Config.in new file +0 -0
new file mode 100644
index 0000000..332536b

package/hwloc/Config.in line 9

Quoted 9 lines
package/hwloc/Config.in new file +9 -0
@@ -0,0 +1,18 @@
+config BR2_PACKAGE_HWLOC
+	bool "hwloc"
+	# libpciaccess dependency
+	depends on BR2_LARGEFILE
+	# numactl dependency
+	depends on BR2_i386 || BR2_mips || BR2_mipsel || \
+	    BR2_mips64 || BR2_mips64el || BR2_powerpc || BR2_x86_64
+	select BR2_PACKAGE_LIBPCIACCESS
+	select BR2_PACKAGE_NUMACTL

The dependencies on libpciaccess and numactl are optional, so I removed them.

However, there was a missing dependency on BR2_TOOLCHAIN_HAS_THREADS, since hwloc uses pthread.

package/hwloc/Config.in line 16

Quoted 7 lines
package/hwloc/Config.in new file +7 -0
+	help
+	  Portable Hardware Locality
+
+	  Provides a portable abstraction (across OS, versions, architectures, ...)
+	  of the hierarchical topology of modern architectures, including NUMA
+	  memory nodes, sockets, shared caches, cores and simultaneous
+	  multithreading.

Lines slightly too long, so I rewrapped.

package/hwloc/Config.in

Quoted 7 lines
package/hwloc/Config.in new file +7 -0
+################################################################################
+#
+# hwloc
+#
+################################################################################
+
+HWLOC_VERSION = 1.10.1

I declared HWLOC_VERSION_MAJOR here..

package/hwloc/Config.in

Quoted 2 lines
package/hwloc/Config.in new file +2 -0
+HWLOC_SOURCE = hwloc-$(HWLOC_VERSION).tar.bz2
+HWLOC_SITE = http://www.open-mpi.org/software/hwloc/v1.10/downloads

... so it can be re-used here.

Quoted 1 line

+HWLOC_DEPENDENCIES = libpciaccess numactl

As I said, those dependencies are optional, so I made them as such, and also used explicit --enable/--disable options. This allowed me to discover that the numa support was never enabled with your submission:
the numactl package was not installing its library/header file in $(STAGING_DIR). With an explicit --enable-libnuma, hwloc configure script bailed out since it couldn't find the libnuma library.

So I committed a patch that installs libnuma to the staging directory as well.

Also, I added some explicit --disable options for the things that we don't support for now.

Committed with those issues fixed.

Thanks,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH v3 1/1 package: add hwloc 1.10.1

Quoted 23 lines · Thomas Petazzoni

Dear Steven Noonan,

Quoted 6 lines · Steven Noonan
package/hwloc/Config.in new file +0 -0
new file mode 100644
index 0000000..332536b

package/hwloc/Config.in line 9

Quoted 9 lines
package/hwloc/Config.in new file +9 -0
@@ -0,0 +1,18 @@
+config BR2_PACKAGE_HWLOC
+     bool "hwloc"
+     # libpciaccess dependency
+     depends on BR2_LARGEFILE
+     # numactl dependency
+     depends on BR2_i386 || BR2_mips || BR2_mipsel || \
+         BR2_mips64 || BR2_mips64el || BR2_powerpc || BR2_x86_64
+     select BR2_PACKAGE_LIBPCIACCESS
+     select BR2_PACKAGE_NUMACTL

The dependencies on libpciaccess and numactl are optional, so I removed them.

Quoted 2 lines

However, there was a missing dependency on BR2_TOOLCHAIN_HAS_THREADS, since hwloc uses pthread.

Again, only tested with glibc and such, so I'm not seeing lots of these dependencies. Glad I held off on my other contributions until I could get these through review. Now I've got some ideas of things to look for before submission.

Quoted 9 lines

package/hwloc/Config.in line 16

Quoted 7 lines
package/hwloc/Config.in new file +7 -0
+     help
+       Portable Hardware Locality
+
+       Provides a portable abstraction (across OS, versions, architectures, ...)
+       of the hierarchical topology of modern architectures, including NUMA
+       memory nodes, sockets, shared caches, cores and simultaneous
+       multithreading.

Lines slightly too long, so I rewrapped.

What column wrapping is preferred for the Config.in files? I could throw it into my vim config to enforce it in the future.

Quoted 16 lines

package/hwloc/Config.in

Quoted 8 lines
package/hwloc/Config.in new file +7 -0
+################################################################################
+#
+# hwloc
+#
+################################################################################
+
+HWLOC_VERSION = 1.10.1

I declared HWLOC_VERSION_MAJOR here..

package/hwloc/Config.in

Quoted 2 lines
package/hwloc/Config.in new file +2 -0
+HWLOC_SOURCE = hwloc-$(HWLOC_VERSION).tar.bz2
+HWLOC_SITE = http://www.open-mpi.org/software/hwloc/v1.10/downloads

... so it can be re-used here.

Quoted 8 lines
Quoted 1 line

+HWLOC_DEPENDENCIES = libpciaccess numactl

As I said, those dependencies are optional, so I made them as such, and also used explicit --enable/--disable options. This allowed me to discover that the numa support was never enabled with your submission:
the numactl package was not installing its library/header file in $(STAGING_DIR). With an explicit --enable-libnuma, hwloc configure script bailed out since it couldn't find the libnuma library.

This would probably explain why the 'perf' build wasn't finding the optional libnuma dependency as well -- hadn't figured out what was wrong there.

Quoted 2 lines

So I committed a patch that installs libnuma to the staging directory as well.

Excellent. I'm not familiar with how the staging directory works. Does that change work for any package depending on it (e.g. perf)?

Quoted 3 lines

Also, I added some explicit --disable options for the things that we don't support for now.

Nice.

#3 lore raw

PATCH v3 1/1 package: add hwloc 1.10.1

Dear Steven Noonan,

Quoted 7 lines · Steven Noonan
Quoted 2 lines

However, there was a missing dependency on BR2_TOOLCHAIN_HAS_THREADS, since hwloc uses pthread.

Again, only tested with glibc and such, so I'm not seeing lots of these dependencies. Glad I held off on my other contributions until I could get these through review. Now I've got some ideas of things to look for before submission.

Specifically for thread dependency, I generally don't build with a no-thread toolchain (even though one is available pre-built at
http://autobuild.buildroot.org/toolchains/configs/br-arm-full-nothread.config).
Instead, I grep for pthread in the source code, and try to decide whether it needs thread support or not (sometimes packages use thread when available, but it is optional).

Quoted 4 lines
Quoted 1 line

Lines slightly too long, so I rewrapped.

What column wrapping is preferred for the Config.in files? I could throw it into my vim config to enforce it in the future.

I think 72 ?

Quoted 10 lines
Quoted 6 lines

As I said, those dependencies are optional, so I made them as such, and also used explicit --enable/--disable options. This allowed me to discover that the numa support was never enabled with your submission:
the numactl package was not installing its library/header file in $(STAGING_DIR). With an explicit --enable-libnuma, hwloc configure script bailed out since it couldn't find the libnuma library.

This would probably explain why the 'perf' build wasn't finding the optional libnuma dependency as well -- hadn't figured out what was wrong there.

Yes, that would explain it.

Quoted 4 lines
Quoted 2 lines

So I committed a patch that installs libnuma to the staging directory as well.

Excellent. I'm not familiar with how the staging directory works.

It's actually quite simple. The staging directory, $(STAGING_DIR), is the "sysroot" of the toolchain. This is where the toolchain looks to find libraries and headers.

By default, packages only get installed to $(TARGET_DIR), because <pkg>_INSTALL_TARGET defaults to "YES". In this case <pkg>_INSTALL_TARGET_CMDS is called and does it job (of course, for autotools packages, you don't implement this variable manually in your package .mk file, since the autotools-package infra already has it implemented for you).

However, when your package is a library, or generally needs to install something in $(STAGING_DIR), you need to explicitly set <pkg>_INSTALL_STAGING to YES, because it defaults to NO. When set to YES, the top-level package infrastructure will call <pkg>_INSTALL_STAGING_CMDS (which, just like <pkg>_INSTALL_TARGET_CMDS, is already implemented for you for autotools packages, CMake packages and al.).

Quoted 1 line

Does that change work for any package depending on it (e.g. perf)?

Yes: from now on, whenever a package has "numactl" in its <pkg>_DEPENDENCIES variable, numactl will be installed to both $(TARGET_DIR) and $(STAGING_DIR), which means that such packages will be able to "see" the libnuma library and header files.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com