* [Buildroot] [PATCH 1/2] toolchain-external: add basic fortran support
@ 2016-03-17 23:40 Benjamin Kamath
2016-03-17 23:40 ` [Buildroot] [PATCH 2/2] package: add lapack Benjamin Kamath
2016-03-18 7:10 ` [Buildroot] [PATCH 1/2] toolchain-external: add basic fortran support Samuel Martin
0 siblings, 2 replies; 6+ messages in thread
From: Benjamin Kamath @ 2016-03-17 23:40 UTC (permalink / raw)
To: buildroot
From: Benjamin Kamath <bkamath@spaceflight.com>
Add the necessary support to allow an external toolchain
to supply a fortran compiler. This mostly amounts to a
toolchain configuration option that sets BR2_INSTALL_LIBFORTRAN,
and then various hooks to pass along flags, as well as
run-time libraries.
Additionally, gfortran needs to be invoked through the
toolchain-wrapper, not just symlinked to $(TARGET_FC)gfortran.
Signed-off-by: Benjamin Kamath <bkamath@spaceflight.com>
---
package/Makefile.in | 9 +++++++++
package/gcc/gcc-final/gcc-final.mk | 4 ++--
package/pkg-cmake.mk | 6 ++++++
support/misc/toolchainfile.cmake.in | 2 ++
toolchain/helpers.mk | 13 +++++++++++++
toolchain/toolchain-common.in | 3 +++
toolchain/toolchain-external/Config.in | 12 ++++++++++++
toolchain/toolchain-external/toolchain-external.mk | 10 +++++++++-
8 files changed, 56 insertions(+), 3 deletions(-)
diff --git a/package/Makefile.in b/package/Makefile.in
index dd595e2..125406f 100644
--- a/package/Makefile.in
+++ b/package/Makefile.in
@@ -138,6 +138,7 @@ endif
TARGET_CPPFLAGS += -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
TARGET_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
TARGET_CXXFLAGS = $(TARGET_CFLAGS)
+TARGET_FCFLAGS = $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
TARGET_LDFLAGS = $(call qstrip,$(BR2_TARGET_LDFLAGS))
ifeq ($(BR2_BINFMT_FLAT),y)
@@ -145,28 +146,35 @@ TARGET_CFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FL
-Wl$(comma)-elf2flt)
TARGET_CXXFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\
-Wl$(comma)-elf2flt)
+TARGET_FCFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\
+ -Wl$(comma)-elf2flt)
TARGET_LDFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),-elf2flt)
endif
ifeq ($(BR2_BINFMT_FLAT_SHARED),y)
TARGET_LDFLAGS += -mid-shared-library -mshared-library-id=0
TARGET_CFLAGS += -mid-shared-library -mshared-library-id=0
+TARGET_FCFLAGS += -mid-shared-library -mshared-library-id=0
TARGET_CXXFLAGS += -mid-shared-library -mshared-library-id=0
endif
ifeq ($(BR2_BINFMT_FLAT_SEP_DATA),y)
TARGET_LDFLAGS += -msep-data
TARGET_CFLAGS += -msep-data
+TARGET_FCFLAGS += -msep-data
TARGET_CXXFLAGS += -msep-data
endif
ifeq ($(BR2_SSP_REGULAR),y)
TARGET_CFLAGS += -fstack-protector
+TARGET_FCFLAGS += -fstack-protector
TARGET_CXXFLAGS += -fstack-protector
else ifeq ($(BR2_SSP_STRONG),y)
TARGET_CFLAGS += -fstack-protector-strong
+TARGET_FCFLAGS += -fstack-protector-strong
TARGET_CXXFLAGS += -fstack-protector-strong
else ifeq ($(BR2_SSP_ALL),y)
TARGET_CFLAGS += -fstack-protector-all
+TARGET_FCFLAGS += -fstack-protector-all
TARGET_CXXFLAGS += -fstack-protector-all
endif
@@ -378,6 +386,7 @@ ifeq ($(BR2_STATIC_LIBS),y)
SHARED_STATIC_LIBS_OPTS = --enable-static --disable-shared
TARGET_CFLAGS += -static
TARGET_CXXFLAGS += -static
+TARGET_FCFLAGS += -static
TARGET_LDFLAGS += -static
else ifeq ($(BR2_SHARED_LIBS),y)
SHARED_STATIC_LIBS_OPTS = --disable-static --enable-shared
diff --git a/package/gcc/gcc-final/gcc-final.mk b/package/gcc/gcc-final/gcc-final.mk
index 69fdc0c..87480c7 100644
--- a/package/gcc/gcc-final/gcc-final.mk
+++ b/package/gcc/gcc-final/gcc-final.mk
@@ -54,7 +54,7 @@ endef
# Languages supported by the cross-compiler
GCC_FINAL_CROSS_LANGUAGES-y = c
GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBSTDCPP) += c++
-GCC_FINAL_CROSS_LANGUAGES-$(BR2_TOOLCHAIN_BUILDROOT_FORTRAN) += fortran
+GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBFORTRAN) += fortran
GCC_FINAL_CROSS_LANGUAGES = $(subst $(space),$(comma),$(GCC_FINAL_CROSS_LANGUAGES-y))
HOST_GCC_FINAL_CONF_OPTS = \
@@ -152,7 +152,7 @@ ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
HOST_GCC_FINAL_USR_LIBS += libstdc++
endif
-ifeq ($(BR2_TOOLCHAIN_BUILDROOT_FORTRAN),y)
+ifeq ($(BR2_INSTALL_LIBFORTRAN),y)
HOST_GCC_FINAL_USR_LIBS += libgfortran
endif
diff --git a/package/pkg-cmake.mk b/package/pkg-cmake.mk
index 81dcfcc..a93709e 100644
--- a/package/pkg-cmake.mk
+++ b/package/pkg-cmake.mk
@@ -31,6 +31,8 @@ CMAKE_HOST_C_COMPILER = $(HOSTCC)
CMAKE_HOST_CXX_COMPILER = $(HOSTCXX)
endif
+CMAKE_HOST_Fortran_COMPILER ?= $(HOSTFC)
+
ifneq ($(QUIET),)
CMAKE_QUIET = -DCMAKE_RULE_MESSAGES=OFF -DCMAKE_INSTALL_MESSAGE=NEVER
endif
@@ -119,10 +121,12 @@ define $(2)_CONFIGURE_CMDS
-DCMAKE_INSTALL_PREFIX="$$(HOST_DIR)/usr" \
-DCMAKE_C_FLAGS="$$(HOST_CFLAGS)" \
-DCMAKE_CXX_FLAGS="$$(HOST_CXXFLAGS)" \
+ -DCMAKE_FC_FLAGS="$$(HOST_FCFLAGS)" \
-DCMAKE_EXE_LINKER_FLAGS="$$(HOST_LDFLAGS)" \
-DCMAKE_ASM_COMPILER="$$(HOSTAS)" \
-DCMAKE_C_COMPILER="$$(CMAKE_HOST_C_COMPILER)" \
-DCMAKE_CXX_COMPILER="$$(CMAKE_HOST_CXX_COMPILER)" \
+ -DCMAKE_Fortran_COMPILER="$$(CMAKE_HOST_Fortran_COMPILER)" \
$(if $$(CMAKE_HOST_C_COMPILER_ARG1),\
-DCMAKE_C_COMPILER_ARG1="$$(CMAKE_HOST_C_COMPILER_ARG1)" \
-DCMAKE_CXX_COMPILER_ARG1="$$(CMAKE_HOST_CXX_COMPILER_ARG1)" \
@@ -243,9 +247,11 @@ $(HOST_DIR)/usr/share/buildroot/toolchainfile.cmake:
-e 's#@@STAGING_SUBDIR@@#$(call qstrip,$(STAGING_SUBDIR))#' \
-e 's#@@TARGET_CFLAGS@@#$(call qstrip,$(TARGET_CFLAGS))#' \
-e 's#@@TARGET_CXXFLAGS@@#$(call qstrip,$(TARGET_CXXFLAGS))#' \
+ -e 's:@@TARGET_FCFLAGS@@:$(call qstrip,$(TARGET_FCFLAGS)):' \
-e 's#@@TARGET_LDFLAGS@@#$(call qstrip,$(TARGET_LDFLAGS))#' \
-e 's#@@TARGET_CC@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_CC)))#' \
-e 's#@@TARGET_CXX@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_CXX)))#' \
+ -e 's:@@TARGET_FC@@:$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_FC))):' \
-e 's#@@CMAKE_SYSTEM_PROCESSOR@@#$(call qstrip,$(CMAKE_SYSTEM_PROCESSOR))#' \
$(TOPDIR)/support/misc/toolchainfile.cmake.in \
> $@
diff --git a/support/misc/toolchainfile.cmake.in b/support/misc/toolchainfile.cmake.in
index 5cf381e..4112604 100644
--- a/support/misc/toolchainfile.cmake.in
+++ b/support/misc/toolchainfile.cmake.in
@@ -15,6 +15,7 @@ set(CMAKE_SYSTEM_PROCESSOR @@CMAKE_SYSTEM_PROCESSOR@@)
set(CMAKE_C_FLAGS "@@TARGET_CFLAGS@@ ${CMAKE_C_FLAGS}" CACHE STRING "Buildroot CFLAGS")
set(CMAKE_CXX_FLAGS "@@TARGET_CXXFLAGS@@ ${CMAKE_CXX_FLAGS}" CACHE STRING "Buildroot CXXFLAGS")
+set(CMAKE_Fortran_FLAGS "@@TARGET_FCFLAGS@@ ${CMAKE_Fortran_FLAGS}" CACHE STRING "Buildroot FCFLAGS")
set(CMAKE_EXE_LINKER_FLAGS "@@TARGET_LDFLAGS@@ ${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "Buildroot LDFLAGS")
set(CMAKE_INSTALL_SO_NO_EXE 0)
@@ -29,3 +30,4 @@ set(ENV{PKG_CONFIG_SYSROOT_DIR} "${RELOCATED_HOST_DIR}/@@STAGING_SUBDIR@@")
# This toolchain file can be used both inside and outside Buildroot.
set(CMAKE_C_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CC@@")
set(CMAKE_CXX_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CXX@@")
+set(CMAKE_Fortran_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_FC@@")
diff --git a/toolchain/helpers.mk b/toolchain/helpers.mk
index ee878e8..196f295 100644
--- a/toolchain/helpers.mk
+++ b/toolchain/helpers.mk
@@ -382,6 +382,19 @@ check_cplusplus = \
fi
#
+# Check that the external toolchain supports Fortran
+#
+# $1: cross-gfortran path
+#
+check_fortran = \
+ __CROSS_FC=$(strip $1) ; \
+ $${__CROSS_FC} -v > /dev/null 2>&1 ; \
+ if test $$? -ne 0 ; then \
+ echo "Fortran support is selected but is not available in external toolchain" ; \
+ exit 1 ; \
+ fi
+
+#
# Check that the cross-compiler given in the configuration exists
#
# $1: cross-gcc path
diff --git a/toolchain/toolchain-common.in b/toolchain/toolchain-common.in
index 46970a6..1d7afa7 100644
--- a/toolchain/toolchain-common.in
+++ b/toolchain/toolchain-common.in
@@ -17,6 +17,9 @@ config BR2_ENABLE_LOCALE
config BR2_INSTALL_LIBSTDCPP
bool
+config BR2_INSTALL_LIBFORTRAN
+ bool
+
config BR2_TOOLCHAIN_HAS_THREADS
bool
diff --git a/toolchain/toolchain-external/Config.in b/toolchain/toolchain-external/Config.in
index ff759a0..64027ff 100644
--- a/toolchain/toolchain-external/Config.in
+++ b/toolchain/toolchain-external/Config.in
@@ -24,6 +24,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_INSTALL_LIBSTDCPP
+ select BR2_INSTALL_LIBFORTRAN
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
help
@@ -46,6 +47,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_INSTALL_LIBSTDCPP
+ select BR2_INSTALL_LIBFORTRAN
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
select BR2_TOOLCHAIN_GCC_AT_LEAST_5
help
@@ -68,6 +70,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_INSTALL_LIBSTDCPP
+ select BR2_INSTALL_LIBFORTRAN
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
help
@@ -90,6 +93,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_INSTALL_LIBSTDCPP
+ select BR2_INSTALL_LIBFORTRAN
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
select BR2_TOOLCHAIN_GCC_AT_LEAST_5
help
@@ -1047,6 +1051,14 @@ config BR2_TOOLCHAIN_EXTERNAL_CXX
support. If you don't know, leave the default value,
Buildroot will tell you if it's correct or not.
+config BR2_TOOLCHAIN_EXTERNAL_FORTRAN
+ bool "Toolchain has Fortran support?"
+ select BR2_INSTALL_LIBFORTRAN
+ help
+ Select this option if your external toolchain has Fortran
+ support. If you don't know, leave the default value,
+ Buildroot will tell you if it's correct or not.
+
config BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS
string "Extra toolchain libraries to be copied to target"
help
diff --git a/toolchain/toolchain-external/toolchain-external.mk b/toolchain/toolchain-external/toolchain-external.mk
index 37e1a2e..070d0cf 100644
--- a/toolchain/toolchain-external/toolchain-external.mk
+++ b/toolchain/toolchain-external/toolchain-external.mk
@@ -90,6 +90,10 @@ ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
USR_LIB_EXTERNAL_LIBS += libstdc++.so.*
endif
+ifeq ($(BR2_INSTALL_LIBFORTRAN),y)
+USR_LIB_EXTERNAL_LIBS += libgfortran.so.*
+endif
+
LIB_EXTERNAL_LIBS += $(call qstrip,$(BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS))
# Details about sysroot directory selection.
@@ -160,6 +164,7 @@ TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += \
TOOLCHAIN_EXTERNAL_CROSS = $(TOOLCHAIN_EXTERNAL_BIN)/$(TOOLCHAIN_EXTERNAL_PREFIX)-
TOOLCHAIN_EXTERNAL_CC = $(TOOLCHAIN_EXTERNAL_CROSS)gcc$(TOOLCHAIN_EXTERNAL_SUFFIX)
TOOLCHAIN_EXTERNAL_CXX = $(TOOLCHAIN_EXTERNAL_CROSS)g++$(TOOLCHAIN_EXTERNAL_SUFFIX)
+TOOLCHAIN_EXTERNAL_FC = $(TOOLCHAIN_EXTERNAL_CROSS)gfortran$(TOOLCHAIN_EXTERNAL_SUFFIX)
TOOLCHAIN_EXTERNAL_READELF = $(TOOLCHAIN_EXTERNAL_CROSS)readelf$(TOOLCHAIN_EXTERNAL_SUFFIX)
ifeq ($(filter $(HOST_DIR)/%,$(TOOLCHAIN_EXTERNAL_BIN)),)
@@ -495,6 +500,9 @@ define TOOLCHAIN_EXTERNAL_CONFIGURE_CMDS
if test "$(BR2_INSTALL_LIBSTDCPP)" = "y" ; then \
$(call check_cplusplus,$(TOOLCHAIN_EXTERNAL_CXX)) ; \
fi ; \
+ if test "$(BR2_INSTALL_LIBFORTRAN)" = "y" ; then \
+ $(call check_fortran,$(TOOLCHAIN_EXTERNAL_FC)) ; \
+ fi ; \
if test "$(BR2_TOOLCHAIN_EXTERNAL_UCLIBC)" = "y" ; then \
$(call check_uclibc,$${SYSROOT_DIR}) ; \
elif test "$(BR2_TOOLCHAIN_EXTERNAL_MUSL)" = "y" ; then \
@@ -719,7 +727,7 @@ define TOOLCHAIN_EXTERNAL_INSTALL_WRAPPER
*-ar|*-ranlib|*-nm) \
ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%../..%') .; \
;; \
- *cc|*cc-*|*++|*++-*|*cpp) \
+ *cc|*cc-*|*++|*++-*|*cpp|*fortran) \
ln -sf toolchain-wrapper $$base; \
;; \
*gdb|*gdbtui) \
--
2.5.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 2/2] package: add lapack
2016-03-17 23:40 [Buildroot] [PATCH 1/2] toolchain-external: add basic fortran support Benjamin Kamath
@ 2016-03-17 23:40 ` Benjamin Kamath
2016-03-18 5:23 ` Baruch Siach
2016-03-18 7:10 ` [Buildroot] [PATCH 1/2] toolchain-external: add basic fortran support Samuel Martin
1 sibling, 1 reply; 6+ messages in thread
From: Benjamin Kamath @ 2016-03-17 23:40 UTC (permalink / raw)
To: buildroot
From: Benjamin Kamath <bkamath@spaceflight.com>
lapack is a fortran-based linear algebra math
library.
Signed-off-by: Benjamin Kamath <bkamath@spaceflight.com>
---
package/Config.in | 1 +
package/lapack/0001-case-sensitive-paths.patch | 15 +++++++++++++++
package/lapack/Config.in | 18 ++++++++++++++++++
package/lapack/lapack.hash | 2 ++
package/lapack/lapack.mk | 24 ++++++++++++++++++++++++
5 files changed, 60 insertions(+)
create mode 100644 package/lapack/0001-case-sensitive-paths.patch
create mode 100644 package/lapack/Config.in
create mode 100644 package/lapack/lapack.hash
create mode 100644 package/lapack/lapack.mk
diff --git a/package/Config.in b/package/Config.in
index 2401867..b5a5e39 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1198,6 +1198,7 @@ menu "Other"
source "package/gmp/Config.in"
source "package/gsl/Config.in"
source "package/gtest/Config.in"
+ source "package/lapack/Config.in"
source "package/libargtable2/Config.in"
source "package/libatomic_ops/Config.in"
source "package/libbsd/Config.in"
diff --git a/package/lapack/0001-case-sensitive-paths.patch b/package/lapack/0001-case-sensitive-paths.patch
new file mode 100644
index 0000000..e032d78
--- /dev/null
+++ b/package/lapack/0001-case-sensitive-paths.patch
@@ -0,0 +1,15 @@
+diff -rupN lapack-3.6.0/CBLAS/CMakeLists.txt lapack-3.6.0-old/CBLAS/CMakeLists.txt
+--- lapack-3.6.0/CBLAS/CMakeLists.txt 2016-03-17 13:42:31.121248051 -0700
++++ lapack-3.6.0-old/CBLAS/CMakeLists.txt 2016-03-17 13:41:37.819316904 -0700
+@@ -65,9 +65,9 @@ if(ALL_TARGETS)
+ list(GET ALL_TARGETS 0 _cblas_config_build_guard_target)
+ endif()
+
+-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/cblas-config-version.cmake.in
++configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/cblas-config-version.cmake.in
+ ${LAPACK_BINARY_DIR}/cblas-config-version.cmake @ONLY)
+-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/cblas-config-build.cmake.in
++configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/cblas-config-build.cmake.in
+ ${LAPACK_BINARY_DIR}/cblas-config.cmake @ONLY)
+
+
diff --git a/package/lapack/Config.in b/package/lapack/Config.in
new file mode 100644
index 0000000..e5e1270
--- /dev/null
+++ b/package/lapack/Config.in
@@ -0,0 +1,18 @@
+config BR2_PACKAGE_LAPACK
+ bool "lapack/blas"
+ select BR2_TOOLCHAIN_BUILDROOT_FORTRAN
+ select BR2_INSTALL_LIBFORTRAN
+ # _fpu_control is used on PowerPC, but not available with
+ # uClibc
+ depends on !(BR2_powerpc && BR2_TOOLCHAIN_USES_UCLIBC)
+ help
+ LAPACK and BLAS FORTRAN implementation.
+
+ http://www.netlib.org/lapack/
+
+config BR2_PACKAGE_LAPACK_COMPLEX
+ bool "Complex/Complex16 support"
+ depends on BR2_PACKAGE_LAPACK
+ default y
+ help
+ Builds support for COMPLEX and COMPLEX16 data types.
diff --git a/package/lapack/lapack.hash b/package/lapack/lapack.hash
new file mode 100644
index 0000000..99d25b5
--- /dev/null
+++ b/package/lapack/lapack.hash
@@ -0,0 +1,2 @@
+# Locally computed:
+sha256 a9a0082c918fe14e377bbd570057616768dca76cbdc713457d8199aaa233ffc3 lapack-3.6.0.tgz
diff --git a/package/lapack/lapack.mk b/package/lapack/lapack.mk
new file mode 100644
index 0000000..fb91543
--- /dev/null
+++ b/package/lapack/lapack.mk
@@ -0,0 +1,24 @@
+################################################################################
+#
+# lapack
+#
+################################################################################
+
+LAPACK_VERSION = 3.6.0
+LAPACK_SOURCE = lapack-$(LAPACK_VERSION).tgz
+# This package provides 2 libraries:
+# - libblas
+# - liblapack
+LAPACK_LICENSE = BSD-3c (libblas and liblapack)
+LAPACK_LICENSE_FILES = LICENSE
+LAPACK_SITE = http://www.netlib.org/lapack
+LAPACK_INSTALL_STAGING = YES
+LAPACK_CONF_OPTS = -DBUILD_SHARED_LIBS=on -DLAPACKE=on -DCBLAS=on
+
+ifeq ($(BR2_PACKAGE_LAPACK_COMPLEX),y)
+LAPACK_CONF_OPTS += -DBUILD_COMPLEX=on -DBUILD_COMPLEX16=on
+else
+LAPACK_CONF_OPTS += -DBUILD_COMPLEX=off -DBUILD_COMPLEX16=off
+endif
+
+$(eval $(cmake-package))
--
2.5.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 2/2] package: add lapack
2016-03-17 23:40 ` [Buildroot] [PATCH 2/2] package: add lapack Benjamin Kamath
@ 2016-03-18 5:23 ` Baruch Siach
2016-03-18 19:17 ` Benjamin Kamath
0 siblings, 1 reply; 6+ messages in thread
From: Baruch Siach @ 2016-03-18 5:23 UTC (permalink / raw)
To: buildroot
Hi Benjamin,
On Thu, Mar 17, 2016 at 04:40:22PM -0700, Benjamin Kamath wrote:
> diff --git a/package/lapack/0001-case-sensitive-paths.patch b/package/lapack/0001-case-sensitive-paths.patch
> new file mode 100644
> index 0000000..e032d78
> --- /dev/null
> +++ b/package/lapack/0001-case-sensitive-paths.patch
> @@ -0,0 +1,15 @@
> +diff -rupN lapack-3.6.0/CBLAS/CMakeLists.txt lapack-3.6.0-old/CBLAS/CMakeLists.txt
> +--- lapack-3.6.0/CBLAS/CMakeLists.txt 2016-03-17 13:42:31.121248051 -0700
> ++++ lapack-3.6.0-old/CBLAS/CMakeLists.txt 2016-03-17 13:41:37.819316904 -0700
> +@@ -65,9 +65,9 @@ if(ALL_TARGETS)
> + list(GET ALL_TARGETS 0 _cblas_config_build_guard_target)
> + endif()
> +
> +-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/cblas-config-version.cmake.in
> ++configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/cblas-config-version.cmake.in
> + ${LAPACK_BINARY_DIR}/cblas-config-version.cmake @ONLY)
> +-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/cblas-config-build.cmake.in
> ++configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/cblas-config-build.cmake.in
> + ${LAPACK_BINARY_DIR}/cblas-config.cmake @ONLY)
The patch needs a description and your sign-off.
[snip]
> diff --git a/package/lapack/lapack.mk b/package/lapack/lapack.mk
> new file mode 100644
> index 0000000..fb91543
> --- /dev/null
> +++ b/package/lapack/lapack.mk
> @@ -0,0 +1,24 @@
> +################################################################################
> +#
> +# lapack
> +#
> +################################################################################
> +
> +LAPACK_VERSION = 3.6.0
> +LAPACK_SOURCE = lapack-$(LAPACK_VERSION).tgz
> +# This package provides 2 libraries:
> +# - libblas
> +# - liblapack
> +LAPACK_LICENSE = BSD-3c (libblas and liblapack)
> +LAPACK_LICENSE_FILES = LICENSE
> +LAPACK_SITE = http://www.netlib.org/lapack
> +LAPACK_INSTALL_STAGING = YES
> +LAPACK_CONF_OPTS = -DBUILD_SHARED_LIBS=on -DLAPACKE=on -DCBLAS=on
The Buildroot cmake infrastructure sets BUILD_SHARED_LIBS automatically based
on Buildroot config. If lapack does not support static build it should depend
on !BR2_STATIC_LIBS in Config.in
> +ifeq ($(BR2_PACKAGE_LAPACK_COMPLEX),y)
> +LAPACK_CONF_OPTS += -DBUILD_COMPLEX=on -DBUILD_COMPLEX16=on
> +else
> +LAPACK_CONF_OPTS += -DBUILD_COMPLEX=off -DBUILD_COMPLEX16=off
> +endif
> +
> +$(eval $(cmake-package))
baruch
--
http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 1/2] toolchain-external: add basic fortran support
2016-03-17 23:40 [Buildroot] [PATCH 1/2] toolchain-external: add basic fortran support Benjamin Kamath
2016-03-17 23:40 ` [Buildroot] [PATCH 2/2] package: add lapack Benjamin Kamath
@ 2016-03-18 7:10 ` Samuel Martin
2016-03-18 19:29 ` Benjamin Kamath
1 sibling, 1 reply; 6+ messages in thread
From: Samuel Martin @ 2016-03-18 7:10 UTC (permalink / raw)
To: buildroot
Hi Benjamin,
On Fri, Mar 18, 2016 at 12:40 AM, Benjamin Kamath <kamath.ben@gmail.com> wrote:
> From: Benjamin Kamath <bkamath@spaceflight.com>
>
> Add the necessary support to allow an external toolchain
> to supply a fortran compiler. This mostly amounts to a
> toolchain configuration option that sets BR2_INSTALL_LIBFORTRAN,
> and then various hooks to pass along flags, as well as
> run-time libraries.
>
> Additionally, gfortran needs to be invoked through the
> toolchain-wrapper, not just symlinked to $(TARGET_FC)gfortran.
Great works!
You may be interested in this work as well:
https://github.com/tSed/buildroot/commits/sma/ext-toolchain-options
more specifically:
https://github.com/tSed/buildroot/commit/82b0c580ce934c969839ce5e5029700d9bbdaff6
https://github.com/tSed/buildroot/commit/3a0ef3799a976fbb8fcaa272cd8c86e0a2eaa4cf
https://github.com/tSed/buildroot/commit/41a79c37bf7720b5a557a6caf054874817166d65
https://github.com/tSed/buildroot/commit/322fe0f571b163d23f0f1008703cbf1f3affe8fd
https://github.com/tSed/buildroot/commit/3dd490a79cba8bffa8f5a05cb5ca44e98426aa46
https://github.com/tSed/buildroot/commit/708d6849f24b3009e3260713018affad874bea5f
https://github.com/tSed/buildroot/commit/44243d7aa174a78000fd26342538660de1019c60
https://github.com/tSed/buildroot/commit/fcfb46274e9e9ec8ad2671ccadbe7b2bb433f2bd
https://github.com/tSed/buildroot/commit/290a0326ac98298adc4c454c8f75cf9da58efe89
https://github.com/tSed/buildroot/commit/b575a3fe025de1c8a679a3f6c72fcfa166a9cd07
The above branch is still a WIP, but the fortran support should be
here and working.
(The WIP stuff being updating the external toolchain selection.)
Compare to your series, from a first and quick glance, it seems you
better handle fortran flags than I did.
Few comments inlined (this is not a full in-deep review ;-])
>
> Signed-off-by: Benjamin Kamath <bkamath@spaceflight.com>
> ---
> package/Makefile.in | 9 +++++++++
> package/gcc/gcc-final/gcc-final.mk | 4 ++--
> package/pkg-cmake.mk | 6 ++++++
> support/misc/toolchainfile.cmake.in | 2 ++
> toolchain/helpers.mk | 13 +++++++++++++
> toolchain/toolchain-common.in | 3 +++
> toolchain/toolchain-external/Config.in | 12 ++++++++++++
> toolchain/toolchain-external/toolchain-external.mk | 10 +++++++++-
> 8 files changed, 56 insertions(+), 3 deletions(-)
>
> diff --git a/package/Makefile.in b/package/Makefile.in
> index dd595e2..125406f 100644
> --- a/package/Makefile.in
> +++ b/package/Makefile.in
> @@ -138,6 +138,7 @@ endif
> TARGET_CPPFLAGS += -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
> TARGET_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
> TARGET_CXXFLAGS = $(TARGET_CFLAGS)
> +TARGET_FCFLAGS = $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
> TARGET_LDFLAGS = $(call qstrip,$(BR2_TARGET_LDFLAGS))
>
> ifeq ($(BR2_BINFMT_FLAT),y)
> @@ -145,28 +146,35 @@ TARGET_CFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FL
> -Wl$(comma)-elf2flt)
> TARGET_CXXFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\
> -Wl$(comma)-elf2flt)
> +TARGET_FCFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\
> + -Wl$(comma)-elf2flt)
> TARGET_LDFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),-elf2flt)
> endif
>
> ifeq ($(BR2_BINFMT_FLAT_SHARED),y)
> TARGET_LDFLAGS += -mid-shared-library -mshared-library-id=0
> TARGET_CFLAGS += -mid-shared-library -mshared-library-id=0
> +TARGET_FCFLAGS += -mid-shared-library -mshared-library-id=0
> TARGET_CXXFLAGS += -mid-shared-library -mshared-library-id=0
> endif
> ifeq ($(BR2_BINFMT_FLAT_SEP_DATA),y)
> TARGET_LDFLAGS += -msep-data
> TARGET_CFLAGS += -msep-data
> +TARGET_FCFLAGS += -msep-data
> TARGET_CXXFLAGS += -msep-data
> endif
>
> ifeq ($(BR2_SSP_REGULAR),y)
> TARGET_CFLAGS += -fstack-protector
> +TARGET_FCFLAGS += -fstack-protector
> TARGET_CXXFLAGS += -fstack-protector
> else ifeq ($(BR2_SSP_STRONG),y)
> TARGET_CFLAGS += -fstack-protector-strong
> +TARGET_FCFLAGS += -fstack-protector-strong
> TARGET_CXXFLAGS += -fstack-protector-strong
> else ifeq ($(BR2_SSP_ALL),y)
> TARGET_CFLAGS += -fstack-protector-all
> +TARGET_FCFLAGS += -fstack-protector-all
> TARGET_CXXFLAGS += -fstack-protector-all
> endif
>
> @@ -378,6 +386,7 @@ ifeq ($(BR2_STATIC_LIBS),y)
> SHARED_STATIC_LIBS_OPTS = --enable-static --disable-shared
> TARGET_CFLAGS += -static
> TARGET_CXXFLAGS += -static
> +TARGET_FCFLAGS += -static
> TARGET_LDFLAGS += -static
> else ifeq ($(BR2_SHARED_LIBS),y)
> SHARED_STATIC_LIBS_OPTS = --disable-static --enable-shared
> diff --git a/package/gcc/gcc-final/gcc-final.mk b/package/gcc/gcc-final/gcc-final.mk
> index 69fdc0c..87480c7 100644
> --- a/package/gcc/gcc-final/gcc-final.mk
> +++ b/package/gcc/gcc-final/gcc-final.mk
> @@ -54,7 +54,7 @@ endef
> # Languages supported by the cross-compiler
> GCC_FINAL_CROSS_LANGUAGES-y = c
> GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBSTDCPP) += c++
> -GCC_FINAL_CROSS_LANGUAGES-$(BR2_TOOLCHAIN_BUILDROOT_FORTRAN) += fortran
> +GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBFORTRAN) += fortran
> GCC_FINAL_CROSS_LANGUAGES = $(subst $(space),$(comma),$(GCC_FINAL_CROSS_LANGUAGES-y))
>
> HOST_GCC_FINAL_CONF_OPTS = \
> @@ -152,7 +152,7 @@ ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
> HOST_GCC_FINAL_USR_LIBS += libstdc++
> endif
>
> -ifeq ($(BR2_TOOLCHAIN_BUILDROOT_FORTRAN),y)
> +ifeq ($(BR2_INSTALL_LIBFORTRAN),y)
> HOST_GCC_FINAL_USR_LIBS += libgfortran
> endif
>
> diff --git a/package/pkg-cmake.mk b/package/pkg-cmake.mk
> index 81dcfcc..a93709e 100644
> --- a/package/pkg-cmake.mk
> +++ b/package/pkg-cmake.mk
> @@ -31,6 +31,8 @@ CMAKE_HOST_C_COMPILER = $(HOSTCC)
> CMAKE_HOST_CXX_COMPILER = $(HOSTCXX)
> endif
>
> +CMAKE_HOST_Fortran_COMPILER ?= $(HOSTFC)
> +
Is this needed? What for?
AFAICS, there is no host-package requiring HOSTFC...
> ifneq ($(QUIET),)
> CMAKE_QUIET = -DCMAKE_RULE_MESSAGES=OFF -DCMAKE_INSTALL_MESSAGE=NEVER
> endif
> @@ -119,10 +121,12 @@ define $(2)_CONFIGURE_CMDS
> -DCMAKE_INSTALL_PREFIX="$$(HOST_DIR)/usr" \
> -DCMAKE_C_FLAGS="$$(HOST_CFLAGS)" \
> -DCMAKE_CXX_FLAGS="$$(HOST_CXXFLAGS)" \
> + -DCMAKE_FC_FLAGS="$$(HOST_FCFLAGS)" \
Why setting CMAKE_FC_FLAGS instead of CMAKE_Fortran_FLAGS?
> -DCMAKE_EXE_LINKER_FLAGS="$$(HOST_LDFLAGS)" \
> -DCMAKE_ASM_COMPILER="$$(HOSTAS)" \
> -DCMAKE_C_COMPILER="$$(CMAKE_HOST_C_COMPILER)" \
> -DCMAKE_CXX_COMPILER="$$(CMAKE_HOST_CXX_COMPILER)" \
> + -DCMAKE_Fortran_COMPILER="$$(CMAKE_HOST_Fortran_COMPILER)" \
> $(if $$(CMAKE_HOST_C_COMPILER_ARG1),\
> -DCMAKE_C_COMPILER_ARG1="$$(CMAKE_HOST_C_COMPILER_ARG1)" \
> -DCMAKE_CXX_COMPILER_ARG1="$$(CMAKE_HOST_CXX_COMPILER_ARG1)" \
> @@ -243,9 +247,11 @@ $(HOST_DIR)/usr/share/buildroot/toolchainfile.cmake:
> -e 's#@@STAGING_SUBDIR@@#$(call qstrip,$(STAGING_SUBDIR))#' \
> -e 's#@@TARGET_CFLAGS@@#$(call qstrip,$(TARGET_CFLAGS))#' \
> -e 's#@@TARGET_CXXFLAGS@@#$(call qstrip,$(TARGET_CXXFLAGS))#' \
> + -e 's:@@TARGET_FCFLAGS@@:$(call qstrip,$(TARGET_FCFLAGS)):' \
> -e 's#@@TARGET_LDFLAGS@@#$(call qstrip,$(TARGET_LDFLAGS))#' \
> -e 's#@@TARGET_CC@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_CC)))#' \
> -e 's#@@TARGET_CXX@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_CXX)))#' \
> + -e 's:@@TARGET_FC@@:$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_FC))):' \
> -e 's#@@CMAKE_SYSTEM_PROCESSOR@@#$(call qstrip,$(CMAKE_SYSTEM_PROCESSOR))#' \
> $(TOPDIR)/support/misc/toolchainfile.cmake.in \
> > $@
> diff --git a/support/misc/toolchainfile.cmake.in b/support/misc/toolchainfile.cmake.in
> index 5cf381e..4112604 100644
> --- a/support/misc/toolchainfile.cmake.in
> +++ b/support/misc/toolchainfile.cmake.in
> @@ -15,6 +15,7 @@ set(CMAKE_SYSTEM_PROCESSOR @@CMAKE_SYSTEM_PROCESSOR@@)
>
> set(CMAKE_C_FLAGS "@@TARGET_CFLAGS@@ ${CMAKE_C_FLAGS}" CACHE STRING "Buildroot CFLAGS")
> set(CMAKE_CXX_FLAGS "@@TARGET_CXXFLAGS@@ ${CMAKE_CXX_FLAGS}" CACHE STRING "Buildroot CXXFLAGS")
> +set(CMAKE_Fortran_FLAGS "@@TARGET_FCFLAGS@@ ${CMAKE_Fortran_FLAGS}" CACHE STRING "Buildroot FCFLAGS")
> set(CMAKE_EXE_LINKER_FLAGS "@@TARGET_LDFLAGS@@ ${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "Buildroot LDFLAGS")
> set(CMAKE_INSTALL_SO_NO_EXE 0)
>
> @@ -29,3 +30,4 @@ set(ENV{PKG_CONFIG_SYSROOT_DIR} "${RELOCATED_HOST_DIR}/@@STAGING_SUBDIR@@")
> # This toolchain file can be used both inside and outside Buildroot.
> set(CMAKE_C_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CC@@")
> set(CMAKE_CXX_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CXX@@")
> +set(CMAKE_Fortran_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_FC@@")
This will set (force to set) the fortran compile path in all
configuration, even in those that do not have it... :-/
> diff --git a/toolchain/helpers.mk b/toolchain/helpers.mk
> index ee878e8..196f295 100644
> --- a/toolchain/helpers.mk
> +++ b/toolchain/helpers.mk
> @@ -382,6 +382,19 @@ check_cplusplus = \
> fi
>
> #
> +# Check that the external toolchain supports Fortran
> +#
> +# $1: cross-gfortran path
> +#
> +check_fortran = \
> + __CROSS_FC=$(strip $1) ; \
> + $${__CROSS_FC} -v > /dev/null 2>&1 ; \
> + if test $$? -ne 0 ; then \
> + echo "Fortran support is selected but is not available in external toolchain" ; \
> + exit 1 ; \
> + fi
> +
> +#
> # Check that the cross-compiler given in the configuration exists
> #
> # $1: cross-gcc path
> diff --git a/toolchain/toolchain-common.in b/toolchain/toolchain-common.in
> index 46970a6..1d7afa7 100644
> --- a/toolchain/toolchain-common.in
> +++ b/toolchain/toolchain-common.in
> @@ -17,6 +17,9 @@ config BR2_ENABLE_LOCALE
> config BR2_INSTALL_LIBSTDCPP
> bool
>
> +config BR2_INSTALL_LIBFORTRAN
> + bool
> +
> config BR2_TOOLCHAIN_HAS_THREADS
> bool
>
> diff --git a/toolchain/toolchain-external/Config.in b/toolchain/toolchain-external/Config.in
> index ff759a0..64027ff 100644
> --- a/toolchain/toolchain-external/Config.in
> +++ b/toolchain/toolchain-external/Config.in
> @@ -24,6 +24,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
> select BR2_TOOLCHAIN_EXTERNAL_GLIBC
> select BR2_TOOLCHAIN_HAS_NATIVE_RPC
> select BR2_INSTALL_LIBSTDCPP
> + select BR2_INSTALL_LIBFORTRAN
> select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
> select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
> help
> @@ -46,6 +47,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
> select BR2_TOOLCHAIN_EXTERNAL_GLIBC
> select BR2_TOOLCHAIN_HAS_NATIVE_RPC
> select BR2_INSTALL_LIBSTDCPP
> + select BR2_INSTALL_LIBFORTRAN
> select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
> select BR2_TOOLCHAIN_GCC_AT_LEAST_5
> help
> @@ -68,6 +70,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB
> select BR2_TOOLCHAIN_EXTERNAL_GLIBC
> select BR2_TOOLCHAIN_HAS_NATIVE_RPC
> select BR2_INSTALL_LIBSTDCPP
> + select BR2_INSTALL_LIBFORTRAN
> select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
> select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
> help
> @@ -90,6 +93,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB
> select BR2_TOOLCHAIN_EXTERNAL_GLIBC
> select BR2_TOOLCHAIN_HAS_NATIVE_RPC
> select BR2_INSTALL_LIBSTDCPP
> + select BR2_INSTALL_LIBFORTRAN
> select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
> select BR2_TOOLCHAIN_GCC_AT_LEAST_5
> help
> @@ -1047,6 +1051,14 @@ config BR2_TOOLCHAIN_EXTERNAL_CXX
> support. If you don't know, leave the default value,
> Buildroot will tell you if it's correct or not.
>
> +config BR2_TOOLCHAIN_EXTERNAL_FORTRAN
> + bool "Toolchain has Fortran support?"
> + select BR2_INSTALL_LIBFORTRAN
> + help
> + Select this option if your external toolchain has Fortran
> + support. If you don't know, leave the default value,
> + Buildroot will tell you if it's correct or not.
> +
> config BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS
> string "Extra toolchain libraries to be copied to target"
> help
> diff --git a/toolchain/toolchain-external/toolchain-external.mk b/toolchain/toolchain-external/toolchain-external.mk
> index 37e1a2e..070d0cf 100644
> --- a/toolchain/toolchain-external/toolchain-external.mk
> +++ b/toolchain/toolchain-external/toolchain-external.mk
> @@ -90,6 +90,10 @@ ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
> USR_LIB_EXTERNAL_LIBS += libstdc++.so.*
> endif
>
> +ifeq ($(BR2_INSTALL_LIBFORTRAN),y)
> +USR_LIB_EXTERNAL_LIBS += libgfortran.so.*
> +endif
> +
> LIB_EXTERNAL_LIBS += $(call qstrip,$(BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS))
>
> # Details about sysroot directory selection.
> @@ -160,6 +164,7 @@ TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += \
> TOOLCHAIN_EXTERNAL_CROSS = $(TOOLCHAIN_EXTERNAL_BIN)/$(TOOLCHAIN_EXTERNAL_PREFIX)-
> TOOLCHAIN_EXTERNAL_CC = $(TOOLCHAIN_EXTERNAL_CROSS)gcc$(TOOLCHAIN_EXTERNAL_SUFFIX)
> TOOLCHAIN_EXTERNAL_CXX = $(TOOLCHAIN_EXTERNAL_CROSS)g++$(TOOLCHAIN_EXTERNAL_SUFFIX)
> +TOOLCHAIN_EXTERNAL_FC = $(TOOLCHAIN_EXTERNAL_CROSS)gfortran$(TOOLCHAIN_EXTERNAL_SUFFIX)
> TOOLCHAIN_EXTERNAL_READELF = $(TOOLCHAIN_EXTERNAL_CROSS)readelf$(TOOLCHAIN_EXTERNAL_SUFFIX)
>
> ifeq ($(filter $(HOST_DIR)/%,$(TOOLCHAIN_EXTERNAL_BIN)),)
> @@ -495,6 +500,9 @@ define TOOLCHAIN_EXTERNAL_CONFIGURE_CMDS
> if test "$(BR2_INSTALL_LIBSTDCPP)" = "y" ; then \
> $(call check_cplusplus,$(TOOLCHAIN_EXTERNAL_CXX)) ; \
> fi ; \
> + if test "$(BR2_INSTALL_LIBFORTRAN)" = "y" ; then \
> + $(call check_fortran,$(TOOLCHAIN_EXTERNAL_FC)) ; \
> + fi ; \
> if test "$(BR2_TOOLCHAIN_EXTERNAL_UCLIBC)" = "y" ; then \
> $(call check_uclibc,$${SYSROOT_DIR}) ; \
> elif test "$(BR2_TOOLCHAIN_EXTERNAL_MUSL)" = "y" ; then \
> @@ -719,7 +727,7 @@ define TOOLCHAIN_EXTERNAL_INSTALL_WRAPPER
> *-ar|*-ranlib|*-nm) \
> ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%../..%') .; \
> ;; \
> - *cc|*cc-*|*++|*++-*|*cpp) \
> + *cc|*cc-*|*++|*++-*|*cpp|*fortran) \
> ln -sf toolchain-wrapper $$base; \
> ;; \
> *gdb|*gdbtui) \
> --
> 2.5.0
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Regards,
--
Samuel
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 2/2] package: add lapack
2016-03-18 5:23 ` Baruch Siach
@ 2016-03-18 19:17 ` Benjamin Kamath
0 siblings, 0 replies; 6+ messages in thread
From: Benjamin Kamath @ 2016-03-18 19:17 UTC (permalink / raw)
To: buildroot
Hey Baruch,
On Thu, Mar 17, 2016 at 10:23 PM, Baruch Siach <baruch@tkos.co.il> wrote:
> Hi Benjamin,
>
> On Thu, Mar 17, 2016 at 04:40:22PM -0700, Benjamin Kamath wrote:
>> diff --git a/package/lapack/0001-case-sensitive-paths.patch b/package/lapack/0001-case-sensitive-paths.patch
>> new file mode 100644
>> index 0000000..e032d78
>> --- /dev/null
>> +++ b/package/lapack/0001-case-sensitive-paths.patch
>> @@ -0,0 +1,15 @@
>> +diff -rupN lapack-3.6.0/CBLAS/CMakeLists.txt lapack-3.6.0-old/CBLAS/CMakeLists.txt
>> +--- lapack-3.6.0/CBLAS/CMakeLists.txt 2016-03-17 13:42:31.121248051 -0700
>> ++++ lapack-3.6.0-old/CBLAS/CMakeLists.txt 2016-03-17 13:41:37.819316904 -0700
>> +@@ -65,9 +65,9 @@ if(ALL_TARGETS)
>> + list(GET ALL_TARGETS 0 _cblas_config_build_guard_target)
>> + endif()
>> +
>> +-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/cblas-config-version.cmake.in
>> ++configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/cblas-config-version.cmake.in
>> + ${LAPACK_BINARY_DIR}/cblas-config-version.cmake @ONLY)
>> +-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/cblas-config-build.cmake.in
>> ++configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/cblas-config-build.cmake.in
>> + ${LAPACK_BINARY_DIR}/cblas-config.cmake @ONLY)
>
> The patch needs a description and your sign-off.
>
> [snip]
Fixed
>
>> diff --git a/package/lapack/lapack.mk b/package/lapack/lapack.mk
>> new file mode 100644
>> index 0000000..fb91543
>> --- /dev/null
>> +++ b/package/lapack/lapack.mk
>> @@ -0,0 +1,24 @@
>> +################################################################################
>> +#
>> +# lapack
>> +#
>> +################################################################################
>> +
>> +LAPACK_VERSION = 3.6.0
>> +LAPACK_SOURCE = lapack-$(LAPACK_VERSION).tgz
>> +# This package provides 2 libraries:
>> +# - libblas
>> +# - liblapack
>> +LAPACK_LICENSE = BSD-3c (libblas and liblapack)
>> +LAPACK_LICENSE_FILES = LICENSE
>> +LAPACK_SITE = http://www.netlib.org/lapack
>> +LAPACK_INSTALL_STAGING = YES
>> +LAPACK_CONF_OPTS = -DBUILD_SHARED_LIBS=on -DLAPACKE=on -DCBLAS=on
>
> The Buildroot cmake infrastructure sets BUILD_SHARED_LIBS automatically based
> on Buildroot config. If lapack does not support static build it should depend
> on !BR2_STATIC_LIBS in Config.in
>
>> +ifeq ($(BR2_PACKAGE_LAPACK_COMPLEX),y)
>> +LAPACK_CONF_OPTS += -DBUILD_COMPLEX=on -DBUILD_COMPLEX16=on
>> +else
>> +LAPACK_CONF_OPTS += -DBUILD_COMPLEX=off -DBUILD_COMPLEX16=off
>> +endif
>> +
>> +$(eval $(cmake-package))
>
> baruch
>
> --
> http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
> =}------------------------------------------------ooO--U--Ooo------------{=
> - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -
Fixed, and will upload another patch set. Thanks!
-Ben
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 1/2] toolchain-external: add basic fortran support
2016-03-18 7:10 ` [Buildroot] [PATCH 1/2] toolchain-external: add basic fortran support Samuel Martin
@ 2016-03-18 19:29 ` Benjamin Kamath
0 siblings, 0 replies; 6+ messages in thread
From: Benjamin Kamath @ 2016-03-18 19:29 UTC (permalink / raw)
To: buildroot
Hey Samuel,
On Fri, Mar 18, 2016 at 12:10 AM, Samuel Martin <s.martin49@gmail.com> wrote:
> Hi Benjamin,
>
> On Fri, Mar 18, 2016 at 12:40 AM, Benjamin Kamath <kamath.ben@gmail.com> wrote:
>> From: Benjamin Kamath <bkamath@spaceflight.com>
>>
>> Add the necessary support to allow an external toolchain
>> to supply a fortran compiler. This mostly amounts to a
>> toolchain configuration option that sets BR2_INSTALL_LIBFORTRAN,
>> and then various hooks to pass along flags, as well as
>> run-time libraries.
>>
>> Additionally, gfortran needs to be invoked through the
>> toolchain-wrapper, not just symlinked to $(TARGET_FC)gfortran.
>
> Great works!
>
> You may be interested in this work as well:
> https://github.com/tSed/buildroot/commits/sma/ext-toolchain-options
>
> more specifically:
> https://github.com/tSed/buildroot/commit/82b0c580ce934c969839ce5e5029700d9bbdaff6
> https://github.com/tSed/buildroot/commit/3a0ef3799a976fbb8fcaa272cd8c86e0a2eaa4cf
> https://github.com/tSed/buildroot/commit/41a79c37bf7720b5a557a6caf054874817166d65
> https://github.com/tSed/buildroot/commit/322fe0f571b163d23f0f1008703cbf1f3affe8fd
> https://github.com/tSed/buildroot/commit/3dd490a79cba8bffa8f5a05cb5ca44e98426aa46
> https://github.com/tSed/buildroot/commit/708d6849f24b3009e3260713018affad874bea5f
> https://github.com/tSed/buildroot/commit/44243d7aa174a78000fd26342538660de1019c60
> https://github.com/tSed/buildroot/commit/fcfb46274e9e9ec8ad2671ccadbe7b2bb433f2bd
> https://github.com/tSed/buildroot/commit/290a0326ac98298adc4c454c8f75cf9da58efe89
> https://github.com/tSed/buildroot/commit/b575a3fe025de1c8a679a3f6c72fcfa166a9cd07
>
> The above branch is still a WIP, but the fortran support should be
> here and working.
> (The WIP stuff being updating the external toolchain selection.)
>
Nice! I didn't find that before when I did a google search. Very
cool/useful external toolchain
feature tool!
> Compare to your series, from a first and quick glance, it seems you
> better handle fortran flags than I did.
>
> Few comments inlined (this is not a full in-deep review ;-])
>
>>
>> Signed-off-by: Benjamin Kamath <bkamath@spaceflight.com>
>> ---
>> package/Makefile.in | 9 +++++++++
>> package/gcc/gcc-final/gcc-final.mk | 4 ++--
>> package/pkg-cmake.mk | 6 ++++++
>> support/misc/toolchainfile.cmake.in | 2 ++
>> toolchain/helpers.mk | 13 +++++++++++++
>> toolchain/toolchain-common.in | 3 +++
>> toolchain/toolchain-external/Config.in | 12 ++++++++++++
>> toolchain/toolchain-external/toolchain-external.mk | 10 +++++++++-
>> 8 files changed, 56 insertions(+), 3 deletions(-)
>>
>> diff --git a/package/Makefile.in b/package/Makefile.in
>> index dd595e2..125406f 100644
>> --- a/package/Makefile.in
>> +++ b/package/Makefile.in
>> @@ -138,6 +138,7 @@ endif
>> TARGET_CPPFLAGS += -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
>> TARGET_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
>> TARGET_CXXFLAGS = $(TARGET_CFLAGS)
>> +TARGET_FCFLAGS = $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
>> TARGET_LDFLAGS = $(call qstrip,$(BR2_TARGET_LDFLAGS))
>>
>> ifeq ($(BR2_BINFMT_FLAT),y)
>> @@ -145,28 +146,35 @@ TARGET_CFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FL
>> -Wl$(comma)-elf2flt)
>> TARGET_CXXFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\
>> -Wl$(comma)-elf2flt)
>> +TARGET_FCFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\
>> + -Wl$(comma)-elf2flt)
>> TARGET_LDFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),-elf2flt)
>> endif
>>
>> ifeq ($(BR2_BINFMT_FLAT_SHARED),y)
>> TARGET_LDFLAGS += -mid-shared-library -mshared-library-id=0
>> TARGET_CFLAGS += -mid-shared-library -mshared-library-id=0
>> +TARGET_FCFLAGS += -mid-shared-library -mshared-library-id=0
>> TARGET_CXXFLAGS += -mid-shared-library -mshared-library-id=0
>> endif
>> ifeq ($(BR2_BINFMT_FLAT_SEP_DATA),y)
>> TARGET_LDFLAGS += -msep-data
>> TARGET_CFLAGS += -msep-data
>> +TARGET_FCFLAGS += -msep-data
>> TARGET_CXXFLAGS += -msep-data
>> endif
>>
>> ifeq ($(BR2_SSP_REGULAR),y)
>> TARGET_CFLAGS += -fstack-protector
>> +TARGET_FCFLAGS += -fstack-protector
>> TARGET_CXXFLAGS += -fstack-protector
>> else ifeq ($(BR2_SSP_STRONG),y)
>> TARGET_CFLAGS += -fstack-protector-strong
>> +TARGET_FCFLAGS += -fstack-protector-strong
>> TARGET_CXXFLAGS += -fstack-protector-strong
>> else ifeq ($(BR2_SSP_ALL),y)
>> TARGET_CFLAGS += -fstack-protector-all
>> +TARGET_FCFLAGS += -fstack-protector-all
>> TARGET_CXXFLAGS += -fstack-protector-all
>> endif
>>
>> @@ -378,6 +386,7 @@ ifeq ($(BR2_STATIC_LIBS),y)
>> SHARED_STATIC_LIBS_OPTS = --enable-static --disable-shared
>> TARGET_CFLAGS += -static
>> TARGET_CXXFLAGS += -static
>> +TARGET_FCFLAGS += -static
>> TARGET_LDFLAGS += -static
>> else ifeq ($(BR2_SHARED_LIBS),y)
>> SHARED_STATIC_LIBS_OPTS = --disable-static --enable-shared
>> diff --git a/package/gcc/gcc-final/gcc-final.mk b/package/gcc/gcc-final/gcc-final.mk
>> index 69fdc0c..87480c7 100644
>> --- a/package/gcc/gcc-final/gcc-final.mk
>> +++ b/package/gcc/gcc-final/gcc-final.mk
>> @@ -54,7 +54,7 @@ endef
>> # Languages supported by the cross-compiler
>> GCC_FINAL_CROSS_LANGUAGES-y = c
>> GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBSTDCPP) += c++
>> -GCC_FINAL_CROSS_LANGUAGES-$(BR2_TOOLCHAIN_BUILDROOT_FORTRAN) += fortran
>> +GCC_FINAL_CROSS_LANGUAGES-$(BR2_INSTALL_LIBFORTRAN) += fortran
>> GCC_FINAL_CROSS_LANGUAGES = $(subst $(space),$(comma),$(GCC_FINAL_CROSS_LANGUAGES-y))
>>
>> HOST_GCC_FINAL_CONF_OPTS = \
>> @@ -152,7 +152,7 @@ ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
>> HOST_GCC_FINAL_USR_LIBS += libstdc++
>> endif
>>
>> -ifeq ($(BR2_TOOLCHAIN_BUILDROOT_FORTRAN),y)
>> +ifeq ($(BR2_INSTALL_LIBFORTRAN),y)
>> HOST_GCC_FINAL_USR_LIBS += libgfortran
>> endif
>>
>> diff --git a/package/pkg-cmake.mk b/package/pkg-cmake.mk
>> index 81dcfcc..a93709e 100644
>> --- a/package/pkg-cmake.mk
>> +++ b/package/pkg-cmake.mk
>> @@ -31,6 +31,8 @@ CMAKE_HOST_C_COMPILER = $(HOSTCC)
>> CMAKE_HOST_CXX_COMPILER = $(HOSTCXX)
>> endif
>>
>> +CMAKE_HOST_Fortran_COMPILER ?= $(HOSTFC)
>> +
>
> Is this needed? What for?
> AFAICS, there is no host-package requiring HOSTFC...
Good point, this can be added when something requires it, removed.
>
>> ifneq ($(QUIET),)
>> CMAKE_QUIET = -DCMAKE_RULE_MESSAGES=OFF -DCMAKE_INSTALL_MESSAGE=NEVER
>> endif
>> @@ -119,10 +121,12 @@ define $(2)_CONFIGURE_CMDS
>> -DCMAKE_INSTALL_PREFIX="$$(HOST_DIR)/usr" \
>> -DCMAKE_C_FLAGS="$$(HOST_CFLAGS)" \
>> -DCMAKE_CXX_FLAGS="$$(HOST_CXXFLAGS)" \
>> + -DCMAKE_FC_FLAGS="$$(HOST_FCFLAGS)" \
>
> Why setting CMAKE_FC_FLAGS instead of CMAKE_Fortran_FLAGS?
Good catch, fixed.
>
>> -DCMAKE_EXE_LINKER_FLAGS="$$(HOST_LDFLAGS)" \
>> -DCMAKE_ASM_COMPILER="$$(HOSTAS)" \
>> -DCMAKE_C_COMPILER="$$(CMAKE_HOST_C_COMPILER)" \
>> -DCMAKE_CXX_COMPILER="$$(CMAKE_HOST_CXX_COMPILER)" \
>> + -DCMAKE_Fortran_COMPILER="$$(CMAKE_HOST_Fortran_COMPILER)" \
>> $(if $$(CMAKE_HOST_C_COMPILER_ARG1),\
>> -DCMAKE_C_COMPILER_ARG1="$$(CMAKE_HOST_C_COMPILER_ARG1)" \
>> -DCMAKE_CXX_COMPILER_ARG1="$$(CMAKE_HOST_CXX_COMPILER_ARG1)" \
>> @@ -243,9 +247,11 @@ $(HOST_DIR)/usr/share/buildroot/toolchainfile.cmake:
>> -e 's#@@STAGING_SUBDIR@@#$(call qstrip,$(STAGING_SUBDIR))#' \
>> -e 's#@@TARGET_CFLAGS@@#$(call qstrip,$(TARGET_CFLAGS))#' \
>> -e 's#@@TARGET_CXXFLAGS@@#$(call qstrip,$(TARGET_CXXFLAGS))#' \
>> + -e 's:@@TARGET_FCFLAGS@@:$(call qstrip,$(TARGET_FCFLAGS)):' \
>> -e 's#@@TARGET_LDFLAGS@@#$(call qstrip,$(TARGET_LDFLAGS))#' \
>> -e 's#@@TARGET_CC@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_CC)))#' \
>> -e 's#@@TARGET_CXX@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_CXX)))#' \
>> + -e 's:@@TARGET_FC@@:$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_FC))):' \
>> -e 's#@@CMAKE_SYSTEM_PROCESSOR@@#$(call qstrip,$(CMAKE_SYSTEM_PROCESSOR))#' \
>> $(TOPDIR)/support/misc/toolchainfile.cmake.in \
>> > $@
>> diff --git a/support/misc/toolchainfile.cmake.in b/support/misc/toolchainfile.cmake.in
>> index 5cf381e..4112604 100644
>> --- a/support/misc/toolchainfile.cmake.in
>> +++ b/support/misc/toolchainfile.cmake.in
>> @@ -15,6 +15,7 @@ set(CMAKE_SYSTEM_PROCESSOR @@CMAKE_SYSTEM_PROCESSOR@@)
>>
>> set(CMAKE_C_FLAGS "@@TARGET_CFLAGS@@ ${CMAKE_C_FLAGS}" CACHE STRING "Buildroot CFLAGS")
>> set(CMAKE_CXX_FLAGS "@@TARGET_CXXFLAGS@@ ${CMAKE_CXX_FLAGS}" CACHE STRING "Buildroot CXXFLAGS")
>> +set(CMAKE_Fortran_FLAGS "@@TARGET_FCFLAGS@@ ${CMAKE_Fortran_FLAGS}" CACHE STRING "Buildroot FCFLAGS")
>> set(CMAKE_EXE_LINKER_FLAGS "@@TARGET_LDFLAGS@@ ${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "Buildroot LDFLAGS")
>> set(CMAKE_INSTALL_SO_NO_EXE 0)
>>
>> @@ -29,3 +30,4 @@ set(ENV{PKG_CONFIG_SYSROOT_DIR} "${RELOCATED_HOST_DIR}/@@STAGING_SUBDIR@@")
>> # This toolchain file can be used both inside and outside Buildroot.
>> set(CMAKE_C_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CC@@")
>> set(CMAKE_CXX_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CXX@@")
>> +set(CMAKE_Fortran_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_FC@@")
>
> This will set (force to set) the fortran compile path in all
> configuration, even in those that do not have it... :-/
Fixed by passing in the fortran support via sed and conditionally
setting based on that.
That said I'm new to CMake so other suggestions are welcome.
>
>> diff --git a/toolchain/helpers.mk b/toolchain/helpers.mk
>> index ee878e8..196f295 100644
>> --- a/toolchain/helpers.mk
>> +++ b/toolchain/helpers.mk
>> @@ -382,6 +382,19 @@ check_cplusplus = \
>> fi
>>
>> #
>> +# Check that the external toolchain supports Fortran
>> +#
>> +# $1: cross-gfortran path
>> +#
>> +check_fortran = \
>> + __CROSS_FC=$(strip $1) ; \
>> + $${__CROSS_FC} -v > /dev/null 2>&1 ; \
>> + if test $$? -ne 0 ; then \
>> + echo "Fortran support is selected but is not available in external toolchain" ; \
>> + exit 1 ; \
>> + fi
>> +
>> +#
>> # Check that the cross-compiler given in the configuration exists
>> #
>> # $1: cross-gcc path
>> diff --git a/toolchain/toolchain-common.in b/toolchain/toolchain-common.in
>> index 46970a6..1d7afa7 100644
>> --- a/toolchain/toolchain-common.in
>> +++ b/toolchain/toolchain-common.in
>> @@ -17,6 +17,9 @@ config BR2_ENABLE_LOCALE
>> config BR2_INSTALL_LIBSTDCPP
>> bool
>>
>> +config BR2_INSTALL_LIBFORTRAN
>> + bool
>> +
>> config BR2_TOOLCHAIN_HAS_THREADS
>> bool
>>
>> diff --git a/toolchain/toolchain-external/Config.in b/toolchain/toolchain-external/Config.in
>> index ff759a0..64027ff 100644
>> --- a/toolchain/toolchain-external/Config.in
>> +++ b/toolchain/toolchain-external/Config.in
>> @@ -24,6 +24,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
>> select BR2_TOOLCHAIN_EXTERNAL_GLIBC
>> select BR2_TOOLCHAIN_HAS_NATIVE_RPC
>> select BR2_INSTALL_LIBSTDCPP
>> + select BR2_INSTALL_LIBFORTRAN
>> select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
>> select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
>> help
>> @@ -46,6 +47,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
>> select BR2_TOOLCHAIN_EXTERNAL_GLIBC
>> select BR2_TOOLCHAIN_HAS_NATIVE_RPC
>> select BR2_INSTALL_LIBSTDCPP
>> + select BR2_INSTALL_LIBFORTRAN
>> select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
>> select BR2_TOOLCHAIN_GCC_AT_LEAST_5
>> help
>> @@ -68,6 +70,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB
>> select BR2_TOOLCHAIN_EXTERNAL_GLIBC
>> select BR2_TOOLCHAIN_HAS_NATIVE_RPC
>> select BR2_INSTALL_LIBSTDCPP
>> + select BR2_INSTALL_LIBFORTRAN
>> select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
>> select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
>> help
>> @@ -90,6 +93,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB
>> select BR2_TOOLCHAIN_EXTERNAL_GLIBC
>> select BR2_TOOLCHAIN_HAS_NATIVE_RPC
>> select BR2_INSTALL_LIBSTDCPP
>> + select BR2_INSTALL_LIBFORTRAN
>> select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
>> select BR2_TOOLCHAIN_GCC_AT_LEAST_5
>> help
>> @@ -1047,6 +1051,14 @@ config BR2_TOOLCHAIN_EXTERNAL_CXX
>> support. If you don't know, leave the default value,
>> Buildroot will tell you if it's correct or not.
>>
>> +config BR2_TOOLCHAIN_EXTERNAL_FORTRAN
>> + bool "Toolchain has Fortran support?"
>> + select BR2_INSTALL_LIBFORTRAN
>> + help
>> + Select this option if your external toolchain has Fortran
>> + support. If you don't know, leave the default value,
>> + Buildroot will tell you if it's correct or not.
>> +
>> config BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS
>> string "Extra toolchain libraries to be copied to target"
>> help
>> diff --git a/toolchain/toolchain-external/toolchain-external.mk b/toolchain/toolchain-external/toolchain-external.mk
>> index 37e1a2e..070d0cf 100644
>> --- a/toolchain/toolchain-external/toolchain-external.mk
>> +++ b/toolchain/toolchain-external/toolchain-external.mk
>> @@ -90,6 +90,10 @@ ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
>> USR_LIB_EXTERNAL_LIBS += libstdc++.so.*
>> endif
>>
>> +ifeq ($(BR2_INSTALL_LIBFORTRAN),y)
>> +USR_LIB_EXTERNAL_LIBS += libgfortran.so.*
>> +endif
>> +
>> LIB_EXTERNAL_LIBS += $(call qstrip,$(BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS))
>>
>> # Details about sysroot directory selection.
>> @@ -160,6 +164,7 @@ TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += \
>> TOOLCHAIN_EXTERNAL_CROSS = $(TOOLCHAIN_EXTERNAL_BIN)/$(TOOLCHAIN_EXTERNAL_PREFIX)-
>> TOOLCHAIN_EXTERNAL_CC = $(TOOLCHAIN_EXTERNAL_CROSS)gcc$(TOOLCHAIN_EXTERNAL_SUFFIX)
>> TOOLCHAIN_EXTERNAL_CXX = $(TOOLCHAIN_EXTERNAL_CROSS)g++$(TOOLCHAIN_EXTERNAL_SUFFIX)
>> +TOOLCHAIN_EXTERNAL_FC = $(TOOLCHAIN_EXTERNAL_CROSS)gfortran$(TOOLCHAIN_EXTERNAL_SUFFIX)
>> TOOLCHAIN_EXTERNAL_READELF = $(TOOLCHAIN_EXTERNAL_CROSS)readelf$(TOOLCHAIN_EXTERNAL_SUFFIX)
>>
>> ifeq ($(filter $(HOST_DIR)/%,$(TOOLCHAIN_EXTERNAL_BIN)),)
>> @@ -495,6 +500,9 @@ define TOOLCHAIN_EXTERNAL_CONFIGURE_CMDS
>> if test "$(BR2_INSTALL_LIBSTDCPP)" = "y" ; then \
>> $(call check_cplusplus,$(TOOLCHAIN_EXTERNAL_CXX)) ; \
>> fi ; \
>> + if test "$(BR2_INSTALL_LIBFORTRAN)" = "y" ; then \
>> + $(call check_fortran,$(TOOLCHAIN_EXTERNAL_FC)) ; \
>> + fi ; \
>> if test "$(BR2_TOOLCHAIN_EXTERNAL_UCLIBC)" = "y" ; then \
>> $(call check_uclibc,$${SYSROOT_DIR}) ; \
>> elif test "$(BR2_TOOLCHAIN_EXTERNAL_MUSL)" = "y" ; then \
>> @@ -719,7 +727,7 @@ define TOOLCHAIN_EXTERNAL_INSTALL_WRAPPER
>> *-ar|*-ranlib|*-nm) \
>> ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%../..%') .; \
>> ;; \
>> - *cc|*cc-*|*++|*++-*|*cpp) \
>> + *cc|*cc-*|*++|*++-*|*cpp|*fortran) \
>> ln -sf toolchain-wrapper $$base; \
>> ;; \
>> *gdb|*gdbtui) \
>> --
>> 2.5.0
>>
>> _______________________________________________
>> buildroot mailing list
>> buildroot at busybox.net
>> http://lists.busybox.net/mailman/listinfo/buildroot
>
> Regards,
>
> --
> Samuel
Fixed and uploading another patch set. Separated out changes to the gcc
package (more buildroot toolchain related). Very interested in your branch,
in terms of LTO support and the external toolchain helper script!
Cheers,
Ben
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-03-18 19:29 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-17 23:40 [Buildroot] [PATCH 1/2] toolchain-external: add basic fortran support Benjamin Kamath
2016-03-17 23:40 ` [Buildroot] [PATCH 2/2] package: add lapack Benjamin Kamath
2016-03-18 5:23 ` Baruch Siach
2016-03-18 19:17 ` Benjamin Kamath
2016-03-18 7:10 ` [Buildroot] [PATCH 1/2] toolchain-external: add basic fortran support Samuel Martin
2016-03-18 19:29 ` Benjamin Kamath
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox