##===- Makefile.FORTRAN ------------------------------------*- Makefile -*-===##
#
# 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
# 
#===------------------------------------------------------------------------===#
#
# Enable running FORTRAN programs with LLVM using any available FORTRAN support.
#
##===----------------------------------------------------------------------===##

include $(LEVEL)/Makefile.config

# Make sure the correct targets come first.
ifdef TEST
test::
else
all::
endif

# Include the correct Makefile given how FORTRAN is currently being supported.
ifeq ($(USE_F95),1)
include $(LEVEL)/Makefile.nagfortran
else
ifeq ($(USE_F2C),1)
include $(LEVEL)/Makefile.f2c
endif
endif
