2023-04-08 23:28:39 -04:00
cmake_minimum_required ( VERSION 3.16 )
2023-04-14 12:19:03 -04:00
if ( APPLE )
2023-04-20 06:35:17 -04:00
option ( BUILD_UNIVERSAL "Build a Universal binary on macOS" OFF )
if ( BUILD_UNIVERSAL )
# Build a Universal binary on macOS
# This requires that the found Qt library is compiled as Universal binaries.
set ( CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE )
else ( )
# Build for the host architecture on macOS
set ( CMAKE_OSX_ARCHITECTURES "${CMAKE_HOST_SYSTEM_PROCESSOR}" CACHE STRING "" FORCE )
endif ( )
2023-04-14 12:19:03 -04:00
endif ( )
2023-04-17 07:50:39 -04:00
set ( APP_VERSION_MAJOR 2 )
2023-05-05 11:43:25 -04:00
set ( APP_VERSION_MINOR 4 )
2023-05-05 20:11:24 -04:00
set ( APP_VERSION_PATCH 1 )
2023-04-16 19:20:43 -04:00
set ( APP_VERSION "${APP_VERSION_MAJOR}.${APP_VERSION_MINOR}.${APP_VERSION_PATCH}" )
# Include the binary directory for the generated header file
include_directories ( "${CMAKE_CURRENT_BINARY_DIR}" )
2023-04-20 19:34:39 -04:00
project ( gpt4all VERSION ${ APP_VERSION } LANGUAGES CXX C )
2023-04-08 23:28:39 -04:00
set ( CMAKE_AUTOMOC ON )
set ( CMAKE_AUTORCC ON )
set ( CMAKE_CXX_STANDARD_REQUIRED ON )
2023-04-26 11:02:05 -04:00
option ( GPT4ALL_LOCALHOST OFF "Build installer for localhost repo" )
2023-04-25 19:16:45 -04:00
option ( GPT4ALL_AVX_ONLY OFF "Build for avx only" )
2023-04-29 12:13:11 -04:00
option ( GPT4ALL_OFFLINE_INSTALLER "Build an offline installer" OFF )
2023-04-25 19:16:45 -04:00
2023-05-08 08:23:00 -04:00
# Generate a header file with the version number
configure_file (
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e / c o n f i g . h . i n "
" $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / c o n f i g . h "
)
2023-04-25 13:12:04 -04:00
find_package ( Qt6 6.2 COMPONENTS Core Quick QuickDialogs2 Svg REQUIRED )
2023-04-21 23:23:57 -04:00
# Get the Qt6Core target properties
get_target_property ( Qt6Core_INCLUDE_DIRS Qt6::Core INTERFACE_INCLUDE_DIRECTORIES )
get_target_property ( Qt6Core_LIBRARY_RELEASE Qt6::Core LOCATION_RELEASE )
# Find the qmake binary
find_program ( QMAKE_EXECUTABLE NAMES qmake qmake6 PATHS ${ Qt6Core_INCLUDE_DIRS } /../.. NO_DEFAULT_PATH )
# Get the Qt 6 root directory
get_filename_component ( Qt6_ROOT_DIR "${Qt6Core_LIBRARY_RELEASE}" DIRECTORY )
get_filename_component ( Qt6_ROOT_DIR "${Qt6_ROOT_DIR}/.." ABSOLUTE )
message ( STATUS "qmake binary: ${QMAKE_EXECUTABLE}" )
message ( STATUS "Qt 6 root directory: ${Qt6_ROOT_DIR}" )
2023-04-08 23:28:39 -04:00
2023-04-25 19:16:45 -04:00
add_subdirectory ( llmodel )
2023-04-08 23:28:39 -04:00
2023-04-26 22:59:37 -04:00
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ CMAKE_BINARY_DIR } /bin )
2023-04-08 23:28:39 -04:00
qt_add_executable ( chat
m a i n . c p p
2023-05-01 17:13:20 -04:00
c h a t . h c h a t . c p p
2023-05-01 09:10:05 -04:00
c h a t l l m . h c h a t l l m . c p p
2023-05-04 15:31:41 -04:00
c h a t m o d e l . h c h a t l i s t m o d e l . h c h a t l i s t m o d e l . c p p
2023-04-18 21:10:06 -04:00
d o w n l o a d . h d o w n l o a d . c p p
2023-04-14 14:44:28 -04:00
n e t w o r k . h n e t w o r k . c p p
2023-04-08 23:28:39 -04:00
l l m . h l l m . c p p
2023-05-02 20:31:17 -04:00
s y s i n f o . h
2023-04-08 23:28:39 -04:00
)
qt_add_qml_module ( chat
2023-04-23 09:42:35 -04:00
U R I g p t 4 a l l
2023-04-08 23:28:39 -04:00
V E R S I O N 1 . 0
2023-04-14 14:44:28 -04:00
Q M L _ F I L E S
m a i n . q m l
2023-05-01 13:51:46 -04:00
q m l / C h a t D r a w e r . q m l
2023-04-14 14:44:28 -04:00
q m l / M o d e l D o w n l o a d e r D i a l o g . q m l
2023-04-28 10:54:05 -04:00
q m l / N e t w o r k D i a l o g . q m l
q m l / N e w V e r s i o n D i a l o g . q m l
2023-04-14 14:44:28 -04:00
q m l / T h u m b s D o w n D i a l o g . q m l
2023-04-23 06:58:07 -04:00
q m l / S e t t i n g s D i a l o g . q m l
2023-04-28 10:54:05 -04:00
q m l / S t a r t u p D i a l o g . q m l
2023-04-23 07:05:43 -04:00
q m l / P o p u p D i a l o g . q m l
2023-05-05 10:47:05 -04:00
q m l / A b o u t D i a l o g . q m l
2023-04-23 09:42:35 -04:00
q m l / T h e m e . q m l
2023-04-10 23:34:34 -04:00
R E S O U R C E S
i c o n s / s e n d _ m e s s a g e . s v g
i c o n s / s t o p _ g e n e r a t i n g . s v g
i c o n s / r e g e n e r a t e . s v g
2023-04-11 08:54:57 -04:00
i c o n s / c o p y . s v g
2023-04-16 01:14:30 -04:00
i c o n s / s e t t i n g s . s v g
2023-04-14 14:44:28 -04:00
i c o n s / e d i t . s v g
2023-05-01 20:56:53 -04:00
i c o n s / t r a s h . s v g
2023-04-14 14:44:28 -04:00
i c o n s / n e t w o r k . s v g
i c o n s / t h u m b s _ u p . s v g
i c o n s / t h u m b s _ d o w n . s v g
i c o n s / l o g o . s v g
2023-04-12 22:12:01 -04:00
i c o n s / l o g o - 3 2 . p n g
i c o n s / l o g o - 4 8 . p n g
2023-04-13 06:49:47 -04:00
i c o n s / f a v i c o n . i c o
i c o n s / f a v i c o n . i c n s
2023-04-08 23:28:39 -04:00
)
set_target_properties ( chat PROPERTIES
2023-04-23 22:57:37 -04:00
M A C O S X _ B U N D L E _ G U I _ I D E N T I F I E R g p t 4 a l l
2023-04-08 23:28:39 -04:00
M A C O S X _ B U N D L E _ B U N D L E _ V E R S I O N $ { P R O J E C T _ V E R S I O N }
M A C O S X _ B U N D L E _ S H O R T _ V E R S I O N _ S T R I N G $ { P R O J E C T _ V E R S I O N _ M A J O R } . $ { P R O J E C T _ V E R S I O N _ M I N O R }
M A C O S X _ B U N D L E T R U E
W I N 3 2 _ E X E C U T A B L E T R U E
2023-04-24 00:33:57 -04:00
M A C O S X _ B U N D L E _ I C O N _ F I L E " f a v i c o n . i c n s "
2023-04-08 23:28:39 -04:00
)
2023-04-23 23:42:55 -04:00
if ( ${ CMAKE_SYSTEM_NAME } MATCHES Darwin )
set_target_properties ( chat PROPERTIES
O U T P U T _ N A M E g p t 4 a l l
)
endif ( )
2023-04-08 23:28:39 -04:00
target_compile_definitions ( chat
P R I V A T E $ < $ < O R : $ < C O N F I G : D e b u g > , $ < C O N F I G : R e l W i t h D e b I n f o > > : Q T _ Q M L _ D E B U G > )
target_link_libraries ( chat
P R I V A T E Q t 6 : : Q u i c k Q t 6 : : S v g )
target_link_libraries ( chat
2023-04-25 19:16:45 -04:00
P R I V A T E l l m o d e l )
2023-04-10 15:03:00 -04:00
2023-04-21 23:23:57 -04:00
set ( COMPONENT_NAME_MAIN ${ PROJECT_NAME } )
set ( CMAKE_INSTALL_PREFIX ${ CMAKE_BINARY_DIR } /install )
2023-04-21 13:46:50 -04:00
if ( NOT ( CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64" ) )
add_executable ( test_hw test_hw.cpp )
2023-04-21 23:23:57 -04:00
install ( TARGETS test_hw DESTINATION bin COMPONENT ${ COMPONENT_NAME_MAIN } )
2023-04-21 11:23:51 -04:00
endif ( )
2023-04-20 19:34:39 -04:00
2023-04-10 15:03:00 -04:00
install ( TARGETS chat DESTINATION bin COMPONENT ${ COMPONENT_NAME_MAIN } )
2023-04-25 19:16:45 -04:00
install ( TARGETS llmodel DESTINATION lib COMPONENT ${ COMPONENT_NAME_MAIN } )
2023-04-23 23:38:12 -04:00
install ( TARGETS llama DESTINATION lib COMPONENT ${ COMPONENT_NAME_MAIN } )
2023-04-10 15:03:00 -04:00
set ( CPACK_GENERATOR "IFW" )
2023-04-21 23:23:57 -04:00
set ( CPACK_VERBATIM_VARIABLES YES )
set ( CPACK_IFW_VERBOSE ON )
2023-04-16 22:10:26 -04:00
2023-04-10 16:33:14 -04:00
if ( ${ CMAKE_SYSTEM_NAME } MATCHES Linux )
2023-04-21 23:23:57 -04:00
set ( LINUXDEPLOYQT "$ENV{HOME}/dev/linuxdeployqt/build/tools/linuxdeployqt/linuxdeployqt" )
2023-04-10 16:33:14 -04:00
configure_file ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-linux.cmake.in"
" $ { C M A K E _ B I N A R Y _ D I R } / c m a k e / d e p l o y - q t - l i n u x . c m a k e " @ O N L Y )
set ( CPACK_PRE_BUILD_SCRIPTS ${ CMAKE_BINARY_DIR } /cmake/deploy-qt-linux.cmake )
set ( CPACK_IFW_ROOT "~/Qt/Tools/QtInstallerFramework/4.5" )
2023-04-17 15:59:14 -04:00
set ( CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-linux" )
2023-04-21 23:23:57 -04:00
set ( CPACK_IFW_TARGET_DIRECTORY "@HomeDir@/${COMPONENT_NAME_MAIN}" )
2023-04-10 16:33:14 -04:00
elseif ( ${ CMAKE_SYSTEM_NAME } MATCHES Windows )
2023-04-10 15:03:00 -04:00
find_program ( WINDEPLOYQT windeployqt HINTS ${ _qt_bin_dir } )
configure_file ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-windows.cmake.in"
" $ { C M A K E _ B I N A R Y _ D I R } / c m a k e / d e p l o y - q t - w i n d o w s . c m a k e " @ O N L Y )
set ( CPACK_PRE_BUILD_SCRIPTS ${ CMAKE_BINARY_DIR } /cmake/deploy-qt-windows.cmake )
set ( CPACK_IFW_ROOT "C:/Qt/Tools/QtInstallerFramework/4.5" )
2023-04-12 15:31:21 -04:00
set ( CPACK_IFW_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/favicon.ico" )
2023-04-17 15:59:14 -04:00
set ( CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-win64" )
2023-04-21 23:23:57 -04:00
set ( CPACK_IFW_TARGET_DIRECTORY "@HomeDir@\\${COMPONENT_NAME_MAIN}" )
2023-04-10 16:33:14 -04:00
elseif ( ${ CMAKE_SYSTEM_NAME } MATCHES Darwin )
2023-04-10 17:13:22 -04:00
find_program ( MACDEPLOYQT macdeployqt HINTS ${ _qt_bin_dir } )
configure_file ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-mac.cmake.in"
" $ { C M A K E _ B I N A R Y _ D I R } / c m a k e / d e p l o y - q t - m a c . c m a k e " @ O N L Y )
set ( CPACK_PRE_BUILD_SCRIPTS ${ CMAKE_BINARY_DIR } /cmake/deploy-qt-mac.cmake )
set ( CPACK_IFW_ROOT "~/Qt/Tools/QtInstallerFramework/4.5" )
2023-04-12 15:31:21 -04:00
set ( CPACK_IFW_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/favicon.icns" )
2023-04-17 15:59:14 -04:00
set ( CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-darwin" )
2023-04-28 21:19:12 -04:00
set ( CPACK_IFW_TARGET_DIRECTORY "@ApplicationsDir@/${COMPONENT_NAME_MAIN}" )
2023-04-23 22:05:24 -04:00
set ( CPACK_BUNDLE_NAME ${ COMPONENT_NAME_MAIN } )
set ( CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/favicon.icns" )
2023-04-10 16:33:14 -04:00
endif ( )
2023-04-10 15:03:00 -04:00
2023-04-17 15:59:14 -04:00
set ( CPACK_PACKAGE_INSTALL_DIRECTORY ${ COMPONENT_NAME_MAIN } )
2023-04-13 04:59:48 -04:00
set ( CPACK_PACKAGE_VERSION_MAJOR ${ PROJECT_VERSION_MAJOR } )
set ( CPACK_PACKAGE_VERSION_MINOR ${ PROJECT_VERSION_MINOR } )
SET ( CPACK_PACKAGE_VERSION_PATCH ${ PROJECT_VERSION_PATCH } )
2023-04-11 12:16:49 -04:00
set ( CPACK_PACKAGE_HOMEPAGE_URL "https://gpt4all.io" )
2023-04-28 21:40:45 -04:00
set ( CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-48.png" )
2023-04-11 12:16:49 -04:00
set ( CPACK_RESOURCE_FILE_LICENSE ${ CMAKE_CURRENT_SOURCE_DIR } /LICENSE )
set ( CPACK_RESOURCE_FILE_README ${ CMAKE_CURRENT_SOURCE_DIR } /README.md )
2023-04-17 07:50:39 -04:00
set ( CPACK_PACKAGE_EXECUTABLES "GPT4All" )
set ( CPACK_CREATE_DESKTOP_LINKS "GPT4All" )
set ( CPACK_IFW_PACKAGE_NAME "GPT4All" )
set ( CPACK_IFW_PACKAGE_TITLE "GPT4All Installer" )
2023-04-16 19:20:43 -04:00
set ( CPACK_IFW_PACKAGE_PUBLISHER "Nomic, Inc." )
set ( CPACK_IFW_PRODUCT_URL "https://gpt4all.io" )
2023-04-10 15:03:00 -04:00
set ( CPACK_IFW_PACKAGE_WIZARD_STYLE "Aero" )
2023-04-28 21:40:45 -04:00
set ( CPACK_IFW_PACKAGE_LOGO "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-48.png" )
set ( CPACK_IFW_PACKAGE_WINDOW_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-32.png" )
2023-04-10 15:03:00 -04:00
set ( CPACK_IFW_PACKAGE_WIZARD_SHOW_PAGE_LIST OFF )
2023-04-11 12:16:49 -04:00
2023-04-28 21:26:38 -04:00
include ( InstallRequiredSystemLibraries )
2023-04-10 15:03:00 -04:00
include ( CPack )
include ( CPackIFW )
cpack_add_component ( ${ COMPONENT_NAME_MAIN } DOWNLOADED )
cpack_ifw_configure_component ( ${ COMPONENT_NAME_MAIN } ESSENTIAL FORCED_INSTALLATION )
2023-04-16 19:20:43 -04:00
cpack_ifw_configure_component ( ${ COMPONENT_NAME_MAIN } VERSION ${ APP_VERSION } )
2023-04-21 23:23:57 -04:00
cpack_ifw_configure_component ( ${ COMPONENT_NAME_MAIN } LICENSES "MIT LICENSE" ${ CPACK_RESOURCE_FILE_LICENSE } )
2023-04-12 16:42:17 -04:00
cpack_ifw_configure_component ( ${ COMPONENT_NAME_MAIN } SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/installerscript.qs" )
2023-04-13 05:49:00 -04:00
cpack_ifw_configure_component ( ${ COMPONENT_NAME_MAIN } REPLACES "gpt4all-chat" ) #Was used in very earliest prototypes
2023-04-10 15:03:00 -04:00
2023-04-24 01:08:13 -04:00
if ( GPT4ALL_LOCALHOST )
cpack_ifw_add_repository ( "GPT4AllRepository" URL "http://localhost/repository" )
2023-04-29 12:13:11 -04:00
elseif ( GPT4ALL_OFFLINE_INSTALLER )
cpack_ifw_add_repository ( "GPT4AllRepository" URL "file://${CMAKE_BINARY_DIR}/packages" )
2023-04-24 01:08:13 -04:00
else ( )
if ( ${ CMAKE_SYSTEM_NAME } MATCHES Linux )
if ( GPT4ALL_AVX_ONLY )
cpack_ifw_add_repository ( "GPT4AllRepository" URL "https://gpt4all.io/installer_repos/avx_only/linux/repository" )
else ( )
cpack_ifw_add_repository ( "GPT4AllRepository" URL "https://gpt4all.io/installer_repos/linux/repository" )
endif ( )
elseif ( ${ CMAKE_SYSTEM_NAME } MATCHES Windows )
#To sign the target on windows have to create a batch script add use it as a custom target and then use CPACK_IFW_EXTRA_TARGETS to set this extra target
if ( GPT4ALL_AVX_ONLY )
cpack_ifw_add_repository ( "GPT4AllRepository" URL "https://gpt4all.io/installer_repos/avx_only/windows/repository" )
else ( )
cpack_ifw_add_repository ( "GPT4AllRepository" URL "https://gpt4all.io/installer_repos/windows/repository" )
endif ( )
elseif ( ${ CMAKE_SYSTEM_NAME } MATCHES Darwin )
if ( GPT4ALL_AVX_ONLY )
cpack_ifw_add_repository ( "GPT4AllRepository" URL "https://gpt4all.io/installer_repos/avx_only/mac/repository" )
else ( )
cpack_ifw_add_repository ( "GPT4AllRepository" URL "https://gpt4all.io/installer_repos/mac/repository" )
endif ( )
endif ( )
2023-04-10 23:34:34 -04:00
endif ( )