From baaf1ca82af12f9626628cfe7200ed8dd9f9eb41 Mon Sep 17 00:00:00 2001 From: Mizux Seiha Date: Thu, 22 Sep 2022 18:13:13 +0200 Subject: [PATCH] cmake: Fix dotnet build * fix cmake/dotnet.cmake * fix /dotnet/CMakeLists.txt * fix examples/tests/CMakeLists.txt --- cmake/dotnet.cmake | 259 ++++++++++-------- examples/tests/CMakeLists.txt | 2 +- ortools/algorithms/csharp/CMakeLists.txt | 7 + .../constraint_solver/csharp/CMakeLists.txt | 7 + ortools/dotnet/Google.OrTools-full.csproj.in | 29 +- ortools/dotnet/Google.OrTools-local.csproj.in | 27 +- ortools/graph/csharp/CMakeLists.txt | 7 + ortools/init/csharp/CMakeLists.txt | 7 + ortools/linear_solver/csharp/CMakeLists.txt | 7 + ortools/sat/csharp/CMakeLists.txt | 7 + 10 files changed, 228 insertions(+), 131 deletions(-) diff --git a/cmake/dotnet.cmake b/cmake/dotnet.cmake index d7c59abc33..225466e609 100644 --- a/cmake/dotnet.cmake +++ b/cmake/dotnet.cmake @@ -90,52 +90,9 @@ message(STATUS ".Net project: ${DOTNET_PROJECT}") set(DOTNET_PROJECT_DIR ${PROJECT_BINARY_DIR}/dotnet/${DOTNET_PROJECT}) message(STATUS ".Net project build path: ${DOTNET_PROJECT_DIR}") -# Create the native library -add_library(google-ortools-native SHARED "") -set_target_properties(google-ortools-native PROPERTIES - PREFIX "" - POSITION_INDEPENDENT_CODE ON) -# note: macOS is APPLE and also UNIX ! -if(APPLE) - set_target_properties(google-ortools-native PROPERTIES INSTALL_RPATH "@loader_path") - # Xcode fails to build if library doesn't contains at least one source file. - if(XCODE) - file(GENERATE - OUTPUT ${PROJECT_BINARY_DIR}/google-ortools-native/version.cpp - CONTENT "namespace {char* version = \"${PROJECT_VERSION}\";}") - target_sources(google-ortools-native PRIVATE ${PROJECT_BINARY_DIR}/google-ortools-native/version.cpp) - endif() -elseif(UNIX) - set_target_properties(google-ortools-native PROPERTIES INSTALL_RPATH "$ORIGIN") -endif() - -# CMake will remove all '-D' prefix (i.e. -DUSE_FOO become USE_FOO) -#get_target_property(FLAGS ${PROJECT_NAMESPACE}::ortools COMPILE_DEFINITIONS) -set(FLAGS -DUSE_BOP -DUSE_GLOP -DABSL_MUST_USE_RESULT) -if(USE_COINOR) - list(APPEND FLAGS "-DUSE_CBC" "-DUSE_CLP") -endif() -if(USE_GLPK) - list(APPEND FLAGS "-DUSE_GLPK") -endif() -if(USE_PDLP) - list(APPEND FLAGS "-DUSE_PDLP") -endif() -if(USE_SCIP) - list(APPEND FLAGS "-DUSE_SCIP") -endif() -list(APPEND CMAKE_SWIG_FLAGS ${FLAGS} "-I${PROJECT_SOURCE_DIR}") - -# Swig wrap all libraries -foreach(SUBPROJECT IN ITEMS algorithms graph init linear_solver constraint_solver sat util) - add_subdirectory(ortools/${SUBPROJECT}/csharp) - target_link_libraries(google-ortools-native PRIVATE dotnet_${SUBPROJECT}) -endforeach() - -file(COPY ${PROJECT_SOURCE_DIR}/tools/doc/orLogo.png DESTINATION ${PROJECT_BINARY_DIR}/dotnet) -set(DOTNET_LOGO_DIR "${PROJECT_BINARY_DIR}/dotnet") -configure_file(${PROJECT_SOURCE_DIR}/ortools/dotnet/Directory.Build.props.in ${PROJECT_BINARY_DIR}/dotnet/Directory.Build.props) - +################## +## PROTO FILE ## +################## # Generate Protobuf .Net sources set(PROTO_DOTNETS) file(GLOB_RECURSE proto_dotnet_files RELATIVE ${PROJECT_SOURCE_DIR} @@ -176,6 +133,121 @@ foreach(PROTO_FILE IN LISTS proto_dotnet_files) endforeach() add_custom_target(Dotnet${PROJECT_NAME}_proto DEPENDS ${PROTO_DOTNETS} ${PROJECT_NAMESPACE}::ortools) +# Create the native library +add_library(google-ortools-native SHARED "") +set_target_properties(google-ortools-native PROPERTIES + PREFIX "" + POSITION_INDEPENDENT_CODE ON) +# note: macOS is APPLE and also UNIX ! +if(APPLE) + set_target_properties(google-ortools-native PROPERTIES INSTALL_RPATH "@loader_path") + # Xcode fails to build if library doesn't contains at least one source file. + if(XCODE) + file(GENERATE + OUTPUT ${PROJECT_BINARY_DIR}/google-ortools-native/version.cpp + CONTENT "namespace {char* version = \"${PROJECT_VERSION}\";}") + target_sources(google-ortools-native PRIVATE ${PROJECT_BINARY_DIR}/google-ortools-native/version.cpp) + endif() +elseif(UNIX) + set_target_properties(google-ortools-native PROPERTIES INSTALL_RPATH "$ORIGIN") +endif() + +################# +## .Net Test ## +################# +if(BUILD_TESTING) + # add_dotnet_test() + # CMake function to generate and build dotnet test. + # Parameters: + # the dotnet filename + # e.g.: + # add_dotnet_test(FooTests.cs) + function(add_dotnet_test FILE_NAME) + message(STATUS "Configuring test ${FILE_NAME} ...") + get_filename_component(TEST_NAME ${FILE_NAME} NAME_WE) + get_filename_component(WRAPPER_DIR ${FILE_NAME} DIRECTORY) + get_filename_component(COMPONENT_DIR ${WRAPPER_DIR} DIRECTORY) + get_filename_component(COMPONENT_NAME ${COMPONENT_DIR} NAME) + + set(DOTNET_TEST_DIR ${PROJECT_BINARY_DIR}/dotnet/${COMPONENT_NAME}/${TEST_NAME}) + message(STATUS "build path: ${DOTNET_TEST_DIR}") + + configure_file( + ${PROJECT_SOURCE_DIR}/ortools/dotnet/Test.csproj.in + ${DOTNET_TEST_DIR}/${TEST_NAME}.csproj + @ONLY) + + add_custom_command( + OUTPUT ${DOTNET_TEST_DIR}/${TEST_NAME}.cs + COMMAND ${CMAKE_COMMAND} -E make_directory ${DOTNET_TEST_DIR} + COMMAND ${CMAKE_COMMAND} -E copy + ${FILE_NAME} + ${DOTNET_TEST_DIR}/ + MAIN_DEPENDENCY ${FILE_NAME} + VERBATIM + WORKING_DIRECTORY ${DOTNET_TEST_DIR}) + + add_custom_command( + OUTPUT ${DOTNET_TEST_DIR}/timestamp + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} build --nologo -c Release ${TEST_NAME}.csproj + sdfasdad + COMMAND ${CMAKE_COMMAND} -E touch ${DOTNET_TEST_DIR}/timestamp + DEPENDS + ${DOTNET_TEST_DIR}/${TEST_NAME}.csproj + ${DOTNET_TEST_DIR}/${TEST_NAME}.cs + dotnet_package + BYPRODUCTS + ${DOTNET_TEST_DIR}/bin + ${DOTNET_TEST_DIR}/obj + VERBATIM + COMMENT "Compiling .Net ${COMPONENT_NAME}/${TEST_NAME}.cs (${DOTNET_TEST_DIR}/timestamp)" + WORKING_DIRECTORY ${DOTNET_TEST_DIR}) + + add_custom_target(dotnet_${COMPONENT_NAME}_${TEST_NAME} ALL + DEPENDS + ${DOTNET_TEST_DIR}/timestamp + WORKING_DIRECTORY ${DOTNET_TEST_DIR}) + + add_test( + NAME dotnet_${COMPONENT_NAME}_${TEST_NAME} + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} test --nologo -c Release ${TEST_NAME}.csproj + WORKING_DIRECTORY ${DOTNET_TEST_DIR}) + message(STATUS "Configuring test ${FILE_NAME} done") + endfunction() +endif() + +####################### +## DOTNET WRAPPERS ## +####################### +# CMake will remove all '-D' prefix (i.e. -DUSE_FOO become USE_FOO) +#get_target_property(FLAGS ${PROJECT_NAMESPACE}::ortools COMPILE_DEFINITIONS) +set(FLAGS -DUSE_BOP -DUSE_GLOP -DABSL_MUST_USE_RESULT) +if(USE_COINOR) + list(APPEND FLAGS "-DUSE_CBC" "-DUSE_CLP") +endif() +if(USE_GLPK) + list(APPEND FLAGS "-DUSE_GLPK") +endif() +if(USE_PDLP) + list(APPEND FLAGS "-DUSE_PDLP") +endif() +if(USE_SCIP) + list(APPEND FLAGS "-DUSE_SCIP") +endif() +list(APPEND CMAKE_SWIG_FLAGS ${FLAGS} "-I${PROJECT_SOURCE_DIR}") + +# Swig wrap all libraries +foreach(SUBPROJECT IN ITEMS algorithms graph init linear_solver constraint_solver sat util) + add_subdirectory(ortools/${SUBPROJECT}/csharp) + target_link_libraries(google-ortools-native PRIVATE dotnet_${SUBPROJECT}) +endforeach() + +file(COPY ${PROJECT_SOURCE_DIR}/tools/doc/orLogo.png DESTINATION ${PROJECT_BINARY_DIR}/dotnet) +set(DOTNET_LOGO_DIR "${PROJECT_BINARY_DIR}/dotnet") +configure_file(${PROJECT_SOURCE_DIR}/ortools/dotnet/Directory.Build.props.in ${PROJECT_BINARY_DIR}/dotnet/Directory.Build.props) + ############################ ## .Net SNK file ## ############################ @@ -232,8 +304,10 @@ add_custom_command( add_custom_command( OUTPUT ${DOTNET_NATIVE_PROJECT_DIR}/timestamp - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} build -c Release /p:Platform=${DOTNET_PLATFORM} ${DOTNET_NATIVE_PROJECT}.csproj - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} pack -c Release ${DOTNET_NATIVE_PROJECT}.csproj + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} build --nologo -c Release /p:Platform=${DOTNET_PLATFORM} ${DOTNET_NATIVE_PROJECT}.csproj + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} pack --nologo -c Release ${DOTNET_NATIVE_PROJECT}.csproj COMMAND ${CMAKE_COMMAND} -E touch ${DOTNET_NATIVE_PROJECT_DIR}/timestamp DEPENDS ${PROJECT_BINARY_DIR}/dotnet/Directory.Build.props @@ -277,8 +351,10 @@ add_custom_command( add_custom_command( OUTPUT ${DOTNET_PROJECT_DIR}/timestamp - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} build -c Release /p:Platform=${DOTNET_PLATFORM} ${DOTNET_PROJECT}.csproj - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} pack -c Release ${DOTNET_PROJECT}.csproj + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} build --nologo -c Release /p:Platform=${DOTNET_PLATFORM} ${DOTNET_PROJECT}.csproj + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} pack --nologo -c Release ${DOTNET_PROJECT}.csproj COMMAND ${CMAKE_COMMAND} -E touch ${DOTNET_PROJECT_DIR}/timestamp DEPENDS ${PROJECT_BINARY_DIR}/dotnet/or-tools.snk @@ -296,68 +372,6 @@ add_custom_target(dotnet_package ALL ${DOTNET_PROJECT_DIR}/timestamp WORKING_DIRECTORY ${DOTNET_PROJECT_DIR}) -################# -## .Net Test ## -################# -# add_dotnet_test() -# CMake function to generate and build dotnet test. -# Parameters: -# the dotnet filename -# e.g.: -# add_dotnet_test(FooTests.cs) -function(add_dotnet_test FILE_NAME) - message(STATUS "Configuring test ${FILE_NAME} ...") - get_filename_component(TEST_NAME ${FILE_NAME} NAME_WE) - get_filename_component(COMPONENT_DIR ${FILE_NAME} DIRECTORY) - get_filename_component(COMPONENT_NAME ${COMPONENT_DIR} NAME) - - set(DOTNET_TEST_DIR ${PROJECT_BINARY_DIR}/dotnet/${COMPONENT_NAME}/${TEST_NAME}) - message(STATUS "build path: ${DOTNET_TEST_DIR}") - - configure_file( - ${PROJECT_SOURCE_DIR}/ortools/dotnet/Test.csproj.in - ${DOTNET_TEST_DIR}/${TEST_NAME}.csproj - @ONLY) - - add_custom_command( - OUTPUT ${DOTNET_TEST_DIR}/${TEST_NAME}.cs - COMMAND ${CMAKE_COMMAND} -E make_directory ${DOTNET_TEST_DIR} - COMMAND ${CMAKE_COMMAND} -E copy - ${FILE_NAME} - ${DOTNET_TEST_DIR}/ - MAIN_DEPENDENCY ${FILE_NAME} - VERBATIM - WORKING_DIRECTORY ${DOTNET_TEST_DIR}) - - add_custom_command( - OUTPUT ${DOTNET_TEST_DIR}/timestamp - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} build -c Release ${TEST_NAME}.csproj - COMMAND ${CMAKE_COMMAND} -E touch ${DOTNET_TEST_DIR}/timestamp - DEPENDS - ${DOTNET_TEST_DIR}/${TEST_NAME}.csproj - ${DOTNET_TEST_DIR}/${TEST_NAME}.cs - dotnet_package - BYPRODUCTS - ${DOTNET_TEST_DIR}/bin - ${DOTNET_TEST_DIR}/obj - VERBATIM - COMMENT "Compiling .Net ${COMPONENT_NAME}/${TEST_NAME}.cs (${DOTNET_TEST_DIR}/timestamp)" - WORKING_DIRECTORY ${DOTNET_TEST_DIR}) - - add_custom_target(dotnet_${COMPONENT_NAME}_${TEST_NAME} ALL - DEPENDS - ${DOTNET_TEST_DIR}/timestamp - WORKING_DIRECTORY ${DOTNET_TEST_DIR}) - - if(BUILD_TESTING) - add_test( - NAME dotnet_${COMPONENT_NAME}_${TEST_NAME} - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} test --no-build -c Release ${TEST_NAME}.csproj - WORKING_DIRECTORY ${DOTNET_TEST_DIR}) - endif() - message(STATUS "Configuring test ${FILE_NAME} done") -endfunction() - ################### ## .Net Sample ## ################### @@ -394,8 +408,10 @@ function(add_dotnet_sample FILE_NAME) add_custom_command( OUTPUT ${DOTNET_SAMPLE_DIR}/timestamp - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} build -c Release - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} pack -c Release + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} build --nologo -c Release + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} pack --nologo -c Release COMMAND ${CMAKE_COMMAND} -E touch ${DOTNET_SAMPLE_DIR}/timestamp DEPENDS ${DOTNET_SAMPLE_DIR}/${SAMPLE_NAME}.csproj @@ -416,13 +432,15 @@ function(add_dotnet_sample FILE_NAME) if(USE_DOTNET_CORE_31) add_test( NAME dotnet_${COMPONENT_NAME}_${SAMPLE_NAME}_netcoreapp31 - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} run --no-build --framework netcoreapp3.1 -c Release + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} run --framework netcoreapp3.1 -c Release WORKING_DIRECTORY ${DOTNET_SAMPLE_DIR}) endif() if(USE_DOTNET_6) add_test( NAME dotnet_${COMPONENT_NAME}_${SAMPLE_NAME}_net60 - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} run --no-build --framework net6.0 -c Release + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} run --no-build --framework net6.0 -c Release WORKING_DIRECTORY ${DOTNET_SAMPLE_DIR}) endif() endif() @@ -465,7 +483,8 @@ function(add_dotnet_example FILE_NAME) add_custom_command( OUTPUT ${DOTNET_EXAMPLE_DIR}/timestamp - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} build -c Release ${EXAMPLE_NAME}.csproj + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} build --nologo -c Release ${EXAMPLE_NAME}.csproj COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} pack -c Release ${EXAMPLE_NAME}.csproj COMMAND ${CMAKE_COMMAND} -E touch ${DOTNET_EXAMPLE_DIR}/timestamp DEPENDS @@ -488,13 +507,15 @@ function(add_dotnet_example FILE_NAME) if(USE_DOTNET_CORE_31) add_test( NAME dotnet_${COMPONENT_NAME}_${EXAMPLE_NAME}_netcoreapp31 - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} run --no-build --framework netcoreapp3.1 -c Release ${EXAMPLE_NAME}.csproj + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} run --no-build --framework netcoreapp3.1 -c Release ${EXAMPLE_NAME}.csproj WORKING_DIRECTORY ${DOTNET_EXAMPLE_DIR}) endif() if(USE_DOTNET_6) add_test( NAME dotnet_${COMPONENT_NAME}_${EXAMPLE_NAME}_net60 - COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME ${DOTNET_EXECUTABLE} run --no-build --framework net6.0 -c Release ${EXAMPLE_NAME}.csproj + COMMAND ${CMAKE_COMMAND} -E env --unset=TARGETNAME + ${DOTNET_EXECUTABLE} run --no-build --framework net6.0 -c Release ${EXAMPLE_NAME}.csproj WORKING_DIRECTORY ${DOTNET_EXAMPLE_DIR}) endif() endif() diff --git a/examples/tests/CMakeLists.txt b/examples/tests/CMakeLists.txt index e07f3e471c..4b93aed943 100644 --- a/examples/tests/CMakeLists.txt +++ b/examples/tests/CMakeLists.txt @@ -26,6 +26,6 @@ endif() if(BUILD_DOTNET_EXAMPLES) file(GLOB DOTNET_SRCS "*.cs") foreach(FILE_NAME IN LISTS DOTNET_SRCS) - add_dotnet_test(${FILE_NAME}) + add_dotnet_example(${FILE_NAME}) endforeach() endif() diff --git a/ortools/algorithms/csharp/CMakeLists.txt b/ortools/algorithms/csharp/CMakeLists.txt index 7890e95cc4..26f78d49de 100644 --- a/ortools/algorithms/csharp/CMakeLists.txt +++ b/ortools/algorithms/csharp/CMakeLists.txt @@ -29,3 +29,10 @@ set_target_properties(dotnet_algorithms PROPERTIES SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON POSITION_INDEPENDENT_CODE ON) target_link_libraries(dotnet_algorithms PRIVATE ortools::ortools) + +if(BUILD_TESTING) + file(GLOB DOTNET_SRCS "*Tests.cs") + foreach(FILE_NAME IN LISTS DOTNET_SRCS) + add_dotnet_test(${FILE_NAME}) + endforeach() +endif() diff --git a/ortools/constraint_solver/csharp/CMakeLists.txt b/ortools/constraint_solver/csharp/CMakeLists.txt index 1d7511c353..a138da7a8e 100644 --- a/ortools/constraint_solver/csharp/CMakeLists.txt +++ b/ortools/constraint_solver/csharp/CMakeLists.txt @@ -29,3 +29,10 @@ set_target_properties(dotnet_constraint_solver PROPERTIES SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON POSITION_INDEPENDENT_CODE ON) target_link_libraries(dotnet_constraint_solver PRIVATE ortools::ortools) + +if(BUILD_TESTING) + file(GLOB DOTNET_SRCS "*Tests.cs") + foreach(FILE_NAME IN LISTS DOTNET_SRCS) + add_dotnet_test(${FILE_NAME}) + endforeach() +endif() diff --git a/ortools/dotnet/Google.OrTools-full.csproj.in b/ortools/dotnet/Google.OrTools-full.csproj.in index c465206241..0273979cd0 100644 --- a/ortools/dotnet/Google.OrTools-full.csproj.in +++ b/ortools/dotnet/Google.OrTools-full.csproj.in @@ -28,6 +28,10 @@ algorithms/%(Filename)%(Extension) + + graph/%(Filename)%(Extension) + bop/%(Filename)%(Extension) @@ -40,49 +44,62 @@ graph/%(Filename)%(Extension) - + graph/%(Filename)%(Extension) linear_solver/%(Filename)%(Extension) - + linear_solver/%(Filename)%(Extension) constraint_solver/%(Filename)%(Extension) - + constraint_solver/%(Filename)%(Extension) init/%(Filename)%(Extension) + + sat/%(Filename)%(Extension) + sat/%(Filename)%(Extension) + + sat/%(Filename)%(Extension) + sat/%(Filename)%(Extension) - + sat/%(Filename)%(Extension) util/%(Filename)%(Extension) - + util/%(Filename)%(Extension) - + diff --git a/ortools/dotnet/Google.OrTools-local.csproj.in b/ortools/dotnet/Google.OrTools-local.csproj.in index 2c4d9ffea9..b096480696 100644 --- a/ortools/dotnet/Google.OrTools-local.csproj.in +++ b/ortools/dotnet/Google.OrTools-local.csproj.in @@ -28,6 +28,10 @@ algorithms/%(Filename)%(Extension) + + graph/%(Filename)%(Extension) + bop/%(Filename)%(Extension) @@ -40,43 +44,56 @@ graph/%(Filename)%(Extension) - + graph/%(Filename)%(Extension) linear_solver/%(Filename)%(Extension) - + linear_solver/%(Filename)%(Extension) constraint_solver/%(Filename)%(Extension) - + constraint_solver/%(Filename)%(Extension) init/%(Filename)%(Extension) + + sat/%(Filename)%(Extension) + sat/%(Filename)%(Extension) + + sat/%(Filename)%(Extension) + sat/%(Filename)%(Extension) - + sat/%(Filename)%(Extension) util/%(Filename)%(Extension) - + util/%(Filename)%(Extension) diff --git a/ortools/graph/csharp/CMakeLists.txt b/ortools/graph/csharp/CMakeLists.txt index e22bbda067..84a03ed31a 100644 --- a/ortools/graph/csharp/CMakeLists.txt +++ b/ortools/graph/csharp/CMakeLists.txt @@ -29,3 +29,10 @@ set_target_properties(dotnet_graph PROPERTIES SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON POSITION_INDEPENDENT_CODE ON) target_link_libraries(dotnet_graph PRIVATE ortools::ortools) + +if(BUILD_TESTING) + file(GLOB DOTNET_SRCS "*Tests.cs") + foreach(FILE_NAME IN LISTS DOTNET_SRCS) + add_dotnet_test(${FILE_NAME}) + endforeach() +endif() diff --git a/ortools/init/csharp/CMakeLists.txt b/ortools/init/csharp/CMakeLists.txt index 59541074e2..ca85ded837 100644 --- a/ortools/init/csharp/CMakeLists.txt +++ b/ortools/init/csharp/CMakeLists.txt @@ -29,3 +29,10 @@ set_target_properties(dotnet_init PROPERTIES SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON POSITION_INDEPENDENT_CODE ON) target_link_libraries(dotnet_init PRIVATE ortools::ortools) + +if(BUILD_TESTING) + file(GLOB DOTNET_SRCS "*Tests.cs") + foreach(FILE_NAME IN LISTS DOTNET_SRCS) + add_dotnet_test(${FILE_NAME}) + endforeach() +endif() diff --git a/ortools/linear_solver/csharp/CMakeLists.txt b/ortools/linear_solver/csharp/CMakeLists.txt index 97181aa605..5d28c67e86 100644 --- a/ortools/linear_solver/csharp/CMakeLists.txt +++ b/ortools/linear_solver/csharp/CMakeLists.txt @@ -29,3 +29,10 @@ set_target_properties(dotnet_linear_solver PROPERTIES SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON POSITION_INDEPENDENT_CODE ON) target_link_libraries(dotnet_linear_solver PRIVATE ortools::ortools) + +if(BUILD_TESTING) + file(GLOB DOTNET_SRCS "*Tests.cs") + foreach(FILE_NAME IN LISTS DOTNET_SRCS) + add_dotnet_test(${FILE_NAME}) + endforeach() +endif() diff --git a/ortools/sat/csharp/CMakeLists.txt b/ortools/sat/csharp/CMakeLists.txt index ced0424a95..423fad1f56 100644 --- a/ortools/sat/csharp/CMakeLists.txt +++ b/ortools/sat/csharp/CMakeLists.txt @@ -29,3 +29,10 @@ set_target_properties(dotnet_sat PROPERTIES SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON POSITION_INDEPENDENT_CODE ON) target_link_libraries(dotnet_sat PRIVATE ortools::ortools) + +if(BUILD_TESTING) + file(GLOB DOTNET_SRCS "*Tests.cs") + foreach(FILE_NAME IN LISTS DOTNET_SRCS) + add_dotnet_test(${FILE_NAME}) + endforeach() +endif()