-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
148 lines (110 loc) · 4.67 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
cmake_minimum_required(VERSION 3.16)
option(ENABLE_WIX "Enable generating installer with WiX" OFF)
option(SUPPRESS_WIX_VALIDATION "Suppress validation in WiX" OFF)
option(INSTALL_QT "Install QT dlls when ENABLE_WIX is off (windows only)" OFF)
set(OCTCALC_VERSION_MAJOR 0)
set(OCTCALC_VERSION_MINOR 5)
set(OCTCALC_VERSION_PATCHLEVEL 0)
set(OCTCALC_VERSION ${OCTCALC_VERSION_MAJOR}.${OCTCALC_VERSION_MINOR}.${OCTCALC_VERSION_PATCHLEVEL})
set(OCTCALC_SOVERSION ${OCTCALC_VERSION_MAJOR})
message(STATUS "Configuring OctCalc ${OCTCALC_VERSION_MAJOR}.${OCTCALC_VERSION_MINOR}.${OCTCALC_VERSION_PATCHLEVEL}")
project(octcalc LANGUAGES CXX)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt6 COMPONENTS Widgets REQUIRED HINTS "c:/opt/qt6")
find_package(Qt6 COMPONENTS Test REQUIRED HINTS "c:/opt/qt6")
if(WIN32 OR NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
endif()
string(TOLOWER "${CMAKE_BUILD_TYPE}" LC_CMAKE_BUILD_TYPE)
enable_testing()
# Include submodules
set(SUBMODULE_INSTALL_DIR "${CMAKE_BINARY_DIR}/submodules")
include(ExternalProject)
include(FindPkgConfig)
if (NOT EXISTS "${PROJECT_SOURCE_DIR}/submodules")
file(MAKE_DIRECTORY "${PROJECT_SOURCE_DIR}/submodules")
endif()
# TLFloat
set(TLFLOAT_MINIMUM_VERSION 1.8.0)
set(TLFLOAT_GIT_TAG "1d198349174783f8e4e592770019ca138b5871bb")
#
set(TLFLOAT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/submodules/tlfloat")
set(TLFLOAT_INSTALL_DIR "${SUBMODULE_INSTALL_DIR}/tlfloat")
set(TLFLOAT_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${TLFLOAT_INSTALL_DIR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DBUILD_TESTS=False)
if (CMAKE_C_COMPILER)
list(APPEND TLFLOAT_CMAKE_ARGS -DCMAKE_C_COMPILER:PATH=${CMAKE_C_COMPILER})
endif()
if (CMAKE_CXX_COMPILER)
list(APPEND TLFLOAT_CMAKE_ARGS -DCMAKE_CXX_COMPILER:PATH=${CMAKE_CXX_COMPILER})
endif()
if (CMAKE_TOOLCHAIN_FILE)
list(APPEND TLFLOAT_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE})
endif()
if (EXISTS "${TLFLOAT_SOURCE_DIR}/CMakeLists.txt")
# If the source code of tlfloat is already downloaded, use it
ExternalProject_Add(ext_tlfloat
SOURCE_DIR "${TLFLOAT_SOURCE_DIR}"
CMAKE_ARGS ${TLFLOAT_CMAKE_ARGS}
)
include_directories(BEFORE "${TLFLOAT_INSTALL_DIR}/include")
link_directories("${TLFLOAT_INSTALL_DIR}/lib")
else()
pkg_search_module(TLFLOAT tlfloat)
if (TLFLOAT_FOUND AND TLFLOAT_VERSION VERSION_GREATER_EQUAL TLFLOAT_MINIMUM_VERSION)
# If tlfloat is installed on the system
add_custom_target(ext_tlfloat ALL)
include_directories(BEFORE "${TLFLOAT_INCLUDE_DIRS}")
link_directories(BEFORE "${TLFLOAT_LIBDIR}")
message(STATUS "Found installed TLFloat " ${TLFLOAT_VERSION})
else()
# Otherwise, download the source code
find_package(Git REQUIRED)
ExternalProject_Add(ext_tlfloat
GIT_REPOSITORY https://github.com/shibatch/tlfloat
GIT_TAG "${TLFLOAT_GIT_TAG}"
SOURCE_DIR "${TLFLOAT_SOURCE_DIR}"
CMAKE_ARGS ${TLFLOAT_CMAKE_ARGS}
)
include_directories(BEFORE "${TLFLOAT_INSTALL_DIR}/include")
link_directories(BEFORE "${TLFLOAT_INSTALL_DIR}/lib")
endif()
endif()
# Setup WIX
if (WIN32 AND ENABLE_WIX)
set(CPACK_PACKAGE_NAME "OctCalc")
set(CPACK_PACKAGE_VENDOR "Naoki Shibata")
set(CPACK_PACKAGE_DESCRIPTION "Octuple precision calculator")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/shibatch/octcalc")
set(CPACK_WIX_PROPERTY_ARPCOMMENTS "OctCalc")
set(CPACK_WIX_PROPERTY_ARPHELPLINK "https://github.com/shibatch/octcalc")
set(CPACK_WIX_PROPERTY_ARPURLINFOABOUT "https://github.com/shibatch/octcalc")
set(CPACK_WIX_UPGRADE_GUID "5f89bb9b-edb8-4ca3-9e6c-27df3858054c")
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE.txt)
set(CPACK_PACKAGE_NAME "OctCalc")
set(CPACK_PACKAGE_VERSION "${OCTCALC_VERSION}")
set(CPACK_WIX_PROGRAM_MENU_FOLDER "OctCalc")
SET(CMAKE_INSTALL_PREFIX "C:/Program Files/OctCalc" CACHE PATH "Install path" FORCE)
SET(CPACK_SET_DESTDIR FALSE)
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "OctCalc")
SET(CPACK_PACKAGING_INSTALL_PREFIX "")
if (SUPPRESS_WIX_VALIDATION)
list(APPEND CPACK_WIX_LIGHT_EXTRA_FLAGS "-sval")
endif()
#
find_program(WINDEPLOYQT_EXECUTABLE windeployqt)
#
set(INSTALL_PREFIX "")
set(CPACK_GENERATOR WIX)
include(CPack)
else()
set(INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/")
endif()
set(INSTALL_BINDIR "${INSTALL_PREFIX}bin")
set(INSTALL_DATADIR "${INSTALL_PREFIX}share/octcalc")
add_compile_definitions(OCTCALC_VERSION_MAJOR=${OCTCALC_VERSION_MAJOR})
add_compile_definitions(OCTCALC_VERSION_MINOR=${OCTCALC_VERSION_MINOR})
add_compile_definitions(OCTCALC_VERSION_PATCHLEVEL=${OCTCALC_VERSION_PATCHLEVEL})
add_subdirectory("src")
message(STATUS "CMAKE_BUILD_TYPE : " ${CMAKE_BUILD_TYPE})