build: LLVM: Add Flang compiler support and enable OpenMP for Clang
authorPaul Osmialowski <pawel.osmialowski@arm.com>
Thu, 25 May 2017 11:22:17 +0000 (12:22 +0100)
committerPaul Osmialowski <pawel.osmialowski@arm.com>
Thu, 25 May 2017 16:03:20 +0000 (17:03 +0100)
Signed-off-by: Paul Osmialowski <pawel.osmialowski@arm.com>
Makefile.system
cmake/fc.cmake
common_arm64.h
f_check

index 8d114f4..1a725db 100644 (file)
@@ -414,7 +414,6 @@ CCOMMON_OPT    += -fopenmp
 endif
 
 ifeq ($(C_COMPILER), CLANG)
-$(error OpenBLAS: Clang didn't support OpenMP yet.)
 CCOMMON_OPT    += -fopenmp
 endif
 
@@ -584,6 +583,23 @@ endif
 #  Fortran Compiler dependent settings
 #
 
+ifeq ($(F_COMPILER), FLANG)
+CCOMMON_OPT += -DF_INTERFACE_FLANG
+ifdef BINARY64
+ifdef INTERFACE64
+ifneq ($(INTERFACE64), 0)
+FCOMMON_OPT += -i8
+endif
+endif
+FCOMMON_OPT += -Wall
+else
+FCOMMON_OPT += -Wall
+endif
+ifeq ($(USE_OPENMP), 1)
+FCOMMON_OPT += -fopenmp
+endif
+endif
+
 ifeq ($(F_COMPILER), G77)
 CCOMMON_OPT += -DF_INTERFACE_G77
 FCOMMON_OPT += -Wall
index ba156c2..ee9d205 100644 (file)
@@ -3,6 +3,21 @@
 ## Description: Ported from portion of OpenBLAS/Makefile.system
 ##              Sets Fortran related variables.
 
+if (${F_COMPILER} STREQUAL "FLANG")
+  set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_FLANG")
+  if (BINARY64)
+    if (INTERFACE64)
+      set(FCOMMON_OPT "${FCOMMON_OPT} -i8")
+    endif ()
+    set(FCOMMON_OPT "${FCOMMON_OPT} -Wall")
+  else ()
+    set(FCOMMON_OPT "${FCOMMON_OPT} -Wall")
+  endif ()
+  if (USE_OPENMP)
+    set(FCOMMON_OPT "${FCOMMON_OPT} -fopenmp")
+  endif ()
+endif ()
+
 if (${F_COMPILER} STREQUAL "G77")
   set(CCOMMON_OPT "${CCOMMON_OPT} -DF_INTERFACE_G77")
   set(FCOMMON_OPT "${FCOMMON_OPT} -Wall")
index d9d5d21..c6ef2fb 100644 (file)
@@ -39,7 +39,11 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #define INLINE inline
 
+#ifdef F_INTERFACE_FLANG
+#define RETURN_BY_STACK
+#else
 #define RETURN_BY_COMPLEX
+#endif
 
 #ifndef ASSEMBLER
 
diff --git a/f_check b/f_check
index ba3f470..f438060 100644 (file)
--- a/f_check
+++ b/f_check
@@ -33,6 +33,7 @@ if ($compiler eq "") {
               "ppuf77", "ppuf95", "ppuf90", "ppuxlf",
              "pathf90", "pathf95",
              "pgf95", "pgf90", "pgf77",
+             "flang",
               "ifort");
 
 OUTER:
@@ -78,8 +79,13 @@ if ($compiler eq "") {
                $vendor = GFORTRAN;
                $openmp = "-fopenmp";
            } else {
-               $vendor = G77;
-               $openmp = "";
+               if ($compiler =~ /flang/) {
+                   $vendor = FLANG;
+                   $openmp = "-fopenmp";
+               } else {
+                   $vendor = G77;
+                   $openmp = "";
+               }
            }
 
        }
@@ -197,6 +203,12 @@ if ($compiler eq "") {
            $openmp = "-mp";
        }
 
+       if ($compiler =~ /flang/) {
+           $vendor = FLANG;
+           $bu     = "_";
+           $openmp = "-fopenmp";
+       }
+
        if ($vendor eq "") {
            $nofortran = 1;
            $compiler = "gfortran";
@@ -331,6 +343,10 @@ if ($vendor eq "INTEL"){
     $linker_a .= "-lgfortran"
 }
 
+if ($vendor eq "FLANG"){
+    $linker_a .= "-lflang"
+}
+
 open(MAKEFILE, ">> $makefile") || die "Can't append $makefile";
 open(CONFFILE, ">> $config"  ) || die "Can't append $config";