-
Notifications
You must be signed in to change notification settings - Fork 5
/
CMakeLists.txt
135 lines (123 loc) · 4.81 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: 2019-2022 Second State INC
cmake_minimum_required(VERSION 3.11)
cmake_policy(SET CMP0091 NEW)
project(WasmEdge-Tensorflow)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RelWithDebInfo)
endif()
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION OFF)
if(CMAKE_BUILD_TYPE STREQUAL Release OR CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
if (CMAKE_GENERATOR STREQUAL Ninja)
if(CMAKE_COMPILER_IS_GNUCXX)
list(TRANSFORM CMAKE_C_COMPILE_OPTIONS_IPO REPLACE "^-flto$" "-flto=auto")
list(TRANSFORM CMAKE_CXX_COMPILE_OPTIONS_IPO REPLACE "^-flto$" "-flto=auto")
endif()
set(CMAKE_JOB_POOLS "link=2")
set(CMAKE_JOB_POOL_LINK link)
endif()
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_ENABLE_EXPORTS ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
set(CMAKE_SKIP_RPATH ON)
# List of WasmEdge options
option(WASMEDGE_BUILD_TOOLS "Generate wasmedge and wasmedgec tools." OFF)
# Libraries will be built in this project, hence the wasmedge and wasmedgec are not needed.
option(WASMEDGE_BUILD_AOT_RUNTIME "Enable WasmEdge LLVM-based ahead of time compilation runtime." OFF)
# AOT runtime is not needed in this stand-alone project.
option(WASMEDGE_BUILD_SHARED_LIB "Generate the WasmEdge shared library." OFF)
# libwasmedge_c.so is not needed in this stand-alone project.
option(WASMEDGE_TENSORFLOW_BUILD_SHARED_LIB "Generate the libwasmedge-tensorflow_c and libwasmedge-tensorflowlite_c shared libraries." ON)
# WasmEdge repositories versions
if(NOT WASMEDGE_REPO_VERSION)
set(WASMEDGE_REPO_VERSION "0.13.0-alpha.1")
endif()
# WasmEdge dependencies versions
if(NOT WASMEDGE_DEPS_VERSION)
set(WASMEDGE_DEPS_VERSION "TF-2.12.0-CC")
endif()
# Check the build architecture and system.
if(ANDROID)
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
if(NOT WASMEDGE_TENSORFLOW_SYSTEM_NAME)
set(WASMEDGE_TENSORFLOW_SYSTEM_NAME "android_aarch64")
endif()
else()
message(FATAL_ERROR "Unsupported architecture: ${CMAKE_SYSTEM_PROCESSOR}")
endif()
elseif(APPLE)
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
if(NOT WASMEDGE_TENSORFLOW_SYSTEM_NAME)
set(WASMEDGE_TENSORFLOW_SYSTEM_NAME "darwin_x86_64")
endif()
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
if(NOT WASMEDGE_TENSORFLOW_SYSTEM_NAME)
set(WASMEDGE_TENSORFLOW_SYSTEM_NAME "darwin_arm64")
endif()
else()
message(FATAL_ERROR "Unsupported architecture: ${CMAKE_SYSTEM_PROCESSOR}")
endif()
elseif(UNIX)
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
if(NOT WASMEDGE_TENSORFLOW_SYSTEM_NAME)
set(WASMEDGE_TENSORFLOW_SYSTEM_NAME "manylinux2014_x86_64")
endif()
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
if(NOT WASMEDGE_TENSORFLOW_SYSTEM_NAME)
set(WASMEDGE_TENSORFLOW_SYSTEM_NAME "manylinux2014_aarch64")
endif()
else()
message(FATAL_ERROR "Unsupported architecture: ${CMAKE_SYSTEM_PROCESSOR}")
endif()
else()
message(FATAL_ERROR "Unsupported system: ${CMAKE_SYSTEM_NAME}")
endif()
# Clone WasmEdge-core
if(NOT WASMEDGE_CORE_PATH)
include(FetchContent)
FetchContent_Declare(
wasmedge
GIT_REPOSITORY https://github.com/WasmEdge/WasmEdge.git
GIT_TAG ${WASMEDGE_REPO_VERSION}
)
FetchContent_GetProperties(wasmedge)
if(NOT wasmedge_POPULATED)
message(STATUS "Fetching WasmEdge repository")
FetchContent_Populate(wasmedge)
message(STATUS "Fetching WasmEdge repository - done")
endif()
add_subdirectory(${wasmedge_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/utils/WasmEdge-core)
set(WASMEDGE_CORE_PATH ${wasmedge_SOURCE_DIR})
set(WASMEDGE_CORE_BIN_PATH ${CMAKE_CURRENT_BINARY_DIR}/utils/WasmEdge-core)
else()
get_filename_component(
WASMEDGE_CORE_PATH "${WASMEDGE_CORE_PATH}"
REALPATH
BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
if(NOT WASMEDGE_CORE_BIN_PATH)
add_subdirectory(${WASMEDGE_CORE_PATH} ${CMAKE_CURRENT_BINARY_DIR}/utils/WasmEdge-core)
set(WASMEDGE_CORE_BIN_PATH ${CMAKE_CURRENT_BINARY_DIR}/utils/WasmEdge-core)
else()
get_filename_component(
WASMEDGE_CORE_BIN_PATH "${WASMEDGE_CORE_BIN_PATH}"
REALPATH
BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
endif()
endif()
message(STATUS "WasmEdge-tensorflow: Set WasmEdge-core source path: ${WASMEDGE_CORE_PATH}")
message(STATUS "WasmEdge-tensorflow: Set WasmEdge-core binary path: ${WASMEDGE_CORE_BIN_PATH}")
# TensorFlow dependencies library
add_subdirectory(utils/WasmEdge-tensorflow-deps)
include_directories(BEFORE
${CMAKE_CURRENT_BINARY_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/include
)
add_subdirectory(include)
add_subdirectory(lib)