diff --git a/README.adoc b/README.adoc index f64437c..22cfcde 100644 --- a/README.adoc +++ b/README.adoc @@ -4164,7 +4164,6 @@ Buildroot built-in libraries, mostly under Libraries > Other: * Armadillo `C++`: linear algebra * fftw: Fourier transform -* Eigen: linear algebra * Flann * GSL: various * liblinear @@ -4174,21 +4173,21 @@ Buildroot built-in libraries, mostly under Libraries > Other: There are not yet enabled, but it should be easy to so, see: <> +===== OpenMP + +Implemented by GCC itself, so just a toolchain configuration, no external libs, and we enable it by default: + +.... +/openmp.out +.... + ===== BLAS Buildroot supports it, which makes everything just trivial: .... -./build \ - -a arm \ - -B 'BR2_PACKAGE_OPENBLAS=y' \ -; -.... - -and then inside the guest run our test program: - -.... -/openblas.out +./build -a arm -B 'BR2_PACKAGE_OPENBLAS=y' -k +./run -F '/openblas.out' .... For x86, you also need: @@ -4203,6 +4202,15 @@ to overcome this bug: https://bugs.busybox.net/show_bug.cgi?id=10856 sgemm_kernel.o: No such file or directory .... +===== Eigen + +Header only linear algebra library supported by Buildroot: + +.... +./build -B 'BR2_PACKAGE_EIGEN=y' -k +./run -F '/eigen.out' +.... + ===== PARSEC benchmark We have ported parts of the link:http://parsec.cs.princeton.edu[PARSEC benchmark] for cross compilation at: https://github.com/cirosantilli/parsec-benchmark See the documentation on that repo to find out which benchmarks have been ported. Some of the benchmarks were are segfaulting, they are documented in that repo. diff --git a/kernel_module/external.mk b/kernel_module/external.mk index 97bbe44..f322a0c 100644 --- a/kernel_module/external.mk +++ b/kernel_module/external.mk @@ -11,9 +11,14 @@ KERNEL_MODULE_SITE_METHOD = local ifeq ($(BR2_PACKAGE_OPENBLAS),y) KERNEL_MODULE_DEPENDENCIES += openblas endif +ifeq ($(BR2_PACKAGE_EIGEN),y) + KERNEL_MODULE_DEPENDENCIES += eigen +endif define KERNEL_MODULE_BUILD_CMDS - $(MAKE) -C '$(@D)/user' $(TARGET_CONFIGURE_OPTS) BR2_PACKAGE_OPENBLAS="$(BR2_PACKAGE_OPENBLAS)" + $(MAKE) -C '$(@D)/user' $(TARGET_CONFIGURE_OPTS) \ + BR2_PACKAGE_OPENBLAS="$(BR2_PACKAGE_OPENBLAS)" \ + BR2_PACKAGE_EIGEN="$(BR2_PACKAGE_EIGEN)" endef define KERNEL_MODULE_INSTALL_TARGET_CMDS diff --git a/kernel_module/user/Makefile b/kernel_module/user/Makefile index 8ff2d59..1da24cc 100644 --- a/kernel_module/user/Makefile +++ b/kernel_module/user/Makefile @@ -10,7 +10,13 @@ OUTS := $(foreach IN_EXT,$(IN_EXT_C) $(IN_EXT_CXX),$(addsuffix $(OUT_EXT), $(bas ifeq ($(BR2_PACKAGE_OPENBLAS),y) LIBS += -lopenblas else - OUTS := $(filter-out openblas.out,$(OUTS)) + OUTS := $(filter-out openblas$(OUT_EXT),$(OUTS)) +endif +ifeq ($(BR2_PACKAGE_EIGEN),y) + # Header only. + #LIBS += -leigen +else + OUTS := $(filter-out eigen%$(OUT_EXT),$(OUTS)) endif all: $(OUTS) diff --git a/kernel_module/user/README.adoc b/kernel_module/user/README.adoc index c4f89c5..420dfec 100644 --- a/kernel_module/user/README.adoc +++ b/kernel_module/user/README.adoc @@ -30,3 +30,7 @@ These programs can also be compiled and used on host. .. link:ioctl.c[] .. link:netlink.c[] .. link:poll.c[] +. Buildroot libraries +.. link:eigen.cpp[] +.. link:openmp.c[] +.. link:openblas.c[] diff --git a/kernel_module/user/eigen.cpp b/kernel_module/user/eigen.cpp new file mode 100644 index 0000000..a6837d6 --- /dev/null +++ b/kernel_module/user/eigen.cpp @@ -0,0 +1,14 @@ +/* Official hello world. */ + +#include +#include +using Eigen::MatrixXd; +int main() +{ + MatrixXd m(2,2); + m(0,0) = 3; + m(1,0) = 2.5; + m(0,1) = -1; + m(1,1) = m(1,0) + m(0,1); + std::cout << m << std::endl; +}