Commit 0d99a8d9 authored by Mark Meredith's avatar Mark Meredith
Browse files

Build without Conan

parent a410bae1
Loading
Loading
Loading
Loading
Loading
+41 −14
Original line number Diff line number Diff line
@@ -4,11 +4,6 @@ stages:
  - build-img
  - test

variables:
  CONAN_LOGIN_USERNAME: ci_user
  CONAN_PASSWORD: ${CI_JOB_TOKEN}
  REPO: gitlab

build-img:
  stage: build-img
  image:
@@ -22,21 +17,53 @@ build-img:
    - docker


.package: &package_template
###### Test jobs #####

.test:cmake: &cmake_def
  stage: test
  image: $CI_REGISTRY_IMAGE:latest
  needs: ['build-img']
  script:
    - GIT_SHA=$(git rev-parse HEAD)
    - conan config install settings.yml
    - conan create . exa/stable -s compiler=${COMPILER} -s compiler.version=${CVERSION} -s compiler.libcxx=${LIBCXX}
    - git clone --depth 1 --branch v2.13.7 https://github.com/catchorg/Catch2
    - cmake -SCatch2 -Bbuild-catch2 -GNinja
    - cmake --build build-catch2 --target install

    - wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.lz
    - tar xf gmp-6.2.1.tar.lz
    - pushd gmp-6.2.1
    - ./configure
    - make install
    - popd

    - wget https://www.mpfr.org/mpfr-current/mpfr-4.1.0.tar.xz
    - tar xf mpfr-4.1.0.tar.xz
    - pushd mpfr-4.1.0
    - ./configure
    - make install
    - popd

    - git clone --depth 1 --branch v5.3 https://github.com/CGAL/cgal
    - cmake -Scgal -Bbuild-cgal -GNinja
    - cmake --build build-cgal --target install

    - git clone --branch 3.2.2 https://github.com/taocpp/PEGTL
    - cmake -SPEGTL -Bbuild-pegtl -GNinja
    - cmake --build build-pegtl --target install

    - cmake -S. -Bbuild -GNinja -DCMAKE_BUILD_TYPE=$BUILD_TYPE
    - cmake --build build --target unit_tests_csg
    - cd build
    - ctest
  tags:
    - docker

test:cmake:debug:
  variables:
    BUILD_TYPE: "Debug"
  <<: *cmake_def

package:gcc:
test:cmake:release:
  variables:
    COMPILER: gcc
    CVERSION: 9
    LIBCXX: libstdc++
  <<: *package_template
    BUILD_TYPE: "Release"
  allow_failure: true
  <<: *cmake_def
+0 −3
Original line number Diff line number Diff line
[submodule "subprojects/cmake-conan"]
	path = subprojects/cmake-conan
	url = https://github.com/conan-io/cmake-conan
+15 −65
Original line number Diff line number Diff line
@@ -10,69 +10,19 @@ set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

include(${CMAKE_CURRENT_SOURCE_DIR}/subprojects/cmake-conan/conan.cmake)

find_program(CONAN_EXECUTABLE conan)
if(NOT CONAN_EXECUTABLE)
   message(WARNING "
   Did not find conan in PATH. Recommend installing with 'pip install conan'.
   Will try downloading Conan with PMM <https://github.com/vector-of-bool/pmm>")
   include(pmm.cmake)
   pmm(CONAN)
endif()

message(STATUS "Installing conan settings for csg-eb")
execute_process(
   COMMAND ${CONAN_EXECUTABLE} config install ${CMAKE_CURRENT_SOURCE_DIR}/settings.yml
   COMMAND_ERROR_IS_FATAL ANY
   )

conan_cmake_configure(REQUIRES
   catch2/2.13.7
   GENERATORS cmake_find_package)

if(CONAN_SETTINGS)
   set(settings ${CONAN_SETTINGS})
else()
   conan_cmake_autodetect(settings)
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
  set( CMAKE_CXX_COMPILER_LAUNCHER ccache )
endif()

conan_cmake_install(PATH_OR_REFERENCE ${CMAKE_CURRENT_BINARY_DIR}/conanfile.txt
   BUILD missing
   SETTINGS ${settings})
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_BINARY_DIR})
find_package(Catch2 REQUIRED)
find_package(pegtl REQUIRED)
find_package(CGAL REQUIRED)

execute_process(
   COMMAND git rev-parse HEAD
   WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
   OUTPUT_VARIABLE CSGEB_SHA
   ERROR_VARIABLE  err
   )

if(err)
   message(WARNING "Failed to retrieve CSG-EB Git commit")
else()
   string(STRIP ${CSGEB_SHA} CSGEB_SHA)
   message(STATUS "CSG-EB commit: ${CSGEB_SHA}")
endif()

message(STATUS "Disabling mfix-gitlab remote (if it exists)")
execute_process(
   COMMAND ${CONAN_EXECUTABLE} remote disable mfix-gitlab
   )
add_subdirectory(src/csg)

execute_process(
   COMMAND ${CONAN_EXECUTABLE} create --build=missing ${CMAKE_CURRENT_SOURCE_DIR}
   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
   COMMAND_ERROR_IS_FATAL ANY
target_include_directories(csg-eb
  PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
  PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
  )
conan_cmake_configure(REQUIRES
   csg-eb/${CSGEB_SHA}
   GENERATORS cmake_find_package)
conan_cmake_install(PATH_OR_REFERENCE ${CMAKE_CURRENT_BINARY_DIR}/conanfile.txt
   BUILD missing
   SETTINGS ${settings})

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_BINARY_DIR})
find_package(csg-eb REQUIRED)
target_compile_features(csg-eb PRIVATE cxx_std_17)
+5 −1
Original line number Diff line number Diff line
@@ -8,17 +8,21 @@ ENV DEBIAN_FRONTEND noninteractive

RUN apt-get -qq update \
  && apt-get -qq -y install --no-install-recommends \
  autoconf=2.* \
  build-essential=12.* \
  git=1:2.* \
  libboost-all-dev=1.* \
  lunzip=1.* \
  m4=1.* \
  openscad=2019.* \
  pkg-config=0.29.* \
  python3-pip=20.* \
  python3-venv=3.8.* \
  wget=1.* \
  && apt-get clean && rm -rf /var/lib/apt/lists/* \

  && pip3 install --no-cache-dir \
  cmake==3.* \
  conan==1.* \
  ninja==1.*

CMD [ "/bin/bash" ]
+0 −6
Original line number Diff line number Diff line
@@ -25,12 +25,6 @@ Dependencies:

 - C++17 compiler (GCC >=7.x, Clang >=5.x)
 - CMake >=3.14
 - Conan (CMake will try to install Conan if `conan` is not in `PATH`)

CMake will try to install [Conan](https://conan.io) if `conan` is not in `PATH`.
However, installing Conan (`pip install conan`) is recommended for faster builds.

#### Build

```shell
> cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
Loading