diff --git a/CMakeLists.txt b/CMakeLists.txt index a45755d..3bb41ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,11 @@ project(IDHAN LANGUAGES CXX) enable_testing() +find_program(CCACHE_FOUND ccache) +if (CCACHE_FOUND) + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) +endif () + # Includes fgl_cmake_modules add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/dependencies/libFGL) @@ -27,7 +32,7 @@ option(BUILD_IDHAN_TOOLS "Builds all tools" OFF) option(BUILD_HYDRUS_IMPORTER "Builds the hydrus importer" ON) if (BUILD_HYDRUS_IMPORTER) - set(BUILD_IDHAN_CLIENT ON) + set(BUILD_IDHAN_CLIENT ON) endif () set(CMAKE_POSITION_INDEPENDENT_CODE ON) @@ -38,87 +43,87 @@ include(toml) add_subdirectory(IDHAN) if (BUILD_IDHAN_SERVER) - add_subdirectory(IDHANMigration) - add_subdirectory(IDHANModules) - add_subdirectory(IDHANServer) + add_subdirectory(IDHANMigration) + add_subdirectory(IDHANModules) + add_subdirectory(IDHANServer) endif () if (BUILD_IDHAN_CLIENT) - add_subdirectory(IDHANClient) + add_subdirectory(IDHANClient) endif () if (BUILD_IDHAN_TOOLS) - add_subdirectory(tools/TagEditor) + add_subdirectory(tools/TagEditor) endif () if (BUILD_IDHAN_DOCS) - add_subdirectory(docs) + add_subdirectory(docs) endif () if (BUILD_IDHAN_WEBUI) - include(ExternalProject) + include(ExternalProject) - if (NOT DEFINED QT_WASM) - message(FATAL_ERROR "You must define QT_WASM during cmake config") - endif () + if (NOT DEFINED QT_WASM) + message(FATAL_ERROR "You must define QT_WASM during cmake config") + endif () - set(EMSDK ${QT_WASM}/emsdk) - set(EMSDK_TOOLCHAIN) + set(EMSDK ${QT_WASM}/emsdk) + set(EMSDK_TOOLCHAIN) - find_program(QTCMAKE_EXECUTABLE qt-cmake - PATHS "${QT_WASM}/bin" - NO_DEFAULT_PATH) + find_program(QTCMAKE_EXECUTABLE qt-cmake + PATHS "${QT_WASM}/bin" + NO_DEFAULT_PATH) - if (NOT QTCMAKE_EXECUTABLE) - message(FATAL_ERROR "qt-cmake not found for wasm") - endif () + if (NOT QTCMAKE_EXECUTABLE) + message(FATAL_ERROR "qt-cmake not found for wasm") + endif () - set(WEBUI_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/IDHANWebUI) - set(WEBUI_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/IDHANWebUI) + set(WEBUI_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/IDHANWebUI) + set(WEBUI_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/IDHANWebUI) - # In order for this to work you need to set the env variables in /opt/qt6-wasm/qtwasm_env.sh - # The following is a copy of that file - # #/opt/qt6-wasm/emsdk/emsdk activate 3.1.70 - # - # # load emsdk environment - # # EM_CACHE issue: https://github.com/emscripten-core/emsdk/issues/535 - # EM_CACHE_PATH=~/.cache/qt6-wasm - # export EM_CACHE=$EM_CACHE_PATH - # source /opt/qt6-wasm/emsdk/emsdk_env.sh - # export EM_CACHE=$EM_CACHE_PATH - # echo "EM_CACHE (override) = $EM_CACHE" - # - # # Export Qt6 WebAssembly bin Path - # echo $PATH | grep -w "/opt/qt6-wasm/bin" > /dev/null - # if [ $? -ne 0 ]; then - # export PATH=/opt/qt6-wasm/bin:$PATH - # fi + # In order for this to work you need to set the env variables in /opt/qt6-wasm/qtwasm_env.sh + # The following is a copy of that file + # #/opt/qt6-wasm/emsdk/emsdk activate 3.1.70 + # + # # load emsdk environment + # # EM_CACHE issue: https://github.com/emscripten-core/emsdk/issues/535 + # EM_CACHE_PATH=~/.cache/qt6-wasm + # export EM_CACHE=$EM_CACHE_PATH + # source /opt/qt6-wasm/emsdk/emsdk_env.sh + # export EM_CACHE=$EM_CACHE_PATH + # echo "EM_CACHE (override) = $EM_CACHE" + # + # # Export Qt6 WebAssembly bin Path + # echo $PATH | grep -w "/opt/qt6-wasm/bin" > /dev/null + # if [ $? -ne 0 ]; then + # export PATH=/opt/qt6-wasm/bin:$PATH + # fi - ExternalProject_Add( - IDHANWebUI_WASM - SOURCE_DIR ${WEBUI_SOURCE_DIR} - BINARY_DIR ${WEBUI_BUILD_DIR} - CONFIGURE_COMMAND ${CMAKE_COMMAND} - -S ${WEBUI_SOURCE_DIR} - -B ${WEBUI_BUILD_DIR} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DWASM_OUT_DIR=${CMAKE_CURRENT_BINARY_DIR}/bin/static - BUILD_COMMAND ${CMAKE_COMMAND} --build ${WEBUI_BUILD_DIR} - INSTALL_COMMAND "" # Needed or this errors - BUILD_ALWAYS YES - ) + ExternalProject_Add( + IDHANWebUI_WASM + SOURCE_DIR ${WEBUI_SOURCE_DIR} + BINARY_DIR ${WEBUI_BUILD_DIR} + CONFIGURE_COMMAND ${CMAKE_COMMAND} + -S ${WEBUI_SOURCE_DIR} + -B ${WEBUI_BUILD_DIR} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DWASM_OUT_DIR=${CMAKE_CURRENT_BINARY_DIR}/bin/static + BUILD_COMMAND ${CMAKE_COMMAND} --build ${WEBUI_BUILD_DIR} + INSTALL_COMMAND "" # Needed or this errors + BUILD_ALWAYS YES + ) - add_custom_target(IDHANWebUIFiles DEPENDS ${WEBUI_FILES_OUTPUT}) - add_dependencies(IDHANServer IDHANWebUI_WASM IDHANWebUIFiles) + add_custom_target(IDHANWebUIFiles DEPENDS ${WEBUI_FILES_OUTPUT}) + add_dependencies(IDHANServer IDHANWebUI_WASM IDHANWebUIFiles) endif () if (BUILD_IDHAN_TESTS) - #IDHANTests - add_subdirectory(tests) + #IDHANTests + add_subdirectory(tests) endif () if (BUILD_HYDRUS_IMPORTER) - #HydrusImporter - include(sqlite3) - add_subdirectory(HydrusImporter) + #HydrusImporter + include(sqlite3) + add_subdirectory(HydrusImporter) endif () PostSetup() \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index c5b20bd..c884d3f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,8 @@ RUN DEBIAN_FRONTNED=noninteractive apt-get install -y \ git \ pkg-config \ gcc-14 \ - g++-14 + g++-14 \ + ccache # Server build dependencies RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \ @@ -51,7 +52,9 @@ RUN cmake -S . -B build \ -DBUILD_IDHAN_CLIENT=OFF \ -DBUILD_IDHAN_TOOLS=OFF -RUN cmake --build build --target IDHANServer -j$(nproc) +ENV CCACHE_DIR=/root/.ccache +RUN --mount=type=cache,target=/root/.ccache \ + cmake --build build --target IDHANServer -j$(nproc) # Stage 2: Runtime environment FROM ubuntu:24.04 diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index d406fad..086d1e6 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -8,8 +8,10 @@ services: POSTGRES_DB: idhan-db volumes: - postgres_data:/var/lib/postgresql/data + ports: + - "5432:5432" healthcheck: - test: ["CMD-SHELL", "pg_isready -U idhan"] + test: [ "CMD-SHELL", "pg_isready -U idhan" ] interval: 10s timeout: 5s retries: 5