From c0828b7798a8392fa6297afbfee6673e19fd37db Mon Sep 17 00:00:00 2001 From: Albert Ziegenhagel Date: Wed, 25 Oct 2017 19:09:31 +0200 Subject: [PATCH 1/2] 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. --- runtime/flang/CMakeLists.txt | 56 ++++++++++++++++++++------------- runtime/flangrti/CMakeLists.txt | 21 ++++++++----- runtime/ompstub/CMakeLists.txt | 9 +++++- 3 files changed, 56 insertions(+), 30 deletions(-) diff --git a/runtime/flang/CMakeLists.txt b/runtime/flang/CMakeLists.txt index 8ad885de315..1dde821fa7d 100644 --- a/runtime/flang/CMakeLists.txt +++ b/runtime/flang/CMakeLists.txt @@ -187,7 +187,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 @@ -418,7 +418,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 @@ -428,7 +428,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 @@ -460,7 +460,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" @@ -475,7 +475,11 @@ add_flang_library(flang_static ${FTN_SUPPORT_I8} ${SHARED_SOURCES} ) +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 @@ -501,13 +505,17 @@ add_dependencies(flang_shared flang_static) target_link_libraries(flang_shared ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib/libflangrti.so) # 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 @@ -517,7 +525,7 @@ set_property( set_property( SOURCE ${FTN_INTRINSICS_I8} - PROPERTY COMPILE_DEFINITIONS + PROPERTY COMPILE_DEFINITIONS PGF90 KANJI INT32PTR64 @@ -527,16 +535,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 @@ -585,7 +593,7 @@ 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 @@ -593,7 +601,7 @@ if(NOT ${CMAKE_GENERATOR} STREQUAL "Ninja") 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 @@ -601,14 +609,14 @@ if(NOT ${CMAKE_GENERATOR} STREQUAL "Ninja") 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 ) @@ -618,8 +626,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} @@ -632,20 +640,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 $<$:-Mreentrant>) diff --git a/runtime/flangrti/CMakeLists.txt b/runtime/flangrti/CMakeLists.txt index 6c72f0701ae..c942eecb883 100644 --- a/runtime/flangrti/CMakeLists.txt +++ b/runtime/flangrti/CMakeLists.txt @@ -10,7 +10,7 @@ SET(ASM_OPTIONS "-DLINUX_ELF") SET(CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS}" ) if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" ) - set(ARCH_DEP_FILES + set(ARCH_DEP_FILES x86_64-Linux/x86_daz.c x86_64-Linux/x86_flushz.c x86_64-Linux/dumpregs.c @@ -61,7 +61,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) @@ -81,14 +85,14 @@ endif() # Import OpenMP if (NOT DEFINED LIBOMP_EXPORT_DIR) - find_library( + find_library( FLANG_LIBOMP libomp.so HINTS ${CMAKE_BINARY_DIR}/lib) target_link_libraries(flangrti_shared ${FLANG_LIBOMP}) endif() -find_library( +find_library( LIBPGMATH libpgmath.so HINTS ${CMAKE_BINARY_DIR}/lib) @@ -118,9 +122,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 $<$:-Mreentrant>) diff --git a/runtime/ompstub/CMakeLists.txt b/runtime/ompstub/CMakeLists.txt index c3c5c0446e9..9b3890ac2ad 100644 --- a/runtime/ompstub/CMakeLists.txt +++ b/runtime/ompstub/CMakeLists.txt @@ -7,11 +7,18 @@ set(OMPSTUB_SRC init_nomp.c ompstubs.c) add_flang_library(ompstub_static ${OMPSTUB_SRC}) -set_property(TARGET ompstub_static PROPERTY OUTPUT_NAME ompstub) +if (MSVC) + set_property(TARGET ompstub_static PROPERTY OUTPUT_NAME libompstub) +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 From be9a11e51e3620ea30c34dfb43e6d9c25e455853 Mon Sep 17 00:00:00 2001 From: Isuru Fernando Date: Wed, 9 May 2018 02:00:42 -0500 Subject: [PATCH 2/2] Misc CMake file fixes for compiling in Windows - Call project command at the beginning if compiling flang in standalone mode This makes sure that CMake variables like CMAKE_SYSTEM_PROCESSOR are defined and removes the need for hacks like calling uname -m - Prevent CMake from running tests to check if flang works flang.exe is not fully functional and CMake tries to run checks on the Fortran compiler (more than in the Unix case) and fails. By setting CMake options like CMAKE_Fortran_COMPILER_SUPPORTS_F90, CMake accepts flang.exe as the Fortran compiler - Alias AMD64/amd64 to x86_64 - Alias arm64 to x86_64 - Preprocessor options like TARGET_LINUX are replaced with TARGET_${OS} - Set Fortran_MODULE_DIRECTORY to a different directory for static builds in Ninja generator This makes it possible for flang to be built with Ninja on windows. For other generators https://gitlab.kitware.com/cmake/cmake/-/merge_requests/5518 needs to be used when it is in a CMake release - Link to libm only on non-windows - Remove .so from name when linking When linking libomp.so is not portable. Use NAMES omp libomp for portability - Call built executables using the target name instead of full path The full path to the built executable given is not portable, but using the target name is portable as CMake will internally figure out the full path - Sort upperilm.in using portable CMake code --- CMakeLists.txt | 60 ++++++++++++------------ runtime/CMakeLists.txt | 16 +++---- runtime/flang/CMakeLists.txt | 18 +++++-- runtime/flangrti/CMakeLists.txt | 16 ++++--- tools/flang1/flang1exe/CMakeLists.txt | 7 ++- tools/flang1/utils/symtab/CMakeLists.txt | 4 +- tools/flang2/CMakeLists.txt | 7 +-- tools/flang2/flang2exe/CMakeLists.txt | 4 ++ tools/flang2/include/platform.h.in | 1 - tools/flang2/utils/upper/CMakeLists.txt | 16 +++++-- 10 files changed, 87 insertions(+), 62 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1598eae3c31..e49be68c718 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt index 33dc89b848b..ab3c9ba574f 100644 --- a/runtime/CMakeLists.txt +++ b/runtime/CMakeLists.txt @@ -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() diff --git a/runtime/flang/CMakeLists.txt b/runtime/flang/CMakeLists.txt index 1dde821fa7d..4b775a15334 100644 --- a/runtime/flang/CMakeLists.txt +++ b/runtime/flang/CMakeLists.txt @@ -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 @@ -476,9 +480,9 @@ add_flang_library(flang_static ${SHARED_SOURCES} ) if (MSVC) -set_property(TARGET flang_static PROPERTY OUTPUT_NAME libflang) + set_property(TARGET flang_static PROPERTY OUTPUT_NAME libflang) else() -set_property(TARGET flang_static PROPERTY OUTPUT_NAME flang) + set_property(TARGET flang_static PROPERTY OUTPUT_NAME flang) endif() set(SHARED_LIBRARY TRUE) @@ -493,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 @@ -503,7 +506,7 @@ 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 if (NOT MSVC) target_link_libraries(flang_shared m rt) @@ -620,6 +623,11 @@ if(NOT ${CMAKE_GENERATOR} STREQUAL "Ninja") 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 diff --git a/runtime/flangrti/CMakeLists.txt b/runtime/flangrti/CMakeLists.txt index c942eecb883..d99c3a5e38d 100644 --- a/runtime/flangrti/CMakeLists.txt +++ b/runtime/flangrti/CMakeLists.txt @@ -1,3 +1,4 @@ + # # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. # See https://llvm.org/LICENSE.txt for license information. @@ -75,28 +76,31 @@ 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) if (CMAKE_THREAD_LIBS_INIT) - target_link_libraries(flangrti_shared "${CMAKE_THREAD_LIBS_INIT}") + target_link_libraries(flangrti_shared PRIVATE "${CMAKE_THREAD_LIBS_INIT}") endif() # Import OpenMP 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) diff --git a/tools/flang1/flang1exe/CMakeLists.txt b/tools/flang1/flang1exe/CMakeLists.txt index 0249866f50d..7298861d3cc 100644 --- a/tools/flang1/flang1exe/CMakeLists.txt +++ b/tools/flang1/flang1exe/CMakeLists.txt @@ -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) diff --git a/tools/flang1/utils/symtab/CMakeLists.txt b/tools/flang1/utils/symtab/CMakeLists.txt index bb26358f043..2608f79eb5b 100644 --- a/tools/flang1/utils/symtab/CMakeLists.txt +++ b/tools/flang1/utils/symtab/CMakeLists.txt @@ -13,7 +13,7 @@ add_custom_command( ${UTILS_SYMTAB_BIN_DIR}/symtabdf.c ${UTILS_SYMTAB_BIN_DIR}/symnames.h ${FLANG1_DOC_BIN_DIR}/symtab.rst - COMMAND ${CMAKE_BINARY_DIR}/bin/fesymutil ${CMAKE_CURRENT_SOURCE_DIR}/symtab.n + COMMAND fesymutil ${CMAKE_CURRENT_SOURCE_DIR}/symtab.n ${CMAKE_CURRENT_SOURCE_DIR}/symtab.in.h -o -n ${UTILS_SYMTAB_BIN_DIR}/symtab.out.n ${UTILS_SYMTAB_BIN_DIR}/symtab.h @@ -43,7 +43,7 @@ add_custom_command( ${UTILS_SYMTAB_BIN_DIR}/astdf.d ${UTILS_SYMTAB_BIN_DIR}/ilmtp.h ${FLANG1_DOC_BIN_DIR}/symini.rst - COMMAND ${CMAKE_BINARY_DIR}/bin/fesymini ${UTILS_SYMTAB_DIR}/symini_ftn.n + COMMAND fesymini ${UTILS_SYMTAB_DIR}/symini_ftn.n -o ${UTILS_SYMTAB_BIN_DIR}/syminidf.h ${UTILS_SYMTAB_BIN_DIR}/pd.h ${UTILS_SYMTAB_BIN_DIR}/ast.d diff --git a/tools/flang2/CMakeLists.txt b/tools/flang2/CMakeLists.txt index 9a2dde76d01..9bbd3d46fd1 100644 --- a/tools/flang2/CMakeLists.txt +++ b/tools/flang2/CMakeLists.txt @@ -23,11 +23,8 @@ set(FLANG2_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/include) include_directories(${FLANG2_INCLUDE_DIR}) -if( ${TARGET_OS} STREQUAL "Linux" ) - if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" ) - set(X86_64 ON) - set(LINUX86 ON) - endif() +if( ${TARGET_ARCHITECTURE} STREQUAL "x86_64" ) + set(X86_64 ON) endif() option(FLANG_OPENMP_GPU_NVIDIA "Enable OpenMP Accelerator Offload." OFF) diff --git a/tools/flang2/flang2exe/CMakeLists.txt b/tools/flang2/flang2exe/CMakeLists.txt index 26af1a77f0a..ae42fe5ef50 100644 --- a/tools/flang2/flang2exe/CMakeLists.txt +++ b/tools/flang2/flang2exe/CMakeLists.txt @@ -143,6 +143,10 @@ target_link_libraries(flang2 scutil ) +if (NOT MSVC) + target_link_libraries(flang2 PRIVATE m) +endif() + add_dependencies(flang2 gen_backend_error_headers # Error message headers gen_backend_symtab # Symbol table headers diff --git a/tools/flang2/include/platform.h.in b/tools/flang2/include/platform.h.in index 0dc0360af96..64e333feb53 100644 --- a/tools/flang2/include/platform.h.in +++ b/tools/flang2/include/platform.h.in @@ -15,7 +15,6 @@ * - true for all arch/arch */ #define BIGOBJ 1 -#cmakedefine LINUX86 1 #define LONG_IS_64 1 #define NOLZ 1 #cmakedefine X86_64 1 diff --git a/tools/flang2/utils/upper/CMakeLists.txt b/tools/flang2/utils/upper/CMakeLists.txt index cacd96521bc..3ab3314aa44 100644 --- a/tools/flang2/utils/upper/CMakeLists.txt +++ b/tools/flang2/utils/upper/CMakeLists.txt @@ -4,18 +4,26 @@ # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # -set(ENV{LC_ALL} "C") - add_executable(upperl upperl.c ) # Generate upper tables +file(STRINGS "${UTILS_UPPER_DIR}/upperilm.in" UPPERILM_H_CONTENTS) +list(SORT UPPERILM_H_CONTENTS) +set(UPPERILM_H_CONTENTS_SORTED "") +foreach(Line ${UPPERILM_H_CONTENTS}) + # Don't modify the line if it contains #local at the end. + string(SUBSTRING "${Line}" 0 1 FIRST_CHAR) + if(NOT "${FIRST_CHAR}" STREQUAL "#") + set(UPPERILM_H_CONTENTS_SORTED "${UPPERILM_H_CONTENTS_SORTED}${Line}\n") + endif() +endforeach() +file(WRITE ${UTILS_UPPER_BIN_DIR}/upperilm.sort "${UPPERILM_H_CONTENTS_SORTED}") add_custom_command( OUTPUT ${UTILS_UPPER_BIN_DIR}/upperilm.h - COMMAND LC_ALL=C sort ${UTILS_UPPER_DIR}/upperilm.in | grep -v "^ *\#" > ${UTILS_UPPER_BIN_DIR}/upperilm.sort - COMMAND ${CMAKE_BINARY_DIR}/bin/upperl ${UTILS_UPPER_BIN_DIR}/upperilm.sort ${UTILS_UPPER_BIN_DIR}/upperilm.h + COMMAND upperl ${UTILS_UPPER_BIN_DIR}/upperilm.sort ${UTILS_UPPER_BIN_DIR}/upperilm.h DEPENDS upperl ${UTILS_UPPER_DIR}/upperilm.in )