new_compiler_flags Subroutine

public subroutine new_compiler_flags(model, settings, package)

Initialize model compiler flags from CLI settings and package configuration

Arguments

Type IntentOptional Attributes Name
type(fpm_model_t), intent(inout) :: model
type(fpm_build_settings), intent(in) :: settings
type(package_config_t), intent(in) :: package

Source Code

subroutine new_compiler_flags(model, settings, package)
    type(fpm_model_t), intent(inout) :: model
    type(fpm_build_settings), intent(in) :: settings
    type(package_config_t), intent(in) :: package

    logical :: release_request, debug_request, need_defaults
    character(len=:), allocatable :: fallback
    
    ! Default: "debug" if not requested
    release_request = .false.
    debug_request   = .not.allocated(settings%profile)
    if (allocated(settings%profile)) release_request = settings%profile == "release"
    if (allocated(settings%profile)) debug_request   = settings%profile == "debug"    
    
    need_defaults = release_request .or. debug_request
    
    ! Backward-compatible: if debug/release requested, but a user-defined profile is not defined,
    ! apply fpm compiler defaults
    if (need_defaults) then 
        
        need_defaults   =      (release_request .and. package%find_profile("release")<=0) &
                          .or. (debug_request .and. package%find_profile("debug")<=0)
        
    end if
    
    ! Fix: Always include compiler default flags for Intel ifx -fPIC issue
    if (need_defaults) then 
        
        fallback = model%compiler%get_default_flags(release_request)
        
    elseif (any(model%compiler%id==[id_intel_classic_mac, &
                                    id_intel_classic_nix, &
                                    id_intel_llvm_nix, &
                                    id_intel_llvm_unknown])) then

        ! Intel compilers need -fPIC for shared libraries (except Windows)
        fallback = " -fPIC"
        
    else
        
        if (allocated(fallback)) deallocate(fallback) ! trigger .not.present
        
    endif
        
    model%fortran_compile_flags = assemble_flags(settings%flag,    package%flags, fallback)
    model%c_compile_flags       = assemble_flags(settings%cflag,   package%c_flags)
    model%cxx_compile_flags     = assemble_flags(settings%cxxflag, package%cxx_flags)
    model%link_flags            = assemble_flags(settings%ldflag,  package%link_time_flags)

end subroutine new_compiler_flags