CMakeLists.txt 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. cmake_minimum_required(VERSION 3.10)
  2. project(FortranHello Fortran C)
  3. # add a function to test for -lsunquad on sunpro sun systems.
  4. function(test_sunquad result)
  5. set( TEST_DIR "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/sunq")
  6. file(WRITE "${TEST_DIR}/testsunq.f" "
  7. PROGRAM TEST
  8. END
  9. ")
  10. file(WRITE ${TEST_DIR}/CMakeLists.txt "
  11. project(sunq Fortran)
  12. add_library(sunq SHARED testsunq.f)
  13. target_link_libraries(sunq sunquad)
  14. ")
  15. message(STATUS "looking for -lsunquad")
  16. try_compile(RESULT "${TEST_DIR}" "${TEST_DIR}" sunq OUTPUT_VARIABLE OUT)
  17. if("${RESULT}")
  18. message(STATUS "-lsunquad found")
  19. else()
  20. message(STATUS "-lsunquad not found")
  21. endif()
  22. message(STATUS
  23. "looking for sunquad:\nRESULT=[${RESULT}]\nOUTPUT=[\n${OUT}\n]")
  24. set(${result} "${RESULT}" PARENT_SCOPE)
  25. endfunction()
  26. if(CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran")
  27. if(CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "0.55")
  28. set(_LFORTRAN_SC_FLAG --separate-compilation)
  29. else()
  30. set(_LFORTRAN_SC_FLAG --generate-object-code)
  31. endif()
  32. add_compile_options(--implicit-interface ${_LFORTRAN_SC_FLAG})
  33. endif()
  34. # check for the fortran c interface mangling
  35. include(FortranCInterface)
  36. FortranCInterface_HEADER(HelloWorldFCMangle.h
  37. MACRO_NAMESPACE "FC_"
  38. SYMBOL_NAMESPACE "FC_"
  39. SYMBOLS hello world)
  40. add_library(hello SHARED hello.f)
  41. add_library(world SHARED world.f)
  42. target_link_libraries(hello PRIVATE world)
  43. if(CMAKE_Fortran_COMPILER_ID MATCHES SunPro)
  44. target_link_libraries(hello PRIVATE fsu)
  45. if(CMAKE_Fortran_PLATFORM_ID MATCHES SunOS)
  46. target_link_libraries(hello PRIVATE sunmath m)
  47. test_sunquad(CMAKE_HAS_SUNQUAD)
  48. if(CMAKE_HAS_SUNQUAD)
  49. target_link_libraries(hello PRIVATE sunquad)
  50. endif()
  51. endif()
  52. elseif(CMAKE_Fortran_COMPILER_ID MATCHES Fujitsu)
  53. # Fujitsu Fortran doesn't automatically link its runtime libraries into
  54. # SOs
  55. target_link_libraries(world PRIVATE fj90i fj90f fjsrcinfo)
  56. target_link_libraries(hello PRIVATE fj90i fj90f fjsrcinfo)
  57. endif()