1+ # ============================================================
2+ # las2mcfunction
3+ # Linux / WSL2 / Docker 対応
4+ # CPU / CUDA / OpenCL 自動切り替え CMakeLists
5+ # ============================================================
6+
17cmake_minimum_required (VERSION 3.21 )
28project (las2mcfunction LANGUAGES C CXX )
39
4- # -----------------------------
10+ # ------------------------------------------------------------
511# Options
6- # -----------------------------
7- option (ENABLE_CUDA "Enable CUDA acceleration" ON )
12+ # ------------------------------------------------------------
13+ option (ENABLE_CUDA "Enable CUDA acceleration if available" ON )
14+ option (ENABLE_OPENCL "Enable OpenCL acceleration if available" ON )
815
9- # -----------------------------
10- # C++ settings
11- # -----------------------------
16+ # ------------------------------------------------------------
17+ # C / C ++ settings
18+ # ------------------------------------------------------------
1219set (CMAKE_CXX_STANDARD 20)
1320set (CMAKE_CXX_STANDARD_REQUIRED ON )
1421set (CMAKE_CXX_EXTENSIONS OFF )
1522
16- # -----------------------------
23+ # ------------------------------------------------------------
1724# Sources
18- # -----------------------------
25+ # ------------------------------------------------------------
1926set (SRC
2027 main.cpp
2128 miniz.c
@@ -26,82 +33,116 @@ set(HEADERS
2633 miniz.h
2734)
2835
29- # Windows resource
30- if (WIN32 )
31- set (WIN_RESOURCE
32- resources/app.rc
33- )
34- endif ()
36+ # ------------------------------------------------------------
37+ # Executable (base: CPU only)
38+ # ------------------------------------------------------------
39+ add_executable (las2mcfunction
40+ ${SRC}
41+ ${HEADERS}
42+ )
43+
44+ target_compile_definitions (las2mcfunction PRIVATE USE_CPU=1 )
45+
46+ # ------------------------------------------------------------
47+ # CUDA (Linux / WSL2 / Docker safe)
48+ # ------------------------------------------------------------
49+ set (USE_CUDA FALSE )
3550
36- # -----------------------------
37- # CUDA
38- # -----------------------------
3951if (ENABLE_CUDA)
40- enable_language ( CUDA )
41- add_definitions ( -DENABLE_CUDA )
52+ include ( CheckLanguage )
53+ check_language ( CUDA )
4254
43- set (CUDA_SRC
44- cuda_kernel.cu
45- )
55+ if (CMAKE_CUDA_COMPILER)
56+ enable_language ( CUDA )
57+ set (USE_CUDA TRUE )
4658
47- set (CMAKE_CUDA_STANDARD 17)
48- set (CMAKE_CUDA_STANDARD_REQUIRED ON )
59+ message (STATUS "CUDA compiler found: ${CMAKE_CUDA_COMPILER} " )
4960
50- add_executable (las2mcfunction
51- ${SRC}
52- ${HEADERS}
53- ${CUDA_SRC}
54- ${WIN_RESOURCE}
55- )
61+ set (CMAKE_CUDA_STANDARD 17)
62+ set (CMAKE_CUDA_STANDARD_REQUIRED ON )
5663
57- set_target_properties (las2mcfunction PROPERTIES
58- CUDA_SEPARABLE_COMPILATION ON
59- CUDA_ARCHITECTURES native
60- )
64+ target_sources (las2mcfunction PRIVATE
65+ cuda_kernel.cu
66+ )
6167
62- if ( MSVC )
63- target_compile_options ( las2mcfunction PRIVATE
64- $<$< COMPILE_LANGUAGE : CUDA >:- allow - unsupported - compiler >
68+ target_compile_definitions ( las2mcfunction PRIVATE
69+ ENABLE_CUDA=1
70+ USE_CUDA=1
6571 )
66- endif ()
6772
68- else ()
69- add_executable (las2mcfunction
70- ${SRC}
71- ${HEADERS}
72- ${WIN_RESOURCE}
73- )
73+ set_target_properties (las2mcfunction PROPERTIES
74+ CUDA_SEPARABLE_COMPILATION ON
75+ )
76+
77+ # Docker / WSL2 / 古いnvcc対策
78+ if (DEFINED CMAKE_CUDA_ARCHITECTURES)
79+ set_property (TARGET las2mcfunction PROPERTY
80+ CUDA_ARCHITECTURES native
81+ )
82+ endif ()
83+
84+ else ()
85+ message (WARNING "CUDA not found -> building without CUDA" )
86+ endif ()
7487endif ()
7588
76- # Try to find OpenCL and enable optional OpenCL mapping
77- find_path (OPENCL_INCLUDE_DIR CL/cl.h )
78- find_library (OPENCL_LIBRARY NAMES OpenCL OpenCL32 )
79- if (OPENCL_INCLUDE_DIR AND OPENCL_LIBRARY)
80- message (STATUS "OpenCL found: ${OPENCL_LIBRARY} " )
81- target_include_directories (las2mcfunction PRIVATE ${OPENCL_INCLUDE_DIR} )
82- target_link_libraries (las2mcfunction PRIVATE ${OPENCL_LIBRARY} )
83- target_compile_definitions (las2mcfunction PRIVATE USE_OPENCL=1 )
84- # add optional source implementing OpenCL mapping
85- target_sources (las2mcfunction PRIVATE opencl_map.cpp )
86- else ()
87- message (STATUS "OpenCL not found; building without OpenCL support" )
89+ # ------------------------------------------------------------
90+ # OpenCL (Linux / WSL2 / Docker)
91+ # ------------------------------------------------------------
92+ set (USE_OPENCL FALSE )
93+
94+ if (ENABLE_OPENCL)
95+ find_package (OpenCL QUIET )
96+
97+ if (OpenCL_FOUND)
98+ set (USE_OPENCL TRUE )
99+
100+ message (STATUS "OpenCL found" )
101+
102+ target_sources (las2mcfunction PRIVATE
103+ opencl_map.cpp
104+ )
105+
106+ target_link_libraries (las2mcfunction PRIVATE
107+ OpenCL::OpenCL
108+ )
109+
110+ target_compile_definitions (las2mcfunction PRIVATE
111+ ENABLE_OPENCL=1
112+ USE_OPENCL=1
113+ )
114+ else ()
115+ message (STATUS "OpenCL not found -> building without OpenCL" )
116+ endif ()
88117endif ()
89118
90- # -----------------------------
91- # Platform specifics
92- # -----------------------------
93- if (WIN32 )
94- target_compile_definitions (las2mcfunction PRIVATE
95- WIN32_LEAN_AND_MEAN
96- NOMINMAX
119+ # ------------------------------------------------------------
120+ # Platform-specific (Linux / WSL2 / Docker)
121+ # ------------------------------------------------------------
122+ if (UNIX AND NOT APPLE )
123+ target_link_libraries (las2mcfunction PRIVATE
124+ pthread
125+ dl
126+ m
97127 )
98128endif ()
99129
100- # -----------------------------
130+ # ------------------------------------------------------------
101131# Warnings
102- # -----------------------------
103- if (MSVC )
104- target_compile_options (las2mcfunction PRIVATE /W4 )
105- else ()
106- target_compile_options (las2mcfunction PRIVATE -Wall -Wextra -Wpedantic )
132+ # ------------------------------------------------------------
133+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang" )
134+ target_compile_options (las2mcfunction PRIVATE
135+ -Wall
136+ -Wextra
137+ -Wpedantic
138+ )
107139endif ()
140+
141+ # ------------------------------------------------------------
142+ # Build summary
143+ # ------------------------------------------------------------
144+ message (STATUS "========== Build Configuration ==========" )
145+ message (STATUS "CPU support : ENABLED" )
146+ message (STATUS "CUDA support : ${USE_CUDA} " )
147+ message (STATUS "OpenCL support : ${USE_OPENCL} " )
148+ message (STATUS "=========================================" )
0 commit comments