Skip to content

Commit

Permalink
Use OpenCASCADE project configuration script to configure Chrono::Cas…
Browse files Browse the repository at this point in the history
…cade
  • Loading branch information
rserban committed Feb 15, 2022
1 parent f5e2278 commit 31343a5
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 104 deletions.
7 changes: 5 additions & 2 deletions cmake/ChronoConfig.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -342,9 +342,12 @@ foreach(COMPONENT ${Chrono_FIND_COMPONENTS})

elseif(${COMPONENT_UPPER} MATCHES "CASCADE")

list(APPEND CHRONO_INCLUDE_DIRS "@CASCADE_INCLUDE_DIR@")
set(CHRONO_CXX_FLAGS "${CHRONO_CXX_FLAGS} @OpenCASCADE_CXX_FLAGS@")
set(CHRONO_LINKER_FLAGS "${CHRONO_LINKER_FLAGS} @OpenCASCADE_LINKER_FLAGS@")

list(APPEND CHRONO_INCLUDE_DIRS "@OpenCASCADE_INCLUDE_DIR@")
list(PREPEND CHRONO_LIB_NAMES "ChronoEngine_cascade")
list(APPEND CHRONO_LIBRARIES "@CASCADE_LIBRARIES@")
list(APPEND CHRONO_LIBRARIES "@OpenCASCADE_LIBRARIES@")
list(APPEND CHRONO_DLL_NAMES "ChronoEngine_cascade.dll")

elseif(${COMPONENT_UPPER} MATCHES "COSIMULATION")
Expand Down
125 changes: 50 additions & 75 deletions src/chrono_cascade/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,25 @@
option(ENABLE_MODULE_CASCADE "Enable the Chrono Cascade module" OFF)

# Return now if this module is not enabled
IF(NOT ENABLE_MODULE_CASCADE)
MARK_AS_ADVANCED(FORCE CASCADE_ROOT)
MARK_AS_ADVANCED(FORCE CASCADE_INCLUDE_DIR)
MARK_AS_ADVANCED(FORCE CASCADE_LIBDIR)
RETURN()
ENDIF()
if(NOT ENABLE_MODULE_CASCADE)
mark_as_advanced(FORCE OpenCASCADE_DIR)
return()
endif()

MESSAGE(STATUS "==== Chrono Cascade module ====")
message(STATUS "==== Chrono Cascade module ====")

MARK_AS_ADVANCED(CLEAR CASCADE_ROOT)
MARK_AS_ADVANCED(CLEAR CASCADE_INCLUDE_DIR)
MARK_AS_ADVANCED(CLEAR CASCADE_LIBDIR)
mark_as_advanced(CLEAR OpenCASCADE_DIR)

#-----------------------------------------------------------------------------
# LIST THE FILES THAT MAKE THE OpenCASCADE LIBRARY

SET(ChronoEngine_CASCADE_SOURCES
set(ChronoEngine_CASCADE_SOURCES
ChCascadeMeshTools.cpp
ChCascadeDoc.cpp
ChCascadeShapeAsset.cpp
)

SET(ChronoEngine_CASCADE_HEADERS
set(ChronoEngine_CASCADE_HEADERS
ChApiCASCADE.h
ChCascadeTriangulate.h
ChCascadeMeshTools.h
Expand All @@ -44,69 +40,50 @@ else()
set(ChronoEngine_CASCADE_HEADERS_IRRLICHT "")
endif()

SOURCE_GROUP("" FILES
source_group("" FILES
${ChronoEngine_CASCADE_SOURCES}
${ChronoEngine_CASCADE_HEADERS}
${ChronoEngine_CASCADE_HEADERS_IRRLICHT}
)

#-----------------------------------------------------------------------------
# Find OpenCASCADE

SET(CASCADE_ROOT "" CACHE PATH "Path to OpenCASCADE SDK installation.")
SET(CASCADE_LIBDIR "" CACHE PATH "Path to the OpenCASCADE library directory.")
find_package(OpenCASCADE CONFIG)

IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
FIND_PATH(CASCADE_INCLUDE_DIR Standard_Version.hxx
HINTS ${CASCADE_INCLUDE_DIR} "${CASCADE_ROOT}/inc" "${CASCADE_ROOT}/include" "${CASCADE_ROOT}/include/oce"
)
FILE(GLOB CASCADE_LIBRARIES "${CASCADE_LIBDIR}/TK*.lib")
ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
FIND_PATH(CASCADE_INCLUDE_DIR Standard_Version.hxx
HINTS ${CASCADE_INCLUDE_DIR} "${CASCADE_ROOT}/inc" "${CASCADE_ROOT}/include"
PATHS
/usr/include/oce
/usr/local/include/oce
/opt/oce/include
/opt/oce/inc
)
FILE(GLOB CASCADE_LIBRARIES "${CASCADE_ROOT}/lib/libTK*.so" "${CASCADE_ROOT}/Linux/lib/libTK*.so" "${CASCADE_LIBDIR}/libTK*.so")
ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
FIND_PATH(CASCADE_INCLUDE_DIR Standard_Version.hxx
PATHS
/usr/include/oce
/usr/local/include/oce
/opt/oce/include
/opt/oce/inc
)
FIND_LIBRARY(OCE_LIBRARY TKernel
/usr/lib/oce
/usr/local/lib/oce
/opt/oce/lib
)
GET_FILENAME_COMPONENT(OCE_LIBRARY_DIR ${OCE_LIBRARY} PATH)
if (NOT OpenCASCADE_FOUND)
message("Could not find OpenCASCADE or one of its required modules")
return()
endif()

FILE(GLOB CASCADE_LIBRARIES "${OCE_LIBRARY_DIR}/libTK*.dylib")
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
FILE(GLOB OpenCASCADE_LIBRARIES "${OpenCASCADE_LIBRARY_DIR}/TK*.lib")
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
FILE(GLOB OpenCASCADE_LIBRARIES "${OpenCASCADE_LIBRARY_DIR}/libTK*.so")
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
FILE(GLOB OpenCASCADE_LIBRARIES "${OpenCASCADE_LIBRARY_DIR}/libTK*.dylib")
#add_definitions( -DHAVE_LIMITS_H -DHAVE_IOSTREAM )
ENDIF()

IF(NOT EXISTS "${CASCADE_INCLUDE_DIR}" OR NOT EXISTS "${CASCADE_LIBDIR}")
message("Cannot find OpenCASCADE directories.")
ENDIF()
endif()

message(STATUS " OpenCASCADE include directory: ${CASCADE_INCLUDE_DIR}")
message(STATUS " OpenCASCADE library directory: ${CASCADE_LIBDIR}")
message(STATUS " OpenCASCADE libraries: ${CASCADE_LIBRARIES}")
message(STATUS " OpenCASCADE include directory: ${OpenCASCADE_INCLUDE_DIR}")
message(STATUS " OpenCASCADE library directory: ${OpenCASCADE_LIBRARY_DIR}")
message(STATUS " OpenCASCADE C flags: ${OpenCASCADE_C_FLAGS}")
message(STATUS " OpenCASCADE C++ flags: ${OpenCASCADE_CXX_FLAGS}")
message(STATUS " OpenCASCADE linker flags: ${OpenCASCADE_LINKER_FLAGS}")
message(STATUS " OpenCASCADE libraries: ${OpenCASCADE_LIBRARIES}")

# Let some variables be visible also from outside this directory, using the PARENT_SCOPE trick
# Make variables visible also from outside this directory

SET (CASCADE_INCLUDE_DIR "${CASCADE_INCLUDE_DIR}" PARENT_SCOPE )
SET (CASCADE_LIBRARIES "${CASCADE_LIBRARIES}" PARENT_SCOPE )
set(OpenCASCADE_INCLUDE_DIR "${OpenCASCADE_INCLUDE_DIR}" PARENT_SCOPE)
set(OpenCASCADE_CXX_FLAGS "${OpenCASCADE_CXX_FLAGS}" PARENT_SCOPE)
set(OpenCASCADE_LINKER_FLAGS "${OpenCASCADE_LINKER_FLAGS}" PARENT_SCOPE)
set(OpenCASCADE_LIBRARIES "${OpenCASCADE_LIBRARIES}" PARENT_SCOPE)

#-----------------------------------------------------------------------------
# Add the ChronoEngine_cascade library

include_directories(${CASCADE_INCLUDE_DIR})
set(CXX_FLAGS ${CH_CXX_FLAGS})
include_directories(${OpenCASCADE_INCLUDE_DIR})
set(CXX_FLAGS "${CH_CXX_FLAGS} ${OpenCASCADE_CXX_FLAGS}")
set(LIBRARIES "ChronoEngine")

if(ENABLE_MODULE_IRRLICHT)
Expand All @@ -115,36 +92,34 @@ if(ENABLE_MODULE_IRRLICHT)
include_directories(${CH_IRRLICHTINC})
endif()

ADD_LIBRARY(ChronoEngine_cascade SHARED
add_library(ChronoEngine_cascade SHARED
${ChronoEngine_CASCADE_SOURCES}
${ChronoEngine_CASCADE_HEADERS}
${ChronoEngine_CASCADE_HEADERS_IRRLICHT})

SET_TARGET_PROPERTIES(ChronoEngine_cascade PROPERTIES
set_target_properties(ChronoEngine_cascade PROPERTIES
COMPILE_FLAGS "${CXX_FLAGS}"
LINK_FLAGS "${CH_LINKERFLAG_SHARED}")

IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
ADD_DEFINITIONS( "/DWNT" )
ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
ADD_DEFINITIONS(-DHAVE_IOSTREAM)
ADD_DEFINITIONS(-DHAVE_LIMITS_H)
ENDIF()
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
add_definitions( "/DWNT" )
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
add_definitions(-DHAVE_IOSTREAM)
add_definitions(-DHAVE_LIMITS_H)
endif()

target_compile_definitions(ChronoEngine_cascade PRIVATE "CH_API_COMPILE_CASCADE")
target_compile_definitions(ChronoEngine_cascade PRIVATE "CH_IGNORE_DEPRECATED")


TARGET_LINK_LIBRARIES(ChronoEngine_cascade
${CASCADE_LIBRARIES}
target_link_libraries(ChronoEngine_cascade
${OpenCASCADE_LIBRARIES}
${LIBRARIES})
ADD_DEPENDENCIES(ChronoEngine_cascade ChronoEngine)

INSTALL(TARGETS ChronoEngine_cascade
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
install(TARGETS ChronoEngine_cascade
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)

INSTALL(FILES ${ChronoEngine_CASCADE_HEADERS} ${ChronoEngine_CASCADE_HEADERS_IRRLICHT}
install(FILES ${ChronoEngine_CASCADE_HEADERS} ${ChronoEngine_CASCADE_HEADERS_IRRLICHT}
DESTINATION include/chrono_cascade)

2 changes: 1 addition & 1 deletion src/chrono_python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,7 @@ if(ENABLE_MODULE_CASCADE)
cascade/ChModuleCascade.i
)

include_directories(${CASCADE_INCLUDE_DIR})
include_directories(${OpenCASCADE_INCLUDE_DIR})

set_source_files_properties(${CHPY_CASCADE_MODULE_FILE} PROPERTIES CPLUSPLUS ON)

Expand Down
49 changes: 23 additions & 26 deletions src/demos/cascade/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
#--------------------------------------------------------------
# Additional include paths and settings
# Additional paths and settings

INCLUDE_DIRECTORIES("${CASCADE_INCLUDE_DIR}")
include_directories(${OpenCASCADE_INCLUDE_DIR})
#link_directories(${OpenCASCADE_LIBRARY_DIR})

IF(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
ADD_DEFINITIONS( "/DWNT" )
ENDIF()
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
add_definitions( "/DWNT" )
endif()

IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
ADD_DEFINITIONS(-DHAVE_IOSTREAM)
ADD_DEFINITIONS(-DHAVE_LIMITS_H)
ENDIF()
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
add_definitions(-DHAVE_IOSTREAM)
add_definitions(-DHAVE_LIMITS_H)
endif()

#--------------------------------------------------------------
# List of all Cascade demos which also require Irrlicht support
Expand All @@ -22,36 +23,32 @@ set(DEMOS_CAS
demo_CAS_profile
)

message(STATUS "Demo programs for CASCADE module...")
message(STATUS "Demo programs for OpenCASCADE module...")

#--------------------------------------------------------------
# Add demo executables that use Irrlicht

if(ENABLE_MODULE_IRRLICHT)

INCLUDE_DIRECTORIES("${CH_IRRLICHTINC}")
include_directories(${CH_IRRLICHTINC})

FOREACH(PROGRAM ${DEMOS_CAS})
MESSAGE(STATUS "...add ${PROGRAM}")
foreach(PROGRAM ${DEMOS_CAS})
message(STATUS "...add ${PROGRAM}")

ADD_EXECUTABLE(${PROGRAM} "${PROGRAM}.cpp")
SOURCE_GROUP("" FILES "${PROGRAM}.cpp")
add_executable(${PROGRAM} "${PROGRAM}.cpp")
source_group("" FILES "${PROGRAM}.cpp")

SET_TARGET_PROPERTIES(${PROGRAM} PROPERTIES
set_target_properties(${PROGRAM} PROPERTIES
FOLDER demos
COMPILE_FLAGS "${CH_CXX_FLAGS} ${CH_IRRLICHT_CXX_FLAGS}"
LINK_FLAGS "${CH_LINKERFLAG_EXE}")
SET_PROPERTY(TARGET ${PROGRAM} PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:${PROGRAM}>")
TARGET_LINK_LIBRARIES(${PROGRAM}
ChronoEngine
ChronoEngine_cascade
ChronoEngine_irrlicht)
ADD_DEPENDENCIES(${PROGRAM}
COMPILE_FLAGS "${CH_CXX_FLAGS} ${OpenCASCADE_CXX_FLAGS} ${CH_IRRLICHT_CXX_FLAGS}"
LINK_FLAGS "${CH_LINKERFLAG_EXE} ${OpenCASCADE_LINKER_FLAGS}")
set_property(TARGET ${PROGRAM} PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "$<TARGET_FILE_DIR:${PROGRAM}>")
target_link_libraries(${PROGRAM}
ChronoEngine
ChronoEngine_cascade
ChronoEngine_irrlicht)

INSTALL(TARGETS ${PROGRAM} DESTINATION ${CH_INSTALL_DEMO})
ENDFOREACH()
install(TARGETS ${PROGRAM} DESTINATION ${CH_INSTALL_DEMO})
endforeach()

endif()

0 comments on commit 31343a5

Please sign in to comment.