본문 바로가기
공부/프로그래밍

[zeroMQ] F77_ZMQ Linking using CMake (7)

by AlderaminH 2024. 7. 4.

이전 포스팅에서는 F77_ZMQ를 gfortran을 이용한 Linking에 대해서 다루었다.

 

https://minosauce.tistory.com/16

 

[zeroMQ] F77_ZMQ Linking using gfortran (6)

이전 포스팅에서는 F77_ZMQ의 설치에 대해서 다루었다. https://minosauce.tistory.com/8 [zeroMQ] F77_ZMQ 설치 (5)이전 포스트에서 zeroMQ를 이미 설치했다는 가정하에 다음을 진행한다. https://minosauce.tistory.com/5

minosauce.tistory.com

 

이번 포스팅에서는 F77_ZMQ를 CMake을 이용한 Linking에 대해서 다룬다. 

 

포트란 파일에 F77_ZMQ를 연동하기 위해서는 포트란 파일과 f77_zmq.h 그리고 libf77zmq.so 파일을 linking 시켜 하나의 obj 파일(.so or .dll)로 만들어야 한다.

 

이전 포스팅에서는 이 linking 과정을 gfortran을 통해 달성하였다. 

(build) gfortran -o $(TargetName [.so]) $(Obj [.F77]) -lzmq -lf77zmq

( ex. gfortran -o Mytest Mytest.F90 -lzmq -lf77zmq)

 

-lzmq 는 기본 zeromq의 동적라이브러리 파일인 zmq.so 지칭하고 -lf77zmq는 libf77zmq.so를 지칭한다.

 

 

우리는 위 과정을 cmake을 통해서도 똑같이 구현할 수 있다.
CmakeLists.txt

add_library(MT src/Mytest.F90)
target_link_libraries(MT -lzmq -lf77zmq)
set_target_properties(MT PROPERTIES PREFIX "" SUFFIX ".so")
# set_target_properties(MT PROPERTIES PREFIX "" SUFFIX ".dll")

# 동적라이브러리를 .so파일로 생성할 것인가 .dll 파일로 생성할 것인가 선택할 수 있다.

install(TARGETS MT 
  #EXPORT "${CMAKE_PROJECT_NAME}Libraries"
  DESTINATION "$Where/you/want/to/install/)

 

끝으로, zmq.h 헤더파일을 Mytest.F90 파일과 동일한 디렉토리에 저장한다.

 

여담으로,

zeroMQ를 이용한 Fortran 통신을 하게 된 이유는 NREL에서 개발한 풍력발전단지 시뮬레이터인 FAST.Farm과 python간의 데이터 교환을 위해서이다. 

 

https://github.com/OpenFAST

 

OpenFAST

Organization for OpenFAST-related repositories including whole-turbine and full wind farm simulation tools. - OpenFAST

github.com

 

FAST.Farm의 사용자인터페이스인 SuperController (SC_DLL.f90) 에 제어명령을 주기 위해서 파이썬과의 통신이 필요하였다. 

FAST.Farm의 SC와 파이썬간의 연동을 원한다면 CMake에 다음과 같이 작성하면 된다.

add_library(SC_DLL src/SC_DLL.F90)
target_link_libraries(SC_DLL -lzmq -lf77zmq)
set_target_properties(SC_DLL PROPERTIES PREFIX "" SUFFIX ".dll")
#set_target_properties(SC_DLL PROPERTIES PREFIX "" SUFFIX ".so")

install(TARGETS SC_DLL 
  #EXPORT "${CMAKE_PROJECT_NAME}Libraries"
  DESTINATION "${CMAKE_CURRENT_LIST_DIR}/../../reg_tests/r-test/glue-codes/fast-farm/5MW_Baseline/ServoDat")

 

감사합니다.

댓글