From cca2a88e477ac97142e5fc7280e5a772c361fe9c Mon Sep 17 00:00:00 2001 From: Adam Treat Date: Fri, 21 Apr 2023 23:23:57 -0400 Subject: [PATCH] Getting ready for next update. --- CMakeLists.txt | 37 ++++++++++++++++++++------- cmake/deploy-qt-linux.cmake.in | 19 +++++++------- cmake/deploy-qt-mac.cmake.in | 3 --- cmake/deploy-qt-windows.cmake.in | 3 --- cmake/installerscript.qs | 43 ++++++++++++++++++-------------- test_hw.cpp | 4 +-- 6 files changed, 64 insertions(+), 45 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 96436743..0580d534 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,8 +13,8 @@ if(APPLE) endif() set(APP_VERSION_MAJOR 2) -set(APP_VERSION_MINOR 1) -set(APP_VERSION_PATCH 1) +set(APP_VERSION_MINOR 2) +set(APP_VERSION_PATCH 0) set(APP_VERSION "${APP_VERSION_MAJOR}.${APP_VERSION_MINOR}.${APP_VERSION_PATCH}") # Generate a header file with the version number @@ -32,7 +32,21 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD_REQUIRED ON) -find_package(Qt6 6.2 COMPONENTS Quick Svg REQUIRED) +find_package(Qt6 6.2 COMPONENTS Core Quick Svg REQUIRED) + +# 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}") set(LLAMA_BUILD_EXAMPLES ON CACHE BOOL "llama: build examples" FORCE) set(BUILD_SHARED_LIBS ON FORCE) @@ -84,25 +98,28 @@ target_link_libraries(chat target_link_libraries(chat PRIVATE llama) +set(COMPONENT_NAME_MAIN ${PROJECT_NAME}) +set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install) + if(NOT (CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64")) add_executable(test_hw test_hw.cpp) + install(TARGETS test_hw DESTINATION bin COMPONENT ${COMPONENT_NAME_MAIN}) endif() -set(COMPONENT_NAME_MAIN ${PROJECT_NAME}) -set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install) install(TARGETS chat DESTINATION bin COMPONENT ${COMPONENT_NAME_MAIN}) set(CPACK_GENERATOR "IFW") - -set(BUNDLED_MODEL_NAME "ggml-gpt4all-j-v1.2-jazzy.bin") +set(CPACK_VERBATIM_VARIABLES YES) +set(CPACK_IFW_VERBOSE ON) if(${CMAKE_SYSTEM_NAME} MATCHES Linux) - set(LINUXDEPLOYQT "/home/atreat/dev/linuxdeployqt/build/tools/linuxdeployqt/linuxdeployqt") + set(LINUXDEPLOYQT "$ENV{HOME}/dev/linuxdeployqt/build/tools/linuxdeployqt/linuxdeployqt") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-linux.cmake.in" "${CMAKE_BINARY_DIR}/cmake/deploy-qt-linux.cmake" @ONLY) set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_BINARY_DIR}/cmake/deploy-qt-linux.cmake) set(CPACK_IFW_ROOT "~/Qt/Tools/QtInstallerFramework/4.5") set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-linux") + set(CPACK_IFW_TARGET_DIRECTORY "@HomeDir@/${COMPONENT_NAME_MAIN}") elseif(${CMAKE_SYSTEM_NAME} MATCHES Windows) find_program(WINDEPLOYQT windeployqt HINTS ${_qt_bin_dir}) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-windows.cmake.in" @@ -111,6 +128,7 @@ elseif(${CMAKE_SYSTEM_NAME} MATCHES Windows) set(CPACK_IFW_ROOT "C:/Qt/Tools/QtInstallerFramework/4.5") set(CPACK_IFW_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/favicon.ico") set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-win64") + set(CPACK_IFW_TARGET_DIRECTORY "@HomeDir@\\${COMPONENT_NAME_MAIN}") elseif(${CMAKE_SYSTEM_NAME} MATCHES Darwin) find_program(MACDEPLOYQT macdeployqt HINTS ${_qt_bin_dir}) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/deploy-qt-mac.cmake.in" @@ -119,6 +137,7 @@ elseif(${CMAKE_SYSTEM_NAME} MATCHES Darwin) set(CPACK_IFW_ROOT "~/Qt/Tools/QtInstallerFramework/4.5") set(CPACK_IFW_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icons/favicon.icns") set(CPACK_PACKAGE_FILE_NAME "${COMPONENT_NAME_MAIN}-installer-darwin") + set(CPACK_IFW_TARGET_DIRECTORY "@HomeDir@/Applications/${COMPONENT_NAME_MAIN}") endif() set(CPACK_PACKAGE_INSTALL_DIRECTORY ${COMPONENT_NAME_MAIN}) @@ -145,7 +164,7 @@ include(CPackIFW) cpack_add_component(${COMPONENT_NAME_MAIN} DOWNLOADED) cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} ESSENTIAL FORCED_INSTALLATION) cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} VERSION ${APP_VERSION}) -cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} LICENSES "GPL-3.0 LICENSE" ${CPACK_RESOURCE_FILE_LICENSE}) +cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} LICENSES "MIT LICENSE" ${CPACK_RESOURCE_FILE_LICENSE}) cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/installerscript.qs") cpack_ifw_configure_component(${COMPONENT_NAME_MAIN} REPLACES "gpt4all-chat") #Was used in very earliest prototypes diff --git a/cmake/deploy-qt-linux.cmake.in b/cmake/deploy-qt-linux.cmake.in index 25406184..3fb0825c 100644 --- a/cmake/deploy-qt-linux.cmake.in +++ b/cmake/deploy-qt-linux.cmake.in @@ -1,17 +1,18 @@ set(LINUXDEPLOYQT "@LINUXDEPLOYQT@") -set(BUNDLED_MODEL_NAME "@BUNDLED_MODEL_NAME@") set(COMPONENT_NAME_MAIN "@COMPONENT_NAME_MAIN@") set(CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@") -execute_process(COMMAND ${LINUXDEPLOYQT} ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data/bin/chat -qmldir=${CMAKE_CURRENT_SOURCE_DIR} -verbose=2) -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/models/${BUNDLED_MODEL_NAME} - DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data/bin) +set(DATA_DIR ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data) +set(BIN_DIR ${DATA_DIR}/bin) +set(Qt6_ROOT_DIR "@Qt6_ROOT_DIR@") +set(ENV{LD_LIBRARY_PATH} "${BIN_DIR}:${Qt6_ROOT_DIR}/../lib/") +execute_process(COMMAND ${LINUXDEPLOYQT} ${BIN_DIR}/chat -qmldir=${CMAKE_CURRENT_SOURCE_DIR} -bundle-non-qt-libs -qmake=${Qt6_ROOT_DIR}/bin/qmake -verbose=2) file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-16.png" - DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data) + DESTINATION ${DATA_DIR}) file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-32.png" - DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data) + DESTINATION ${DATA_DIR}) file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-48.png" - DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data) + DESTINATION ${DATA_DIR}) file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-64.png" - DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data) + DESTINATION ${DATA_DIR}) file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-256.png" - DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data) + DESTINATION ${DATA_DIR}) diff --git a/cmake/deploy-qt-mac.cmake.in b/cmake/deploy-qt-mac.cmake.in index 11861f71..3f4242d2 100644 --- a/cmake/deploy-qt-mac.cmake.in +++ b/cmake/deploy-qt-mac.cmake.in @@ -1,10 +1,7 @@ set(MACDEPLOYQT "@MACDEPLOYQT@") -set(BUNDLED_MODEL_NAME "@BUNDLED_MODEL_NAME@") set(COMPONENT_NAME_MAIN "@COMPONENT_NAME_MAIN@") set(CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@") execute_process(COMMAND ${MACDEPLOYQT} ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data/bin/chat.app -qmldir=${CMAKE_CURRENT_SOURCE_DIR} -verbose=2) -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/models/${BUNDLED_MODEL_NAME} - DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data/bin/chat.app/Contents/MacOS) file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-16.png" DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data) file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-32.png" diff --git a/cmake/deploy-qt-windows.cmake.in b/cmake/deploy-qt-windows.cmake.in index b55db5b3..f0c2b6cd 100644 --- a/cmake/deploy-qt-windows.cmake.in +++ b/cmake/deploy-qt-windows.cmake.in @@ -1,10 +1,7 @@ set(WINDEPLOYQT "@WINDEPLOYQT@") -set(BUNDLED_MODEL_NAME "@BUNDLED_MODEL_NAME@") set(COMPONENT_NAME_MAIN "@COMPONENT_NAME_MAIN@") set(CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@") execute_process(COMMAND ${WINDEPLOYQT} --qmldir ${CMAKE_CURRENT_SOURCE_DIR} ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data/bin) -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/models/${BUNDLED_MODEL_NAME} - DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data/bin) file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-16.png" DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/packages/${COMPONENT_NAME_MAIN}/data) file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/icons/logo-32.png" diff --git a/cmake/installerscript.qs b/cmake/installerscript.qs index 375cd632..8843c91d 100644 --- a/cmake/installerscript.qs +++ b/cmake/installerscript.qs @@ -1,43 +1,48 @@ -function Component() -{ - // default constructor +function Component() { } +var targetDirectory; +Component.prototype.beginInstallation = function() { + targetDirectory = installer.value("TargetDir"); +}; + Component.prototype.createOperations = function() { try { // call the base create operations function component.createOperations(); - if (systemInfo.productType === "windows") { try { var userProfile = installer.environmentVariable("USERPROFILE"); installer.setValue("UserProfile", userProfile); component.addOperation("CreateShortcut", - "@TargetDir@/bin/chat.exe", + targetDirectory + "/bin/chat.exe", "@UserProfile@/Desktop/GPT4All.lnk", - "workingDirectory=@TargetDir@/bin", - "iconPath=@TargetDir@/favicon.ico", - "iconId=0", "description=Open GPT4All Chat"); + "workingDirectory=" + targetDirectory + "/bin", + "iconPath=" + targetDirectory + "/favicon.ico", + "iconId=0", "description=Open GPT4All"); } catch (e) { print("ERROR: creating desktop shortcut" + e); } component.addOperation("CreateShortcut", - "@TargetDir@/bin/chat.exe", + targetDirectory + "/bin/chat.exe", "@StartMenuDir@/GPT4All.lnk", - "workingDirectory=@TargetDir@/bin", - "iconPath=@TargetDir@/favicon.ico", - "iconId=0", "description=Open GPT4All Chat"); + "workingDirectory=" + targetDirectory + "/bin", + "iconPath=" + targetDirectory + "/favicon.ico", + "iconId=0", "description=Open GPT4All"); } else if (systemInfo.productType === "osx") { + targetDirectory += "/chat.app/Contents/MacOS/" } else { // linux - component.addOperation("CreateDesktopEntry", - "/usr/share/applications/GPT4AllChat.desktop", - "Type=Application\nTerminal=false\nExec=\"@TargetDir@/bin/chat\"\nName=GPT4All-Chat\nIcon=@TargetDir@/logo-48.png\nName[en_US]=GPT4All-Chat"); - component.addElevatedOperation("Copy", - "/usr/share/applications/GPT4AllChat.desktop", - "@HomeDir@/Desktop/GPT4AllChat.desktop"); + var homeDir = installer.environmentVariable("HOME"); + if (!installer.fileExists(homeDir + "/Desktop/GPT4All.desktop")) { + component.addOperation("CreateDesktopEntry", + homeDir + "/Desktop/GPT4All.desktop", + "Type=Application\nTerminal=false\nExec=\"" + targetDirectory + + "/bin/chat\"\nName=GPT4All\nIcon=" + targetDirectory + + "/logo-48.png\nName[en_US]=GPT4All"); + } } } catch (e) { - print("ERROR: creating desktop/startmenu shortcuts" + e); + print("ERROR: running post installscript.qs" + e); } } diff --git a/test_hw.cpp b/test_hw.cpp index 6b7373f2..eef10129 100644 --- a/test_hw.cpp +++ b/test_hw.cpp @@ -9,9 +9,9 @@ int main(int argc, char *argv[]) static bool sse3 = __builtin_cpu_supports("sse3"); static std::string s; s = "gpt4all hardware test results:\n"; - s += " AVX = " + std::to_string(avx) + "\n"; + s += " AVX = " + std::to_string(avx) + "\n"; s += " AVX2 = " + std::to_string(avx2) + "\n"; - s += " FMA = " + std::to_string(fma) + "\n"; + s += " FMA = " + std::to_string(fma) + "\n"; s += " SSE3 = " + std::to_string(sse3) + "\n"; fprintf(stderr, "%s", s.c_str()); fprintf(stderr, "your hardware supports the \"");