Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 33 additions & 26 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,45 +9,52 @@ cmake_minimum_required(VERSION 3.3)
# In order to bootstrap the runtime library we need to skip
# CMake's Fortran tests
SET(CMAKE_Fortran_COMPILER_WORKS 1)
SET(CMAKE_Fortran_ABI_COMPILED 0)
SET(CMAKE_Fortran_COMPILER_SUPPORTS_F90 1)
SET(CMAKE_Fortran_MODDIR_FLAG "-J ")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you run CMake with -DCMAKE_Fortran_COMPILER_ID=Flang? That should set CMAKE_Fortran_MODDIR_FLAG correctly.


if( NOT DEFINED TARGET_ARCHITECTURE )
execute_process(COMMAND uname -m OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE TARGET_ARCHITECTURE)
# If we are not building as a part of LLVM, build Flang as a
# standalone project, using LLVM as an external library:
if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
project(Flang)
endif()

if( NOT DEFINED TARGET_OS )
execute_process(COMMAND uname -s OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE TARGET_OS)
set(TARGET_OS ${CMAKE_SYSTEM_NAME} CACHE STRING "Target OS")
set(TARGET_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR} CACHE STRING "Target Architecture")

if (POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()

if( ${TARGET_OS} STREQUAL "Linux" )
set(OS "LINUX")
set(OSNAME "Linux")
if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" )
set(ARCHNAME x86-64)
set(ARCH X86)
set(WRDSZ 64)
elseif( ${TARGET_ARCHITECTURE} STREQUAL "aarch64" )
set(ARCHNAME aarch64)
set(ARCH ARM)
set(WRDSZ 64)
elseif( ${TARGET_ARCHITECTURE} STREQUAL "ppc64le" )
set(ARCHNAME ppc64le)
set(ARCH POWER)
set(WRDSZ 64)
else()
message("Unsupported architecture: ${TARGET_ARCHITECTURE}" )
return()
endif()
elseif ( ${TARGET_OS} STREQUAL "Windows")
set(OS "WIN")
set(OSNAME "Windows")
add_definitions(-DWIN32 -DWIN64 -DWINNT -DHOST_WIN -DTARGET_WIN)
else()
message("Unsupported OS: ${TARGET_OS}" )
return()
endif()

# The cmake documentation states that these are set. They are not so we
# set them here
set(CMAKE_HOST_SYSTEM_NAME ${TARGET_OS})
set(CMAKE_HOST_SYSTEM_PROCESSOR ${TARGET_ARCHITECTURE})
if (${TARGET_ARCHITECTURE} MATCHES "^(x86_64|AMD64|amd64)$")
set(TARGET_ARCHITECTURE x86_64)
set(ARCHNAME x86-64)
set(ARCH X86)
elseif (${TARGET_ARCHITECTURE} MATCHES "^(aarch64|arm64)$")
set(TARGET_ARCHITECTURE aarch64)
set(ARCHNAME aarch64)
set(ARCH ARM)
elseif( ${TARGET_ARCHITECTURE} STREQUAL "ppc64le" )
set(ARCHNAME ppc64le)
set(ARCH POWER)
else()
message("Unsupported architecture: ${TARGET_ARCHITECTURE}" )
return()
endif()

math(EXPR WRDSZ "${CMAKE_SIZEOF_VOID_P} * 8")

# If we are not building as a part of LLVM, build Flang as an
# standalone project, using LLVM as an external library:
Expand Down
16 changes: 8 additions & 8 deletions runtime/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,31 @@ set (RUNTIME_SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shared)
add_definitions(
-DMAXCPUS=256
-DMAXCPUSL=8
-DMAXCPUSR=8
-DTARGET_LINUX
-DTARGET_LLVM
-DLINUX
-DMAXCPUSR=8
-DTARGET_LLVM
-DPGF90
-DPGFLANG
-DNATIVE_FPCVT
-DPGI_LITTLE_ENDIAN
-DINLINE_MEMOPS
-DTARGET_${OS}
-D${OS}
)

if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" )
add_definitions(
-DTARGET_X8664
-DTARGET_LINUX_X8664
-DTARGET_${OS}_X8664
)
elseif( ${TARGET_ARCHITECTURE} STREQUAL "aarch64" )
add_definitions(
-DTARGET_LLVM_ARM64
-DTARGET_LINUX_ARM
-DTARGET_${OS}_ARM
)
elseif( ${TARGET_ARCHITECTURE} STREQUAL "ppc64le" )
add_definitions(
-DTARGET_LINUX_POWER
-DLINUX_POWER
-DTARGET_${OS}_POWER
-D${OS}_POWER
)
endif()

Expand Down
71 changes: 40 additions & 31 deletions runtime/flang/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ enable_language(C ASM Fortran) # Enable assembly and Fortran

SET(ASM_OPTIONS "-DLINUX_ELF")
SET(CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS}" )
SET(CMAKE_SHARED_LINKER_FLAGS "-no-flang-libs")
if (NOT MSVC)
SET(CMAKE_SHARED_LINKER_FLAGS "-no-flang-libs")
else ()
SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -no-flang-libs")
endif ()

# We are using Fortran driver to build this library with fresh compiler
# components, so point its binary directory to the build directory to pick up
Expand Down Expand Up @@ -187,7 +191,7 @@ SET(FTN_INTRINSICS_DESC_DEP
red_any.c
red_count.c
red_findloc.c
red_iany.c
red_iany.c
red_maxloc.c
red_minloc.c
red_maxval.c
Expand Down Expand Up @@ -418,7 +422,7 @@ separate_arguments(SEPARATED_CMAKE_Fortran_FLAGS NATIVE_COMMAND ${CMAKE_Fortran_
add_custom_command(
OUTPUT "${I8_FILES_DIR}/ieee_arithmetic.F95"
COMMAND "${CMAKE_Fortran_COMPILER}" -E -cpp ${SEPARATED_CMAKE_Fortran_FLAGS}
"${CMAKE_CURRENT_SOURCE_DIR}/ieee_arithmetic.F95" -DDESC_I8
"${CMAKE_CURRENT_SOURCE_DIR}/ieee_arithmetic.F95" -DDESC_I8
> "${I8_FILES_DIR}/ieee_arithmetic.F95"
COMMENT "Preprocessing ieee_arithmetic.F95"
VERBATIM
Expand All @@ -428,7 +432,7 @@ add_custom_command(
add_custom_command(
OUTPUT "${I8_FILES_DIR}/ieee_exceptions.F95"
COMMAND "${CMAKE_Fortran_COMPILER}" -E -cpp ${SEPARATED_CMAKE_Fortran_FLAGS}
"${CMAKE_CURRENT_SOURCE_DIR}/ieee_exceptions.F95" -DDESC_I8
"${CMAKE_CURRENT_SOURCE_DIR}/ieee_exceptions.F95" -DDESC_I8
> "${I8_FILES_DIR}/ieee_exceptions.F95"
COMMENT "Preprocessing ieee_exceptions.F95"
VERBATIM
Expand Down Expand Up @@ -460,7 +464,7 @@ FOREACH(file ${FTN_SUPPORT_DESC_DEP})
ENDFOREACH(file)

LIST(APPEND FTN_SUPPORT_DESC_DEP ieee_arithmetic.F95 ieee_exceptions.F95 norm2_1.F95)
LIST(APPEND FTN_SUPPORT_I8
LIST(APPEND FTN_SUPPORT_I8
"${I8_FILES_DIR}/ieee_arithmetic.F95"
"${I8_FILES_DIR}/ieee_exceptions.F95"
"${I8_FILES_DIR}/norm2_1.F95"
Expand All @@ -475,7 +479,15 @@ add_flang_library(flang_static
${FTN_SUPPORT_I8}
${SHARED_SOURCES}
)
set_target_properties(flang_static
PROPERTIES
Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include-static
)
if (MSVC)
set_property(TARGET flang_static PROPERTY OUTPUT_NAME libflang)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please indent.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line 489 as well.

else()
set_property(TARGET flang_static PROPERTY OUTPUT_NAME flang)
endif()

set(SHARED_LIBRARY TRUE)
add_flang_library(flang_shared
Expand All @@ -488,26 +500,19 @@ add_flang_library(flang_shared
${SHARED_SOURCES}
)
set_property(TARGET flang_shared PROPERTY OUTPUT_NAME flang)

#
# Seralize the building of flang_shared and flang_static to eliminate
# conflicts with the same module files from the shared and static builds
# being created/recreated in the common directory
# ${CMAKE_Fortran_MODULE_DIRECTORY}.
#
# Note: building of each library is still parallelized.
#
add_dependencies(flang_shared flang_static)

target_link_libraries(flang_shared ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib/libflangrti.so)
target_link_libraries(flang_shared flangrti_shared)
# Resolve symbols against libm and librt
target_link_libraries(flang_shared m rt)
if (NOT MSVC)
target_link_libraries(flang_shared m rt)
else()
set_target_properties(flang_shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
endif()

set(SHARED_LIBRARY FALSE)

set_property(
SOURCE ${FTN_INTRINSICS_DESC_INDEP} ${FTN_INTRINSICS_DESC_DEP} ${SHARED_SOURCES}
PROPERTY COMPILE_DEFINITIONS
PROPERTY COMPILE_DEFINITIONS
PGF90
KANJI
INT32PTR64
Expand All @@ -517,7 +522,7 @@ set_property(

set_property(
SOURCE ${FTN_INTRINSICS_I8}
PROPERTY COMPILE_DEFINITIONS
PROPERTY COMPILE_DEFINITIONS
PGF90
KANJI
INT32PTR64
Expand All @@ -527,16 +532,16 @@ set_property(
)

set_property(
SOURCE ${FTN_SUPPORT_DESC_INDEP} ${FTN_SUPPORT_DESC_DEP}
PROPERTY COMPILE_DEFINITIONS
SOURCE ${FTN_SUPPORT_DESC_INDEP} ${FTN_SUPPORT_DESC_DEP}
PROPERTY COMPILE_DEFINITIONS
INT32PTR64
TM_I8
HAVE_LONG_LONG_INT
)

set_property(
SOURCE ${FTN_SUPPORT_I8}
PROPERTY COMPILE_DEFINITIONS
SOURCE ${FTN_SUPPORT_I8}
PROPERTY COMPILE_DEFINITIONS
INT32PTR64
TM_I8
DESC_I8
Expand Down Expand Up @@ -618,8 +623,8 @@ set_target_properties(flang_static flang_shared
PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${FLANG_RTE_LIB_DIR}
)
target_include_directories(flang_static

target_include_directories(flang_static
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
Expand All @@ -632,20 +637,24 @@ target_include_directories(flang_shared
)

# Make sure the compiler is built before we bootstrap
add_dependencies(flang_static
add_dependencies(flang_static
flang1
flang2
)

# Make sure the compiler is built before we bootstrap
add_dependencies(flang_shared
add_dependencies(flang_shared
flang1
flang2
)

target_compile_options(flang_static PRIVATE -fPIC)

target_compile_options(flang_shared PRIVATE -fPIC)
if (NOT MSVC)
target_compile_options(flang_static PRIVATE -fPIC)
target_compile_options(flang_shared PRIVATE -fPIC)
else()
set_target_properties(flang_static PROPERTIES LINKER_LANGUAGE CXX)
set_target_properties(flang_shared PROPERTIES LINKER_LANGUAGE CXX)
endif()

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

Expand Down
29 changes: 20 additions & 9 deletions runtime/flangrti/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Spurious blank line.

#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
Expand Down Expand Up @@ -61,7 +62,11 @@ add_flang_library(flangrti_static
${PGC_SRC_FILES}
${SHARED_SOURCES}
)
set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME flangrti)
if (MSVC)
set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME libflangrti)
else()
set_property(TARGET flangrti_static PROPERTY OUTPUT_NAME flangrti)
endif()


set(SHARED_LIBRARY TRUE)
Expand All @@ -71,7 +76,10 @@ add_flang_library(flangrti_shared
)

# Resolve symbols against libm
target_link_libraries(flangrti_shared m)
if (NOT MSVC)
target_link_libraries(flangrti_shared PRIVATE m)
endif()


# Resolve symbols against libpthread
find_package(Threads REQUIRED)
Expand All @@ -83,16 +91,16 @@ endif()
if (NOT DEFINED LIBOMP_EXPORT_DIR)
find_library(
FLANG_LIBOMP
libomp.so
NAMES omp libomp
HINTS ${CMAKE_BINARY_DIR}/lib)
target_link_libraries(flangrti_shared ${FLANG_LIBOMP})
target_link_libraries(flangrti_shared PRIVATE ${FLANG_LIBOMP})
endif()

find_library(
LIBPGMATH
libpgmath.so
NAMES pgmath libpgmath
HINTS ${CMAKE_BINARY_DIR}/lib)
target_link_libraries(flangrti_shared ${LIBPGMATH})
target_link_libraries(flangrti_shared PRIVATE ${LIBPGMATH})

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

target_compile_options(flangrti_static PRIVATE -fPIC)

target_compile_options(flangrti_shared PRIVATE -fPIC)
if (NOT MSVC)
target_compile_options(flangrti_static PRIVATE -fPIC)
target_compile_options(flangrti_shared PRIVATE -fPIC)
else()
set_target_properties(flangrti_shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
endif()

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

Expand Down
7 changes: 7 additions & 0 deletions runtime/ompstub/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,18 @@
set(OMPSTUB_SRC init_nomp.c ompstubs.c)

add_flang_library(ompstub_static ${OMPSTUB_SRC})
if (MSVC)
set_property(TARGET ompstub_static PROPERTY OUTPUT_NAME libompstub)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please indent this line and line 13.

else()
set_property(TARGET ompstub_static PROPERTY OUTPUT_NAME ompstub)
endif()

set(SHARED_LIBRARY TRUE)
add_flang_library(ompstub_shared ${OMPSTUB_SRC})
set_property(TARGET ompstub_shared PROPERTY OUTPUT_NAME ompstub)
if (MSVC)
set_target_properties(ompstub_shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
endif()
set(SHARED_LIBRARY FALSE)

set_target_properties(ompstub_static ompstub_shared
Expand Down
7 changes: 5 additions & 2 deletions tools/flang1/flang1exe/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -155,10 +155,13 @@ target_compile_options(flang1
target_link_libraries(flang1
PRIVATE
flangArgParser
${FLANG_LIB_DIR}/scutil.a
-lm
scutil
)

if (NOT MSVC)
target_link_libraries(flang1 PRIVATE m)
endif()

# Install flang1 executable
install(TARGETS flang1
RUNTIME DESTINATION bin)
Expand Down
Loading