@@ -8,7 +8,11 @@ enable_language(C ASM Fortran) # Enable assembly and Fortran
88
99SET (ASM_OPTIONS "-DLINUX_ELF" )
1010SET (CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS} " )
11- SET (CMAKE_SHARED_LINKER_FLAGS "-no-flang-libs" )
11+ if (NOT MSVC )
12+ SET (CMAKE_SHARED_LINKER_FLAGS "-no-flang-libs" )
13+ else ()
14+ SET (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -no-flang-libs" )
15+ endif ()
1216
1317# We are using Fortran driver to build this library with fresh compiler
1418# components, so point its binary directory to the build directory to pick up
@@ -187,7 +191,7 @@ SET(FTN_INTRINSICS_DESC_DEP
187191 red_any.c
188192 red_count.c
189193 red_findloc.c
190- red_iany.c
194+ red_iany.c
191195 red_maxloc.c
192196 red_minloc.c
193197 red_maxval.c
@@ -418,7 +422,7 @@ separate_arguments(SEPARATED_CMAKE_Fortran_FLAGS NATIVE_COMMAND ${CMAKE_Fortran_
418422add_custom_command (
419423 OUTPUT "${I8_FILES_DIR} /ieee_arithmetic.F95"
420424 COMMAND "${CMAKE_Fortran_COMPILER} " -E -cpp ${SEPARATED_CMAKE_Fortran_FLAGS}
421- "${CMAKE_CURRENT_SOURCE_DIR} /ieee_arithmetic.F95" -DDESC_I8
425+ "${CMAKE_CURRENT_SOURCE_DIR} /ieee_arithmetic.F95" -DDESC_I8
422426 > "${I8_FILES_DIR} /ieee_arithmetic.F95"
423427 COMMENT "Preprocessing ieee_arithmetic.F95"
424428 VERBATIM
@@ -428,7 +432,7 @@ add_custom_command(
428432add_custom_command (
429433 OUTPUT "${I8_FILES_DIR} /ieee_exceptions.F95"
430434 COMMAND "${CMAKE_Fortran_COMPILER} " -E -cpp ${SEPARATED_CMAKE_Fortran_FLAGS}
431- "${CMAKE_CURRENT_SOURCE_DIR} /ieee_exceptions.F95" -DDESC_I8
435+ "${CMAKE_CURRENT_SOURCE_DIR} /ieee_exceptions.F95" -DDESC_I8
432436 > "${I8_FILES_DIR} /ieee_exceptions.F95"
433437 COMMENT "Preprocessing ieee_exceptions.F95"
434438 VERBATIM
@@ -460,7 +464,7 @@ FOREACH(file ${FTN_SUPPORT_DESC_DEP})
460464ENDFOREACH (file)
461465
462466LIST (APPEND FTN_SUPPORT_DESC_DEP ieee_arithmetic.F95 ieee_exceptions.F95 norm2_1.F95)
463- LIST (APPEND FTN_SUPPORT_I8
467+ LIST (APPEND FTN_SUPPORT_I8
464468"${I8_FILES_DIR} /ieee_arithmetic.F95"
465469"${I8_FILES_DIR} /ieee_exceptions.F95"
466470"${I8_FILES_DIR} /norm2_1.F95"
@@ -475,7 +479,15 @@ add_flang_library(flang_static
475479 ${FTN_SUPPORT_I8}
476480 ${SHARED_SOURCES}
477481 )
482+ set_target_properties (flang_static
483+ PROPERTIES
484+ Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR} /include -static
485+ )
486+ if (MSVC )
487+ set_property (TARGET flang_static PROPERTY OUTPUT_NAME libflang)
488+ else ()
478489set_property (TARGET flang_static PROPERTY OUTPUT_NAME flang)
490+ endif ()
479491
480492set (SHARED_LIBRARY TRUE )
481493add_flang_library(flang_shared
@@ -488,26 +500,19 @@ add_flang_library(flang_shared
488500 ${SHARED_SOURCES}
489501 )
490502set_property (TARGET flang_shared PROPERTY OUTPUT_NAME flang)
491-
492- #
493- # Seralize the building of flang_shared and flang_static to eliminate
494- # conflicts with the same module files from the shared and static builds
495- # being created/recreated in the common directory
496- # ${CMAKE_Fortran_MODULE_DIRECTORY}.
497- #
498- # Note: building of each library is still parallelized.
499- #
500- add_dependencies (flang_shared flang_static)
501-
502- target_link_libraries (flang_shared ${CMAKE_BINARY_DIR} /${CMAKE_CFG_INTDIR} /lib/libflangrti.so)
503+ target_link_libraries (flang_shared flangrti_shared)
503504# Resolve symbols against libm and librt
504- target_link_libraries (flang_shared m rt)
505+ if (NOT MSVC )
506+ target_link_libraries (flang_shared m rt)
507+ else ()
508+ set_target_properties (flang_shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
509+ endif ()
505510
506511set (SHARED_LIBRARY FALSE )
507512
508513set_property (
509514 SOURCE ${FTN_INTRINSICS_DESC_INDEP} ${FTN_INTRINSICS_DESC_DEP} ${SHARED_SOURCES}
510- PROPERTY COMPILE_DEFINITIONS
515+ PROPERTY COMPILE_DEFINITIONS
511516 PGF90
512517 KANJI
513518 INT32PTR64
@@ -517,7 +522,7 @@ set_property(
517522
518523set_property (
519524 SOURCE ${FTN_INTRINSICS_I8}
520- PROPERTY COMPILE_DEFINITIONS
525+ PROPERTY COMPILE_DEFINITIONS
521526 PGF90
522527 KANJI
523528 INT32PTR64
@@ -527,16 +532,16 @@ set_property(
527532 )
528533
529534set_property (
530- SOURCE ${FTN_SUPPORT_DESC_INDEP} ${FTN_SUPPORT_DESC_DEP}
531- PROPERTY COMPILE_DEFINITIONS
535+ SOURCE ${FTN_SUPPORT_DESC_INDEP} ${FTN_SUPPORT_DESC_DEP}
536+ PROPERTY COMPILE_DEFINITIONS
532537 INT32PTR64
533538 TM_I8
534539 HAVE_LONG_LONG_INT
535540 )
536541
537542set_property (
538- SOURCE ${FTN_SUPPORT_I8}
539- PROPERTY COMPILE_DEFINITIONS
543+ SOURCE ${FTN_SUPPORT_I8}
544+ PROPERTY COMPILE_DEFINITIONS
540545 INT32PTR64
541546 TM_I8
542547 DESC_I8
@@ -618,8 +623,8 @@ set_target_properties(flang_static flang_shared
618623 PROPERTIES
619624 ARCHIVE_OUTPUT_DIRECTORY ${FLANG_RTE_LIB_DIR}
620625 )
621-
622- target_include_directories (flang_static
626+
627+ target_include_directories (flang_static
623628 PRIVATE
624629 ${CMAKE_CURRENT_SOURCE_DIR}
625630 ${CMAKE_CURRENT_BINARY_DIR}
@@ -632,20 +637,24 @@ target_include_directories(flang_shared
632637 )
633638
634639# Make sure the compiler is built before we bootstrap
635- add_dependencies (flang_static
640+ add_dependencies (flang_static
636641 flang1
637642 flang2
638643 )
639644
640645# Make sure the compiler is built before we bootstrap
641- add_dependencies (flang_shared
646+ add_dependencies (flang_shared
642647 flang1
643648 flang2
644649 )
645650
646- target_compile_options (flang_static PRIVATE -fPIC)
647-
648- target_compile_options (flang_shared PRIVATE -fPIC)
651+ if (NOT MSVC )
652+ target_compile_options (flang_static PRIVATE -fPIC)
653+ target_compile_options (flang_shared PRIVATE -fPIC)
654+ else ()
655+ set_target_properties (flang_static PROPERTIES LINKER_LANGUAGE CXX)
656+ set_target_properties (flang_shared PROPERTIES LINKER_LANGUAGE CXX)
657+ endif ()
649658
650659target_compile_options (flang_static PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:-Mreentrant>)
651660
0 commit comments