1- cmake_minimum_required (VERSION 3.26)
2-
3- project("<%= project %> ")
1+ cmake_minimum_required(VERSION 3.26)
42
53set(CMAKE_CXX_STANDARD 17)
64set(CMAKE_CXX_STANDARD_REQUIRED ON)
75
8- add_library (${CMAKE_PROJECT_NAME} SHARED)
9- set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES SUFFIX ".so")
6+ project("<%= project %> " LANGUAGES CXX)
107
11- if (MINGW)
12- target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC -ftemplate-backtrace-limit=0)
13- target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC -Wa,-mbig-obj)
14- # https://github.com/doxygen/doxygen/issues/9269#issuecomment-1094975328
15- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1")
16- elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
17- set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$ <IF: $ < AND: $ < C _COMPILER_ID:MSVC > ,$< CXX _COMPILER_ID:MSVC > > ,$< $< CONFIG:Debug ,RelWithDebInfo > :EditAndContinue> ,$< $< CONFIG:Debug ,RelWithDebInfo > :ProgramDatabase> > ")
18- add_compile_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
19- add_compile_definitions(CVAPI_EXPORTS)
20- target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC /bigobj)
8+ # Create the Extension Library
9+ if (MSVC)
10+ add_library(${CMAKE_PROJECT_NAME} SHARED)
11+ else ()
12+ add_library(${CMAKE_PROJECT_NAME} MODULE)
13+ endif ()
2114
22- # The default of /EHsc crashes Ruby when calling longjmp with optimizations on (/O2)
23- string(REGEX REPLACE "/EHsc" "/EHs" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
24- set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${CMAKE_PROJECT_NAME})
25- set_property(TARGET ${CMAKE_PROJECT_NAME} PROPERTY VS_DEBUGGER_COMMAND $< $< CONFIG:DEBUG > :\$(ProjectDir))
15+ # Fetch Rice from GitHub
16+ include(FetchContent)
2617
27- # set(OpenCV_ROOT "${VCPKG_INSTALLED_DIR}/x64-windows/share/opencv4")
28- #target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC "C:/Source/vcpkg/installed/x64-windows/include")
29- #target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.41.34120/include")
30- #target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC "C:/Program Files (x86)/Windows Kits/10/include/10.0.22621.0/ucrt")
31- #target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/Llvm/lib/clang/17/include")
32- #target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.6/include")
33- #target_link_directories(${CMAKE_PROJECT_NAME} PUBLIC "C:/Source/vcpkg/installed/x64-windows/debug/lib")
18+ FetchContent_Declare(
19+ rice
20+ GIT_REPOSITORY https://github.com/ruby-rice/rice.git
21+ GIT_TAG master
22+ )
23+ FetchContent_MakeAvailable(rice)
3424
35- elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
36- target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC -ftemplate-backtrace-limit=0)
37- target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC -Wa,-mbig-obj)
38- endif ()
25+ # Configure Ruby Detection
26+ list(PREPEND CMAKE_MODULE_PATH "${rice_SOURCE_DIR}")
3927
4028# Find Ruby
41- #find_package(Ruby REQUIRED)
42- include("c:/Source/Rice/FindRuby.cmake")
43- target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC ${Ruby_INCLUDE_DIR} ${Ruby_CONFIG_INCLUDE_DIR})
44- target_link_libraries(${CMAKE_PROJECT_NAME} ${Ruby_LIBRARY})
29+ find_package(Ruby REQUIRED)
30+
31+ target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
32+ Ruby::Module
33+ )
34+
35+ # Link to Rice
36+ target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
37+ Rice::Rice
38+ )
4539
46- # Add include for Rice
47- target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC "<%= rice_include_path %> ")
40+ # Include Directories
41+ <% include_dirs.each do |dir| -%>
42+ target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
43+ "<%= dir %> "
44+ )
45+ <% end -%>
4846
49- # OpenCv
50- find_package(OpenCV CONFIG REQUIRED)
51- target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC ${OpenCV_INCLUDE_DIRS})
52- target_link_libraries(${CMAKE_PROJECT_NAME} ${OpenCV_LIBS})
47+ # Configure Extension Output
48+ get_target_property(RUBY_EXT_SUFFIX Ruby::Ruby INTERFACE_RUBY_EXTENSION_SUFFIX)
49+
50+ set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
51+ PREFIX ""
52+ SUFFIX "${RUBY_EXT_SUFFIX}"
53+ OUTPUT_NAME "<%= project %> "
54+ CXX_VISIBILITY_PRESET hidden
55+ VISIBILITY_INLINES_HIDDEN ON
56+ WINDOWS_EXPORT_ALL_SYMBOLS OFF
57+ RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/../lib/${Ruby_VERSION_MAJOR}.${Ruby_VERSION_MINOR}"
58+ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/../lib"
59+ )
5360
5461# Subdirectories
5562<% directories.each do |directory| -%>
56- add_subdirectory ("<%= directory . relative_path_from ( directory . parent ) %> ")
63+ add_subdirectory("<%= directory.relative_path_from(directory.parent) %> ")
5764<% end -%>
5865
5966# Sources
6067<% if !files.empty? -%>
61- target_sources(${CMAKE_PROJECT_NAME} PUBLIC
62- <% files . each do |file | -%>
68+ target_sources(${CMAKE_PROJECT_NAME} PRIVATE
69+ <% files.each do |file| -%>
6370 "<%= file.relative_path_from(file.parent) %> "
64- <% end -%>
71+ <% end -%>
6572)
66- <% end -%>
73+ <% end -%>
0 commit comments