12
12
# See the License for the specific language governing permissions and
13
13
# limitations under the License.!
14
14
15
- cmake_minimum_required (VERSION 3.5 FATAL_ERROR )
15
+ cmake_minimum_required (VERSION 3.16 FATAL_ERROR )
16
16
file (STRINGS "VERSION.txt" SPM_VERSION )
17
17
message (STATUS "VERSION: ${SPM_VERSION} " )
18
18
@@ -30,13 +30,13 @@ option(SPM_ENABLE_TENSORFLOW_SHARED "Makes a tensorflow compatible shared file."
30
30
option (SPM_ENABLE_TCMALLOC "Enable TCMalloc if available." ON )
31
31
option (SPM_TCMALLOC_STATIC "Link static library of TCMALLOC." OFF )
32
32
option (SPM_NO_THREADLOCAL "Disable thread_local operator" OFF )
33
- option (SPM_ENABLE_MSVC_MT_BUILD, "Use /MT flag in MSVC build" OFF )
33
+ option (SPM_ENABLE_MSVC_MT_BUILD, "Use /MT (static runtime) flag in MSVC build. Otherwise uses /MD (DLL runtime)" ON )
34
34
option (SPM_CROSS_SYSTEM_PROCESSOR, "Override system processor" "" )
35
35
36
36
set (SPM_PROTOBUF_PROVIDER "internal" CACHE STRING "Provider of protobuf library" )
37
37
set_property (CACHE SPM_PROTOBUF_PROVIDER PROPERTY STRINGS "internal" "package" )
38
38
set (SPM_ABSL_PROVIDER "internal" CACHE STRING "Provider of absl library" )
39
- set_property (CACHE SPM_ABSL_PROVIDER PROPERTY STRINGS "internal" "module" " package" )
39
+ set_property (CACHE SPM_ABSL_PROVIDER PROPERTY STRINGS "internal" "package" )
40
40
41
41
if (SPM_CROSS_SYSTEM_PROCESSOR )
42
42
set (CMAKE_SYSTEM_PROCESSOR ${SPM_CROSS_SYSTEM_PROCESSOR} )
@@ -45,10 +45,12 @@ endif()
45
45
# Disable shared build on windows
46
46
if (WIN32 )
47
47
set (SPM_ENABLE_SHARED OFF )
48
+ set (SPM_ENABLE_MSVC_MT_BUILD ON )
48
49
endif ()
49
50
50
51
set (CMAKE_CXX_STANDARD 17 )
51
52
set (CMAKE_CXX_STANDARD_REQUIRED ON )
53
+ set (CMAKE_POSITION_INDEPENDENT_CODE TRUE )
52
54
53
55
if ((CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
54
56
CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 10.0 ) OR
@@ -96,10 +98,9 @@ endif()
96
98
if (MSVC )
97
99
add_definitions ("/wd4267 /wd4244 /wd4305 /Zc:strictStrings /utf-8" )
98
100
if (SPM_ENABLE_MSVC_MT_BUILD )
99
- string (REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} )
100
- string (REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_MINSIZEREL ${CMAKE_CXX_FLAGS_MINSIZEREL} )
101
- string (REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} )
102
- string (REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELWITHDEBINFO ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} )
101
+ set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" )
102
+ else ()
103
+ set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL" )
103
104
endif ()
104
105
endif ()
105
106
@@ -144,7 +145,7 @@ configure_file("${PROJECT_SOURCE_DIR}/sentencepiece.pc.in" "sentencepiece.pc" @O
144
145
145
146
if (NOT MSVC )
146
147
# suppress warning for C++11 features.
147
- # add_definitions("-Wno-deprecated-declarations -Wno-deprecated-enum-enum-conversion")
148
+ # add_definitions("-Wno-deprecated-declarations -Wno-deprecated-enum-enum-conversion")
148
149
install (FILES "${CMAKE_CURRENT_BINARY_DIR} /sentencepiece.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig )
149
150
endif ()
150
151
@@ -154,21 +155,24 @@ if (SPM_BUILD_TEST)
154
155
enable_testing ()
155
156
endif ()
156
157
158
+ set (ABSL_PROPAGATE_CXX_STD ON )
157
159
if (SPM_ABSL_PROVIDER STREQUAL "internal" )
158
- include_directories (${CMAKE_CURRENT_SOURCE_DIR} /third_party/absl )
159
- elseif (SPM_ABSL_PROVIDER STREQUAL "module" )
160
160
include (FetchContent )
161
- FetchContent_Populate (abseil-cpp
162
- GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git
163
- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /third_party/abseil-cpp
164
- GIT_PROGRESS TRUE )
165
- add_subdirectory (third_party/abseil-cpp )
166
- if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR} /third_party/absl.org )
167
- file (RENAME ${CMAKE_CURRENT_SOURCE_DIR} /third_party/absl ${CMAKE_CURRENT_SOURCE_DIR} /third_party/absl.org )
168
- execute_process (COMMAND ${CMAKE_COMMAND} -E create_symlink
169
- ${CMAKE_CURRENT_SOURCE_DIR} /third_party/abseil-cpp/absl
170
- ${CMAKE_CURRENT_SOURCE_DIR} /third_party/absl )
171
- endif ()
161
+ FetchContent_Declare (
162
+ googletest
163
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /third_party/googletest )
164
+ set (ABSL_ENABLE_INSTALL ON )
165
+ set (ASBL_BUILD_TESTING OFF )
166
+ FetchContent_Declare (
167
+ absl
168
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /third_party/abseil-cpp )
169
+ FetchContent_MakeAvailable (googletest absl )
170
+ FetchContent_GetProperties (googletest SOURCE_DIR googletest_SOURCE_DIR )
171
+ include_directories ("${googletest_SOURCE_DIR} /googletest/include/" )
172
+ include_directories ("${googletest_SOURCE_DIR} /googlemock/include" )
173
+
174
+ FetchContent_GetProperties (absl SOURCE_DIR absl_SOURCE_DIR )
175
+ include_directories (${absl_SOURCE_DIR} )
172
176
elseif (SPM_ABSL_PROVIDER STREQUAL "package" )
173
177
find_package (absl REQUIRED )
174
178
get_target_property (ABSL_INCLUDE_DIRS absl::base INTERFACE_INCLUDE_DIRECTORIES )
@@ -180,6 +184,42 @@ elseif (SPM_ABSL_PROVIDER STREQUAL "package")
180
184
include_directories (${ABSL_INCLUDE_DIRS} )
181
185
endif ()
182
186
187
+ if ((${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" ) OR
188
+ (${CMAKE_SYSTEM_PROCESSOR} MATCHES "mips" ) OR
189
+ (${CMAKE_SYSTEM_PROCESSOR} MATCHES "m68k" ) OR
190
+ (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc" ) OR
191
+ (${CMAKE_SYSTEM_PROCESSOR} MATCHES "powerpc" ) OR
192
+ (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch" ) OR
193
+ (${CMAKE_SYSTEM_PROCESSOR} MATCHES "sh4" ))
194
+ set (protobuf_LINK_LIBATOMIC ON )
195
+ endif ()
196
+
197
+ # Note: Protobuf must occuring after abseil-cpp due to dependency.
198
+ if (SPM_PROTOBUF_PROVIDER STREQUAL "internal" )
199
+ set (protobuf_INSTALL ON )
200
+ set (utf8_range_ENABLE_INSTALL ON )
201
+ set (protobuf_BUILD_TESTS OFF )
202
+ # https://github.com/protocolbuffers/protobuf/issues/14549
203
+ if (${CMAKE_SYSTEM_PROCCESSOR} MATCHES "riscv|powerpc" )
204
+ set (protobuf_LINK_LIBATOMIC true )
205
+ endif ()
206
+ FetchContent_Declare (
207
+ Protobuf
208
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /third_party/protobuf/
209
+ )
210
+ if (SPM_ENABLE_SHARED )
211
+ set (protobuf_BUILD_SHARED_LIBS ON )
212
+ set (Protobuf_USE_STATIC_LIBS OFF )
213
+ else ()
214
+ set (protobuf_BUILD_SHARED_LIBS OFF )
215
+ set (Protobuf_USE_STATIC_LIBS ON )
216
+ endif ()
217
+ FetchContent_MakeAvailable (Protobuf )
218
+ FetchContent_GetProperties (Protobuf SOURCE_DIR Protobuf_SOURCE_DIR )
219
+ include (${Protobuf_SOURCE_DIR} /cmake/protobuf-generate.cmake )
220
+ include_directories ("${Protobuf_SOURCE_DIR} /src" )
221
+ endif ()
222
+
183
223
add_subdirectory (src )
184
224
add_subdirectory (third_party )
185
225
0 commit comments