From 753089aec8cd08ea15c23c4c3bc78da6ae35b053 Mon Sep 17 00:00:00 2001 From: JackCarterSmith Date: Sun, 19 May 2024 10:08:52 +0200 Subject: [PATCH] Validated conan v2 migration --- .gitignore | 1 + CMakeLists.txt | 5 ++- Jenkinsfile | 8 ++--- README.md | 54 ++++++++++++------------------- RSETerrain/CMakeLists.txt | 14 +++++--- cmake/mingw_cross_toolchain.cmake | 8 ----- conanfile.txt | 12 +++---- 7 files changed, 43 insertions(+), 59 deletions(-) delete mode 100644 cmake/mingw_cross_toolchain.cmake diff --git a/.gitignore b/.gitignore index 25478cc..180b8c1 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,4 @@ install_manifest.txt compile_commands.json CTestTestfile.cmake _deps +CMakeUserPresets.json diff --git a/CMakeLists.txt b/CMakeLists.txt index 455f52a..54cd00d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,8 +7,8 @@ # CMake requirement and general configuration -cmake_minimum_required(VERSION 3.12) -cmake_policy(VERSION 3.12) +cmake_minimum_required(VERSION 3.15) +cmake_policy(VERSION 3.15) set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}) if(DEFINED ENV{MS_COMPATIBLE}) set(CMAKE_GNUtoMS ON) # Enable compatibility level to exported libraries @@ -24,7 +24,6 @@ else() # Standalone project mode, should not be used for release. set(RSE_TERRAIN_NAME RSETerrain) endif() set(RSP_TERRAIN_LIB_NAME RSPTerrain${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR}) -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") diff --git a/Jenkinsfile b/Jenkinsfile index b12b2b9..40a001e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -23,9 +23,9 @@ pipeline { checkout([$class: 'GitSCM', branches: [[name: '**']], browser: [$class: 'GiteaBrowser', repoUrl: 'https://git.jcsmith.fr/JCS-Prod/RSE-Terrain'], extensions: [], userRemoteConfigs: [[credentialsId: 'jenkins-ssh', url: 'ssh://git@git.jcsmith.fr:2322/JCS-Prod/RSE-Terrain.git']]]) sh 'git submodule update --init --recursive' dir("build") { - rtConanRun(clientId: "conan", command: "install .. -pr:b=default -pr:h=default --build=missing") + rtConanRun(clientId: "conan", command: "install .. -s build_type=Release -pr:b=default -pr:h=default --build=missing") } - cmakeBuild buildDir: 'build', installation: 'latest', steps: [[args: 'all']] + cmakeBuild buildDir: 'build', cmakeArgs: '-DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" -DCMAKE_BUILD_TYPE=Release', installation: 'latest', steps: [[args: 'all']] } }, windows: { @@ -33,9 +33,9 @@ pipeline { checkout([$class: 'GitSCM', branches: [[name: '**']], browser: [$class: 'GiteaBrowser', repoUrl: 'https://git.jcsmith.fr/JCS-Prod/RSE-Terrain'], extensions: [], userRemoteConfigs: [[credentialsId: 'jenkins-ssh', url: 'ssh://git@git.jcsmith.fr:2322/JCS-Prod/RSE-Terrain.git']]]) sh 'git submodule update --init --recursive' dir("build") { - rtConanRun(clientId: "conan", command: "install .. -pr:b=default -pr:h=windows --build=missing") + rtConanRun(clientId: "conan", command: "install .. -s build_type=Release -pr:b=default -pr:h=windows --build=missing") } - cmakeBuild buildDir: 'build', cmakeArgs: '-DGNU_HOST=x86_64-w64-mingw32 -DCMAKE_TOOLCHAIN_FILE=../cmake/mingw_cross_toolchain.cmake', installation: 'latest', steps: [[args: 'all']] + cmakeBuild buildDir: 'build', cmakeArgs: '-DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_RC_COMPILER=x86_64-w64-mingw32-windres -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" -DCMAKE_BUILD_TYPE=Release', installation: 'latest', steps: [[args: 'all']] } } ) diff --git a/README.md b/README.md index 3da2195..fd823bc 100644 --- a/README.md +++ b/README.md @@ -43,46 +43,34 @@ Due to issue with copyrights, I can't provide samples... You need to extract HOB ### Dependencies -- libpng (1.6.37) -- obj-lib: as obj file exporter. (https://git.jcsmith.fr/jackcartersmith/obj) +- [zlib](https://www.zlib.net/) (1.2.13) +- [libpng](http://www.libpng.org/pub/png/libpng.html) (1.6.40) +- [obj-lib](https://git.jcsmith.fr/jackcartersmith/obj "obj file exporter") ### Compiling -You can compile on both Windows (MinGW) or native Linux system thanks to CMake, you only need to adjust your dependencies on Windows or use Conan packages manager (https://conan.io). +You can compile on both Windows (MinGW) or native Linux environment thanks to CMake, you only need to adjust your dependencies on Windows or use Conan packages manager (https://conan.io). libpng16-dev distrib package can be used on debian/ubuntu. -To compile, just clone (**don't forget git submodules**) and launch cmake: + + +### Compiling + +I've a preference for compiling libraries by hand, mainly for backward compatibility, but I recommend using Conan packages manager (https://conan.io) for simplicity. (**Don't forget git submodules**) ```shell -cmake . -make -make install -``` - -On Windows system, I can suggest you to use Conan support to help you with dependencies: - -```shell -mkdir build +conan install -of build . --build=missing -pr:b=default -pr:h=default cd build -conan install .. --build=missing -cmake .. -G "MinGW Makefiles" -make -``` - -If you want to do it manually without Conan support, you will probably need to specify the dependency flags for CMake. Ex: - -`cmake.exe -D"ZLIB_INCLUDE_DIR=zlib/1.2.11/include" -D"ZLIB_LIBRARY=zlib/1.2.11/lib/libzlib.dll.a" -D"PNG_PNG_INCLUDE_DIR=libpng/1.6.37/include" -D"PNG_LIBRARY=libpng/1.6.37/lib/libpng.dll.a" . -G "MinGW Makefiles"` - -We can also use cross-compilation (after installing `mingw64` and `cmake` packages on your distrib): - -```shell -mkdir build && cd build -cmake -DGNU_HOST=x86_64-w64-mingw32 \ - -DCMAKE_TOOLCHAIN_FILE=../cmake/mingw_cross_toolchain.cmake \ - -D"ZLIB_INCLUDE_DIR=zlib/1.2.11/include" \ - -D"ZLIB_LIBRARY=zlib/1.2.11/lib/libzlib.dll.a" \ - -D"PNG_PNG_INCLUDE_DIR=libpng/1.6.37/include" \ - -D"PNG_LIBRARY=libpng/1.6.37/lib/libpng.dll.a" \ - .. +cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" cmake --build . ``` + +On Windows environment, you can use MinGW `-G "MinGW Makefiles"` or Ninja `-G "Ninja"` as CMake generator. + +### Compiling (HARDCORE) + +If you want to do it manually without Conan, you will probably need to specify the dependency flags for CMake. Ex: + +`cmake.exe -D"ZLIB_INCLUDE_DIR=zlib/1.2.13/include" -D"ZLIB_LIBRARY=zlib/1.2.13/lib/libzlib.dll.a" -D"PNG_PNG_INCLUDE_DIR=libpng/1.6.40/include" -D"PNG_LIBRARY=libpng/1.6.40/lib/libpng.dll.a" . -G "MinGW Makefiles"` + +I've tested cross-compilation too, but since I want to check that Conan is working properly at each release, I've integrated it into the Jenkins flow using Conan for the cross-abstraction. diff --git a/RSETerrain/CMakeLists.txt b/RSETerrain/CMakeLists.txt index 8208e5e..6040794 100644 --- a/RSETerrain/CMakeLists.txt +++ b/RSETerrain/CMakeLists.txt @@ -12,7 +12,7 @@ include(CheckCSourceCompiles) if(BUILD_TOOLS) # Import needed packages and references their include path - find_package(PNG 1.6.37 REQUIRED) + find_package(PNG 1.6.40 REQUIRED) include_directories(${PNG_INCLUDE_DIR}) find_package(GLEW REQUIRED) include_directories(${GLEW_INCLUDE_DIR}) @@ -44,9 +44,13 @@ if(BUILD_TOOLS) endif() # Link externals libraries to the linker - if(RSPTERRAIN_SHARED) - target_link_libraries(rse-terrain PRIVATE rsp-terrain-lib ${PNG_LIBRARIES} ${GLEW_LIBRARIES} ${AUX_LIBS}) - elseif(RSPTERRAIN_STATIC) - target_link_libraries(rse-terrain PRIVATE rsp-terrain-libstatic ${PNG_LIBRARIES} ${GLEW_LIBRARIES} ${AUX_LIBS}) + if (TARGET GLEW::GLEW) + if (TARGET PNG::PNG) + if(RSPTERRAIN_SHARED) + target_link_libraries(rse-terrain PRIVATE rsp-terrain-lib PNG::PNG GLEW::GLEW ${AUX_LIBS}) + elseif(RSPTERRAIN_STATIC) + target_link_libraries(rse-terrain PRIVATE rsp-terrain-libstatic PNG::PNG GLEW::GLEW ${AUX_LIBS}) + endif() + endif() endif() endif() diff --git a/cmake/mingw_cross_toolchain.cmake b/cmake/mingw_cross_toolchain.cmake deleted file mode 100644 index aaf5303..0000000 --- a/cmake/mingw_cross_toolchain.cmake +++ /dev/null @@ -1,8 +0,0 @@ -SET(CMAKE_SYSTEM_NAME Windows) -IF("${GNU_HOST}" STREQUAL "") - SET(GNU_HOST i586-mingw32msvc) -ENDIF() -# Prefix detection only works with compiler id "GNU" -SET(CMAKE_C_COMPILER ${GNU_HOST}-gcc) -# CMake doesn't automatically look for prefixed 'windres', do it manually: -SET(CMAKE_RC_COMPILER ${GNU_HOST}-windres) diff --git a/conanfile.txt b/conanfile.txt index 5c5c19e..0688c03 100644 --- a/conanfile.txt +++ b/conanfile.txt @@ -1,15 +1,15 @@ [requires] -zlib/1.2.12 -libpng/1.6.37 +zlib/1.2.13 +libpng/1.6.40 glew/2.2.0 [generators] -cmake -cmake_find_package +CMakeDeps +CMakeToolchain [options] -libpng:shared=True -glew:shared=True +libpng/*:shared=True +glew/*:shared=True [imports] bin, *.dll -> ./bin \ No newline at end of file