Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Fixed

- Fixes for using Homebrew flang on macOS

### Removed

### Added

### Changed

- Enable flang architecture flags

### Deprecated

## [3.74.0] - 2026-03-09
Expand Down
26 changes: 16 additions & 10 deletions compiler/flags/LLVMFlang_Fortran.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -35,30 +35,36 @@ set (ARCH_CONSISTENCY "")
set (FTZ "")
set (ALIGN_ALL "")
set (NO_ALIAS "")
set (STACK_ARRAYS "-fstack-arrays")

set (NO_RANGE_CHECK "")

set(NO_FMA "-ffp-contract=off")

# NOTE: There is currently a bug(?) in flang that says you have to pass
# -fno-integrated-as when doing save temps (see https://github.com/llvm/llvm-project/pull/119624)
# It does seem to work, but a PR says this might have issues with offloading:
# NOTE 2: I found a bug with this and flang: https://github.com/llvm/llvm-project/issues/184802
# Turning off for now.
#set(SAVE_TEMPS "-fno-integrated-as -save-temps=obj")

cmake_host_system_information(RESULT proc_description QUERY PROCESSOR_DESCRIPTION)

# NOT SURE ABOUT ANY OF THIS...
if ( ${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL aarch64 )
set (FLANG_TARGET_ARCH "-mcpu=armv8.2-a+crypto+crc+fp16+rcpc+dotprod")
set (FLANG_TARGET_ARCH "armv8.2-a+crypto+crc+fp16+rcpc+dotprod")
elseif (${proc_description} MATCHES "Apple M")
set (FLANG_TARGET_ARCH "-mcpu=apple-m1")
set (FLANG_TARGET_ARCH "apple-m1")
elseif (${proc_description} MATCHES "EPYC")
set (FLANG_TARGET_ARCH "-mcpu=znver2")
set (FLANG_TARGET_ARCH "znver2")
elseif (${proc_description} MATCHES "Intel|INTEL")
set (FLANG_TARGET_ARCH "-mcpu=haswell")
set (FLANG_TARGET_ARCH "haswell")
elseif ( ${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64" )
message(WARNING "Unknown processor type. Defaulting to a generic x86_64 processor. Performance may be suboptimal.")
set (FLANG_TARGET_ARCH "x86-64")
else ()
message(FATAL_ERROR "Unknown processor. Please file an issue at https://github.com/GEOS-ESM/ESMA_cmake")
endif ()

# ...SO WE JUST TURN OFF FLANG_TARGET_ARCH FOR NOW
set (FLANG_TARGET_ARCH "")

####################################################

# Common Fortran Flags
Expand All @@ -68,12 +74,12 @@ set (common_Fortran_fpe_flags "${TRACEBACK}")

# GEOS Debug
# ----------
set (GEOS_Fortran_Debug_Flags "${FOPT0} ${DEBINFO}")
set (GEOS_Fortran_Debug_Flags "${FOPT0} ${DEBINFO} ${SAVE_TEMPS} ${NO_FMA}")
set (GEOS_Fortran_Debug_FPE_Flags "${common_Fortran_fpe_flags}")

# GEOS Release
# ------------
set (GEOS_Fortran_Release_Flags "${FOPT3} ${FLANG_TARGET_ARCH} ${DEBINFO}")
set (GEOS_Fortran_Release_Flags "${FOPT3} -march=${FLANG_TARGET_ARCH} -funroll-loops ${STACK_ARRAYS} ${DEBINFO}")
set (GEOS_Fortran_Release_FPE_Flags "${common_Fortran_fpe_flags}")

# Create a NoVectorize version for consistency. No difference from Release for Flang
Expand Down
10 changes: 10 additions & 0 deletions operating_system/osx_extras.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,13 @@ set (ENABLE_RELATIVE_RPATHS FALSE)

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-headerpad_max_install_names")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-headerpad_max_install_names")

# 5) Flang compiler workarounds for macOS shared libraries
# CMake natively uses Apple's '-dynamiclib' and '-install_name' for shared libraries,
# but the LLVM flang frontend strictly rejects them.
# We force flang to use '-shared' (which it correctly translates down to the linker)
# and use -Xlinker to safely pass the soname without space-parsing errors.
if(CMAKE_Fortran_COMPILER_ID MATCHES "Flang" OR CMAKE_Fortran_COMPILER_ID MATCHES "LLVMFlang")
set(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS "-shared -Wl,-headerpad_max_install_names")
set(CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG "-Xlinker -install_name -Xlinker ")
endif()