Skip to content

Commit

Permalink
Review CMake files, be a bit more diligent, set so versions
Browse files Browse the repository at this point in the history
* Set project version (about time I got around to put some versioning in
  this here.  Benefits com in a later bullet, helps prevent dll hell.
* Stricter requirements: actually request specific versions.
* Get rid of globbing.  Make sure source files are captured exactly.
  Leverage `add_subdirectory` with child `CMakeLists.txt` to add the
  sources on a per directory basis.
* Try a more modern CMake approach to the build generation with a heavy
  emphasis on targets.  This means `include_directories` is gone.
* Set target so versions.  Can now safely distinguish between so's.
  • Loading branch information
rgcv committed Aug 14, 2020
1 parent 64587db commit 91382f4
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 21 deletions.
60 changes: 39 additions & 21 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,29 +1,47 @@
project(JlCGAL)

cmake_minimum_required(VERSION 3.1)
set(CMAKE_MACOSX_RPATH 1)

project(JlCGAL
VERSION 0.15.0
LANGUAGES CXX)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")

find_package(CGAL REQUIRED COMPONENTS Core)
include(${CGAL_USE_FILE})
find_package(CGAL 5.0.3 CONFIG REQUIRED COMPONENTS Core)

find_package(JlCxx REQUIRED)
find_package(JlCxx 0.8 REQUIRED)
get_target_property(JlCxx_location JlCxx::cxxwrap_julia LOCATION)
get_filename_component(JlCxx_location ${JlCxx_location} DIRECTORY)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib;${JlCxx_location}")

include_directories(include)
file(GLOB_RECURSE JLCGAL_SOURCES src *.cpp)

add_library(cgal_julia_exact SHARED ${JLCGAL_SOURCES})
add_library(cgal_julia_inexact SHARED ${JLCGAL_SOURCES})
target_compile_definitions(cgal_julia_exact PUBLIC JLCGAL_EXACT_CONSTRUCTIONS)
target_link_libraries(cgal_julia_exact JlCxx::cxxwrap_julia ${CGAL_LIBRARIES})
target_link_libraries(cgal_julia_inexact JlCxx::cxxwrap_julia ${CGAL_LIBRARIES})

install(TARGETS
cgal_julia_exact
cgal_julia_inexact
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin)
set(JLCGAL_TARGETS cgal_julia_exact cgal_julia_inexact)
set(JLCGAL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(JLCGAL_HEADERS
${JLCGAL_INCLUDE_DIR}/io.hpp
${JLCGAL_INCLUDE_DIR}/global_kernel_functions.hpp
${JLCGAL_INCLUDE_DIR}/kernel.hpp
${JLCGAL_INCLUDE_DIR}/kernel_conversion.hpp
${JLCGAL_INCLUDE_DIR}/polygon_2.hpp
${JLCGAL_INCLUDE_DIR}/triangulation.hpp
${JLCGAL_INCLUDE_DIR}/utils.hpp
)
add_subdirectory(src) # let each directory take care of the sources

foreach(tgt IN ITEMS ${JLCGAL_TARGETS})
add_library(${tgt} SHARED ${JLCGAL_SOURCES} ${JLCGAL_HEADERS})
set_target_properties(${tgt} PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR})
target_link_libraries(${tgt}
JlCxx::cxxwrap_julia
CGAL::CGAL
CGAL::CGAL_Core)
target_include_directories(${tgt} PRIVATE ${JLCGAL_INCLUDE_DIR})
target_sources(${tgt} PRIVATE ${JLCGAL_SOURCES})
endforeach(tgt)

target_compile_definitions(cgal_julia_exact PRIVATE JLCGAL_EXACT_CONSTRUCTIONS)

install(TARGETS ${JLCGAL_TARGETS}
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin)
15 changes: 15 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
add_subdirectory(kernel)
add_subdirectory(global_kernel_functions)

set(JLCGAL_SOURCES ${JLCGAL_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/algebra.cpp
${CMAKE_CURRENT_LIST_DIR}/cgal_julia.cpp
${CMAKE_CURRENT_LIST_DIR}/convex_hull_2.cpp
${CMAKE_CURRENT_LIST_DIR}/global_kernel_functions.cpp
${CMAKE_CURRENT_LIST_DIR}/kernel.cpp
${CMAKE_CURRENT_LIST_DIR}/polygon_2.cpp
${CMAKE_CURRENT_LIST_DIR}/principal_component_analysis.cpp
${CMAKE_CURRENT_LIST_DIR}/straight_skeleton_2.cpp
${CMAKE_CURRENT_LIST_DIR}/triangulation_2.cpp
${CMAKE_CURRENT_LIST_DIR}/voronoi_diagram_2.cpp
PARENT_SCOPE)
6 changes: 6 additions & 0 deletions src/global_kernel_functions/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
set(JLCGAL_SOURCES ${JLCGAL_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/global_ck_functions.cpp
${CMAKE_CURRENT_LIST_DIR}/global_lk_functions.cpp
${CMAKE_CURRENT_LIST_DIR}/global_sk_functions.cpp

PARENT_SCOPE)
33 changes: 33 additions & 0 deletions src/kernel/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
set(JLCGAL_SOURCES ${JLCGAL_SOURCES}
${CMAKE_CURRENT_LIST_DIR}/aff_transformation_2.cpp
${CMAKE_CURRENT_LIST_DIR}/bbox_2.cpp
${CMAKE_CURRENT_LIST_DIR}/circle_2.cpp
${CMAKE_CURRENT_LIST_DIR}/circular_arc_2.cpp
${CMAKE_CURRENT_LIST_DIR}/direction_2.cpp
${CMAKE_CURRENT_LIST_DIR}/iso_rectangle_2.cpp
${CMAKE_CURRENT_LIST_DIR}/line_2.cpp
${CMAKE_CURRENT_LIST_DIR}/point_2.cpp
${CMAKE_CURRENT_LIST_DIR}/ray_2.cpp
${CMAKE_CURRENT_LIST_DIR}/segment_2.cpp
${CMAKE_CURRENT_LIST_DIR}/triangle_2.cpp
${CMAKE_CURRENT_LIST_DIR}/vector_2.cpp
${CMAKE_CURRENT_LIST_DIR}/weighted_point_2.cpp

${CMAKE_CURRENT_LIST_DIR}/aff_transformation_3.cpp
${CMAKE_CURRENT_LIST_DIR}/bbox_3.cpp
${CMAKE_CURRENT_LIST_DIR}/circle_3.cpp
${CMAKE_CURRENT_LIST_DIR}/circular_arc_3.cpp
${CMAKE_CURRENT_LIST_DIR}/direction_3.cpp
${CMAKE_CURRENT_LIST_DIR}/iso_cuboid_3.cpp
${CMAKE_CURRENT_LIST_DIR}/line_3.cpp
${CMAKE_CURRENT_LIST_DIR}/plane_3.cpp
${CMAKE_CURRENT_LIST_DIR}/point_3.cpp
${CMAKE_CURRENT_LIST_DIR}/ray_3.cpp
${CMAKE_CURRENT_LIST_DIR}/segment_3.cpp
${CMAKE_CURRENT_LIST_DIR}/sphere_3.cpp
${CMAKE_CURRENT_LIST_DIR}/tetrahedron_3.cpp
${CMAKE_CURRENT_LIST_DIR}/triangle_3.cpp
${CMAKE_CURRENT_LIST_DIR}/vector_3.cpp
${CMAKE_CURRENT_LIST_DIR}/weighted_point_3.cpp

PARENT_SCOPE)

0 comments on commit 91382f4

Please sign in to comment.