Skip to content

Commit daf630d

Browse files
authored
Support CMake install/find_package (#207)
* cmake: support install and build options * include CTest module and make test targets optional. BUILD_TESTING will be ON by default * add 'gemmlowp' INTERFACE target to forward header search path * support CMake 'find_package' with config.cmake export * travis-ci: add build/test job for CMake
1 parent f995960 commit daf630d

File tree

3 files changed

+104
-60
lines changed

3 files changed

+104
-60
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
/.idea/
99
CMakeLists.txt
1010
/bazel-*
11-
cmake_build/
11+
cmake_build/
12+
cmake_install/

.travis.yml

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,35 @@
1-
language: android
2-
3-
os:
4-
- linux
51

62
sudo: false
73

8-
compiler:
9-
- clang
10-
11-
env:
12-
- NDK_VERSION=r14b TEST=arm
13-
- TEST=x86
14-
15-
script:
16-
- ./scripts/ci-test.sh
17-
18-
android:
19-
components:
20-
- build-tools-22.0.1
21-
- android-22
22-
- ndk-bundle
23-
- sys-img-armeabi-v7a-android-22
4+
jobs:
5+
include:
6+
- stage: build
7+
name: Android NDK
8+
language: android
9+
compiler: clang
10+
os:
11+
- linux
12+
env:
13+
- NDK_VERSION=r14b TEST=arm
14+
- TEST=x86
15+
android:
16+
components:
17+
- build-tools-22.0.1
18+
- android-22
19+
- ndk-bundle
20+
- sys-img-armeabi-v7a-android-22
21+
before_script:
22+
- ./scripts/ci-before.sh
23+
script:
24+
- ./scripts/ci-test.sh
2425

25-
before_script:
26-
- ./scripts/ci-before.sh
26+
- name: Linux CMake(clang)
27+
os: linux
28+
dist: bionic
29+
language: cpp
30+
compiler: clang
31+
script:
32+
- cmake -S contrib -B cmake_build -DCMAKE_INSTALL_PREFIX=cmake_install
33+
- cmake --build cmake_build
34+
- cmake --build cmake_build --target install
35+
- ctest --test-dir cmake_build --output-on-failure --output-junit TEST-${TRAVIS_COMMIT}.xml

contrib/CMakeLists.txt

Lines changed: 71 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ cmake_minimum_required(VERSION 3.7)
77
# Project
88
project(gemmlowp C CXX)
99

10+
include(CTest) # option(BUILD_TESTING). ON by default.
11+
include(GNUInstallDirs)
12+
1013
# Set C++11 as default standard
1114
set(CMAKE_CXX_STANDARD 11)
1215

@@ -52,40 +55,71 @@ else()
5255
endif()
5356
target_link_libraries(eight_bit_int_gemm ${EXTERNAL_LIBRARIES})
5457

55-
# Benchmarks
56-
add_executable(benchmark
57-
"${gemmlowp_src}/test/benchmark.cc" ${gemmlowp_test_headers})
58-
target_link_libraries(benchmark ${EXTERNAL_LIBRARIES})
59-
60-
add_executable(benchmark_all_sizes
61-
"${gemmlowp_src}/test/benchmark_all_sizes.cc" ${gemmlowp_test_headers})
62-
target_compile_options(benchmark_all_sizes PRIVATE -DBENCHMARK_8bit -DBENCHMARK_QUICK)
63-
target_link_libraries(benchmark_all_sizes ${EXTERNAL_LIBRARIES})
64-
65-
# Gemmlowp test
66-
add_executable(test_gemmlowp
67-
"${gemmlowp_src}/test/test.cc" "${gemmlowp_src}/test/test_data.cc" ${gemmlowp_test_headers})
68-
target_link_libraries(test_gemmlowp eight_bit_int_gemm)
69-
70-
# Math helpers test
71-
add_executable(test_math_helpers
72-
"${gemmlowp_src}/test/test_math_helpers.cc" ${gemmlowp_test_headers})
73-
74-
# BlockingCounter test
75-
add_executable(test_blocking_counter
76-
"${gemmlowp_src}/test/test_blocking_counter.cc" ${gemmlowp_test_headers})
77-
target_link_libraries(test_blocking_counter ${EXTERNAL_LIBRARIES})
78-
79-
# Allocator test
80-
add_executable(test_allocator
81-
"${gemmlowp_src}/test/test_allocator.cc" ${gemmlowp_test_headers})
82-
83-
# FixedPoint test
84-
add_executable(test_fixedpoint
85-
"${gemmlowp_src}/test/test_fixedpoint.cc" ${gemmlowp_test_headers})
86-
87-
# Add tests
88-
enable_testing()
89-
foreach(testname "test_math_helpers" "test_blocking_counter" "test_allocator" "test_fixedpoint" "test_gemmlowp")
90-
add_test(NAME ${testname} COMMAND "${testname}")
91-
endforeach(testname)
58+
# INTERFACE target to help header include
59+
add_library(gemmlowp INTERFACE)
60+
target_include_directories(gemmlowp INTERFACE
61+
$<BUILD_INTERFACE:${gemmlowp_src}>
62+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/gemmlowp>)
63+
target_link_libraries(gemmlowp INTERFACE eight_bit_int_gemm)
64+
65+
install(FILES ${eight_bit_int_gemm_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/gemmlowp/eight_bit_int_gemm)
66+
file(GLOB meta_headers "${gemmlowp_src}/meta/*.h")
67+
install(FILES ${meta_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/gemmlowp/meta)
68+
file(GLOB public_headers "${gemmlowp_src}/public/*.h")
69+
install(FILES ${public_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/gemmlowp/public)
70+
file(GLOB profile_headers "${gemmlowp_src}/profiling/*.h")
71+
install(FILES ${profile_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/gemmlowp/profiling)
72+
file(GLOB internal_headers "${gemmlowp_src}/internal/*.h")
73+
install(FILES ${internal_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/gemmlowp/internal)
74+
file(GLOB fixedpoint_headers "${gemmlowp_src}/fixedpoint/*.h")
75+
install(FILES ${fixedpoint_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/gemmlowp/fixedpoint)
76+
77+
install(TARGETS gemmlowp eight_bit_int_gemm
78+
EXPORT gemmlowp-config # support find_package(gemmlowp CONFIG)
79+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
80+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
81+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
82+
83+
install(EXPORT gemmlowp-config # export gemmlowp::gemmlowp
84+
NAMESPACE gemmlowp:: # gemmlowp::eight_bit_int_gemm
85+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/gemmlowp)
86+
87+
if(BUILD_TESTING)
88+
# Benchmarks
89+
add_executable(benchmark
90+
"${gemmlowp_src}/test/benchmark.cc" ${gemmlowp_test_headers})
91+
target_link_libraries(benchmark ${EXTERNAL_LIBRARIES})
92+
93+
add_executable(benchmark_all_sizes
94+
"${gemmlowp_src}/test/benchmark_all_sizes.cc" ${gemmlowp_test_headers})
95+
target_compile_options(benchmark_all_sizes PRIVATE -DBENCHMARK_8bit -DBENCHMARK_QUICK)
96+
target_link_libraries(benchmark_all_sizes ${EXTERNAL_LIBRARIES})
97+
98+
# Gemmlowp test
99+
add_executable(test_gemmlowp
100+
"${gemmlowp_src}/test/test.cc" "${gemmlowp_src}/test/test_data.cc" ${gemmlowp_test_headers})
101+
target_link_libraries(test_gemmlowp eight_bit_int_gemm)
102+
103+
# Math helpers test
104+
add_executable(test_math_helpers
105+
"${gemmlowp_src}/test/test_math_helpers.cc" ${gemmlowp_test_headers})
106+
107+
# BlockingCounter test
108+
add_executable(test_blocking_counter
109+
"${gemmlowp_src}/test/test_blocking_counter.cc" ${gemmlowp_test_headers})
110+
target_link_libraries(test_blocking_counter ${EXTERNAL_LIBRARIES})
111+
112+
# Allocator test
113+
add_executable(test_allocator
114+
"${gemmlowp_src}/test/test_allocator.cc" ${gemmlowp_test_headers})
115+
116+
# FixedPoint test
117+
add_executable(test_fixedpoint
118+
"${gemmlowp_src}/test/test_fixedpoint.cc" ${gemmlowp_test_headers})
119+
120+
# Add tests
121+
enable_testing()
122+
foreach(testname "test_math_helpers" "test_blocking_counter" "test_allocator" "test_fixedpoint" "test_gemmlowp")
123+
add_test(NAME ${testname} COMMAND "${testname}")
124+
endforeach(testname)
125+
endif()

0 commit comments

Comments
 (0)