Skip to content

Commit 6db770e

Browse files
committed
work with visual studio generator: separate C, Fortran objects
1 parent 470180d commit 6db770e

File tree

7 files changed

+28
-10
lines changed

7 files changed

+28
-10
lines changed

test/array/CMakeLists.txt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ add_executable(cxx_f_array main.cpp)
44
target_link_libraries(cxx_f_array PRIVATE vector_fortran)
55
add_test(NAME CPP_array COMMAND cxx_f_array)
66

7-
add_executable(fortran_cpp_array array.f90 lib.c lib.cpp)
8-
set_property(TARGET fortran_cpp_array PROPERTY LINKER_LANGUAGE Fortran)
7+
8+
# object library to work with Visual Studio generator
9+
add_library(fortran_array OBJECT array.f90)
10+
11+
add_executable(fortran_cpp_array lib.c lib.cpp $<TARGET_OBJECTS:fortran_array>)
12+
if(NOT CMAKE_GENERATOR MATCHES "Visual Studio")
13+
set_property(TARGET fortran_cpp_array PROPERTY LINKER_LANGUAGE Fortran)
14+
endif()
15+
916
add_test(NAME Fortran_CPP_array COMMAND fortran_cpp_array)

test/pointer/CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,14 @@ add_executable(cxx_fortran_pointer main.cpp)
1818
target_link_libraries(cxx_fortran_pointer PRIVATE pointer_fortran)
1919
add_test(NAME C++_Fortran_pointer COMMAND cxx_fortran_pointer)
2020

21-
add_executable(fortran_cxx_null null_c.f90 ${PROJECT_SOURCE_DIR}/src/pointer/null.cpp)
21+
add_library(cpp_null OBJECT ${PROJECT_SOURCE_DIR}/src/pointer/null.cpp)
22+
add_executable(fortran_cxx_null null_c.f90 $<TARGET_OBJECTS:cpp_null>)
23+
set_property(TARGET fortran_cxx_null PROPERTY LINKER_LANGUAGE Fortran)
2224
add_test(NAME Fortran_C++_null COMMAND fortran_cxx_null)
2325

24-
add_executable(fortran_c_null null_c.f90 ${PROJECT_SOURCE_DIR}/src/pointer/null.c)
26+
# for Visual Studio generator object library
27+
add_library(c_null OBJECT ${PROJECT_SOURCE_DIR}/src/pointer/null.c)
28+
add_executable(fortran_c_null null_c.f90 $<TARGET_OBJECTS:c_null>)
2529
add_test(NAME Fortran_C_null COMMAND fortran_c_null)
2630

2731
set_property(TARGET fortran_c_null fortran_cxx_null PROPERTY LINKER_LANGUAGE Fortran)

test/pointer/null_c.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
program Null_C
1+
program main
22

33
use, intrinsic :: iso_c_binding, only : C_PTR, c_associated, C_NULL_CHAR, C_CHAR
44

test/string/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ add_test(NAME string_cpp COMMAND string_cpp)
1313
# single C_CHAR -- fails on nvfortran
1414
# https://forums.developer.nvidia.com/t/nvfortran-iso-c-binding-with-single-char/284098
1515

16-
add_executable(single_char main_char.f90 lib_char.c)
16+
add_library(c_char OBJECT lib_char.c)
17+
add_executable(single_char main_char.f90 $<TARGET_OBJECTS:c_char>)
1718
set_property(TARGET single_char PROPERTY LINKER_LANGUAGE Fortran)
1819
add_test(NAME single_char COMMAND single_char)

test/struct/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ target_link_libraries(fortran_cxx_struct PRIVATE struct_cpp)
2121
set_property(TARGET fortran_cxx_struct PROPERTY LINKER_LANGUAGE Fortran)
2222
add_test(NAME Fortran_C++_struct COMMAND fortran_cxx_struct)
2323

24-
add_executable(binding_derived derived.f90 main_derived.c)
24+
add_library(fortran_derived OBJECT derived.f90)
25+
add_executable(binding_derived main_derived.c $<TARGET_OBJECTS:fortran_derived>)
2526
set_property(TARGET binding_derived PROPERTY LINKER_LANGUAGE C)
2627
add_test(NAME binding_derived COMMAND binding_derived)

test/time/CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
set_property(DIRECTORY PROPERTY LABELS time)
22

3-
add_executable(cxx_fortran_tictoc main.cpp clock.f90)
3+
add_library(fortran_clock OBJECT clock.f90)
4+
add_executable(cxx_fortran_tictoc main.cpp $<TARGET_OBJECTS:fortran_clock>)
45
add_test(NAME C++_Fortran_tictoc COMMAND cxx_fortran_tictoc)
56

67
file(READ strftime.f90 src)
@@ -19,7 +20,10 @@ endforeach()
1920
file(READ strptime.f90 src)
2021
check_source_compiles(Fortran "${src}" HAVE_C_STRPTIME)
2122

22-
target_sources(strptime PRIVATE "$<$<NOT:$<BOOL:${HAVE_C_STRPTIME}>>:strptime.cpp>")
23+
if(NOT HAVE_C_STRPTIME)
24+
add_library(cpp_strptime OBJECT strptime.cpp)
25+
target_sources(strptime PRIVATE $<TARGET_OBJECTS:cpp_strptime>)
26+
endif()
2327

2428
if(TARGET strftime)
2529
target_link_libraries(strftime PRIVATE "$<$<BOOL:${MINGW}>:ucrtbase>")

test/vector/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ target_link_libraries(cxx_fortran_vector PRIVATE vector_fortran)
88

99
add_test(NAME C++_Fortran_vector COMMAND cxx_fortran_vector)
1010

11-
add_executable(fortran_cxx_vector vector.f90
11+
add_library(cpp_vector OBJECT
1212
${PROJECT_SOURCE_DIR}/src/vector/lib.c
1313
${PROJECT_SOURCE_DIR}/src/vector/lib.cpp
1414
)
15+
add_executable(fortran_cxx_vector vector.f90 $<TARGET_OBJECTS:cpp_vector>)
1516
# LINKER_LANGUAGE needed for Linux oneAPI
1617
set_property(TARGET fortran_cxx_vector PROPERTY LINKER_LANGUAGE Fortran)
1718
add_test(NAME Fortran_C++_vector COMMAND fortran_cxx_vector)

0 commit comments

Comments
 (0)