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