Skip to content
Snippets Groups Projects
Unverified Commit c3e7dad5 authored by Tomáš Pecka's avatar Tomáš Pecka
Browse files

Introduce BUILD_TYPE cmake option, fix #164

parent 54c4c5cf
No related branches found
No related tags found
1 merge request!107Dev tp
Pipeline #49963 passed with warnings
...@@ -250,7 +250,7 @@ doc:doc: ...@@ -250,7 +250,7 @@ doc:doc:
before_script: before_script:
- mkdir -p build && pushd build - mkdir -p build && pushd build
- ../CMake/generate.py -wm - ../CMake/generate.py -wm
- cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. -GNinja - cmake -DBUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. -GNinja
- popd - popd
allow_failure: true # TODO: Remove allow_failure: true # TODO: Remove
dependencies: [] dependencies: []
......
...@@ -31,6 +31,14 @@ if(BACKTRACE_EXISTS) ...@@ -31,6 +31,14 @@ if(BACKTRACE_EXISTS)
add_definitions(-DBACKTRACE) add_definitions(-DBACKTRACE)
endif() endif()
   
if(BUILD_TYPE STREQUAL "Debug")
add_definitions(-DREL_DEBUG)
elseif(BUILD_TYPE STREQUAL "Release")
add_definitions(-DREL_RELEASE)
elseif(BUILD_TYPE STREQUAL "Snapshot")
add_definitions(-DREL_SNAPSHOT)
endif()
if (CMAKE_BUILD_TYPE STREQUAL "Debug") if (CMAKE_BUILD_TYPE STREQUAL "Debug")
add_definitions(-DDEBUG) add_definitions(-DDEBUG)
   
......
# Get the current working commit hash
function(set_git_version) function(set_git_version)
find_package(Git) find_package(Git)
   
if (Git_FOUND) if (NOT Git_FOUND)
execute_process ( message ( "[Git] Git not found" )
COMMAND ${GIT_EXECUTABLE} describe --tags HEAD endif()
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE ALIB_GIT_DESCRIBE
RESULT_VARIABLE RET_CODE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
   
if("${RET_CODE}" STREQUAL "0") execute_process (
COMMAND ${GIT_EXECUTABLE} describe --tags --match "v*" HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE ALIB_GIT_DESCRIBE
RESULT_VARIABLE RET_CODE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if("${RET_CODE}" STREQUAL "0")
message ( "[Git] Describe: '${ALIB_GIT_DESCRIBE}'" ) message ( "[Git] Describe: '${ALIB_GIT_DESCRIBE}'" )
SET ( ALIB_GIT_DESCRIBE "${ALIB_GIT_DESCRIBE}" PARENT_SCOPE ) SET ( ALIB_GIT_DESCRIBE "${ALIB_GIT_DESCRIBE}" PARENT_SCOPE )
else() else()
message ( WARNING "[Git] Failed retrieving current commit (return code ${RET_CODE})" ) message ( WARNING "[Git] Failed retrieving current commit (return code ${RET_CODE})" )
SET ( ALIB_GIT_DESCRIBE "<unknown commit>" PARENT_SCOPE ) SET ( ALIB_GIT_DESCRIBE "<unknown commit>" PARENT_SCOPE )
return() return()
endif() endif()
   
execute_process ( execute_process (
COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE ALIB_GIT_BRANCH OUTPUT_VARIABLE ALIB_GIT_BRANCH
RESULT_VARIABLE RET_CODE RESULT_VARIABLE RET_CODE
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_STRIP_TRAILING_WHITESPACE
) )
   
if("${RET_CODE}" STREQUAL "0") if("${RET_CODE}" STREQUAL "0")
message ( "[Git] Branch: '${ALIB_GIT_BRANCH}'" ) message ( "[Git] Branch: '${ALIB_GIT_BRANCH}'" )
SET ( ALIB_GIT_BRANCH "${ALIB_GIT_BRANCH}" PARENT_SCOPE ) SET ( ALIB_GIT_BRANCH "${ALIB_GIT_BRANCH}" PARENT_SCOPE )
else() else()
message ( WARNING "[Git] Failed retrieving current branch (return code ${RET_CODE})" ) message ( WARNING "[Git] Failed retrieving current branch (return code ${RET_CODE})" )
SET ( ALIB_GIT_BRANCH "<unknown branch>" PARENT_SCOPE ) SET ( ALIB_GIT_BRANCH "<unknown branch>" PARENT_SCOPE )
return() return()
endif() endif()
else()
message ( "[Git] Git not found" )
endif()
endfunction(set_git_version) endfunction(set_git_version)
function(set_git_snapshot_version)
set(ALIB_SNAPSHOT_VERSION ${ALIB_GIT_DESCRIBE})
string(REGEX REPLACE "^v" "" ALIB_SNAPSHOT_VERSION ${ALIB_SNAPSHOT_VERSION})
string(REGEX REPLACE "\([^-]*-g\)" "r\\1" ALIB_SNAPSHOT_VERSION ${ALIB_SNAPSHOT_VERSION})
string(REPLACE "-" "." ALIB_SNAPSHOT_VERSION ${ALIB_SNAPSHOT_VERSION})
set(ALIB_SNAPSHOT_VERSION "${ALIB_SNAPSHOT_VERSION}" PARENT_SCOPE )
message("[Git] Snapshot version: ${ALIB_SNAPSHOT_VERSION}")
endfunction(set_git_snapshot_version)
...@@ -4,9 +4,24 @@ ...@@ -4,9 +4,24 @@
message("[Versioning] Current version is ${PROJECT_VERSION}") message("[Versioning] Current version is ${PROJECT_VERSION}")
   
include(git) include(git)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
if(BUILD_TYPE MATCHES "(Debug|Snapshot)")
# sets ALIB_GIT_BRANCH
# sets ALIB_GIT_DESCRIBE
set_git_version() set_git_version()
endif() endif()
if(BUILD_TYPE STREQUAL "Snapshot")
# sets ALIB_SNAPSHOT_VERSION
set_git_snapshot_version()
endif()
if(BUILD_TYPE STREQUAL "Debug")
set(ALIB_VERSION_INFO "${PROJECT_VERSION} | Debug build @ ${ALIB_GIT_BRANCH} ${ALIB_GIT_DESCRIBE}" )
elseif(BUILD_TYPE STREQUAL "Release")
set(ALIB_VERSION_INFO "${PROJECT_VERSION}")
elseif(BUILD_TYPE STREQUAL "Snapshot")
set(ALIB_VERSION_INFO "${ALIB_SNAPSHOT_VERSION}")
endif()
   
configure_file ( configure_file (
${CONFIGURE_HEADERS_SRC_DIR}/version.hpp.in ${CONFIGURE_HEADERS_SRC_DIR}/version.hpp.in
......
#ifndef __VERSION_HPP_ #ifndef __VERSION_HPP_
#define __VERSION_HPP_ #define __VERSION_HPP_
   
#define ALIB_VERSION "${PROJECT_VERSION}" #define ALIB_VERSION "${PROJECT_VERSION}"
#define ALIB_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}" #define ALIB_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}"
#define ALIB_VERSION_MINOR "${PROJECT_VERSION_MINOR}" #define ALIB_VERSION_MINOR "${PROJECT_VERSION_MINOR}"
#define ALIB_VERSION_PATCH "${PROJECT_VERSION_PATCH}" #define ALIB_VERSION_PATCH "${PROJECT_VERSION_PATCH}"
   
#define ALIB_VERSION_STAMP ${PROJECT_VERSION_MAJOR} * 10000 + ${PROJECT_VERSION_MINOR} * 100 + ${PROJECT_VERSION_PATCH} #define ALIB_VERSION_STAMP ${PROJECT_VERSION_MAJOR} * 10000 + ${PROJECT_VERSION_MINOR} * 100 + ${PROJECT_VERSION_PATCH}
#cmakedefine ALIB_VERSION_INFO "${ALIB_VERSION_INFO}"
#ifdef DEBUG
#cmakedefine ALIB_GIT_BRANCH "${ALIB_GIT_BRANCH}"
#cmakedefine ALIB_GIT_DESCRIBE "${ALIB_GIT_DESCRIBE}"
#define ALIB_VERSION_INFO ALIB_VERSION " | Build: Debug | Git: " ALIB_GIT_BRANCH " @ " ALIB_GIT_DESCRIBE
#else // release
#define ALIB_VERSION_INFO ALIB_VERSION
#endif
   
#endif // __VERSION_HPP_ #endif // __VERSION_HPP_
...@@ -19,12 +19,18 @@ if (NOT UNIX) ...@@ -19,12 +19,18 @@ if (NOT UNIX)
endif () endif ()
   
# If not specified whether Debug or Release, select debug. Fail if invalid. # If not specified whether Debug or Release, select debug. Fail if invalid.
# cmake -DCMAKE_BUILD_TYPE={{Release,Debug}} # cmake -DBUILD_TYPE={{Release,Snapshot,Debug}}
if (NOT CMAKE_BUILD_TYPE) if (NOT BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug) set(BUILD_TYPE Debug)
endif () endif()
if (NOT CMAKE_BUILD_TYPE MATCHES "(Release|Debug)") if(NOT BUILD_TYPE MATCHES "(Release|Snapshot|Debug)")
message(FATAL_ERROR "Unsupported build type (${{CMAKE_BUILD_TYPE}})") message(FATAL_ERROR "Unsupported build type (${{BUILD_TYPE}}). Valid values: Release | Snapshot | Debug ")
elseif(BUILD_TYPE MATCHES "Release")
set(CMAKE_BUILD_TYPE Release)
elseif(BUILD_TYPE MATCHES "Snapshot")
set(CMAKE_BUILD_TYPE Release)
elseif(BUILD_TYPE MATCHES "Debug")
set(CMAKE_BUILD_TYPE Debug)
endif() endif()
   
if(DEFINED ENV{{CMAKE_BUILD_PARALLEL_LEVEL}}) if(DEFINED ENV{{CMAKE_BUILD_PARALLEL_LEVEL}})
......
...@@ -11,7 +11,7 @@ ADD . /build ...@@ -11,7 +11,7 @@ ADD . /build
WORKDIR /build/release WORKDIR /build/release
RUN ../CMake/generate.py -wm -g cli && \ RUN ../CMake/generate.py -wm -g cli && \
cmake \ cmake \
-DCMAKE_BUILD_TYPE=Release \ -DBUILD_TYPE=Snapshot \
-DCMAKE_INSTALL_PREFIX=/build/install \ -DCMAKE_INSTALL_PREFIX=/build/install \
.. && \ .. && \
make -j $(grep -c processor /proc/cpuinfo) && \ make -j $(grep -c processor /proc/cpuinfo) && \
...@@ -43,7 +43,7 @@ RUN apk add --update \ ...@@ -43,7 +43,7 @@ RUN apk add --update \
libexecinfo-dev libxml2-dev tclap-dev readline-dev qt5-qtbase-dev graphviz-dev jsoncpp-dev && \ libexecinfo-dev libxml2-dev tclap-dev readline-dev qt5-qtbase-dev graphviz-dev jsoncpp-dev && \
../CMake/generate.py -wm && \ ../CMake/generate.py -wm && \
cmake \ cmake \
-DCMAKE_BUILD_TYPE=Release \ -DBUILD_TYPE=Snapshot \
-DCMAKE_INSTALL_PREFIX=/build/install \ -DCMAKE_INSTALL_PREFIX=/build/install \
.. && \ .. && \
make -j $(grep -c processor /proc/cpuinfo) && \ make -j $(grep -c processor /proc/cpuinfo) && \
......
# -------------------------------------------------------------------------------------------------
# build-cli stage
FROM alpine:3.9 AS build-cli
RUN apk add --update \
curl bash g++ make cmake python3 \
libexecinfo-dev libxml2-dev tclap-dev readline-dev
ADD . /build
WORKDIR /build/release
RUN ../CMake/generate.py -wm -g cli && \
cmake \
-DBUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/build/install \
.. && \
make -j $(grep -c processor /proc/cpuinfo) && \
make test ARGS="-j $(grep -c processor /proc/cpuinfo) --output-on-failure" && \
make install
# -------------------------------------------------------------------------------------------------
# deploy-cli stage
FROM alpine:3.9 AS deploy-cli
LABEL maintainer="peckato1@fit.cvut.cz"
RUN apk add --update \
bash libstdc++ \
libexecinfo libxml2 tclap readline
COPY --from=build-cli /build/install /usr
CMD /usr/bin/aql2
# -------------------------------------------------------------------------------------------------
# build-all stage
FROM alpine:3.9 AS build-all
COPY --from=build-cli /build /build
WORKDIR /build/release
RUN apk add --update \
curl bash g++ make cmake python3 \
libexecinfo-dev libxml2-dev tclap-dev readline-dev qt5-qtbase-dev graphviz-dev jsoncpp-dev && \
../CMake/generate.py -wm && \
cmake \
-DBUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/build/install \
.. && \
make -j $(grep -c processor /proc/cpuinfo) && \
make test ARGS="-j $(grep -c processor /proc/cpuinfo) --output-on-failure" && \
make install
# -------------------------------------------------------------------------------------------------
# deploy-all stage
FROM alpine:3.9 AS deploy-all
LABEL maintainer="peckato1@fit.cvut.cz"
RUN apk add --update \
bash \
libstdc++ \
\
libexecinfo \
libxml2 \
tclap \
readline \
qt5-qtbase-x11 \
graphviz \
jsoncpp
COPY --from=build-all /build/install /usr
CMD /usr/bin/aql2
...@@ -35,7 +35,7 @@ build() { ...@@ -35,7 +35,7 @@ build() {
cd "$pkgbase/build" cd "$pkgbase/build"
python ../CMake/generate.py -wm python ../CMake/generate.py -wm
cmake .. \ cmake .. \
-DCMAKE_BUILD_TYPE=Release \ -DBUILD_TYPE=Snapshot \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_PREFIX=/usr
make make
} }
......
...@@ -30,7 +30,7 @@ build() { ...@@ -30,7 +30,7 @@ build() {
cd "$pkgbase-v$pkgver/build" cd "$pkgbase-v$pkgver/build"
python ../CMake/generate.py -wm python ../CMake/generate.py -wm
cmake .. \ cmake .. \
-DCMAKE_BUILD_TYPE=Release \ -DBUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_PREFIX=/usr
make make
} }
......
...@@ -22,7 +22,7 @@ override_dh_strip: ...@@ -22,7 +22,7 @@ override_dh_strip:
   
override_dh_auto_configure: override_dh_auto_configure:
./CMake/generate.py -wm ./CMake/generate.py -wm
dh_auto_configure -- -DCMAKE_BUILD_TYPE=Release dh_auto_configure -- -DBUILD_TYPE=Snapshot
   
#override_dh_auto_test: #override_dh_auto_test:
# echo "Skipping tests" # echo "Skipping tests"
...@@ -15,8 +15,14 @@ package () { ...@@ -15,8 +15,14 @@ package () {
BUILD_ALL=all_build BUILD_ALL=all_build
BUILD_CLI=cli_build BUILD_CLI=cli_build
   
docker build --target=deploy-cli -f $GIT_ROOT/extra/docker/Dockerfile.master -t $BUILD_CLI . if [[ $TYPE == "snapshot" ]]; then
docker build --target=deploy-all -f $GIT_ROOT/extra/docker/Dockerfile.master -t $BUILD_ALL . DOCKERFILE="Dockerfile.snapshot"
elif [[ $TYPE == "stable" ]]; then
DOCKERFILE="Dockerfile.stable"
fi
docker build --target=deploy-cli -f $GIT_ROOT/extra/docker/$DOCKERFILE -t $BUILD_CLI .
docker build --target=deploy-all -f $GIT_ROOT/extra/docker/$DOCKERFILE -t $BUILD_ALL .
   
docker run $BUILD_CLI /usr/bin/aql2 --help docker run $BUILD_CLI /usr/bin/aql2 --help
docker run $BUILD_ALL /usr/bin/aql2 --help docker run $BUILD_ALL /usr/bin/aql2 --help
...@@ -35,7 +41,7 @@ package () { ...@@ -35,7 +41,7 @@ package () {
docker tag "$BUILD_CLI" "$IMAGE_CLI:$TAG_STABLE" docker tag "$BUILD_CLI" "$IMAGE_CLI:$TAG_STABLE"
docker tag "$BUILD_CLI" "$IMAGE_CLI:$TAG_LATEST" docker tag "$BUILD_CLI" "$IMAGE_CLI:$TAG_LATEST"
docker tag "$BUILD_ALL" "$IMAGE_GUI:$TAG_STABLE" # gui-version is now only a symlink to all-version docker tag "$BUILD_ALL" "$IMAGE_GUI:$TAG_STABLE" # gui-version is now only a symlink to all-version
docker tag "$BUILD_ALL" "$IMAGE_GUI:$TAG_LATEST" # gui-version is now only a symlink to all-version docker tag "$BUILD_ALL" "$IMAGE_GUI:$TAG_LATEST" # gui-version is now only a symlink to all-version
docker tag "$BUILD_ALL" "$IMAGE_ALL:$TAG_STABLE" docker tag "$BUILD_ALL" "$IMAGE_ALL:$TAG_STABLE"
docker tag "$BUILD_ALL" "$IMAGE_ALL:$TAG_LATEST" docker tag "$BUILD_ALL" "$IMAGE_ALL:$TAG_LATEST"
   
......
...@@ -59,10 +59,10 @@ installed_or_exit "make" "ninja" ...@@ -59,10 +59,10 @@ installed_or_exit "make" "ninja"
   
# check if shortcut # check if shortcut
ARGS_SHORTCUT= ARGS_SHORTCUT=
if [[ $# -ge 1 ]] && [[ $1 == "release" || $1 == "debug" ]]; then if [[ $# -ge 1 ]] && [[ $1 == "release" || $1 == "debug" || $1 == "snapshot" ]]; then
ARGS_SHORTCUT=1 ARGS_SHORTCUT=1
   
if [[ $1 == "release" ]]; then if [[ $1 == "release" || $1 == "snapshot" ]]; then
BUILD_DIR="release" BUILD_DIR="release"
BUILD_MODE="Release" BUILD_MODE="Release"
elif [[ $1 == "debug" ]]; then elif [[ $1 == "debug" ]]; then
...@@ -89,6 +89,8 @@ while getopts "d:m:j:n" arg; do ...@@ -89,6 +89,8 @@ while getopts "d:m:j:n" arg; do
BUILD_MODE="Debug" BUILD_MODE="Debug"
elif [[ "$TMP" == "release" ]]; then elif [[ "$TMP" == "release" ]]; then
BUILD_MODE="Release" BUILD_MODE="Release"
elif [[ "$TMP" == "snapshot" ]]; then
BUILD_MODE="Snapshot"
else else
usage_and_exit usage_and_exit
fi fi
...@@ -157,7 +159,7 @@ else ...@@ -157,7 +159,7 @@ else
fi fi
   
   
CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=$BUILD_MODE -DCMAKE_EXPORT_COMPILE_COMMANDS=ON" CMAKE_FLAGS="-DBUILD_TYPE=$BUILD_MODE -DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
if [[ $BUILD_SYSTEM == "ninja" ]]; then if [[ $BUILD_SYSTEM == "ninja" ]]; then
CMAKE_FLAGS="$CMAKE_FLAGS -GNinja" CMAKE_FLAGS="$CMAKE_FLAGS -GNinja"
fi fi
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment