Files
opennurbs/CMakeLists.txt
2024-06-03 08:02:33 -07:00

629 lines
18 KiB
CMake

cmake_minimum_required (VERSION 3.16)
#set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD)")
project(opennurbs CXX)
# specify the C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
if (UNIX AND NOT APPLE)
set(LINUX TRUE)
endif()
set( OPENNURBS_PUBLIC_HEADERS
opennurbs.h
opennurbs_3dm.h
opennurbs_3dm_attributes.h
opennurbs_3dm_properties.h
opennurbs_3dm_settings.h
opennurbs_annotationbase.h
opennurbs_apple_nsfont.h
opennurbs_arc.h
opennurbs_arccurve.h
opennurbs_archivable_dictionary.h
opennurbs_archive.h
opennurbs_array.h
opennurbs_array_defs.h
opennurbs_base32.h
opennurbs_base64.h
opennurbs_beam.h
opennurbs_bezier.h
opennurbs_bitmap.h
opennurbs_bounding_box.h
opennurbs_box.h
opennurbs_brep.h
opennurbs_circle.h
opennurbs_color.h
opennurbs_compress.h
opennurbs_compstat.h
opennurbs_cone.h
opennurbs_convex_poly.h
opennurbs_crc.h
opennurbs_curve.h
opennurbs_curveonsurface.h
opennurbs_curveproxy.h
opennurbs_cylinder.h
opennurbs_date.h
opennurbs_decals.h
opennurbs_defines.h
opennurbs_detail.h
opennurbs_dimension.h
opennurbs_dimensionformat.h
opennurbs_dimensionstyle.h
opennurbs_dithering.h
opennurbs_ellipse.h
opennurbs_embedded_file.h
opennurbs_error.h
opennurbs_evaluate_nurbs.h
opennurbs_extensions.h
opennurbs_file_utilities.h
opennurbs_font.h
opennurbs_fpoint.h
opennurbs_freetype.h
opennurbs_freetype_include.h
opennurbs_fsp.h
opennurbs_fsp_defs.h
opennurbs_function_list.h
opennurbs_geometry.h
opennurbs_gl.h
opennurbs_ground_plane.h
opennurbs_group.h
opennurbs_hash_table.h
opennurbs_hatch.h
opennurbs_hsort_template.h
opennurbs_instance.h
opennurbs_internal_V2_annotation.h
opennurbs_internal_V5_annotation.h
opennurbs_internal_V5_dimstyle.h
opennurbs_internal_defines.h
opennurbs_internal_glyph.h
opennurbs_intersect.h
opennurbs_ipoint.h
opennurbs_knot.h
opennurbs_layer.h
opennurbs_leader.h
opennurbs_light.h
opennurbs_line.h
opennurbs_linear_workflow.h
opennurbs_linecurve.h
opennurbs_linestyle.h
opennurbs_linetype.h
opennurbs_locale.h
opennurbs_lock.h
opennurbs_lookup.h
opennurbs_mapchan.h
opennurbs_material.h
opennurbs_math.h
opennurbs_matrix.h
opennurbs_md5.h
opennurbs_memory.h
opennurbs_mesh.h
opennurbs_mesh_modifiers.h
opennurbs_model_component.h
opennurbs_model_geometry.h
opennurbs_nurbscurve.h
opennurbs_nurbssurface.h
opennurbs_object.h
opennurbs_object_history.h
opennurbs_objref.h
opennurbs_offsetsurface.h
opennurbs_optimize.h
opennurbs_parse.h
opennurbs_photogrammetry.h
opennurbs_plane.h
opennurbs_planesurface.h
opennurbs_pluginlist.h
opennurbs_point.h
opennurbs_pointcloud.h
opennurbs_pointgeometry.h
opennurbs_pointgrid.h
opennurbs_polycurve.h
opennurbs_polyedgecurve.h
opennurbs_polyline.h
opennurbs_polylinecurve.h
opennurbs_post_effects.h
opennurbs_private_wrap.h
opennurbs_private_wrap_defs.h
opennurbs_progress_reporter.h
opennurbs_qsort_template.h
opennurbs_quacksort_template.h
opennurbs_quaternion.h
opennurbs_rand.h
opennurbs_render_channels.h
opennurbs_render_content.h
opennurbs_rendering.h
opennurbs_revsurface.h
opennurbs_rtree.h
opennurbs_safe_frame.h
opennurbs_sectionstyle.h
opennurbs_sha1.h
opennurbs_skylight.h
opennurbs_sleeplock.h
opennurbs_sphere.h
opennurbs_std_string.h
opennurbs_string.h
opennurbs_string_value.h
opennurbs_subd.h
opennurbs_subd_data.h
opennurbs_sumsurface.h
opennurbs_sun.h
opennurbs_surface.h
opennurbs_surfaceproxy.h
opennurbs_symmetry.h
opennurbs_system.h
opennurbs_system_compiler.h
opennurbs_system_runtime.h
#opennurbs_table.h
opennurbs_terminator.h
opennurbs_testclass.h
opennurbs_text.h
opennurbs_text_style.h
opennurbs_textcontext.h
opennurbs_textdraw.h
opennurbs_textglyph.h
opennurbs_textiterator.h
opennurbs_textlog.h
opennurbs_textobject.h
opennurbs_textrun.h
opennurbs_texture.h
opennurbs_texture_mapping.h
opennurbs_topology.h
opennurbs_torus.h
opennurbs_unicode.h
opennurbs_userdata.h
opennurbs_uuid.h
opennurbs_version.h
opennurbs_version_number.h
opennurbs_viewport.h
opennurbs_wip.h
opennurbs_workspace.h
opennurbs_xform.h
opennurbs_xml.h
opennurbs_zlib.h
)
set( OPENNURBS_PUBLIC_SOURCES
opennurbs_3dm_attributes.cpp
opennurbs_3dm_properties.cpp
opennurbs_3dm_settings.cpp
opennurbs_annotationbase.cpp
opennurbs_apple_nsfont.cpp
opennurbs_arc.cpp
opennurbs_arccurve.cpp
opennurbs_archivable_dictionary.cpp
opennurbs_archive.cpp
opennurbs_archive_manifest.cpp
opennurbs_array.cpp
opennurbs_base32.cpp
opennurbs_base64.cpp
opennurbs_beam.cpp
opennurbs_bezier.cpp
opennurbs_beziervolume.cpp
opennurbs_bitmap.cpp
opennurbs_bounding_box.cpp
opennurbs_box.cpp
opennurbs_brep.cpp
opennurbs_brep_extrude.cpp
opennurbs_brep_io.cpp
opennurbs_brep_isvalid.cpp
opennurbs_brep_region.cpp
opennurbs_brep_tools.cpp
opennurbs_brep_v2valid.cpp
opennurbs_calculator.cpp
opennurbs_circle.cpp
opennurbs_color.cpp
opennurbs_compress.cpp
opennurbs_compstat.cpp
opennurbs_cone.cpp
opennurbs_convex_poly.cpp
opennurbs_crc.cpp
opennurbs_curve.cpp
opennurbs_curveonsurface.cpp
opennurbs_curveproxy.cpp
opennurbs_cylinder.cpp
opennurbs_date.cpp
opennurbs_decals.cpp
opennurbs_defines.cpp
opennurbs_detail.cpp
opennurbs_dimension.cpp
opennurbs_dimensionformat.cpp
opennurbs_dimensionstyle.cpp
opennurbs_dithering.cpp
opennurbs_ellipse.cpp
opennurbs_embedded_file.cpp
opennurbs_error.cpp
opennurbs_error_message.cpp
opennurbs_evaluate_nurbs.cpp
opennurbs_extensions.cpp
opennurbs_file_utilities.cpp
opennurbs_font.cpp
opennurbs_freetype.cpp
opennurbs_fsp.cpp
opennurbs_function_list.cpp
opennurbs_geometry.cpp
opennurbs_glyph_outline.cpp
opennurbs_ground_plane.cpp
opennurbs_group.cpp
opennurbs_hash_table.cpp
opennurbs_hatch.cpp
opennurbs_instance.cpp
opennurbs_internal_V2_annotation.cpp
opennurbs_internal_V5_annotation.cpp
opennurbs_internal_V5_dimstyle.cpp
opennurbs_internal_Vx_annotation.cpp
opennurbs_intersect.cpp
opennurbs_ipoint.cpp
opennurbs_knot.cpp
opennurbs_layer.cpp
opennurbs_leader.cpp
opennurbs_light.cpp
opennurbs_line.cpp
opennurbs_linear_workflow.cpp
opennurbs_linecurve.cpp
opennurbs_linetype.cpp
opennurbs_locale.cpp
opennurbs_lock.cpp
opennurbs_lookup.cpp
opennurbs_material.cpp
opennurbs_math.cpp
opennurbs_matrix.cpp
opennurbs_md5.cpp
opennurbs_memory_util.cpp
opennurbs_mesh.cpp
opennurbs_mesh_modifiers.cpp
opennurbs_mesh_ngon.cpp
opennurbs_mesh_tools.cpp
opennurbs_mesh_topology.cpp
opennurbs_model_component.cpp
opennurbs_model_geometry.cpp
opennurbs_morph.cpp
opennurbs_nurbscurve.cpp
opennurbs_nurbssurface.cpp
opennurbs_nurbsvolume.cpp
opennurbs_object.cpp
opennurbs_object_history.cpp
opennurbs_objref.cpp
opennurbs_offsetsurface.cpp
opennurbs_optimize.cpp
opennurbs_parse_angle.cpp
opennurbs_parse_length.cpp
opennurbs_parse_number.cpp
opennurbs_parse_point.cpp
opennurbs_parse_settings.cpp
opennurbs_photogrammetry.cpp
opennurbs_plane.cpp
opennurbs_planesurface.cpp
opennurbs_pluginlist.cpp
opennurbs_point.cpp
opennurbs_pointcloud.cpp
opennurbs_pointgeometry.cpp
opennurbs_pointgrid.cpp
opennurbs_polycurve.cpp
opennurbs_polyedgecurve.cpp
opennurbs_polyline.cpp
opennurbs_polylinecurve.cpp
opennurbs_post_effects.cpp
opennurbs_progress_reporter.cpp
opennurbs_quaternion.cpp
opennurbs_rand.cpp
opennurbs_render_channels.cpp
opennurbs_render_content.cpp
opennurbs_revsurface.cpp
opennurbs_rtree.cpp
opennurbs_safe_frame.cpp
opennurbs_sectionstyle.cpp
opennurbs_sha1.cpp
opennurbs_skylight.cpp
opennurbs_sleeplock.cpp
opennurbs_sort.cpp
opennurbs_sphere.cpp
opennurbs_statics.cpp
opennurbs_std_string_format.cpp
opennurbs_std_string_utf.cpp
opennurbs_string.cpp
opennurbs_string_compare.cpp
opennurbs_string_format.cpp
opennurbs_string_scan.cpp
opennurbs_string_values.cpp
opennurbs_subd.cpp
opennurbs_subd_archive.cpp
opennurbs_subd_copy.cpp
opennurbs_subd_data.cpp
opennurbs_subd_eval.cpp
opennurbs_subd_fragment.cpp
opennurbs_subd_frommesh.cpp
opennurbs_subd_heap.cpp
opennurbs_subd_iter.cpp
opennurbs_subd_limit.cpp
opennurbs_subd_matrix.cpp
opennurbs_subd_mesh.cpp
opennurbs_subd_ref.cpp
opennurbs_subd_ring.cpp
opennurbs_subd_sector.cpp
opennurbs_subd_texture.cpp
opennurbs_sum.cpp
opennurbs_sumsurface.cpp
opennurbs_sun.cpp
opennurbs_surface.cpp
opennurbs_surfaceproxy.cpp
opennurbs_symmetry.cpp
#opennurbs_table.cpp
opennurbs_terminator.cpp
opennurbs_testclass.cpp
opennurbs_text.cpp
opennurbs_text_style.cpp
opennurbs_textcontext.cpp
opennurbs_textdraw.cpp
opennurbs_textglyph.cpp
opennurbs_textiterator.cpp
opennurbs_textlog.cpp
opennurbs_textobject.cpp
opennurbs_textrun.cpp
opennurbs_topology.cpp
opennurbs_torus.cpp
opennurbs_unicode.cpp
opennurbs_unicode_cpsb.cpp
opennurbs_units.cpp
opennurbs_userdata.cpp
opennurbs_uuid.cpp
opennurbs_version.cpp
opennurbs_version_number.cpp
opennurbs_viewport.cpp
opennurbs_win_dwrite.cpp
opennurbs_workspace.cpp
opennurbs_wstring.cpp
opennurbs_xform.cpp
opennurbs_xml.cpp
opennurbs_zlib.cpp
opennurbs_zlib_memory.cpp
)
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/opennurbs_plus.h)
set( OPENNURBS_PLUS_HEADERS
opennurbsRhino.pch
opennurbs_plus.h
opennurbs_plus_crashtest.h
opennurbs_plus_function.h
opennurbs_plus_hiddenline.h
opennurbs_plus_hiddenline_impl.h
opennurbs_plus_idimage.h
opennurbs_plus_implicitfn.h
opennurbs_plus_massprop.h
opennurbs_plus_mesh_intersection.h
opennurbs_plus_mesh_marker.h
opennurbs_plus_meshbooleans_impl.h
opennurbs_plus_particle.h
opennurbs_plus_rectpack.h
opennurbs_plus_rectpack2.h
opennurbs_plus_registry.h
opennurbs_plus_sections.h
opennurbs_plus_sil.h
opennurbs_plus_sleeplock.h
opennurbs_plus_squish.h
opennurbs_plus_subd.h
opennurbs_plus_trimesh.h
opennurbs_plus_validate.h
opennurbs_plus_x.h
)
if (BUILD_TESTING)
LIST(APPEND OPENNURBS_PLUS_HEADERS opennurbs_plus_testheader.h)
endif(BUILD_TESTING)
set( OPENNURBS_PLUS_SOURCES
opennurbs_plus_bezier.cpp
opennurbs_plus_brep.cpp
opennurbs_plus_brep_changesrf.cpp
opennurbs_plus_brep_facegroups.cpp
opennurbs_plus_brep_kinky.cpp
opennurbs_plus_ctree.cpp
opennurbs_plus_fontsub.cpp
opennurbs_plus_fpu.cpp
opennurbs_plus_function.cpp
opennurbs_plus_ginfinity.cpp
opennurbs_plus_hiddenline.cpp
opennurbs_plus_idimage.cpp
opennurbs_plus_implicitfn.cpp
opennurbs_plus_massprop.cpp
opennurbs_plus_memory.cpp
opennurbs_plus_memory_new.cpp
opennurbs_plus_mesh_clash.cpp
opennurbs_plus_mesh_intersection.cpp
opennurbs_plus_mesh_marker.cpp
opennurbs_plus_mesh_thickness.cpp
opennurbs_plus_meshbooleans.cpp
opennurbs_plus_mtree.cpp
opennurbs_plus_particle.cpp
opennurbs_plus_rectpack.cpp
opennurbs_plus_rectpack1.cpp
opennurbs_plus_rectpack2.cpp
opennurbs_plus_registry.cpp
opennurbs_plus_sections.cpp
opennurbs_plus_sil.cpp
opennurbs_plus_sleeplock.cpp
opennurbs_plus_squish.cpp
opennurbs_plus_stree.cpp
opennurbs_plus_subd.cpp
opennurbs_plus_subd_curve.cpp
opennurbs_plus_subd_eval.cpp
opennurbs_plus_subd_facegroups.cpp
opennurbs_plus_subd_fillet.cpp
opennurbs_plus_subd_limit.cpp
opennurbs_plus_subd_loft.cpp
opennurbs_plus_subd_matrix.cpp
opennurbs_plus_subd_merge.cpp
opennurbs_plus_subd_mesh.cpp
opennurbs_plus_subd_symmetry.cpp
opennurbs_plus_subd_topology.cpp
opennurbs_plus_subd_weld.cpp
opennurbs_plus_trimesh.cpp
opennurbs_plus_validate.cpp
opennurbs_plus_x.cpp
opennurbs_plus_xmesh.cpp
opennurbs_plus_xmeshfast.cpp
opennurbs_plus_xray.cpp
)
else()
set( OPENNURBS_PUBLIC_MEMORY
opennurbs_public_memory.cpp
)
endif() #OpenNURBS plus source files
if (ANDROID OR LINUX)
add_subdirectory(android_uuid)
add_subdirectory(freetype263)
endif()
add_subdirectory(zlib)
## opennurbs static library
add_library( opennurbsStatic STATIC
${OPENNURBS_PUBLIC_HEADERS}
${OPENNURBS_PUBLIC_SOURCES}
${OPENNURBS_PUBLIC_MEMORY}
${OPENNURBS_PLUS_HEADERS}
${OPENNURBS_PLUS_SOURCES}
)
## opennurbs shared library
add_library( OpenNURBS SHARED
${OPENNURBS_PUBLIC_HEADERS}
${OPENNURBS_PUBLIC_SOURCES}
${OPENNURBS_PUBLIC_MEMORY}
${OPENNURBS_PLUS_HEADERS}
${OPENNURBS_PLUS_SOURCES}
opennurbs_dll.cpp
)
if (MSVC)
# opennurbs_brep.cpp requires this flag when compiling with Visual C++
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
#add_compile_options(\bigobj)
add_definitions(-DUNICODE)
add_definitions(-D_UNICODE)
endif()
add_definitions(-DON_CMAKE_BUILD)
if (ANDROID)
include_directories("freetype263/include")
endif()
if( APPLE)
find_library( CORE_GRAPHICS_LIBRARY CoreGraphics)
message( STATUS "CORE_GRAPHICS_LIBRARY is ${CORE_GRAPHICS_LIBRARY}")
find_library( CORE_TEXT_LIBRARY CoreText)
message( STATUS "CORE_TEXT_LIBRARY is ${CORE_TEXT_LIBRARY}")
find_library( FOUNDATION_LIBRARY Foundation)
message( STATUS "FOUNDATION_LIBRARY is ${FOUNDATION_LIBRARY}")
set( OPENNURBS_APPLE_DEPENDENCIES
${CORE_GRAPHICS_LIBRARY}
${CORE_TEXT_LIBRARY}
${FOUNDATION_LIBRARY}
)
set( OPENNURBS_APPLE_DEFINES
ON_COMPILER_CLANG
ON_RUNTIME_APPLE
RHINO_APPLE=1
_GNU_SOURCE
)
target_compile_definitions(opennurbsStatic PRIVATE ${OPENNURBS_APPLE_DEFINES})
target_compile_definitions(OpenNURBS PRIVATE ${OPENNURBS_APPLE_DEFINES})
# xcode properties are the same for both static and shared libs
set_target_properties( opennurbsStatic OpenNURBS
PROPERTIES
XCODE_ATTRIBUTE_SDKROOT "macosx"
XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS "macosx iphonesimulator iphoneos"
XCODE_ATTRIBUTE_SYMROOT "build"
XCODE_ATTRIBUTE_ALLOW_TARGET_PLATFORM_SPECIALIZATION "YES"
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "dwarf"
XCODE_ATTRIBUTE_MACOSX_DEPLOYMENT_TARGET "11.3"
XCODE_ATTRIBUTE_DYLIB_COMPATIBILITY_VERSION "1"
XCODE_ATTRIBUTE_DYLIB_CURRENT_VERSION "1"
XCODE_ATTRIBUTE_INFOPLIST_FILE "opennurbsRhinoInfo.plist"
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.mcneel.opennurbs"
XCODE_ATTRIBUTE_HEADER_SEARCH_PATHS "$(PROJECT_DIR)/freetype263/include"
XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION "1"
XCODE_ATTRIBUTE_MARKETING_VERSION "8 Internal"
XCODE_ATTRIBUTE_GCC_INLINES_ARE_PRIVATE_EXTERN "YES"
XCODE_ATTRIBUTE_GCC_NO_COMMON_BLOCKS "YES"
XCODE_ATTRIBUTE_GCC_INPUT_FILETYPE "sourcecode.cpp.objcpp"
XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES"
XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "$(PROJECT_DIR)/opennurbsRhino.pch"
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "YES"
XCODE_ATTRIBUTE_ENABLE_STRICT_OBJC_MSGSEND "YES"
)
endif()
if (MSVC)
# warning level 4 and all warnings as errors
add_compile_options(/W4)
else()
# These need to be addressed
add_compile_options(-Wno-inconsistent-missing-override)
add_compile_options(-Wno-defaulted-function-deleted)
add_compile_options(-Wno-switch)
add_compile_options(-Wno-tautological-pointer-compare)
add_compile_options(-Wno-deprecated-declarations)
add_compile_options(-Wno-unsequenced)
add_compile_options(-Wno-parentheses)
add_compile_options(-Wno-writable-strings)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-switch")
endif()
target_compile_definitions(opennurbsStatic PRIVATE ON_COMPILING_OPENNURBS Z_PREFIX MY_ZCALLOC)
target_compile_definitions(OpenNURBS PRIVATE OPENNURBS_EXPORTS Z_PREFIX MY_ZCALLOC)
target_include_directories(opennurbsStatic PUBLIC .)
target_include_directories(OpenNURBS PUBLIC .)
set(PRECOMPILED_HEADERS opennurbs.h)
if (BUILD_TESTING)
LIST(APPEND PRECOMPILED_HEADERS opennurbs_plus_testheader.h)
endif(BUILD_TESTING)
target_precompile_headers(opennurbsStatic PRIVATE ${PRECOMPILED_HEADERS})
target_precompile_headers(OpenNURBS PRIVATE ${PRECOMPILED_HEADERS})
install( TARGETS opennurbsStatic DESTINATION "lib")
install( FILES ${OPENNURBS_PUBLIC_HEADERS} DESTINATION "include/opennurbsStatic")
if (ANDROID)
target_link_libraries( OpenNURBS zlib opennurbs_public_freetype android_uuid android)
target_link_libraries( opennurbsStatic zlib opennurbs_public_freetype android_uuid android)
endif()
if (LINUX AND NOT ANDROID)
target_link_libraries( OpenNURBS zlib opennurbs_public_freetype android_uuid)
target_link_libraries( opennurbsStatic zlib opennurbs_public_freetype android_uuid)
endif()
if (APPLE)
target_link_libraries( OpenNURBS ${OPENNURBS_APPLE_DEPENDENCIES} zlib)
target_link_libraries( opennurbsStatic ${OPENNURBS_APPLE_DEPENDENCIES} zlib)
endif()
if (WIN32)
target_link_libraries( OpenNURBS Shlwapi Usp10 zlib)
target_link_libraries( opennurbsStatic Shlwapi Usp10 zlib)
endif()
if (APPLE)
set_target_properties( OpenNURBS PROPERTIES
FRAMEWORK TRUE
FRAMEWORK_VERSION A
# MACOSX_FRAMEWORK_IDENTIFIER "com.mcneel.OpenNURBS"
# VERSION "8.0.0"
# SOVERSION "8.0.0"
PUBLIC_HEADER "${OPENNURBS_PUBLIC_HEADERS}"
)
install( TARGETS OpenNURBS DESTINATION "Frameworks")
else()
install( TARGETS OpenNURBS DESTINATION "lib" )
install( FILES ${OPENNURBS_PUBLIC_HEADERS} DESTINATION "include/OpenNURBS")
endif()