/
CMakeLists.txt
160 lines (127 loc) · 5.34 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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
PROJECT(ZincPlugin)
# Name and version of our package
SET(PACKAGE_NAME Zinc)
SET(PACKAGE_VERSION 3.1.1)
# Version of our library
SET(MAJOR_LIBRARY_VERSION 3)
SET(LIBRARY_VERSION ${MAJOR_LIBRARY_VERSION}.1.1)
# Git tag for our library
SET(GIT_TAG v3.1.1)
# Specify where our local package will be installed
SET(FULL_LOCAL_EXTERNAL_PACKAGE_DIR ${PROJECT_SOURCE_DIR}/${LOCAL_EXTERNAL_PACKAGE_DIR})
# Name of our package's shared libraries (and of their import libraries, if any)
IF(WIN32)
IF(NOT RELEASE_MODE)
SET(DEBUG_TAG d)
ENDIF()
SET(SHARED_LIBRARY zinc${DEBUG_TAG}.${LIBRARY_VERSION}${DEBUG_TAG}${CMAKE_SHARED_LIBRARY_SUFFIX})
SET(IMPORT_LIBRARY zinc${DEBUG_TAG}.${LIBRARY_VERSION}${DEBUG_TAG}${CMAKE_IMPORT_LIBRARY_SUFFIX})
ELSE()
SET(SHARED_LIBRARY ${CMAKE_SHARED_LIBRARY_PREFIX}zinc${CMAKE_SHARED_LIBRARY_SUFFIX_PRE}.${MAJOR_LIBRARY_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX_POST})
SET(IMPORT_LIBRARY ${SHARED_LIBRARY})
ENDIF()
# Retrieve our package's binaries
SET(EXTERNAL_BINARIES_DIR ${FULL_LOCAL_EXTERNAL_PACKAGE_DIR}/lib)
SET(EXTERNAL_BINARIES
${SHARED_LIBRARY}
)
# Specify the files that need to have their SHA-1 value checked
SET(SHA1_FILES
lib/${SHARED_LIBRARY}
)
IF(WIN32)
LIST(APPEND SHA1_FILES
lib/${IMPORT_LIBRARY}
)
ENDIF()
# Use the pre-built version of our package unless instructed otherwise
IF(USE_PREBUILT_ZINC_PACKAGE)
# Retrieve the plugin's package
STRING(REPLACE "${${CMAKE_PROJECT_NAME}_SOURCE_DIR}/" ""
RELATIVE_PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/${REMOTE_EXTERNAL_PACKAGE_DIR}")
IF(WIN32)
IF(RELEASE_MODE)
RETRIEVE_PACKAGE_FILE(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)
ELSE()
RETRIEVE_PACKAGE_FILE(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)
ENDIF()
ELSEIF(APPLE)
RETRIEVE_PACKAGE_FILE(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} 80e42af66c2ea2d65fc76590fe76b16362cb136d
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES 38cdefca68fe8ff4e5d81ba36cf738dfdd9e1417)
ELSE()
RETRIEVE_PACKAGE_FILE(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} 82075e69cc3b524647e31603d08290286785d9c8
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES 7935dd45b285c1e8b886d305b6dd12075f0b4bb0)
ENDIF()
ELSE()
# Windows-specific installation
IF(WIN32)
SET(SHARED_lIBRARY_DIR bin)
ELSE()
SET(SHARED_lIBRARY_DIR lib)
ENDIF()
# Build Zinc as an external project
SET(PACKAGE_BUILD ${PACKAGE_NAME}Build)
ExternalProject_Add(${PACKAGE_BUILD}
SOURCE_DIR
${CMAKE_SOURCE_DIR}/ext/${PACKAGE_NAME}/setup
BINARY_DIR
${CMAKE_SOURCE_DIR}/ext/${PACKAGE_NAME}/setup-build
INSTALL_DIR
${FULL_LOCAL_EXTERNAL_PACKAGE_DIR}
GIT_REPOSITORY
https://github.com/opencor/zinc
GIT_TAG
${GIT_TAG}
CONFIGURE_COMMAND
${CMAKE_COMMAND} -DOPENCMISS_CONFIG_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_MACOSX_RPATH=ON -DOPENCMISS_ROOT=<BINARY_DIR>/.. -DOPENCMISS_LIBRARIES=zinc <SOURCE_DIR>
BUILD_COMMAND
${CMAKE_COMMAND} --build .
INSTALL_COMMAND
${CMAKE_COMMAND} -E copy_directory <SOURCE_DIR>/../install/include/opencmiss <INSTALL_DIR>/include/opencmiss
&& ${CMAKE_COMMAND} -E copy <SOURCE_DIR>/../install/${SHARED_lIBRARY_DIR}/${SHARED_LIBRARY} <INSTALL_DIR>/lib
&& ${CMAKE_COMMAND} -E copy <SOURCE_DIR>/../install/lib/${IMPORT_LIBRARY} <INSTALL_DIR>/lib
BUILD_BYPRODUCTS
<INSTALL_DIR>/lib/${IMPORT_LIBRARY}
)
# Package our external project
CREATE_PACKAGE_FILE(${PACKAGE_NAME} ${PACKAGE_VERSION}
${LOCAL_EXTERNAL_PACKAGE_DIR}
PACKAGED_FILES include ${SHA1_FILES}
SHA1_FILES ${SHA1_FILES}
TARGET ${PACKAGE_BUILD})
SET(DEPENDS_ON ${PACKAGE_BUILD})
ENDIF()
# Allow other external projects to find our Zinc package
SET(ZINC_ROOT_DIR ${FULL_LOCAL_EXTERNAL_PACKAGE_DIR} PARENT_SCOPE)
SET(ZINC_INCLUDE_DIR ${FULL_LOCAL_EXTERNAL_PACKAGE_DIR}/include PARENT_SCOPE)
SET(ZINC_LIBRARY ${EXTERNAL_BINARIES_DIR}/${IMPORT_LIBRARY} PARENT_SCOPE)
# Add the plugin
ADD_PLUGIN(${PACKAGE_NAME}
SOURCES
../../plugininfo.cpp
src/zincplugin.cpp
HEADERS_MOC
src/zincplugin.h
QT_MODULES
Core
EXTERNAL_BINARIES_DIR
${EXTERNAL_BINARIES_DIR}
EXTERNAL_BINARIES
${EXTERNAL_BINARIES}
TESTS
tests
DEPENDS_ON
${DEPENDS_ON}
)