Skip to content

Commit 1729d1a

Browse files
Albert Ziegenhagelkiranchandramohan
authored andcommitted
Misc CMake file fixes for linking in Windows
- Set the target linker language for the flang libraries to CXX on windows. This makes sure link.exe from Visual Studio is used to link the libraries, even though the libraries include fortran code. CMake is not able to detect this since the flang fortran compiler is not working at CMake configure time and thus the CMAKE_Fortran_COMPILER_ID is unknown. - Add WINDOWS_EXPORT_ALL_SYMBOLS for shared flang library - Use "lib" prefix instead of "_static" suffix for static runtime libraries. This is more in sync with windows default names (e.g. ucrt.lib as import library for ucrt.dll and libucrt.lib for the static runtime). - Set WINDOWS_EXPORT_ALL_SYMBOLS property for for shared flangrti and ompstub targets. This works around the issue with missing __declspec(dllexport/dllimport) declerations in the source files.
1 parent 1375882 commit 1729d1a

File tree

3 files changed

+56
-30
lines changed

3 files changed

+56
-30
lines changed

runtime/flang/CMakeLists.txt

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ SET(FTN_INTRINSICS_DESC_DEP
187187
red_any.c
188188
red_count.c
189189
red_findloc.c
190-
red_iany.c
190+
red_iany.c
191191
red_maxloc.c
192192
red_minloc.c
193193
red_maxval.c
@@ -418,7 +418,7 @@ separate_arguments(SEPARATED_CMAKE_Fortran_FLAGS NATIVE_COMMAND ${CMAKE_Fortran_
418418
add_custom_command(
419419
OUTPUT "${I8_FILES_DIR}/ieee_arithmetic.F95"
420420
COMMAND "${CMAKE_Fortran_COMPILER}" -E -cpp ${SEPARATED_CMAKE_Fortran_FLAGS}
421-
"${CMAKE_CURRENT_SOURCE_DIR}/ieee_arithmetic.F95" -DDESC_I8
421+
"${CMAKE_CURRENT_SOURCE_DIR}/ieee_arithmetic.F95" -DDESC_I8
422422
> "${I8_FILES_DIR}/ieee_arithmetic.F95"
423423
COMMENT "Preprocessing ieee_arithmetic.F95"
424424
VERBATIM
@@ -428,7 +428,7 @@ add_custom_command(
428428
add_custom_command(
429429
OUTPUT "${I8_FILES_DIR}/ieee_exceptions.F95"
430430
COMMAND "${CMAKE_Fortran_COMPILER}" -E -cpp ${SEPARATED_CMAKE_Fortran_FLAGS}
431-
"${CMAKE_CURRENT_SOURCE_DIR}/ieee_exceptions.F95" -DDESC_I8
431+
"${CMAKE_CURRENT_SOURCE_DIR}/ieee_exceptions.F95" -DDESC_I8
432432
> "${I8_FILES_DIR}/ieee_exceptions.F95"
433433
COMMENT "Preprocessing ieee_exceptions.F95"
434434
VERBATIM
@@ -460,7 +460,7 @@ FOREACH(file ${FTN_SUPPORT_DESC_DEP})
460460
ENDFOREACH(file)
461461

462462
LIST(APPEND FTN_SUPPORT_DESC_DEP ieee_arithmetic.F95 ieee_exceptions.F95 norm2_1.F95)
463-
LIST(APPEND FTN_SUPPORT_I8
463+
LIST(APPEND FTN_SUPPORT_I8
464464
"${I8_FILES_DIR}/ieee_arithmetic.F95"
465465
"${I8_FILES_DIR}/ieee_exceptions.F95"
466466
"${I8_FILES_DIR}/norm2_1.F95"
@@ -475,7 +475,11 @@ add_flang_library(flang_static
475475
${FTN_SUPPORT_I8}
476476
${SHARED_SOURCES}
477477
)
478+
if (MSVC)
479+
set_property(TARGET flang_static PROPERTY OUTPUT_NAME libflang)
480+
else()
478481
set_property(TARGET flang_static PROPERTY OUTPUT_NAME flang)
482+
endif()
479483

480484
set(SHARED_LIBRARY TRUE)
481485
add_flang_library(flang_shared
@@ -501,13 +505,17 @@ add_dependencies(flang_shared flang_static)
501505

502506
target_link_libraries(flang_shared ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib/libflangrti.so)
503507
# Resolve symbols against libm and librt
504-
target_link_libraries(flang_shared m rt)
508+
if (NOT MSVC)
509+
target_link_libraries(flang_shared m rt)
510+
else()
511+
set_target_properties(flang_shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
512+
endif()
505513

506514
set(SHARED_LIBRARY FALSE)
507515

508516
set_property(
509517
SOURCE ${FTN_INTRINSICS_DESC_INDEP} ${FTN_INTRINSICS_DESC_DEP} ${SHARED_SOURCES}
510-
PROPERTY COMPILE_DEFINITIONS
518+
PROPERTY COMPILE_DEFINITIONS
511519
PGF90
512520
KANJI
513521
INT32PTR64
@@ -517,7 +525,7 @@ set_property(
517525

518526
set_property(
519527
SOURCE ${FTN_INTRINSICS_I8}
520-
PROPERTY COMPILE_DEFINITIONS
528+
PROPERTY COMPILE_DEFINITIONS
521529
PGF90
522530
KANJI
523531
INT32PTR64
@@ -527,16 +535,16 @@ set_property(
527535
)
528536

529537
set_property(
530-
SOURCE ${FTN_SUPPORT_DESC_INDEP} ${FTN_SUPPORT_DESC_DEP}
531-
PROPERTY COMPILE_DEFINITIONS
538+
SOURCE ${FTN_SUPPORT_DESC_INDEP} ${FTN_SUPPORT_DESC_DEP}
539+
PROPERTY COMPILE_DEFINITIONS
532540
INT32PTR64
533541
TM_I8
534542
HAVE_LONG_LONG_INT
535543
)
536544

537545
set_property(
538-
SOURCE ${FTN_SUPPORT_I8}
539-
PROPERTY COMPILE_DEFINITIONS
546+
SOURCE ${FTN_SUPPORT_I8}
547+
PROPERTY COMPILE_DEFINITIONS
540548
INT32PTR64
541549
TM_I8
542550
DESC_I8
@@ -585,30 +593,30 @@ if(NOT ${CMAKE_GENERATOR} STREQUAL "Ninja")
585593
# State a dependency on the module
586594
set_source_files_properties(
587595
${I8_FILES_DIR}/ieee_arithmetic.F95
588-
PROPERTIES
596+
PROPERTIES
589597
COMPILE_DEFINITIONS DESC_I8
590598
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/iso_c_binding.mod
591599
OBJECT_OUTPUTS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_arithmetic_la.mod
592600
)
593601

594602
set_source_files_properties(
595603
${I8_FILES_DIR}/ieee_exceptions.F95
596-
PROPERTIES
604+
PROPERTIES
597605
COMPILE_DEFINITIONS DESC_I8
598606
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/iso_c_binding.mod
599607
OBJECT_OUTPUTS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_exceptions_la.mod
600608
)
601609

602610
set_source_files_properties(
603611
norm2_1.F95
604-
PROPERTIES
612+
PROPERTIES
605613
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_arithmetic.mod
606614
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_exceptions.mod
607615
)
608616

609617
set_source_files_properties(
610618
${I8_FILES_DIR}/norm2_1.F95
611-
PROPERTIES
619+
PROPERTIES
612620
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_arithmetic_la.mod
613621
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_exceptions_la.mod
614622
)
@@ -618,8 +626,8 @@ set_target_properties(flang_static flang_shared
618626
PROPERTIES
619627
ARCHIVE_OUTPUT_DIRECTORY ${FLANG_RTE_LIB_DIR}
620628
)
621-
622-
target_include_directories(flang_static
629+
630+
target_include_directories(flang_static
623631
PRIVATE
624632
${CMAKE_CURRENT_SOURCE_DIR}
625633
${CMAKE_CURRENT_BINARY_DIR}
@@ -632,20 +640,24 @@ target_include_directories(flang_shared
632640
)
633641

634642
# Make sure the compiler is built before we bootstrap
635-
add_dependencies(flang_static
643+
add_dependencies(flang_static
636644
flang1
637645
flang2
638646
)
639647

640648
# Make sure the compiler is built before we bootstrap
641-
add_dependencies(flang_shared
649+
add_dependencies(flang_shared
642650
flang1
643651
flang2
644652
)
645653

646-
target_compile_options(flang_static PRIVATE -fPIC)
647-
648-
target_compile_options(flang_shared PRIVATE -fPIC)
654+
if (NOT MSVC)
655+
target_compile_options(flang_static PRIVATE -fPIC)
656+
target_compile_options(flang_shared PRIVATE -fPIC)
657+
else()
658+
set_target_properties(flang_static PROPERTIES LINKER_LANGUAGE CXX)
659+
set_target_properties(flang_shared PROPERTIES LINKER_LANGUAGE CXX)
660+
endif()
649661

650662
target_compile_options(flang_static PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:-Mreentrant>)
651663

runtime/flangrti/CMakeLists.txt

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ SET(ASM_OPTIONS "-DLINUX_ELF")
1010
SET(CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS}" )
1111

1212
if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" )
13-
set(ARCH_DEP_FILES
13+
set(ARCH_DEP_FILES
1414
x86_64-Linux/x86_daz.c
1515
x86_64-Linux/x86_flushz.c
1616
x86_64-Linux/dumpregs.c
@@ -61,7 +61,11 @@ add_flang_library(flangrti_static
6161
${PGC_SRC_FILES}
6262
${SHARED_SOURCES}
6363
)
64-
set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME flangrti)
64+
if (MSVC)
65+
set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME libflangrti)
66+
else()
67+
set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME flangrti)
68+
endif()
6569

6670

6771
set(SHARED_LIBRARY TRUE)
@@ -81,14 +85,14 @@ endif()
8185

8286
# Import OpenMP
8387
if (NOT DEFINED LIBOMP_EXPORT_DIR)
84-
find_library(
88+
find_library(
8589
FLANG_LIBOMP
8690
libomp.so
8791
HINTS ${CMAKE_BINARY_DIR}/lib)
8892
target_link_libraries(flangrti_shared ${FLANG_LIBOMP})
8993
endif()
9094

91-
find_library(
95+
find_library(
9296
LIBPGMATH
9397
libpgmath.so
9498
HINTS ${CMAKE_BINARY_DIR}/lib)
@@ -118,9 +122,12 @@ target_include_directories(flangrti_shared
118122
set_target_properties(flangrti_shared flangrti_static
119123
PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${FLANG_RTE_LIB_DIR})
120124

121-
target_compile_options(flangrti_static PRIVATE -fPIC)
122-
123-
target_compile_options(flangrti_shared PRIVATE -fPIC)
125+
if (NOT MSVC)
126+
target_compile_options(flangrti_static PRIVATE -fPIC)
127+
target_compile_options(flangrti_shared PRIVATE -fPIC)
128+
else()
129+
set_target_properties(flangrti_shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
130+
endif()
124131

125132
target_compile_options(flangrti_static PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:-Mreentrant>)
126133

runtime/ompstub/CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,18 @@
77
set(OMPSTUB_SRC init_nomp.c ompstubs.c)
88

99
add_flang_library(ompstub_static ${OMPSTUB_SRC})
10-
set_property(TARGET ompstub_static PROPERTY OUTPUT_NAME ompstub)
10+
if (MSVC)
11+
set_property(TARGET ompstub_static PROPERTY OUTPUT_NAME libompstub)
12+
else()
13+
set_property(TARGET ompstub_static PROPERTY OUTPUT_NAME ompstub)
14+
endif()
1115

1216
set(SHARED_LIBRARY TRUE)
1317
add_flang_library(ompstub_shared ${OMPSTUB_SRC})
1418
set_property(TARGET ompstub_shared PROPERTY OUTPUT_NAME ompstub)
19+
if (MSVC)
20+
set_target_properties(ompstub_shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
21+
endif()
1522
set(SHARED_LIBRARY FALSE)
1623

1724
set_target_properties(ompstub_static ompstub_shared

0 commit comments

Comments
 (0)