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 (CMAKE_BUILD_TYPE STREQUAL "Release") set_target_properties(OpenNURBS PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ../../../release) set_target_properties(OpenNURBS PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../../release) set_target_properties(OpenNURBS PROPERTIES RUNTIME_OUTPUT_DIRECTORY ../../../release) set_target_properties(OpenNURBS PROPERTIES OUTPUT_NAME "opennurbs") #target_link_libraries(OpenNURBS PUBLIC -L${CMAKE_CURRENT_SOURCE_DIR}/../../../release) else() set_target_properties(OpenNURBS PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ../../../debug) set_target_properties(OpenNURBS PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../../../debug) set_target_properties(OpenNURBS PROPERTIES RUNTIME_OUTPUT_DIRECTORY ../../../debug) set_target_properties(OpenNURBS PROPERTIES OUTPUT_NAME "opennurbs") #target_link_libraries(OpenNURBS PUBLIC -L${CMAKE_CURRENT_SOURCE_DIR}/../../../debug) 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()