Skip to content

Commit bb22429

Browse files
authored
Update CMakeLists.txt
1 parent 5c9a502 commit bb22429

1 file changed

Lines changed: 110 additions & 69 deletions

File tree

CMakeLists.txt

Lines changed: 110 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
1+
# ============================================================
2+
# las2mcfunction
3+
# Linux / WSL2 / Docker 対応
4+
# CPU / CUDA / OpenCL 自動切り替え CMakeLists
5+
# ============================================================
6+
17
cmake_minimum_required(VERSION 3.21)
28
project(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+
# ------------------------------------------------------------
1219
set(CMAKE_CXX_STANDARD 20)
1320
set(CMAKE_CXX_STANDARD_REQUIRED ON)
1421
set(CMAKE_CXX_EXTENSIONS OFF)
1522

16-
# -----------------------------
23+
# ------------------------------------------------------------
1724
# Sources
18-
# -----------------------------
25+
# ------------------------------------------------------------
1926
set(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-
# -----------------------------
3951
if (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()
7487
endif()
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()
88117
endif()
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
)
98128
endif()
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+
)
107139
endif()
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

Comments
 (0)