Skip to content
Merged
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
60 changes: 31 additions & 29 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,54 +6,56 @@

cmake_minimum_required(VERSION 3.3)

# 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()

# In order to bootstrap the runtime library we need to skip
# CMake's Fortran tests
SET(CMAKE_Fortran_COMPILER_WORKS 1)

if( NOT DEFINED TARGET_ARCHITECTURE )
execute_process(COMMAND uname -m OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE TARGET_ARCHITECTURE)
if (WIN32)
SET(CMAKE_Fortran_ABI_COMPILED 0)
SET(CMAKE_Fortran_COMPILER_SUPPORTS_F90 1)
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()
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:
if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
project(Flang)

# Rely on llvm-config.
set(CONFIG_OUTPUT)

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
72 changes: 46 additions & 26 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,11 @@ add_flang_library(flang_static
${FTN_SUPPORT_I8}
${SHARED_SOURCES}
)
set_property(TARGET flang_static PROPERTY OUTPUT_NAME flang)
if (MSVC)
set_property(TARGET flang_static PROPERTY OUTPUT_NAME libflang)
else()
set_property(TARGET flang_static PROPERTY OUTPUT_NAME flang)
endif()

set(SHARED_LIBRARY TRUE)
add_flang_library(flang_shared
Expand All @@ -489,7 +497,6 @@ add_flang_library(flang_shared
)
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
Expand All @@ -499,15 +506,19 @@ set_property(TARGET flang_shared PROPERTY OUTPUT_NAME flang)
#
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 +528,7 @@ set_property(

set_property(
SOURCE ${FTN_INTRINSICS_I8}
PROPERTY COMPILE_DEFINITIONS
PROPERTY COMPILE_DEFINITIONS
PGF90
KANJI
INT32PTR64
Expand All @@ -527,16 +538,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 @@ -585,41 +596,46 @@ if(NOT ${CMAKE_GENERATOR} STREQUAL "Ninja")
# State a dependency on the module
set_source_files_properties(
${I8_FILES_DIR}/ieee_arithmetic.F95
PROPERTIES
PROPERTIES
COMPILE_DEFINITIONS DESC_I8
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/iso_c_binding.mod
OBJECT_OUTPUTS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_arithmetic_la.mod
)

set_source_files_properties(
${I8_FILES_DIR}/ieee_exceptions.F95
PROPERTIES
PROPERTIES
COMPILE_DEFINITIONS DESC_I8
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/iso_c_binding.mod
OBJECT_OUTPUTS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_exceptions_la.mod
)

set_source_files_properties(
norm2_1.F95
PROPERTIES
PROPERTIES
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_arithmetic.mod
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_exceptions.mod
)

set_source_files_properties(
${I8_FILES_DIR}/norm2_1.F95
PROPERTIES
PROPERTIES
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_arithmetic_la.mod
OBJECT_DEPENDS ${CMAKE_Fortran_MODULE_DIRECTORY}/ieee_exceptions_la.mod
)
else ()
set_target_properties(flang_static
PROPERTIES
Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include-static
)
endif()

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 +648,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
Loading