summaryrefslogtreecommitdiffstats
path: root/Tests/VSGNUFortran/subdir/fortran/CMakeLists.txt
blob: 8918d98322ec7a60746a611cd5f0d850eb418edf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
cmake_minimum_required(VERSION 3.5)
project(FortranHello Fortran C)

# add a function to test for -lsunquad on sunpro sun systems.
function(test_sunquad result)
  set( TEST_DIR "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/sunq")
  file(WRITE "${TEST_DIR}/testsunq.f" "
      PROGRAM TEST
      END
  ")
  file(WRITE ${TEST_DIR}/CMakeLists.txt "
project(sunq Fortran)
add_library(sunq SHARED testsunq.f)
target_link_libraries(sunq sunquad)
")
  message(STATUS "looking for -lsunquad")
  try_compile(RESULT "${TEST_DIR}" "${TEST_DIR}" sunq OUTPUT_VARIABLE OUT)
  if("${RESULT}")
    message(STATUS "-lsunquad found")
  else()
    message(STATUS "-lsunquad not found")
  endif()
  message(STATUS
    "looking for sunquad:\nRESULT=[${RESULT}]\nOUTPUT=[\n${OUT}\n]")
  set(${result} "${RESULT}" PARENT_SCOPE)
endfunction()

# check for the fortran c interface mangling
include(FortranCInterface)
FortranCInterface_HEADER(HelloWorldFCMangle.h
                         MACRO_NAMESPACE "FC_"
                         SYMBOL_NAMESPACE "FC_"
                         SYMBOLS hello world)
add_library(hello SHARED hello.f)
add_library(world SHARED world.f)
target_link_libraries(hello PRIVATE world)
if(CMAKE_Fortran_COMPILER_ID MATCHES SunPro)
  target_link_libraries(hello PRIVATE fsu)
  if(CMAKE_Fortran_PLATFORM_ID MATCHES SunOS)
    target_link_libraries(hello PRIVATE sunmath m)
    test_sunquad(CMAKE_HAS_SUNQUAD)
    if(CMAKE_HAS_SUNQUAD)
      target_link_libraries(hello PRIVATE sunquad)
    endif()
  endif()
elseif(CMAKE_Fortran_COMPILER_ID MATCHES Fujitsu)
  # Fujitsu Fortran doesn't automatically link its runtime libraries into
  # SOs
  target_link_libraries(world PRIVATE fj90i fj90f fjsrcinfo)
  target_link_libraries(hello PRIVATE fj90i fj90f fjsrcinfo)
endif()