[PATCH] D116590: [flang] Separate temporary and user-specified object files

Andrzej Warzynski via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 6 08:39:45 PST 2022


This revision was automatically updated to reflect the committed changes.
Closed by commit rGea66b46dde31: [flang] Separate temporary and user-specified object files (authored by awarzynski).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116590/new/

https://reviews.llvm.org/D116590

Files:
  flang/tools/f18/flang


Index: flang/tools/f18/flang
===================================================================
--- flang/tools/f18/flang
+++ flang/tools/f18/flang
@@ -123,14 +123,15 @@
 #   $2 - Fortran source files extracted from $1 (array, name reference)
 #   $3 - other source files extracted from $1 (array, name reference)
 #   $4 - object files extracted from $1 (array, name reference)
-#   $4 - lib files extracted from $1 (array, name reference)
+#   $5 - lib files extracted from $1 (array, name reference)
 # =============================================================================
 categorise_files()
 {
   local -n -r all_files=$1
   local -n fortran_sources=$2
   local -n other_sources=$3
-  local -n libs=$4
+  local -n objects=$4
+  local -n libs=$5
 
   for current_file in "${all_files[@]}"; do
     file_ext=${current_file##*.}
@@ -144,7 +145,7 @@
     elif [[ $file_ext == "a" ]] || [[ $file_ext == "so" ]]; then
       libs+=($current_file)
     elif [[ $file_ext == "o" ]]; then
-      object_files+=($current_file)
+      objects+=($current_file)
     else
       other_sources+=($current_file)
     fi
@@ -330,6 +331,7 @@
     exit 0
   fi
 
+  # Source, object and library files provided by the user
   local fortran_source_files=()
   local other_source_files=()
   local object_files=()
@@ -388,6 +390,8 @@
 
   # STEP 2: Compile Fortran Source Files
   readonly ext_fc="${F18_FC:-gfortran}"
+  # Temporary object files generated by this script. To be deleted at the end.
+  local temp_object_files=()
   for idx in "${!fortran_source_files[@]}"; do
     # We always have to specify the output name with `-o <out_obj_file>`. This
     # is because we are using the unparsed rather than the original source file
@@ -402,7 +406,7 @@
       echo flang: in "$PWD", "$ext_fc" failed with exit status "$ret_status": "$ext_fc" "${ext_fc_options[@]}" "$@" >&2
          exit "$ret_status"
     fi
-    object_files+=(${out_obj_file})
+    temp_object_files+=(${out_obj_file})
   done
 
   # Delete the unparsed files
@@ -425,7 +429,7 @@
       echo flang: in "$PWD", "$ext_fc" failed with exit status "$ret_status": "$ext_fc" "${ext_fc_options[@]}" "$@" >&2
          exit "$ret_status"
     fi
-    object_files+=(${out_obj_file})
+    temp_object_files+=(${out_obj_file})
   done
 
   # STEP 4: Link
@@ -433,7 +437,7 @@
     exit 0;
   fi
 
-  if [[ ${#object_files[@]} -ge 1 ]]; then
+  if [[ ${#temp_object_files[@]} -ge 1 ]] || [[ ${#object_files[@]} -ge 1 ]] ; then
     # If $OUTPUT_FILE was specified, use it for the output name.
     if [[ ! -z ${OUTPUT_FILE:+x} ]]; then
       output_definition="-o $OUTPUT_FILE"
@@ -442,7 +446,7 @@
     fi
 
     set +e
-    $ext_fc "${ext_fc_options[@]}" "${object_files[@]}" "${lib_files[@]}" ${output_definition:+$output_definition}
+    $ext_fc "${ext_fc_options[@]}" "${object_files[@]}" "${temp_object_files[@]}" "${lib_files[@]}" ${output_definition:+$output_definition}
     ret_status=$?
     set -e
     if [[ $ret_status != 0 ]]; then
@@ -453,7 +457,7 @@
 
   # Delete intermediate object files
   for idx in "${!fortran_source_files[@]}"; do
-    rm "${object_files[$idx]}"
+    rm "${temp_object_files[$idx]}"
   done
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D116590.397911.patch
Type: text/x-patch
Size: 3194 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220106/71cbfd29/attachment.bin>


More information about the llvm-commits mailing list