You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.0 KiB
93 lines
3.0 KiB
4 months ago
|
set(LLVM_LINK_COMPONENTS
|
||
|
FrontendOpenACC
|
||
|
FrontendOpenMP
|
||
|
Support
|
||
|
)
|
||
|
add_flang_tool(f18
|
||
|
dump.cpp
|
||
|
f18.cpp
|
||
|
)
|
||
|
|
||
|
target_link_libraries(f18
|
||
|
PRIVATE
|
||
|
FortranCommon
|
||
|
FortranParser
|
||
|
FortranEvaluate
|
||
|
FortranSemantics
|
||
|
FortranLower
|
||
|
)
|
||
|
|
||
|
set(MODULES
|
||
|
"__fortran_builtins"
|
||
|
"__fortran_type_info"
|
||
|
"ieee_arithmetic"
|
||
|
"ieee_exceptions"
|
||
|
"ieee_features"
|
||
|
"iso_c_binding"
|
||
|
"iso_fortran_env"
|
||
|
"omp_lib"
|
||
|
"__fortran_builtins"
|
||
|
"__fortran_type_info"
|
||
|
)
|
||
|
|
||
|
set(include ${FLANG_BINARY_DIR}/include/flang)
|
||
|
target_include_directories(f18
|
||
|
PRIVATE
|
||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||
|
)
|
||
|
|
||
|
# Create module files directly from the top-level module source directory
|
||
|
foreach(filename ${MODULES})
|
||
|
if(${filename} MATCHES "__fortran_type_info")
|
||
|
set(depends "")
|
||
|
elseif(${filename} MATCHES "__fortran_builtins")
|
||
|
set(depends ${include}/__fortran_type_info.mod)
|
||
|
else()
|
||
|
set(depends ${include}/__fortran_builtins.mod)
|
||
|
endif()
|
||
|
add_custom_command(OUTPUT ${include}/${filename}.mod
|
||
|
COMMAND f18 -fparse-only -I${include}
|
||
|
${FLANG_SOURCE_DIR}/module/${filename}.f90
|
||
|
WORKING_DIRECTORY ${include}
|
||
|
DEPENDS f18 ${FLANG_SOURCE_DIR}/module/${filename}.f90 ${depends}
|
||
|
)
|
||
|
add_custom_command(OUTPUT ${include}/${filename}.f18.mod
|
||
|
DEPENDS ${include}/${filename}.mod
|
||
|
COMMAND ${CMAKE_COMMAND} -E
|
||
|
copy ${include}/${filename}.mod ${include}/${filename}.f18.mod)
|
||
|
list(APPEND MODULE_FILES ${include}/${filename}.mod)
|
||
|
list(APPEND MODULE_FILES ${include}/${filename}.f18.mod)
|
||
|
install(FILES ${include}/${filename}.mod DESTINATION include/flang)
|
||
|
install(FILES ${include}/${filename}.f18.mod DESTINATION include/flang)
|
||
|
endforeach()
|
||
|
|
||
|
add_custom_target(module_files ALL DEPENDS ${MODULE_FILES})
|
||
|
|
||
|
install(TARGETS f18 DESTINATION bin)
|
||
|
|
||
|
set(FLANG_INTRINSIC_MODULES_DIR ${FLANG_BINARY_DIR}/include/flang)
|
||
|
|
||
|
# This flang shell script will only work in a POSIX shell.
|
||
|
if (NOT WIN32)
|
||
|
if (FLANG_STANDALONE_BUILD)
|
||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/flang.sh.in ${CMAKE_BINARY_DIR}/tools/flang/bin/flang @ONLY)
|
||
|
file(COPY ${CMAKE_BINARY_DIR}/tools/flang/bin/flang DESTINATION ${CMAKE_BINARY_DIR}/bin FILE_PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE)
|
||
|
else()
|
||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/flang.sh.in
|
||
|
${CMAKE_CURRENT_BINARY_DIR}/tools/flang/bin/flang @ONLY)
|
||
|
add_custom_command(TARGET f18
|
||
|
POST_BUILD
|
||
|
COMMAND ${CMAKE_COMMAND} -E copy
|
||
|
${CMAKE_CURRENT_BINARY_DIR}/tools/flang/bin/flang
|
||
|
${LLVM_RUNTIME_OUTPUT_INTDIR}/flang
|
||
|
COMMAND chmod +x ${LLVM_RUNTIME_OUTPUT_INTDIR}/flang)
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
# The flang script to be installed needs a different path to the headers.
|
||
|
set(FLANG_INTRINSIC_MODULES_DIR ${CMAKE_INSTALL_PREFIX}/include/flang)
|
||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/flang.sh.in ${FLANG_BINARY_DIR}/bin/flang-install.sh @ONLY)
|
||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/f18_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/f18_version.h @ONLY)
|
||
|
|
||
|
install(PROGRAMS ${FLANG_BINARY_DIR}/bin/flang-install.sh DESTINATION bin RENAME flang)
|