1+ cmake_minimum_required (VERSION 3.20 FATAL_ERROR )
2+ # project(MyProject LANGUAGES CXX)
3+
4+ include (CMakePrintHelpers )
5+
6+ # set(CMAKE_VERBOSE_MAKEFILE ON)
7+
8+ if (UNIX AND NOT APPLE )
9+ set (LINUX TRUE )
10+ endif ()
11+
12+ set (PROJECT_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR} " )
13+ set (PROJECT_BINARY_DIR "${CMAKE_BINARY_DIR} " )
14+ set (PROJECT_CACHE_DIR "${PROJECT_ROOT_DIR} /.cache" )
15+ set (LIBTORCH_DIR "${PROJECT_ROOT_DIR} /libtorch" )
16+ # set(LIBTORCH_STATIC_INSTALL_DIR "${PROJECT_ROOT_DIR}/libtorch_static")
17+ set (BRIDGE_DIR "${PROJECT_ROOT_DIR} /bridge" )
18+ set (Torch_DIR "${PROJECT_ROOT_DIR} /libtorch" )
19+
20+ find_package (chpl REQUIRED HINTS ${PROJECT_ROOT_DIR} /cmake/chapel )
21+ list (APPEND CMAKE_MODULE_PATH "${PROJECT_ROOT_DIR} /cmake" )
22+ list (APPEND CMAKE_MODULE_PATH "${PROJECT_ROOT_DIR} /cmake/chapel" )
23+
24+ project (MyProject LANGUAGES CXX C CHPL)
25+ message (STATUS "Using chpl: ${CMAKE_CHPL_COMPILER} " )
26+
27+
28+ if (APPLE )
29+ set (CMAKE_C_COMPILER "/usr/bin/clang" )
30+ set (CMAKE_CXX_COMPILER "/usr/bin/clang++" )
31+ endif ()
32+ set (CMAKE_CXX_STANDARD 20)
33+
34+
35+ include (LibTorchDL )
36+ download_libtorch (
37+ CACHE_DIR ${PROJECT_CACHE_DIR}
38+ DESTINATION ${LIBTORCH_DIR}
39+ )
40+
41+ list (APPEND CMAKE_PREFIX_PATH "${LIBTORCH_DIR} /share/cmake" )
42+ find_package (Torch REQUIRED )
43+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++23 -lm -ldl ${TORCH_CXX_FLAGS} " )
44+
45+
46+ cmake_print_variables (TORCH_LIBRARIES )
47+ cmake_print_variables (TORCH_INCLUDE_DIRS )
48+ cmake_print_variables (TORCH_INSTALL_PREFIX )
49+ cmake_print_variables (TORCH_CXX_FLAGS )
50+ cmake_print_variables (TORCH_LIBRARY )
51+
52+
53+ file (GLOB CHAI_LIB_FILES "${PROJECT_ROOT_DIR} /lib/*.chpl" )
54+
55+ # file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/resources_dummy.c "int main(int argc, const char **argv){ return 1; }\n")
56+ # add_executable(ChAI ${CMAKE_CURRENT_BINARY_DIR}/resources_dummy.c)
57+ # # file(GLOB RESOURCE_FILES *.bmp *.wav moose.dat utf8.txt)
58+ # foreach(RESOURCE_FILE ${CHAI_LIB_FILES})
59+ # add_custom_command(
60+ # TARGET ChAI
61+ # POST_BUILD
62+ # COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${RESOURCE_FILE} $<TARGET_FILE_DIR:ChAI>
63+ # )
64+ # endforeach(RESOURCE_FILE)
65+
66+ # file(COPY ${CHAI_LIB_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
67+
68+
69+
70+
71+ add_custom_target (
72+ ChAI
73+ ALL
74+ DEPENDS ${PROJECT_SOURCE_DIR} /lib
75+ # SOURCES ${CHAI_LIB_FILES}
76+ # COMMAND ${CMAKE_COMMAND} -E echo "Building ChAI"
77+ )
78+
79+ foreach (RESOURCE_FILE ${CHAI_LIB_FILES} )
80+ add_custom_command (
81+ TARGET ChAI
82+ POST_BUILD
83+ # OUTPUT $<TARGET_FILE_DIR:ChAI>
84+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RESOURCE_FILE} ${PROJECT_BINARY_DIR} /lib
85+ # DEPENDS ${CHAI_LIB_FILES}
86+ )
87+ endforeach (RESOURCE_FILE )
88+
89+
90+
91+ # foreach(RESOURCE_FILE ${CHAI_LIB_FILES})
92+ # add_custom_command(
93+ # TARGET ChAI
94+ # POST_BUILD
95+ # COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${RESOURCE_FILE} $<TARGET_FILE_DIR:ChAI>
96+ # )
97+ # endforeach(RESOURCE_FILE)
98+
99+
100+ function (watch )
101+ set_property (
102+ DIRECTORY
103+ APPEND
104+ PROPERTY CMAKE_CONFIGURE_DEPENDS ${ARGV}
105+ )
106+ endfunction ()
107+
108+
109+
110+ # cmake_print_variables(CHAI_LIB_FILES)
111+
112+ add_library (bridge OBJECT ${BRIDGE_DIR} /include/bridge.h ${BRIDGE_DIR} /lib/bridge.cpp )
113+
114+ target_link_libraries (
115+ bridge
116+ PRIVATE
117+ ${TORCH_LIBRARIES}
118+ # ${LIBTORCH_DIR}/lib/libtorch.so
119+ # ${LIBTORCH_DIR}/lib/libtorch_cpu.so
120+ # ${LIBTORCH_DIR}/lib/libc10.so
121+ # ${LIBTORCH_DIR}/lib/libtorch_global_deps.so
122+ )
123+
124+ target_include_directories (
125+ bridge
126+ PRIVATE
127+ ${BRIDGE_DIR} /include
128+ ${LIBTORCH_DIR} /include
129+ ${LIBTORCH_DIR} /include/torch/csrc/api/include
130+ # ${BRIDGE_DIR}/util
131+ )
132+
133+
134+ add_library (bridge_objs STATIC $<TARGET_OBJECTS :bridge >)
135+ set_target_properties (bridge_objs
136+ PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR} "
137+ )
138+
139+
140+ set (BRIDGE_OBJECT_FILES $<TARGET_OBJECTS :bridge >)
141+
142+ # add_custom_command(
143+ # TARGET bridge
144+ # POST_BUILD
145+ # COMMAND ${CMAKE_COMMAND} -E copy_directory
146+ # "${CMAKE_CURRENT_SOURCE_DIR}/style-transfer/models"
147+ # "$<TARGET_FILE_DIR:StyleTransfer>/style-transfer/models"
148+ # COMMENT "NOT! Copying ${PROJECT_ROOT_DIR}/examples/vgg/images to $<TARGET_FILE_DIR:vgg>/images"
149+ # )
150+
151+
152+
153+ file (GLOB LIBTORCH_ALL_LIB_FILES
154+ # "${LIBTORCH_DIR}/lib/*.a"
155+ "${LIBTORCH_DIR} /lib/*.dylib"
156+ "${LIBTORCH_DIR} /lib/*.so" )
157+
158+ set (LIBTORCH_ALL_LIBS "" )
159+ foreach (lib_path IN LISTS LIBTORCH_ALL_LIB_FILES)
160+ get_filename_component (lib_name "${lib_path} " NAME_WE )
161+ list (APPEND LIBTORCH_ALL_LIBS "${lib_name} " )
162+ endforeach ()
163+
164+
165+ set (REQUIRED_LIBS
166+ "libtorch"
167+ "libtorch_cpu"
168+ "libc10"
169+ )
170+
171+ set (DISALLOWED_LIBS
172+ "libtorch_python"
173+ )
174+
175+ set (LIBTORCH_LIBS_LINKER_ARGS "" ) # Will hold the list of "-l..." flags.
176+ foreach (lib_name IN LISTS LIBTORCH_ALL_LIBS)
177+ if (lib_name IN_LIST DISALLOWED_LIBS)
178+ if (lib_name IN_LIST REQUIRED_LIBS)
179+ message (FATAL_ERROR "Required lib ${lib_name} is disallowed." )
180+ else ()
181+ message (STATUS "Skipping disallowed lib: ${lib_name} " )
182+ continue ()
183+ endif ()
184+ endif ()
185+ string (REGEX REPLACE "^lib" "" lib_name_short "${lib_name} " )
186+ list (APPEND LIBTORCH_LIBS_LINKER_ARGS "-l${lib_name_short} " )
187+ endforeach ()
188+
189+ cmake_print_variables (LIBTORCH_LIBS_LINKER_ARGS )
190+ # cmake_print_variables(${BRIDGE_OBJECT_FILES})
191+ # cmake_print_variables(BRIDGE_OBJECT_FILES)
192+
193+
194+ set (LIBTORCH_LIBS_LINKER_ARGS
195+ "-ltorch"
196+ # "-ltorch_cpu"
197+ # "-lc10"
198+ # "-ltorch_global_deps"
199+ )
200+ cmake_print_variables (LIBTORCH_LIBS_LINKER_ARGS )
201+
202+ set (CHAI_LINKER_ARGS
203+ -M ${PROJECT_ROOT_DIR} /lib
204+ ${BRIDGE_DIR} /include/bridge.h
205+ ${BRIDGE_OBJECT_FILES}
206+ -L ${LIBTORCH_DIR} /lib
207+ ${LIBTORCH_LIBS_LINKER_ARGS}
208+ --ccflags "-I${BRIDGE_DIR} /include -L${PROJECT_ROOT_DIR} /build"
209+ --ldflags "-L${PROJECT_ROOT_DIR} /build -Wl,-rpath,${LIBTORCH_DIR} /lib"
210+ )
211+
212+
213+ add_executable (TorchBridge ${PROJECT_ROOT_DIR} /lib/Bridge.chpl )
214+ add_dependencies (TorchBridge bridge )
215+ add_dependencies (TorchBridge ChAI )
216+ add_dependencies (TorchBridge bridge_objs )
217+ target_link_options (TorchBridge
218+ PRIVATE
219+ -M ${PROJECT_ROOT_DIR} /lib
220+ ${BRIDGE_DIR} /include/bridge.h
221+ ${BRIDGE_OBJECT_FILES}
222+ -L ${LIBTORCH_DIR} /lib
223+ "-ltorch"
224+ "-ltorch_cpu"
225+ "-lc10"
226+ "-ltorch_global_deps"
227+ ${LIBTORCH_LIBS_LINKER_ARGS}
228+ --ldflags "-Wl,-rpath,${LIBTORCH_DIR} /lib"
229+ ${CHAI_LINKER_ARGS}
230+ )
231+
232+
233+
234+
235+ add_executable (TinyLayerTest
236+ ${PROJECT_ROOT_DIR} /test/tiny/layer_test.chpl
237+ ${CHAI_LIB_FILES}
238+ )
239+ add_dependencies (TinyLayerTest bridge )
240+ add_dependencies (TinyLayerTest ChAI )
241+ target_link_options (TinyLayerTest
242+ PRIVATE
243+ --main-module layer_test.chpl
244+ -M ${PROJECT_ROOT_DIR} /lib
245+ ${CHAI_LINKER_ARGS}
246+ )
247+
248+
249+ add_executable (TinyBridgeSystemTest
250+ ${PROJECT_ROOT_DIR} /test/tiny/bridge_system_test.chpl
251+ ${CHAI_LIB_FILES}
252+ )
253+ add_dependencies (TinyBridgeSystemTest bridge )
254+ add_dependencies (TinyBridgeSystemTest ChAI )
255+ add_dependencies (TinyBridgeSystemTest bridge_objs )
256+ add_dependencies (TinyBridgeSystemTest TorchBridge )
257+ target_link_options (TinyBridgeSystemTest
258+ PRIVATE
259+ --main-module bridge_system_test.chpl
260+ -M ${PROJECT_ROOT_DIR} /lib
261+ ${CHAI_LINKER_ARGS}
262+ )
263+
264+
265+ # chpl test/tiny/layer_test.chpl -M lib bridge/include/bridge.h build/CMakeFiles/bridge.dir/bridge/lib/bridge.cpp.o -L libtorch/lib -ltorch -ltorch_cpu -lc10 -ltorch_global_deps --ldflags "-Wl,-rpath,libtorch/lib"
266+
267+ # chpl --fast -o vgg test.chpl -M ../../lib /Users/iainmoncrief/Documents/Github/ChAI/bridge/include/bridge.h /Users/iainmoncrief/Documents/Github/ChAI/build/CMakeFiles/bridge.dir/bridge/lib/bridge.cpp.o -L /Users/iainmoncrief/Documents/Github/ChAI/libtorch/lib -ltorch -ltorch_cpu -lc10 -ltorch_global_deps --ldflags "-Wl,-rpath,/Users/iainmoncrief/Documents/Github/ChAI/libtorch/lib"
268+
269+ # chpl -o vgg test.chpl $(../../embed_libtorch.sh .)
270+ # chpl --fast -o vgg test.chpl $(../../embed_libtorch.sh .)
271+
272+
273+
274+
275+
276+
277+
278+
279+ add_executable (vgg
280+ "${PROJECT_ROOT_DIR} /examples/vgg/test.chpl"
281+ ${PROJECT_ROOT_DIR} /examples/vgg/VGG.chpl
282+ ${CHAI_LIB_FILES}
283+ )
284+ add_dependencies (vgg bridge )
285+ add_dependencies (vgg ChAI )
286+ target_link_options (vgg
287+ PRIVATE
288+ # -M ${PROJECT_ROOT_DIR}/examples/vgg
289+ -svggExampleDir= "${PROJECT_ROOT_DIR} /examples/vgg"
290+ ${CHAI_LINKER_ARGS}
291+ )
292+
293+ add_custom_command (
294+ TARGET vgg
295+ POST_BUILD
296+ COMMAND ${CMAKE_COMMAND} -E copy_directory
297+ "${PROJECT_ROOT_DIR} /examples/vgg/images"
298+ "$<TARGET_FILE_DIR :vgg >/images"
299+ COMMENT "Copying ${PROJECT_ROOT_DIR} /examples/vgg/images to $<TARGET_FILE_DIR :vgg >/images"
300+ )
301+
302+ # ./vgg images/frog.jpg
303+
304+ # add_subdirectory(bridge)
305+
306+ add_subdirectory (examples )
307+ add_subdirectory ("test" )
308+ add_subdirectory (demos )
309+
310+
311+
312+ add_executable (MPSTest
313+ "${PROJECT_ROOT_DIR} /test/tiny/mps.cpp"
314+ )
315+
316+ target_include_directories (MPSTest
317+ PRIVATE
318+ ${LIBTORCH_DIR} /include
319+ ${LIBTORCH_DIR} /include/torch/csrc/api/include
320+ )
321+
322+ target_link_directories (MPSTest
323+ PRIVATE
324+ ${LIBTORCH_DIR} /lib
325+ )
326+
327+ target_link_libraries (MPSTest
328+ PRIVATE
329+ -ltorch
330+ -ltorch_cpu
331+ -lc10
332+ -ltorch_global_deps
333+ )
0 commit comments