[flang-commits] [flang] 2c1ce07 - [flang] Add a wrapper for Fortran main program

Jean Perier via flang-commits flang-commits at lists.llvm.org
Thu Sep 30 23:47:43 PDT 2021


Author: Jean Perier
Date: 2021-10-01T08:45:20+02:00
New Revision: 2c1ce0755e09909c41db93845c4c3f42457cb9c8

URL: https://github.com/llvm/llvm-project/commit/2c1ce0755e09909c41db93845c4c3f42457cb9c8
DIFF: https://github.com/llvm/llvm-project/commit/2c1ce0755e09909c41db93845c4c3f42457cb9c8.diff

LOG: [flang] Add a wrapper for Fortran main program

Add a C wrapper that calls the Fortran runtime initialization and
finalization routines as well as the compiled Fortran main program
_QQmain.

Place it in its own library to satisfy shared library builds since it
contains a C main function.

- https://github.com/flang-compiler/f18-llvm-project/commit/cc7ac498f916d32a9b197d3ace816f4de5d36aad#diff-fa35a5efa62731fd2845e5e982eca9a2e36439783e11a4e4a463753c2160ec10R53
- was created in flang/test/Examples/main.c in Eric's branch

Added: 
    flang/runtime/Fortran_main.c

Modified: 
    flang/cmake/modules/AddFlang.cmake
    flang/runtime/CMakeLists.txt

Removed: 
    


################################################################################
diff  --git a/flang/cmake/modules/AddFlang.cmake b/flang/cmake/modules/AddFlang.cmake
index 5da58a59ed121..82a31424269d2 100644
--- a/flang/cmake/modules/AddFlang.cmake
+++ b/flang/cmake/modules/AddFlang.cmake
@@ -17,7 +17,7 @@ endmacro()
 
 macro(add_flang_library name)
   cmake_parse_arguments(ARG
-    "SHARED"
+    "SHARED;STATIC"
     ""
     "ADDITIONAL_HEADERS"
     ${ARGN})
@@ -52,7 +52,7 @@ macro(add_flang_library name)
   else()
     # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set,
     # so we need to handle it here.
-    if (BUILD_SHARED_LIBS)
+    if (BUILD_SHARED_LIBS AND NOT ARG_STATIC)
       set(LIBTYPE SHARED OBJECT)
     else()
       set(LIBTYPE STATIC OBJECT)

diff  --git a/flang/runtime/CMakeLists.txt b/flang/runtime/CMakeLists.txt
index b3e96faede706..d7b6b798ff398 100644
--- a/flang/runtime/CMakeLists.txt
+++ b/flang/runtime/CMakeLists.txt
@@ -1,15 +1,9 @@
-#===-- runtime/CMakeLists.txt ----------------------------------------------===#
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-#===------------------------------------------------------------------------===#
 
 include(CheckCXXSymbolExists)
 include(CheckCXXSourceCompiles)
 check_cxx_symbol_exists(strerror string.h HAVE_STRERROR)
 check_cxx_symbol_exists(strerror_r string.h HAVE_STRERROR_R)
+
 # Can't use symbol exists here as the function is overloaded in C++
 check_cxx_source_compiles(
   "#include <string.h>
@@ -30,7 +24,7 @@ configure_file(config.h.cmake config.h)
 # with 
diff erent names
 include_directories(AFTER ${CMAKE_CURRENT_BINARY_DIR})
 
-add_flang_library(FortranRuntime
+add_flang_library(FortranRuntime PARTIAL_SOURCES_INTENDED
   ISO_Fortran_binding.cpp
   allocatable.cpp
   assign.cpp
@@ -82,3 +76,7 @@ add_flang_library(FortranRuntime
   LINK_LIBS
   FortranDecimal
 )
+
+add_flang_library(Fortran_main STATIC PARTIAL_SOURCES_INTENDED
+  Fortran_main.c
+)

diff  --git a/flang/runtime/Fortran_main.c b/flang/runtime/Fortran_main.c
new file mode 100644
index 0000000000000..88f0cdb28c2b7
--- /dev/null
+++ b/flang/runtime/Fortran_main.c
@@ -0,0 +1,14 @@
+#include "flang/Runtime/main.h"
+#include "flang/Runtime/stop.h"
+
+/* main entry into PROGRAM */
+void _QQmain();
+
+/* C main stub */
+int main(int argc, const char *argv[], const char *envp[])
+{
+  RTNAME(ProgramStart)(argc, argv, envp);
+  _QQmain();
+  RTNAME(ProgramEndStatement)();
+  return 0;
+}


        


More information about the flang-commits mailing list