7772b53405416a95029110c0636a014cfdc6a955
[platform/core/ml/nnfw.git] / compiler / one-cmds / CMakeLists.txt
1 # NOTE find_package try to use at least python3.8 as follows depending on platform version
2 #   Ubuntu18.04; explictly installed python3.8 (default is python3.6)
3 #   Ubuntu20.04; default python3.8
4 #   Ubuntu22.04; default python3.10
5 #   refer https://github.com/Samsung/ONE/issues/9962
6 find_package(PythonInterp 3.8 QUIET)
7 find_package(PythonLibs 3.8 QUIET)
8
9 if(NOT ${PYTHONINTERP_FOUND})
10   message(STATUS "Build one-cmds: FALSE (Python3 is missing)")
11   return()
12 endif()
13
14 if(${PYTHON_VERSION_MINOR} LESS 8)
15   message(STATUS "Build one-cmds: FALSE (You need to install Python version higher than 3.8)")
16   return()
17 endif()
18
19 # NOTE these files should not have extensions.
20 #      below code will remove extension when copy and install.
21 set(ONE_COMMAND_FILES
22     one-build
23     one-import
24     one-import-bcq
25     one-import-tf
26     one-import-tflite
27     one-import-onnx
28     one-optimize
29     one-quantize
30     one-pack
31     one-partition
32     one-profile
33     one-infer
34     one-codegen
35     onecc
36 )
37
38 # TODO find better way for per-platform files
39 if(ONE_UBUNTU_CODENAME_JAMMY)
40   # NOTE copy one-prepare-venv.u2204 as build/../one-prepare-venv
41   #      and install build/../one-prepare-venv file
42   list(APPEND ONE_COMMAND_FILES one-prepare-venv.u2204)
43 else()
44   list(APPEND ONE_COMMAND_FILES one-prepare-venv)
45 endif()
46
47 # pytorch importer is an experimental feature, it is not used in default configuration
48 if(ENABLE_ONE_IMPORT_PYTORCH)
49   list(APPEND ONE_COMMAND_FILES one-import-pytorch)
50 endif(ENABLE_ONE_IMPORT_PYTORCH)
51
52 foreach(ONE_COMMAND IN ITEMS ${ONE_COMMAND_FILES})
53
54   set(ONE_COMMAND_FILE ${ONE_COMMAND})
55   set(ONE_COMMAND_SRC "${CMAKE_CURRENT_SOURCE_DIR}/${ONE_COMMAND_FILE}")
56   # strip extension from the name
57   get_filename_component(ONE_COMMNAD_FILE_NAME ${ONE_COMMAND} NAME_WE)
58   set(ONE_COMMAND_BIN "${CMAKE_CURRENT_BINARY_DIR}/${ONE_COMMNAD_FILE_NAME}")
59   set(ONE_COMMAND_TARGET "${ONE_COMMAND}_target")
60
61   add_custom_command(OUTPUT ${ONE_COMMAND_BIN}
62     COMMAND ${CMAKE_COMMAND} -E copy "${ONE_COMMAND_SRC}" "${ONE_COMMAND_BIN}"
63     DEPENDS ${ONE_COMMAND_SRC}
64     COMMENT "Generate ${ONE_COMMAND_BIN}"
65   )
66
67   add_custom_target(${ONE_COMMAND_TARGET} ALL DEPENDS ${ONE_COMMAND_BIN})
68
69   install(FILES ${ONE_COMMAND_BIN}
70           PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE
71                       GROUP_READ GROUP_EXECUTE
72                       WORLD_READ WORLD_EXECUTE
73           DESTINATION bin)
74           
75 endforeach(ONE_COMMAND)
76
77 set(ONE_UTILITY_FILES
78     one-build.template.cfg
79     onecc.template.cfg
80     onnx_legalizer.py
81 )
82
83 foreach(ONE_UTILITY IN ITEMS ${ONE_UTILITY_FILES})
84
85   set(ONE_UTILITY_FILE ${ONE_UTILITY})
86   set(ONE_UTILITY_SRC "${CMAKE_CURRENT_SOURCE_DIR}/${ONE_UTILITY_FILE}")
87   set(ONE_UTILITY_BIN "${CMAKE_CURRENT_BINARY_DIR}/${ONE_UTILITY_FILE}")
88   set(ONE_UTILITY_TARGET "${ONE_UTILITY}_target")
89
90   add_custom_command(OUTPUT ${ONE_UTILITY_BIN}
91     COMMAND ${CMAKE_COMMAND} -E copy "${ONE_UTILITY_SRC}" "${ONE_UTILITY_BIN}"
92     DEPENDS ${ONE_UTILITY_SRC}
93     COMMENT "Generate ${ONE_UTILITY_BIN}"
94   )
95
96   add_custom_target(${ONE_UTILITY_TARGET} ALL DEPENDS ${ONE_UTILITY_BIN})
97
98   install(FILES ${ONE_UTILITY}
99           PERMISSIONS OWNER_WRITE OWNER_READ
100                       GROUP_READ
101                       WORLD_READ
102           DESTINATION bin)
103
104 endforeach(ONE_UTILITY)
105
106 # one-pack internally uses model2nnpkg tool
107 set(MODEL2NNPKG "${NNAS_PROJECT_SOURCE_DIR}/tools/nnpackage_tool/model2nnpkg/model2nnpkg.py")
108 install(FILES ${MODEL2NNPKG}
109               PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE
110                           GROUP_READ GROUP_EXECUTE
111                           WORLD_READ WORLD_EXECUTE
112               DESTINATION bin
113               RENAME "model2nnpkg")
114
115 # make python directory
116 set(ONE_PYTHON_FILES constant.py
117                      export_constant.py
118                      make_cmd.py
119                      CfgRunner.py
120                      OptionBuilder.py
121                      TopologicalSortHelper.py
122                      WorkflowRunner.py
123                      utils.py)
124
125 foreach(ONE_PYTHON_FILE IN ITEMS ${ONE_PYTHON_FILES})
126
127   set(ONE_PYTHON_DIR "onelib")
128   set(ONE_PYTHON_DIR_BIN "${CMAKE_CURRENT_BINARY_DIR}/${ONE_PYTHON_DIR}")
129   set(ONE_PYTHON_FILE_SRC "${CMAKE_CURRENT_SOURCE_DIR}/${ONE_PYTHON_DIR}/${ONE_PYTHON_FILE}")
130   set(ONE_PYTHON_FILE_BIN "${CMAKE_CURRENT_BINARY_DIR}/${ONE_PYTHON_DIR}/${ONE_PYTHON_FILE}")
131   set(ONE_PYTHON_TARGET "${ONE_PYTHON_FILE}_target")
132
133   add_custom_command(OUTPUT ${ONE_PYTHON_DIR_BIN}
134     COMMAND ${CMAKE_COMMAND} -E make_directory "${ONE_PYTHON_DIR_BIN}"
135     COMMENT "Generate ${ONE_PYTHON_DIR_BIN}"
136   )
137
138   add_custom_command(OUTPUT ${ONE_PYTHON_FILE_BIN}
139     COMMAND ${CMAKE_COMMAND} -E copy "${ONE_PYTHON_FILE_SRC}" "${ONE_PYTHON_FILE_BIN}"
140     DEPENDS ${ONE_PYTHON_SRC}
141     COMMENT "Generate ${ONE_PYTHON_FILE_BIN}"
142   )
143
144   add_custom_target(${ONE_PYTHON_TARGET} ALL DEPENDS ${ONE_PYTHON_DIR_BIN} ${ONE_PYTHON_FILE_BIN})
145
146   install(DIRECTORY ${ONE_PYTHON_DIR}
147           FILE_PERMISSIONS OWNER_WRITE OWNER_READ
148                            GROUP_READ
149                            WORLD_READ
150           DESTINATION bin)
151
152 endforeach(ONE_PYTHON_FILE)
153
154 set(CONSTANT_EXPORTING_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/${ONE_PYTHON_DIR}/export_constant.py")
155 set(O1_OPTION "O1")
156 set(O1_CFG_FILE "${O1_OPTION}.cfg")
157 set(O1_CFG_FILE_BIN "${CMAKE_CURRENT_BINARY_DIR}/${ONE_PYTHON_DIR}/${O1_CFG_FILE}")
158
159 add_custom_command(OUTPUT ${O1_CFG_FILE_BIN}
160   COMMAND ${PYTHON_EXECUTABLE} ${CONSTANT_EXPORTING_SCRIPT}
161           --constant ${O1_OPTION}
162           --format cfg
163           --output_path ${O1_CFG_FILE_BIN}
164   DEPENDS ${CONSTANT_EXPORTING_SCRIPT}
165   COMMENT "Generate ${O1_CFG_FILE}"
166 )
167
168 add_custom_target("O1_cfg_target" ALL DEPENDS ${O1_CFG_FILE_BIN})
169
170 install(FILES ${O1_CFG_FILE_BIN}
171         PERMISSIONS OWNER_WRITE OWNER_READ
172                     GROUP_READ
173                     WORLD_READ
174         DESTINATION optimization)
175
176 set(ONE_DOCUMENT_FILES
177     how-to-use-one-commands.txt
178     how-to-prepare-virtualenv.txt
179     how-to-create-hdf5-dataset.txt
180 )
181
182 foreach(ONE_DOCUMENT IN ITEMS ${ONE_DOCUMENT_FILES})
183
184   install(FILES ${ONE_DOCUMENT} DESTINATION doc)
185
186 endforeach(ONE_DOCUMENT)
187
188 if(NOT ENABLE_TEST)
189   return()
190 endif(NOT ENABLE_TEST)
191
192 add_subdirectory(dummy-driver)
193 add_subdirectory(tests)
194 add_subdirectory(validate-onnx2circle)