@@ -12,7 +12,9 @@ module fpm
12
12
use fpm_model, only: fpm_model_t, srcfile_t, show_model, &
13
13
FPM_SCOPE_UNKNOWN, FPM_SCOPE_LIB, FPM_SCOPE_DEP, &
14
14
FPM_SCOPE_APP, FPM_SCOPE_EXAMPLE, FPM_SCOPE_TEST
15
- use fpm_compiler, only: new_compiler, new_archiver, set_cpp_preprocessor_flags
15
+ use fpm_compiler, only: new_compiler, new_archiver, set_cpp_preprocessor_flags, &
16
+ id_intel_classic_nix,id_intel_classic_mac,id_intel_llvm_nix, &
17
+ id_intel_llvm_unknown
16
18
17
19
18
20
use fpm_sources, only: add_executable_sources, add_sources_from_dir
@@ -335,28 +337,46 @@ subroutine new_compiler_flags(model, settings, package)
335
337
type (fpm_build_settings), intent (in ) :: settings
336
338
type (package_config_t), intent (in ) :: package
337
339
338
- logical :: release_profile, debug_profile
340
+ logical :: release_request, debug_request, need_defaults
341
+ character (len= :), allocatable :: fallback
339
342
340
- release_profile = .false.
341
- debug_profile = .false.
342
- if (allocated (settings% profile)) release_profile = settings% profile == " release"
343
- if (allocated (settings% profile)) debug_profile = settings% profile == " debug"
344
-
345
- ! Debug./Release profile requested but not defined:
346
- ! fallback to backward-compatible behavior
347
- if ( (release_profile .and. package% find_profile(" release" )==0 ) &
348
- .or. (debug_profile .and. package% find_profile(" debug" )==0 ) ) then
343
+ ! Default: "debug" if not requested
344
+ release_request = .false.
345
+ debug_request = .not. allocated (settings% profile)
346
+ if (allocated (settings% profile)) release_request = settings% profile == " release"
347
+ if (allocated (settings% profile)) debug_request = settings% profile == " debug"
348
+
349
+ need_defaults = release_request .or. debug_request
350
+
351
+ ! Backward-compatible: if debug/release requested, but a user-defined profile is not defined,
352
+ ! apply fpm compiler defaults
353
+ if (need_defaults) then
354
+
355
+ need_defaults = (release_request .and. package% find_profile(" release" )<= 0 ) &
356
+ .or. (debug_request .and. package% find_profile(" debug" )<= 0 )
349
357
350
- model% fortran_compile_flags = assemble_flags(settings% flag,package% flags,&
351
- model% compiler% get_default_flags(release_profile))
358
+ end if
359
+
360
+ ! Fix: Always include compiler default flags for Intel ifx -fPIC issue
361
+ if (need_defaults) then
352
362
363
+ fallback = model% compiler% get_default_flags(release_request)
364
+
365
+ elseif (any (model% compiler% id==[id_intel_classic_mac, &
366
+ id_intel_classic_nix, &
367
+ id_intel_llvm_nix, &
368
+ id_intel_llvm_unknown])) then
369
+
370
+ ! Intel compilers need -fPIC for shared libraries (except Windows)
371
+ fallback = " -fPIC"
353
372
354
373
else
355
374
356
- model % fortran_compile_flags = assemble_flags(settings % flag, package % flags)
375
+ if ( allocated (fallback)) deallocate (fallback) ! trigger .not.present
357
376
358
- end if
359
-
377
+ endif
378
+
379
+ model% fortran_compile_flags = assemble_flags(settings% flag, package% flags, fallback)
360
380
model% c_compile_flags = assemble_flags(settings% cflag, package% c_flags)
361
381
model% cxx_compile_flags = assemble_flags(settings% cxxflag, package% cxx_flags)
362
382
model% link_flags = assemble_flags(settings% ldflag, package% link_time_flags)
0 commit comments