Skip to content

Commit 1018ce8

Browse files
isurufkaadam
authored andcommitted
Enable Windows platform in CMake
1 parent f434474 commit 1018ce8

File tree

11 files changed

+133
-88
lines changed

11 files changed

+133
-88
lines changed

CMakeLists.txt

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,45 +9,52 @@ cmake_minimum_required(VERSION 3.3)
99
# In order to bootstrap the runtime library we need to skip
1010
# CMake's Fortran tests
1111
SET(CMAKE_Fortran_COMPILER_WORKS 1)
12+
SET(CMAKE_Fortran_ABI_COMPILED 0)
13+
SET(CMAKE_Fortran_COMPILER_SUPPORTS_F90 1)
14+
SET(CMAKE_Fortran_MODDIR_FLAG "-J ")
1215

13-
if( NOT DEFINED TARGET_ARCHITECTURE )
14-
execute_process(COMMAND uname -m OUTPUT_STRIP_TRAILING_WHITESPACE
15-
OUTPUT_VARIABLE TARGET_ARCHITECTURE)
16+
# If we are not building as a part of LLVM, build Flang as a
17+
# standalone project, using LLVM as an external library:
18+
if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
19+
project(Flang)
1620
endif()
1721

18-
if( NOT DEFINED TARGET_OS )
19-
execute_process(COMMAND uname -s OUTPUT_STRIP_TRAILING_WHITESPACE
20-
OUTPUT_VARIABLE TARGET_OS)
22+
set(TARGET_OS ${CMAKE_SYSTEM_NAME} CACHE STRING "Target OS")
23+
set(TARGET_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR} CACHE STRING "Target Architecture")
24+
25+
if (POLICY CMP0054)
26+
cmake_policy(SET CMP0054 NEW)
2127
endif()
2228

2329
if( ${TARGET_OS} STREQUAL "Linux" )
2430
set(OS "LINUX")
2531
set(OSNAME "Linux")
26-
if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" )
27-
set(ARCHNAME x86-64)
28-
set(ARCH X86)
29-
set(WRDSZ 64)
30-
elseif( ${TARGET_ARCHITECTURE} STREQUAL "aarch64" )
31-
set(ARCHNAME aarch64)
32-
set(ARCH ARM)
33-
set(WRDSZ 64)
34-
elseif( ${TARGET_ARCHITECTURE} STREQUAL "ppc64le" )
35-
set(ARCHNAME ppc64le)
36-
set(ARCH POWER)
37-
set(WRDSZ 64)
38-
else()
39-
message("Unsupported architecture: ${TARGET_ARCHITECTURE}" )
40-
return()
41-
endif()
32+
elseif ( ${TARGET_OS} STREQUAL "Windows")
33+
set(OS "WIN")
34+
set(OSNAME "Windows")
35+
add_definitions(-DWIN32 -DWIN64 -DWINNT -DHOST_WIN -DTARGET_WIN)
4236
else()
4337
message("Unsupported OS: ${TARGET_OS}" )
4438
return()
4539
endif()
4640

47-
# The cmake documentation states that these are set. They are not so we
48-
# set them here
49-
set(CMAKE_HOST_SYSTEM_NAME ${TARGET_OS})
50-
set(CMAKE_HOST_SYSTEM_PROCESSOR ${TARGET_ARCHITECTURE})
41+
if (${TARGET_ARCHITECTURE} MATCHES "^(x86_64|AMD64|amd64)$")
42+
set(TARGET_ARCHITECTURE x86_64)
43+
set(ARCHNAME x86-64)
44+
set(ARCH X86)
45+
elseif (${TARGET_ARCHITECTURE} MATCHES "^(aarch64|arm64)$")
46+
set(TARGET_ARCHITECTURE aarch64)
47+
set(ARCHNAME aarch64)
48+
set(ARCH ARM)
49+
elseif( ${TARGET_ARCHITECTURE} STREQUAL "ppc64le" )
50+
set(ARCHNAME ppc64le)
51+
set(ARCH POWER)
52+
else()
53+
message("Unsupported architecture: ${TARGET_ARCHITECTURE}" )
54+
return()
55+
endif()
56+
57+
math(EXPR WRDSZ "${CMAKE_SIZEOF_VOID_P} * 8")
5158

5259
# If we are not building as a part of LLVM, build Flang as an
5360
# standalone project, using LLVM as an external library:

runtime/CMakeLists.txt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,31 @@ set (RUNTIME_SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shared)
99
add_definitions(
1010
-DMAXCPUS=256
1111
-DMAXCPUSL=8
12-
-DMAXCPUSR=8
13-
-DTARGET_LINUX
14-
-DTARGET_LLVM
15-
-DLINUX
12+
-DMAXCPUSR=8
13+
-DTARGET_LLVM
1614
-DPGF90
1715
-DPGFLANG
1816
-DNATIVE_FPCVT
1917
-DPGI_LITTLE_ENDIAN
2018
-DINLINE_MEMOPS
19+
-DTARGET_${OS}
20+
-D${OS}
2121
)
2222

2323
if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" )
2424
add_definitions(
2525
-DTARGET_X8664
26-
-DTARGET_LINUX_X8664
26+
-DTARGET_${OS}_X8664
2727
)
2828
elseif( ${TARGET_ARCHITECTURE} STREQUAL "aarch64" )
2929
add_definitions(
3030
-DTARGET_LLVM_ARM64
31-
-DTARGET_LINUX_ARM
31+
-DTARGET_${OS}_ARM
3232
)
3333
elseif( ${TARGET_ARCHITECTURE} STREQUAL "ppc64le" )
3434
add_definitions(
35-
-DTARGET_LINUX_POWER
36-
-DLINUX_POWER
35+
-DTARGET_${OS}_POWER
36+
-D${OS}_POWER
3737
)
3838
endif()
3939

runtime/flang/CMakeLists.txt

Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ enable_language(C ASM Fortran) # Enable assembly and Fortran
88

99
SET(ASM_OPTIONS "-DLINUX_ELF")
1010
SET(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_
418422
add_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(
428432
add_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})
460464
ENDFOREACH(file)
461465

462466
LIST(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()
478489
set_property(TARGET flang_static PROPERTY OUTPUT_NAME flang)
490+
endif()
479491

480492
set(SHARED_LIBRARY TRUE)
481493
add_flang_library(flang_shared
@@ -488,26 +500,19 @@ add_flang_library(flang_shared
488500
${SHARED_SOURCES}
489501
)
490502
set_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

506511
set(SHARED_LIBRARY FALSE)
507512

508513
set_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

518523
set_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

529534
set_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

537542
set_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

650659
target_compile_options(flang_static PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:-Mreentrant>)
651660

runtime/flangrti/CMakeLists.txt

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
#
23
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
34
# See https://llvm.org/LICENSE.txt for license information.
@@ -61,7 +62,11 @@ add_flang_library(flangrti_static
6162
${PGC_SRC_FILES}
6263
${SHARED_SOURCES}
6364
)
64-
set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME flangrti)
65+
if (MSVC)
66+
set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME libflangrti)
67+
else()
68+
set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME flangrti)
69+
endif()
6570

6671

6772
set(SHARED_LIBRARY TRUE)
@@ -71,7 +76,10 @@ add_flang_library(flangrti_shared
7176
)
7277

7378
# Resolve symbols against libm
74-
target_link_libraries(flangrti_shared m)
79+
if (NOT MSVC)
80+
target_link_libraries(flangrti_shared PRIVATE m)
81+
endif()
82+
7583

7684
# Resolve symbols against libpthread
7785
find_package(Threads REQUIRED)
@@ -83,16 +91,16 @@ endif()
8391
if (NOT DEFINED LIBOMP_EXPORT_DIR)
8492
find_library(
8593
FLANG_LIBOMP
86-
libomp.so
94+
NAMES omp libomp
8795
HINTS ${CMAKE_BINARY_DIR}/lib)
88-
target_link_libraries(flangrti_shared ${FLANG_LIBOMP})
96+
target_link_libraries(flangrti_shared PRIVATE ${FLANG_LIBOMP})
8997
endif()
9098

9199
find_library(
92100
LIBPGMATH
93-
libpgmath.so
101+
NAMES pgmath libpgmath
94102
HINTS ${CMAKE_BINARY_DIR}/lib)
95-
target_link_libraries(flangrti_shared ${LIBPGMATH})
103+
target_link_libraries(flangrti_shared PRIVATE ${LIBPGMATH})
96104

97105
if( ${TARGET_ARCHITECTURE} STREQUAL "aarch64" )
98106
target_compile_definitions(flangrti_static PRIVATE TARGET_LINUX_ARM)
@@ -118,9 +126,12 @@ target_include_directories(flangrti_shared
118126
set_target_properties(flangrti_shared flangrti_static
119127
PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${FLANG_RTE_LIB_DIR})
120128

121-
target_compile_options(flangrti_static PRIVATE -fPIC)
122-
123-
target_compile_options(flangrti_shared PRIVATE -fPIC)
129+
if (NOT MSVC)
130+
target_compile_options(flangrti_static PRIVATE -fPIC)
131+
target_compile_options(flangrti_shared PRIVATE -fPIC)
132+
else()
133+
set_target_properties(flangrti_shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
134+
endif()
124135

125136
target_compile_options(flangrti_static PUBLIC $<$<COMPILE_LANGUAGE:Fortran>:-Mreentrant>)
126137

runtime/ompstub/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
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+
if (MSVC)
11+
set_property(TARGET ompstub_static PROPERTY OUTPUT_NAME libompstub)
12+
else()
1013
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

tools/flang1/flang1exe/CMakeLists.txt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,13 @@ target_compile_options(flang1
155155
target_link_libraries(flang1
156156
PRIVATE
157157
flangArgParser
158-
${FLANG_LIB_DIR}/scutil.a
159-
-lm
158+
scutil
160159
)
161160

161+
if (NOT MSVC)
162+
target_link_libraries(flang1 PRIVATE m)
163+
endif()
164+
162165
# Install flang1 executable
163166
install(TARGETS flang1
164167
RUNTIME DESTINATION bin)

0 commit comments

Comments
 (0)