cmake: Add init

This commit is contained in:
Mizux Seiha
2021-03-21 16:19:12 +01:00
parent 383d7c4c79
commit 4a025e23c0
9 changed files with 103 additions and 7 deletions

View File

@@ -214,6 +214,7 @@ foreach(SUBPROJECT IN ITEMS
glop
graph
gurobi
init
linear_solver
lp_data
port

View File

@@ -95,7 +95,7 @@ else()
endif()
set(DOTNET_NATIVE_PROJECT ${DOTNET_PROJECT}.runtime.${RUNTIME_IDENTIFIER})
foreach(SUBPROJECT IN ITEMS algorithms graph linear_solver constraint_solver sat util)
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()

View File

@@ -116,7 +116,7 @@ elseif(UNIX)
endif()
# Swig wrap all libraries
foreach(SUBPROJECT IN ITEMS algorithms graph linear_solver constraint_solver sat util)
foreach(SUBPROJECT IN ITEMS algorithms graph init linear_solver constraint_solver sat util)
add_subdirectory(ortools/${SUBPROJECT}/java)
target_link_libraries(jniortools PRIVATE jni${SUBPROJECT})
endforeach()

View File

@@ -109,7 +109,7 @@ if(USE_COINOR)
endif()
list(APPEND CMAKE_SWIG_FLAGS ${FLAGS} "-I${PROJECT_SOURCE_DIR}")
foreach(SUBPROJECT IN ITEMS algorithms graph linear_solver constraint_solver sat data util)
foreach(SUBPROJECT IN ITEMS algorithms graph init linear_solver constraint_solver sat data util)
add_subdirectory(ortools/${SUBPROJECT}/python)
endforeach()
@@ -118,14 +118,15 @@ endforeach()
#######################
#file(MAKE_DIRECTORY python/${PROJECT_NAME})
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME})
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/util)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/constraint_solver)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/init)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/algorithms)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/graph)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/linear_solver)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/constraint_solver)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/sat)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/sat/python)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/graph)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/algorithms)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/data)
file(COPY ortools/__init__.py DESTINATION python/${PROJECT_NAME}/util)
file(COPY
ortools/linear_solver/linear_solver_natural_api.py
@@ -163,6 +164,7 @@ add_custom_target(python_package ALL
# Don't need to copy static lib on windows.
COMMAND ${CMAKE_COMMAND} -E $<IF:$<BOOL:${UNIX}>,copy,true>
$<$<BOOL:${UNIX}>:$<TARGET_SONAME_FILE:ortools>> ${PROJECT_NAME}/.libs
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:pywrapinit> ${PROJECT_NAME}/init
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:pywrapknapsack_solver> ${PROJECT_NAME}/algorithms
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:pywrapgraph> ${PROJECT_NAME}/graph
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:pywrapcp> ${PROJECT_NAME}/constraint_solver

View File

@@ -0,0 +1,20 @@
file(GLOB _SRCS "*.h")
set(NAME ${PROJECT_NAME}_init)
# Will be merge in libortools.so
#add_library(${NAME} STATIC ${_SRCS})
add_library(${NAME} OBJECT ${_SRCS})
set_target_properties(${NAME} PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
POSITION_INDEPENDENT_CODE ON
)
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
${PROJECT_BINARY_DIR})
target_link_libraries(${NAME} PRIVATE
absl::flags
protobuf::libprotobuf
${PROJECT_NAME}::proto)
#add_library(${PROJECT_NAME}::init ALIAS ${NAME})

View File

@@ -0,0 +1,18 @@
set_property(SOURCE init.i PROPERTY CPLUSPLUS ON)
set_property(SOURCE init.i PROPERTY SWIG_MODULE_NAME operations_research_init)
set_property(SOURCE init.i PROPERTY COMPILE_DEFINITIONS
${OR_TOOLS_COMPILE_DEFINITIONS} ABSL_MUST_USE_RESULT)
set_property(SOURCE init.i PROPERTY COMPILE_OPTIONS
-namespace ${DOTNET_PROJECT}.init
-dllimport google-ortools-native)
swig_add_library(dotnet_init
TYPE OBJECT
LANGUAGE csharp
OUTPUT_DIR ${PROJECT_BINARY_DIR}/dotnet/${PROJECT_NAME}/init
SOURCES init.i)
#target_include_directories(dotnet_init PRIVATE ${DOTNET_INCLUDE_DIRS})
set_target_properties(dotnet_init PROPERTIES
SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
POSITION_INDEPENDENT_CODE ON)
target_link_libraries(dotnet_init PRIVATE ortools::ortools)

View File

@@ -0,0 +1,18 @@
set_property(SOURCE init.i PROPERTY CPLUSPLUS ON)
set_property(SOURCE init.i PROPERTY SWIG_MODULE_NAME main)
set_property(SOURCE init.i PROPERTY COMPILE_DEFINITIONS
${OR_TOOLS_COMPILE_DEFINITIONS} ABSL_MUST_USE_RESULT)
set_property(SOURCE init.i PROPERTY COMPILE_OPTIONS
-package ${JAVA_PACKAGE}.init)
swig_add_library(jniinit
TYPE OBJECT
LANGUAGE java
OUTPUT_DIR
${PROJECT_BINARY_DIR}/java/${JAVA_PROJECT}/${JAVA_PACKAGE_PATH}/init
SOURCES init.i)
target_include_directories(jniinit PRIVATE ${JNI_INCLUDE_DIRS})
set_target_properties(jniinit PROPERTIES
SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
POSITION_INDEPENDENT_CODE ON)
target_link_libraries(jniinit PRIVATE ortools::ortools)

View File

@@ -0,0 +1,36 @@
set_property(SOURCE graph.i PROPERTY CPLUSPLUS ON)
set_property(SOURCE graph.i PROPERTY SWIG_MODULE_NAME pywrapgraph)
set_property(SOURCE graph.i PROPERTY COMPILE_DEFINITIONS
${OR_TOOLS_COMPILE_DEFINITIONS} ABSL_MUST_USE_RESULT)
swig_add_library(pywrapgraph
TYPE SHARED
LANGUAGE python
OUTPUT_DIR ${PROJECT_BINARY_DIR}/python/${PROJECT_NAME}/graph
SOURCES graph.i)
target_include_directories(pywrapgraph PRIVATE ${Python_INCLUDE_DIRS})
set_property(TARGET pywrapgraph PROPERTY SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON)
if(Python_VERSION VERSION_GREATER_EQUAL 3)
target_compile_definitions(pywrapgraph PUBLIC "PY3")
endif()
# note: macOS is APPLE and also UNIX !
if(APPLE)
set_target_properties(pywrapgraph PROPERTIES
SUFFIX ".so"
INSTALL_RPATH "@loader_path;@loader_path/../../${PROJECT_NAME}/.libs")
set_property(TARGET pywrapgraph APPEND PROPERTY
LINK_FLAGS "-flat_namespace -undefined suppress")
elseif(UNIX)
set_target_properties(pywrapgraph PROPERTIES
INSTALL_RPATH "$ORIGIN:$ORIGIN/../../${PROJECT_NAME}/.libs")
endif()
target_link_libraries(pywrapgraph PRIVATE ortools::ortools)
# Variable PYTHON_LIBRARIES can contains keyword `optimized`
# which won't be interpreted inside a generator expression.
# i.e. we can't use: $<$<PLATFORM_ID:Windows>:${PYTHON_LIBRARIES}>
# see: https://cmake.org/cmake/help/git-stage/command/target_link_libraries.html#command:target_link_libraries
if(MSVC)
target_link_libraries(pywrapgraph PRIVATE ${Python_LIBRARIES})
endif()

View File

@@ -47,6 +47,7 @@ setup(
],
package_data={
'@PROJECT_NAME@':[$<$<NOT:$<PLATFORM_ID:Windows>>:'.libs/*', '../$<TARGET_SONAME_FILE_NAME:ortools>'>],
'@PROJECT_NAME@.init':['$<TARGET_FILE_NAME:pywrapinit>'],
'@PROJECT_NAME@.constraint_solver':['$<TARGET_FILE_NAME:pywrapcp>', '*.pyi'],
'@PROJECT_NAME@.linear_solver':['$<TARGET_FILE_NAME:pywraplp>', '*.pyi'],
'@PROJECT_NAME@.sat':['$<TARGET_FILE_NAME:pywrapsat>', '*.pyi'],