Compare commits
30 Commits
feature/pr
...
develop
Author | SHA1 | Date | |
---|---|---|---|
1075d381f1 | |||
b2049d3df1 | |||
5a3ef5575c | |||
acb9c85abd | |||
5b86f90bbf | |||
f0cf3ea154 | |||
9acaeff409 | |||
565958c631 | |||
6a3e32ac50 | |||
8efb009adf | |||
28e332c527 | |||
b7c0f20db6 | |||
a272a1ee39 | |||
eb861daf9c | |||
a5e6948487 | |||
64d97ae834 | |||
785428fb09 | |||
3492a72128 | |||
3eb3ebd795 | |||
ff89ccdfdb | |||
9e42487366 | |||
b9ba205a52 | |||
85982a0d1c | |||
44682cdf0e | |||
b8e5b38e3a | |||
fc8f95da51 | |||
bd3139b623 | |||
6fe60e03cd | |||
8d6fdb6ba7 | |||
5d78cdf4df |
74
.cproject
74
.cproject
@ -48,14 +48,15 @@
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="${ConfigName}"/>
|
||||
</defs>
|
||||
</storageModule>
|
||||
<storageModule buildDir="build/${ConfigName}" dirtyTs="1698593487517" moduleId="de.marw.cmake4eclipse.mbs.settings">
|
||||
<options/>
|
||||
<storageModule buildDir="build/${ConfigName}" dirtyTs="1746805637052" moduleId="de.marw.cmake4eclipse.mbs.settings">
|
||||
<options otherArguments="--preset RelWithDebInfo"/>
|
||||
<defs>
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="Debug"/>
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="RelWithDebInfo"/>
|
||||
<def name="CMAKE_INSTALL_PREFIX" type="FILEPATH" val="${ProjDirPath}/install"/>
|
||||
<def name="WITH_TCC" type="BOOL" val="ON"/>
|
||||
<def name="BUILD_COMMON_FW" type="BOOL" val="ON"/>
|
||||
<def name="FW_BUILD" type="BOOL" val="ON"/>
|
||||
<def name="ENABLE_CLANG_TIDY" type="BOOL" val="ON"/>
|
||||
<def name="WITH_LLVM" type="BOOL" val="ON"/>
|
||||
</defs>
|
||||
</storageModule>
|
||||
</cconfiguration>
|
||||
@ -128,7 +129,7 @@
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.1336041151.1605951382" name="RelWithDebInfo" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=" parent="org.eclipse.cdt.build.core.emptycfg">
|
||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.1336041151.1605951382" name="RelWithDebInfo" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="org.eclipse.cdt.build.core.emptycfg">
|
||||
<folderInfo id="cdt.managedbuild.toolchain.gnu.base.1336041151.1605951382." name="/" resourcePath="">
|
||||
<toolChain id="cdt.managedbuild.toolchain.gnu.base.1009994445" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.base">
|
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.GNU_ELF" id="cdt.managedbuild.target.gnu.platform.base.1023431687" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
|
||||
@ -164,7 +165,66 @@
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="${ConfigName}"/>
|
||||
</defs>
|
||||
</storageModule>
|
||||
<storageModule buildDir="build/${ConfigName}" dirtyTs="1698593290265" moduleId="de.marw.cmake4eclipse.mbs.settings">
|
||||
<storageModule buildDir="build/${ConfigName}" dirtyTs="1746805637052" moduleId="de.marw.cmake4eclipse.mbs.settings">
|
||||
<options otherArguments="--preset RelWithDebInfo"/>
|
||||
<defs>
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="RelWithDebInfo"/>
|
||||
<def name="CMAKE_INSTALL_PREFIX" type="FILEPATH" val="${ProjDirPath}/install"/>
|
||||
<def name="WITH_TCC" type="BOOL" val="ON"/>
|
||||
<def name="FW_BUILD" type="BOOL" val="ON"/>
|
||||
<def name="ENABLE_CLANG_TIDY" type="BOOL" val="ON"/>
|
||||
<def name="WITH_LLVM" type="BOOL" val="ON"/>
|
||||
</defs>
|
||||
</storageModule>
|
||||
</cconfiguration>
|
||||
<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.1336041151.1605951382.761803221">
|
||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.1336041151.1605951382.761803221" moduleId="org.eclipse.cdt.core.settings" name="RelWithDebInfo4Prof">
|
||||
<externalSettings/>
|
||||
<extensions>
|
||||
<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="${ProjName}" buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.1336041151.1605951382.761803221" name="RelWithDebInfo4Prof" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="org.eclipse.cdt.build.core.emptycfg">
|
||||
<folderInfo id="cdt.managedbuild.toolchain.gnu.base.1336041151.1605951382.761803221." name="/" resourcePath="">
|
||||
<toolChain id="cdt.managedbuild.toolchain.gnu.base.1676282966" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.base">
|
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.GNU_ELF" id="cdt.managedbuild.target.gnu.platform.base.199403809" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
|
||||
<builder buildPath="/TGC-ISS/_build/Debug" id="cmake4eclipse.mbs.builder.1047317958" keepEnvironmentInBuildfile="false" name="CMake Builder" parallelBuildOn="true" parallelizationNumber="unlimited" superClass="cmake4eclipse.mbs.builder"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.archiver.base.1763962491" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.300429051" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base">
|
||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.934487129" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||
<listOptionValue builtIn="false" value="CWR_SYSTEMC=1"/>
|
||||
</option>
|
||||
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1430696020" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
|
||||
</tool>
|
||||
<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.9511508" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
|
||||
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.695529941" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
|
||||
</tool>
|
||||
<tool id="cdt.managedbuild.tool.gnu.c.linker.base.1813114373" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
|
||||
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1557756316" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base">
|
||||
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.536309197" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
|
||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||
</inputType>
|
||||
</tool>
|
||||
<tool id="cdt.managedbuild.tool.gnu.assembler.base.587229911" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base">
|
||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1060210827" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
||||
</tool>
|
||||
</toolChain>
|
||||
</folderInfo>
|
||||
</configuration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
<storageModule buildDir="build/${ConfigName}" moduleId="de.marw.cdt.cmake.core.settings">
|
||||
<options/>
|
||||
<defs>
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="${ConfigName}"/>
|
||||
</defs>
|
||||
</storageModule>
|
||||
<storageModule buildDir="build/${ConfigName}" dirtyTs="1727093289061" moduleId="de.marw.cmake4eclipse.mbs.settings">
|
||||
<options/>
|
||||
<defs>
|
||||
<def name="CMAKE_BUILD_TYPE" type="STRING" val="RelWithDebInfo"/>
|
||||
@ -172,6 +232,7 @@
|
||||
<def name="WITH_TCC" type="BOOL" val="ON"/>
|
||||
<def name="FW_BUILD" type="BOOL" val="ON"/>
|
||||
<def name="ENABLE_CLANG_TIDY" type="BOOL" val="ON"/>
|
||||
<def name="ENABLE_GPROF" type="BOOL" val="ON"/>
|
||||
</defs>
|
||||
</storageModule>
|
||||
</cconfiguration>
|
||||
@ -181,6 +242,7 @@
|
||||
</storageModule>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||
<storageModule moduleId="refreshScope" versionNumber="2">
|
||||
<configuration configurationName="RelWithDebInfo4Prof"/>
|
||||
<configuration configurationName="Debug-PA">
|
||||
<resource resourceType="PROJECT" workspacePath="/TGC-ISS"/>
|
||||
</configuration>
|
||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -22,4 +22,5 @@
|
||||
/.direnv
|
||||
/TGC_C_XRB/
|
||||
/.envrc.eyck
|
||||
/.cache
|
||||
/.cache
|
||||
CMakeUserPresets.json
|
||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,6 +1,3 @@
|
||||
[submodule "scc"]
|
||||
path = scc
|
||||
url = https://github.com/Minres/SystemC-Components.git
|
||||
[submodule "dbt-rise-core"]
|
||||
path = dbt-rise-core
|
||||
url = https://github.com/Minres/DBT-RISE-Core.git
|
||||
|
137
CMakeLists.txt
137
CMakeLists.txt
@ -1,5 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/scc/cmake)
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
||||
|
||||
project(TGC-ISS VERSION 1.0.0 LANGUAGES CXX)
|
||||
|
||||
@ -9,14 +9,14 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
# stand alone build settings
|
||||
###########################################################################
|
||||
set(CORE_NAME TGC5C CACHE STRING "The core to build the ISS for" )
|
||||
option(BUILD_COMMON_FW "Enable the automatic download and build of some firmware to run on the ISS" OFF)
|
||||
option(ENABLE_SANITIZER "Enable address sanitizer" OFF)
|
||||
option(ENABLE_GRPOF "Enable gprof instrumentation" OFF)
|
||||
option(ENABLE_CLANG_TIDY "Add clang-tidy and clang-format automatically to builds" OFF)
|
||||
option(WITH_TCC "Build TCC backend" OFF)
|
||||
option(WITH_LLVM "Build LLVM backend" OFF)
|
||||
option(WITH_ASMJIT "Build ASMJIT backend" OFF)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
option(WITH_ASMJIT "Build ASMJIT backend" ON)
|
||||
option(PORTABLE "Build executable without platform specific optimizations" OFF)
|
||||
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
@ -24,12 +24,9 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
set(CMAKE_INSTALL_RPATH "${ORIGIN}")
|
||||
include(CheckCXXCompilerFlag)
|
||||
CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
|
||||
if(COMPILER_SUPPORTS_MARCH_NATIVE)
|
||||
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
|
||||
elseif(NOT(${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo"))
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
|
||||
endif()
|
||||
if(COMPILER_SUPPORTS_MARCH_NATIVE AND NOT PORTABLE)
|
||||
message(STATUS "Applying platform specific optimizations")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
|
||||
endif()
|
||||
|
||||
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
@ -40,118 +37,28 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
set(warnings "/W4 /WX /EHsc")
|
||||
endif()
|
||||
if(ENABLE_SANITIZER)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
|
||||
list(APPEND CMAKE_C_FLAGS "-fsanitize=address")
|
||||
list(APPEND CMAKE_CXX_FLAGS "-fsanitize=address")
|
||||
list(APPEND CMAKE_EXE_LINKER_FLAGS "-fsanitize=address")
|
||||
list(APPEND CMAKE_SHARED_LINKER_FLAGS "-fsanitize=address")
|
||||
endif()
|
||||
if(ENABLE_GPROF)
|
||||
list(APPEND CMAKE_C_FLAGS "-pg")
|
||||
list(APPEND CMAKE_CXX_FLAGS "-pg")
|
||||
list(APPEND CMAKE_EXE_LINKER_FLAGS "-pg")
|
||||
list(APPEND CMAKE_SHARED_LINKER_FLAGS "-pg")
|
||||
endif()
|
||||
include(GNUInstallDirs)
|
||||
include(ConanInline)
|
||||
if(BUILD_SHARED_LIBS)
|
||||
set(SHARED_FLAG "True")
|
||||
else()
|
||||
set(SHARED_FLAG "False")
|
||||
endif()
|
||||
|
||||
set(CONAN_BOOST_OPTIONS
|
||||
boost:fPIC=True
|
||||
boost:shared=False
|
||||
boost:header_only=False
|
||||
boost:without_contract=True
|
||||
boost:without_graph=True
|
||||
boost:without_graph_parallel=True
|
||||
boost:without_iostreams=True
|
||||
boost:without_json=True
|
||||
boost:without_locale=True
|
||||
boost:without_log=True
|
||||
boost:without_math=True
|
||||
boost:without_mpi=True
|
||||
boost:without_nowide=True
|
||||
boost:without_python=True
|
||||
boost:without_random=True
|
||||
boost:without_regex=True
|
||||
boost:without_stacktrace=True
|
||||
boost:without_test=True
|
||||
boost:without_timer=True
|
||||
boost:without_type_erasure=True
|
||||
boost:without_wave=True
|
||||
)
|
||||
|
||||
set(B2_VERSION 4.9.6)
|
||||
set(CM_VERSION 3.20.5)
|
||||
set(LLVM_VERSION 13.0.0)
|
||||
set(CONAN_PACKAGE_LIST
|
||||
fmt/8.0.1
|
||||
spdlog/1.9.2
|
||||
boost/1.75.0
|
||||
gsl-lite/0.37.0
|
||||
elfio/3.11
|
||||
lz4/1.9.3
|
||||
yaml-cpp/0.7.0
|
||||
jsoncpp/1.9.5
|
||||
zlib/1.2.12
|
||||
)
|
||||
set(CONAN_PACKAGE_OPTIONS fmt:header_only=True ${CONAN_BOOST_OPTIONS})
|
||||
|
||||
if(WITH_LLVM)
|
||||
list(APPEND CONAN_PACKAGE_LIST llvm-core/${LLVM_VERSION})
|
||||
list(APPEND CONAN_PACKAGE_OPTIONS libiconv:shared=True)
|
||||
endif()
|
||||
if(WITH_ASMJIT)
|
||||
list(APPEND CONAN_PACKAGE_LIST asmjit/cci.20240531)
|
||||
list(APPEND CONAN_PACKAGE_OPTIONS asmjit:shared=False)
|
||||
endif()
|
||||
if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dbt-rise-plugins)
|
||||
list(APPEND CONAN_PACKAGE_OPTIONS lua:compile_as_cpp=False)
|
||||
list(APPEND CONAN_PACKAGE_LIST lua/5.4.3)
|
||||
endif()
|
||||
|
||||
conan_check()
|
||||
conan_add_remote(NAME minres URL https://git.minres.com/api/packages/Tooling/conan)
|
||||
###########################################################################
|
||||
# Boost on CentOS 7 quirks: the b2 of conan-center is build against a newer libstdc++ and therefore does not run
|
||||
# with the oooooold libs on CentOS 7. Therefore we build our own version of b2 if it is not there
|
||||
###########################################################################
|
||||
find_program(LSB_RELEASE_EXEC lsb_release)
|
||||
if(NOT LSB_RELEASE_EXEC-NOTFOUND)
|
||||
execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --id OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(LSB_RELEASE_ID_SHORT MATCHES "CentOS")
|
||||
set(B2_META $ENV{HOME}/.conan/data/b2/${B2_VERSION}/_/_/metadata.json)
|
||||
set(CM_META $ENV{HOME}/.conan/data/cmake/${CM_VERSION}/_/_/metadata.json)
|
||||
set(LLVM_META $ENV{HOME}/.conan/data/llvm-core/${LLVM_VERSION}/_/_/metadata.json)
|
||||
if(DEFINED ENV{CONAN_USER_HOME})
|
||||
set(B2_META $ENV{CONAN_USER_HOME}/.conan/data/b2/${B2_VERSION}/_/_/metadata.json)
|
||||
set(CMAKE_META $ENV{CONAN_USER_HOME}/.conan/data/cmake/${CM_VERSION}/_/_/metadata.json)
|
||||
set(LLVM_META $ENV{CONAN_USER_HOME}/.conan/data/llvm-core/${LLVM_VERSION}/_/_/metadata.json)
|
||||
endif()
|
||||
if(NOT EXISTS ${B2_META})
|
||||
conan_configure(REQUIRES b2/${B2_VERSION})
|
||||
conan_cmake_autodetect(settings BUILD_TYPE Release)
|
||||
conan_cmake_install(PATH_OR_REFERENCE . BUILD b2 SETTINGS ${settings})
|
||||
endif()
|
||||
if(NOT EXISTS ${CM_META})
|
||||
conan_configure(REQUIRES cmake/${CM_VERSION})
|
||||
conan_cmake_autodetect(settings BUILD_TYPE Release)
|
||||
conan_cmake_install(PATH_OR_REFERENCE . BUILD cmake SETTINGS ${settings})
|
||||
endif()
|
||||
if(NOT EXISTS ${LLVM_META})
|
||||
conan_configure(REQUIRES llvm-core/13.0.0)
|
||||
conan_cmake_autodetect(settings BUILD_TYPE Release)
|
||||
conan_cmake_install(PATH_OR_REFERENCE . BUILD llvm-core SETTINGS ${settings})
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
###########################################################################
|
||||
# Boost on CentOS 7 quirks end
|
||||
###########################################################################
|
||||
conan_cmake_configure(REQUIRES ${CONAN_PACKAGE_LIST}
|
||||
GENERATORS cmake_find_package
|
||||
OPTIONS ${CONAN_PACKAGE_OPTIONS}
|
||||
)
|
||||
conan_cmake_autodetect(settings)
|
||||
conan_install()
|
||||
set(CONAN_CMAKE_SILENT_OUTPUT ON)
|
||||
|
||||
find_package(fmt)
|
||||
find_package(spdlog)
|
||||
find_package(lz4)
|
||||
@ -169,7 +76,7 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
# setup clang-format and clang-tidy
|
||||
###############################################################################
|
||||
if (ENABLE_CLANG_TIDY)
|
||||
set(CLANG_FORMAT_EXCLUDE_PATTERNS "scc" "install")
|
||||
set(CLANG_FORMAT_EXCLUDE_PATTERNS "build" "install")
|
||||
find_package(ClangFormat)
|
||||
find_program (CLANG_TIDY_EXE NAMES "clang-tidy" PATHS /usr/bin )
|
||||
if (CLANG_TIDY_EXE)
|
||||
@ -225,12 +132,6 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS" AND NOT USE_CWR_SYSTEMC)
|
||||
set(SCC_CMAKE_CONFIG_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/scc)
|
||||
add_subdirectory(scc/src/common)
|
||||
else()
|
||||
add_subdirectory(scc)
|
||||
endif()
|
||||
add_subdirectory(dbt-rise-core)
|
||||
add_subdirectory(dbt-rise-tgc)
|
||||
if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/dbt-rise-plugins)
|
||||
|
@ -1,8 +1,11 @@
|
||||
{
|
||||
"version": 3,
|
||||
"vendor": {
|
||||
"conan": {}
|
||||
},
|
||||
"cmakeMinimumRequired": {
|
||||
"major": 3,
|
||||
"minor": 21,
|
||||
"minor": 24,
|
||||
"patch": 0
|
||||
},
|
||||
"configurePresets": [
|
||||
@ -12,9 +15,23 @@
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}",
|
||||
"cacheVariables": {
|
||||
"CMAKE_POLICY_DEFAULT_CMP0091": "NEW",
|
||||
"CMAKE_BUILD_TYPE": "Debug",
|
||||
"CMAKE_CXX_STANDARD": "17",
|
||||
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install/${presetName}",
|
||||
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
|
||||
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
|
||||
"CMAKE_PROJECT_TOP_LEVEL_INCLUDES": "cmake/conan_provider.cmake"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "RelWithDebInfo",
|
||||
"cacheVariables": {
|
||||
"CMAKE_POLICY_DEFAULT_CMP0091": "NEW",
|
||||
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
|
||||
"CMAKE_CXX_STANDARD": "17",
|
||||
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install/${presetName}",
|
||||
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
|
||||
"CMAKE_PROJECT_TOP_LEVEL_INCLUDES": "cmake/conan_provider.cmake"
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -23,17 +40,13 @@
|
||||
"generator": "Ninja",
|
||||
"binaryDir": "${sourceDir}/build/${presetName}",
|
||||
"cacheVariables": {
|
||||
"CMAKE_POLICY_DEFAULT_CMP0091": "NEW",
|
||||
"CMAKE_BUILD_TYPE": "Release",
|
||||
"CMAKE_CXX_STANDARD": "17",
|
||||
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install/${presetName}",
|
||||
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
|
||||
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
|
||||
"CMAKE_PROJECT_TOP_LEVEL_INCLUDES": "cmake/conan_provider.cmake"
|
||||
}
|
||||
}
|
||||
],
|
||||
"buildPresets": [
|
||||
{
|
||||
"name": "Debug",
|
||||
"description": "Debug build",
|
||||
"displayName": "Debug"
|
||||
}
|
||||
]
|
||||
}
|
16
Jenkinsfile
vendored
16
Jenkinsfile
vendored
@ -37,19 +37,19 @@ pipeline {
|
||||
steps {
|
||||
sh '''
|
||||
for core in TGC5A TGC5B TGC5D TGC5E TGC5F RV32GC; do
|
||||
for backend in interp llvm tcc asmjit; do
|
||||
for backend in interp 'llvm' tcc asmjit; do
|
||||
TGC-GEN/scripts/generate_iss.sh -o dbt-rise-tgc/ -c $core -b ${backend} TGC-GEN/CoreDSL/${core}.core_desc
|
||||
done
|
||||
done
|
||||
for core in TGC6B TGC6C TGC6D TGC6E RV64GC; do
|
||||
for backend in interp llvm asmjit; do
|
||||
for backend in interp 'llvm' asmjit; do
|
||||
TGC-GEN/scripts/generate_iss.sh -o dbt-rise-tgc/ -c $core -b ${backend} TGC-GEN/CoreDSL/${core}.core_desc
|
||||
done
|
||||
done
|
||||
'''
|
||||
sh 'conan profile new default --detect --force'
|
||||
sh 'conan profile detect --force'
|
||||
sh 'rm -rf build'
|
||||
sh 'cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DWITH_ASMJIT=ON -DWITH_TCC=ON -DWITH_LLVM=ON'
|
||||
sh 'cmake -S . -B build --preset Release -DWITH_ASMJIT=ON -DWITH_TCC=ON -DWITH_LLVM=OFF'
|
||||
sh 'cmake --build build -j'
|
||||
sh 'build/dbt-rise-tgc/tgc-sim --isa ?'
|
||||
}
|
||||
@ -73,14 +73,14 @@ pipeline {
|
||||
}
|
||||
axis {
|
||||
name 'BACKEND'
|
||||
values 'interp', 'llvm', 'tcc', 'asmjit'
|
||||
values 'interp', /*'llvm',*/ 'tcc', 'asmjit'
|
||||
}
|
||||
}
|
||||
stages {
|
||||
stage('Run riscof') {
|
||||
steps {
|
||||
sh "mkdir -p ${BACKEND}"
|
||||
sh "python3 TGC-COMPLIANCE/run_act.py -core ${CORE} -sim build/dbt-rise-tgc/tgc-sim -w ${BACKEND} --local --backend ${BACKEND}"
|
||||
sh "python3 TGC-COMPLIANCE/run_act.py -core ${CORE} -sim build/dbt-rise-tgc/tgc-sim -w ${BACKEND} --backend ${BACKEND}"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -95,14 +95,14 @@ pipeline {
|
||||
}
|
||||
axis {
|
||||
name 'BACKEND'
|
||||
values 'interp', 'llvm', 'asmjit'
|
||||
values 'interp', /*'llvm',*/ 'asmjit'
|
||||
}
|
||||
}
|
||||
stages {
|
||||
stage('Run riscof') {
|
||||
steps {
|
||||
sh "mkdir -p ${BACKEND}"
|
||||
sh "python3 TGC-COMPLIANCE/run_act.py -core ${CORE} -sim build/dbt-rise-tgc/tgc-sim -w ${BACKEND} --local --backend ${BACKEND}"
|
||||
sh "python3 TGC-COMPLIANCE/run_act.py -core ${CORE} -sim build/dbt-rise-tgc/tgc-sim -w ${BACKEND} --backend ${BACKEND}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
11
README.md
11
README.md
@ -7,14 +7,15 @@ This ISS is based in DBT-RISE, a library to allow rapid ISS creation.
|
||||
## Quick start
|
||||
|
||||
* you need to have a C++14 capable compiler, make or ninja, python, and cmake installed
|
||||
|
||||
> **Warning:** With the Usage of conan2 the LLVM backend became deprecated as there is no conan package available yet.
|
||||
|
||||
### common setup
|
||||
|
||||
* install conan.io (see also http://docs.conan.io/en/latest/installation.html):
|
||||
|
||||
```
|
||||
|
||||
pip3 install --user 'conan<2.0'
|
||||
pip3 install --user 'conan'
|
||||
|
||||
```
|
||||
|
||||
@ -25,7 +26,7 @@ This ISS is based in DBT-RISE, a library to allow rapid ISS creation.
|
||||
|
||||
python -mvenv .venv
|
||||
source .venv/bin/activate
|
||||
pip3 install conan==1.59
|
||||
pip3 install conan
|
||||
|
||||
```
|
||||
|
||||
@ -53,7 +54,7 @@ This ISS is based in DBT-RISE, a library to allow rapid ISS creation.
|
||||
```
|
||||
|
||||
cd TGC-ISS
|
||||
cmake -S . -B build/Debug
|
||||
cmake --preset Debug -S . -B build/Debug
|
||||
cmake --build build/Debug -j10
|
||||
|
||||
```
|
||||
@ -71,7 +72,7 @@ Assuming environment for Platform Architect is properly set up.
|
||||
source $COWAREHOME/SLS/linux/setup.sh pae
|
||||
export CC=$COWAREHOME/SLS/linux/common/bin/gcc
|
||||
export CXX=$COWAREHOME/SLS/linux/common/bin/g++
|
||||
cmake -S . -B build/PA -DCMAKE_BUILD_TYPE=Debug -DUSE_CWR_SYSTEMC=ON \
|
||||
cmake --preset Debug -S . -B build/PA -DUSE_CWR_SYSTEMC=ON \
|
||||
-DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=${TGFS_INSTALL_ROOT}
|
||||
cmake --build build/PA --target install -j16
|
||||
|
||||
|
107
cmake/ConanInline.cmake
Normal file
107
cmake/ConanInline.cmake
Normal file
@ -0,0 +1,107 @@
|
||||
|
||||
set(CONAN_CMAKE_LIST_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
macro(conan_check)
|
||||
# for backwards compatibility
|
||||
cmake_parse_arguments(MARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
|
||||
|
||||
find_program(CONAN conan)
|
||||
if(NOT EXISTS ${CONAN})
|
||||
message(FATAL_ERROR "Conan is required. Please see README.md")
|
||||
return()
|
||||
endif()
|
||||
execute_process(COMMAND ${CONAN} --version
|
||||
OUTPUT_VARIABLE CONAN_VERSION_OUTPUT)
|
||||
string(REGEX MATCHALL "[0-9.]+" CONAN_VERSION ${CONAN_VERSION_OUTPUT})
|
||||
if (NOT (CONAN_VERSION VERSION_GREATER_EQUAL 1.36.0))
|
||||
message(FATAL_ERROR "Please upgrade your conan to a version greater or equal 1.36")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS ${CONAN_CMAKE_LIST_DIR}/conan.cmake)
|
||||
message("Downloading conan.cmake to ${CONAN_CMAKE_LIST_DIR}")
|
||||
set(URL https://raw.githubusercontent.com/conan-io/cmake-conan/0.18.1/conan.cmake)
|
||||
file(DOWNLOAD ${URL} ${CONAN_CMAKE_LIST_DIR}/conan.cmake TIMEOUT 60 STATUS DOWNLOAD_STATUS)
|
||||
list(GET DOWNLOAD_STATUS 0 STATUS_CODE)
|
||||
list(GET DOWNLOAD_STATUS 1 ERROR_MESSAGE)
|
||||
if(NOT (${STATUS_CODE} EQUAL 0))
|
||||
# Exit CMake if the download failed, printing the error message.
|
||||
message(FATAL_ERROR "Error occurred during download: ${ERROR_MESSAGE}")
|
||||
endif()
|
||||
if(NOT EXISTS ${CONAN_CMAKE_LIST_DIR}/conan.cmake)
|
||||
message(FATAL_ERROR "Could not download conan.cmake. Please check your internet connection or proxy settings")
|
||||
endif()
|
||||
file (SIZE ${CONAN_CMAKE_LIST_DIR}/conan.cmake CONAN_CMAKE_SIZE)
|
||||
if(${CONAN_CMAKE_SIZE} EQUAL 0)
|
||||
message(FATAL_ERROR "Could not download conan.cmake. Please check your internet connection or proxy settings")
|
||||
endif()
|
||||
endif()
|
||||
if("${CMAKE_BUILD_TYPE}" STREQUAL "")
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif()
|
||||
|
||||
|
||||
include(${CONAN_CMAKE_LIST_DIR}/conan.cmake)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_BINARY_DIR})
|
||||
endmacro()
|
||||
|
||||
macro(conan_setup)
|
||||
set(options TARGETS)
|
||||
cmake_parse_arguments(MARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
|
||||
|
||||
|
||||
set(conanfile_cmake_paths ${CMAKE_BINARY_DIR}/conan_paths.cmake)
|
||||
|
||||
set(conanfile_cmake ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
set(conanfile_cmake ${CMAKE_CURRENT_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
endif()
|
||||
|
||||
if(EXISTS "${conanfile_cmake_paths}")
|
||||
include(${conanfile_cmake_paths})
|
||||
elseif(EXISTS "${conanfile_cmake}")
|
||||
include(${conanfile_cmake})
|
||||
if( MARGS_TARGETS)
|
||||
conan_basic_setup(TARGETS)
|
||||
else()
|
||||
conan_basic_setup()
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
function(conan_configure)
|
||||
conan_cmake_generate_conanfile(OFF ${ARGV})
|
||||
endfunction()
|
||||
|
||||
macro(conan_install)
|
||||
set(options BUILD_TYPE BUILD)
|
||||
set(oneValueArgs BUILD_TYPE BUILD)
|
||||
cmake_parse_arguments(MARGS "" "${oneValueArgs}" "" ${ARGN} )
|
||||
if(MARGS_BUILD_TYPE)
|
||||
conan_cmake_autodetect(settings BUILD_TYPE ${MARGS_BUILD_TYPE})
|
||||
else()
|
||||
conan_cmake_autodetect(settings BUILD_TYPE)
|
||||
endif()
|
||||
if(CMAKE_CXX_STANDARD)
|
||||
list(APPEND settings compiler.cppstd=${CMAKE_CXX_STANDARD})
|
||||
endif()
|
||||
if(USE_NCSC_SYSTEMC)
|
||||
list(APPEND settings compiler.libcxx=libstdc++)
|
||||
endif()
|
||||
if (NOT "$ENV{CONAN_PROFILE_NAME}" STREQUAL "")
|
||||
set(CONAN_PROFILE "$ENV{CONAN_PROFILE_NAME}" CACHE INTERNAL "Copied from environment variable")
|
||||
else()
|
||||
set(CONAN_PROFILE "default" CACHE INTERNAL "Copied from environment variable")
|
||||
endif()
|
||||
|
||||
if(MARGS_BUILD)
|
||||
conan_cmake_install(PATH_OR_REFERENCE .
|
||||
BUILD ${MARGS_BUILD}
|
||||
PROFILE_BUILD ${CONAN_PROFILE}
|
||||
SETTINGS ${settings})
|
||||
else()
|
||||
conan_cmake_install(PATH_OR_REFERENCE .
|
||||
BUILD missing
|
||||
PROFILE_BUILD ${CONAN_PROFILE}
|
||||
SETTINGS ${settings})
|
||||
endif()
|
||||
endmacro()
|
34
cmake/FindClangFormat.cmake
Normal file
34
cmake/FindClangFormat.cmake
Normal file
@ -0,0 +1,34 @@
|
||||
# Find Clang format
|
||||
#
|
||||
#
|
||||
if(NOT CLANG_FORMAT_BIN_NAME)
|
||||
set(CLANG_FORMAT_BIN_NAME clang-format)
|
||||
endif()
|
||||
|
||||
# if custom path check there first
|
||||
if(CLANG_FORMAT_ROOT_DIR)
|
||||
find_program(CLANG_FORMAT_BIN
|
||||
NAMES
|
||||
${CLANG_FORMAT_BIN_NAME}
|
||||
PATHS
|
||||
"${CLANG_FORMAT_ROOT_DIR}"
|
||||
NO_DEFAULT_PATH)
|
||||
else()
|
||||
find_program(CLANG_FORMAT_BIN NAMES ${CLANG_FORMAT_BIN_NAME})
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
|
||||
ClangFormat
|
||||
DEFAULT_MSG
|
||||
CLANG_FORMAT_BIN)
|
||||
|
||||
mark_as_advanced(
|
||||
CLANG_FORMAT_BIN)
|
||||
|
||||
if(ClangFormat_FOUND)
|
||||
# A CMake script to find all source files and setup clang-format targets for them
|
||||
include(clang-format)
|
||||
else()
|
||||
message("clang-format not found. Not setting up format targets")
|
||||
endif()
|
40
cmake/clang-format.cmake
Normal file
40
cmake/clang-format.cmake
Normal file
@ -0,0 +1,40 @@
|
||||
# additional target to perform clang-format run, requires clang-format
|
||||
|
||||
set(CLANG_FORMAT_CXX_FILE_EXTENSIONS ${CLANG_FORMAT_CXX_FILE_EXTENSIONS} *.cpp *.h *.cxx *.hxx *.hpp *.cc *.ipp)
|
||||
file(GLOB_RECURSE ALL_SOURCE_FILES ${CLANG_FORMAT_CXX_FILE_EXTENSIONS})
|
||||
|
||||
# Don't include some common build folders
|
||||
set(CLANG_FORMAT_EXCLUDE_PATTERNS ${CLANG_FORMAT_EXCLUDE_PATTERNS} "/CMakeFiles/" "cmake")
|
||||
|
||||
# get all project files file
|
||||
foreach (SOURCE_FILE ${ALL_SOURCE_FILES})
|
||||
foreach (EXCLUDE_PATTERN ${CLANG_FORMAT_EXCLUDE_PATTERNS})
|
||||
string(FIND ${SOURCE_FILE} ${EXCLUDE_PATTERN} EXCLUDE_FOUND)
|
||||
if (NOT ${EXCLUDE_FOUND} EQUAL -1)
|
||||
list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE})
|
||||
endif ()
|
||||
endforeach ()
|
||||
endforeach ()
|
||||
|
||||
set(FORMAT_TARGET_NAME format)
|
||||
if(NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
|
||||
set(FORMAT_TARGET_NAME format-${PROJECT_NAME})
|
||||
endif()
|
||||
|
||||
add_custom_target(${FORMAT_TARGET_NAME}
|
||||
COMMENT "Running clang-format to change files"
|
||||
COMMAND ${CLANG_FORMAT_BIN} -style=file -i ${ALL_SOURCE_FILES}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
|
||||
|
||||
add_custom_target(${FORMAT_TARGET_NAME}-check
|
||||
COMMENT "Checking clang-format changes"
|
||||
# Use ! to negate the result for correct output
|
||||
COMMAND !
|
||||
${CLANG_FORMAT_BIN}
|
||||
-style=file
|
||||
-output-replacements-xml
|
||||
${ALL_SOURCE_FILES}
|
||||
| grep -q "replacement offset"
|
||||
)
|
676
cmake/conan_provider.cmake
Normal file
676
cmake/conan_provider.cmake
Normal file
@ -0,0 +1,676 @@
|
||||
# The MIT License (MIT)
|
||||
#
|
||||
# Copyright (c) 2024 JFrog
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
set(CONAN_MINIMUM_VERSION 2.0.5)
|
||||
|
||||
# Create a new policy scope and set the minimum required cmake version so the
|
||||
# features behind a policy setting like if(... IN_LIST ...) behaves as expected
|
||||
# even if the parent project does not specify a minimum cmake version or a minimum
|
||||
# version less than this module requires (e.g. 3.0) before the first project() call.
|
||||
# (see: https://cmake.org/cmake/help/latest/variable/CMAKE_PROJECT_TOP_LEVEL_INCLUDES.html)
|
||||
#
|
||||
# The policy-affecting calls like cmake_policy(SET...) or `cmake_minimum_required` only
|
||||
# affects the current policy scope, i.e. between the PUSH and POP in this case.
|
||||
#
|
||||
# https://cmake.org/cmake/help/book/mastering-cmake/chapter/Policies.html#the-policy-stack
|
||||
cmake_policy(PUSH)
|
||||
cmake_minimum_required(VERSION 3.24)
|
||||
|
||||
|
||||
function(detect_os os os_api_level os_sdk os_subsystem os_version)
|
||||
# it could be cross compilation
|
||||
message(STATUS "CMake-Conan: cmake_system_name=${CMAKE_SYSTEM_NAME}")
|
||||
if(CMAKE_SYSTEM_NAME AND NOT CMAKE_SYSTEM_NAME STREQUAL "Generic")
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
set(${os} Macos PARENT_SCOPE)
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "QNX")
|
||||
set(${os} Neutrino PARENT_SCOPE)
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "CYGWIN")
|
||||
set(${os} Windows PARENT_SCOPE)
|
||||
set(${os_subsystem} cygwin PARENT_SCOPE)
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "^MSYS")
|
||||
set(${os} Windows PARENT_SCOPE)
|
||||
set(${os_subsystem} msys2 PARENT_SCOPE)
|
||||
else()
|
||||
set(${os} ${CMAKE_SYSTEM_NAME} PARENT_SCOPE)
|
||||
endif()
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
if(DEFINED ANDROID_PLATFORM)
|
||||
string(REGEX MATCH "[0-9]+" _os_api_level ${ANDROID_PLATFORM})
|
||||
elseif(DEFINED CMAKE_SYSTEM_VERSION)
|
||||
set(_os_api_level ${CMAKE_SYSTEM_VERSION})
|
||||
endif()
|
||||
message(STATUS "CMake-Conan: android api level=${_os_api_level}")
|
||||
set(${os_api_level} ${_os_api_level} PARENT_SCOPE)
|
||||
endif()
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS")
|
||||
# CMAKE_OSX_SYSROOT contains the full path to the SDK for MakeFile/Ninja
|
||||
# generators, but just has the original input string for Xcode.
|
||||
if(NOT IS_DIRECTORY ${CMAKE_OSX_SYSROOT})
|
||||
set(_os_sdk ${CMAKE_OSX_SYSROOT})
|
||||
else()
|
||||
if(CMAKE_OSX_SYSROOT MATCHES Simulator)
|
||||
set(apple_platform_suffix simulator)
|
||||
else()
|
||||
set(apple_platform_suffix os)
|
||||
endif()
|
||||
if(CMAKE_OSX_SYSROOT MATCHES AppleTV)
|
||||
set(_os_sdk "appletv${apple_platform_suffix}")
|
||||
elseif(CMAKE_OSX_SYSROOT MATCHES iPhone)
|
||||
set(_os_sdk "iphone${apple_platform_suffix}")
|
||||
elseif(CMAKE_OSX_SYSROOT MATCHES Watch)
|
||||
set(_os_sdk "watch${apple_platform_suffix}")
|
||||
endif()
|
||||
endif()
|
||||
if(DEFINED os_sdk)
|
||||
message(STATUS "CMake-Conan: cmake_osx_sysroot=${CMAKE_OSX_SYSROOT}")
|
||||
set(${os_sdk} ${_os_sdk} PARENT_SCOPE)
|
||||
endif()
|
||||
if(DEFINED CMAKE_OSX_DEPLOYMENT_TARGET)
|
||||
message(STATUS "CMake-Conan: cmake_osx_deployment_target=${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
||||
set(${os_version} ${CMAKE_OSX_DEPLOYMENT_TARGET} PARENT_SCOPE)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
||||
function(detect_arch arch)
|
||||
# CMAKE_OSX_ARCHITECTURES can contain multiple architectures, but Conan only supports one.
|
||||
# Therefore this code only finds one. If the recipes support multiple architectures, the
|
||||
# build will work. Otherwise, there will be a linker error for the missing architecture(s).
|
||||
if(DEFINED CMAKE_OSX_ARCHITECTURES)
|
||||
string(REPLACE " " ";" apple_arch_list "${CMAKE_OSX_ARCHITECTURES}")
|
||||
list(LENGTH apple_arch_list apple_arch_count)
|
||||
if(apple_arch_count GREATER 1)
|
||||
message(WARNING "CMake-Conan: Multiple architectures detected, this will only work if Conan recipe(s) produce fat binaries.")
|
||||
endif()
|
||||
endif()
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin|iOS|tvOS|watchOS" AND NOT CMAKE_OSX_ARCHITECTURES STREQUAL "")
|
||||
set(host_arch ${CMAKE_OSX_ARCHITECTURES})
|
||||
elseif(MSVC)
|
||||
set(host_arch ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID})
|
||||
else()
|
||||
set(host_arch ${CMAKE_SYSTEM_PROCESSOR})
|
||||
endif()
|
||||
if(host_arch MATCHES "aarch64|arm64|ARM64")
|
||||
set(_arch armv8)
|
||||
elseif(host_arch MATCHES "armv7|armv7-a|armv7l|ARMV7")
|
||||
set(_arch armv7)
|
||||
elseif(host_arch MATCHES armv7s)
|
||||
set(_arch armv7s)
|
||||
elseif(host_arch MATCHES "i686|i386|X86")
|
||||
set(_arch x86)
|
||||
elseif(host_arch MATCHES "AMD64|amd64|x86_64|x64")
|
||||
set(_arch x86_64)
|
||||
endif()
|
||||
message(STATUS "CMake-Conan: cmake_system_processor=${_arch}")
|
||||
set(${arch} ${_arch} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
function(detect_cxx_standard cxx_standard)
|
||||
set(${cxx_standard} ${CMAKE_CXX_STANDARD} PARENT_SCOPE)
|
||||
if(CMAKE_CXX_EXTENSIONS)
|
||||
set(${cxx_standard} "gnu${CMAKE_CXX_STANDARD}" PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
||||
macro(detect_gnu_libstdcxx)
|
||||
# _conan_is_gnu_libstdcxx true if GNU libstdc++
|
||||
check_cxx_source_compiles("
|
||||
#include <cstddef>
|
||||
#if !defined(__GLIBCXX__) && !defined(__GLIBCPP__)
|
||||
static_assert(false);
|
||||
#endif
|
||||
int main(){}" _conan_is_gnu_libstdcxx)
|
||||
|
||||
# _conan_gnu_libstdcxx_is_cxx11_abi true if C++11 ABI
|
||||
check_cxx_source_compiles("
|
||||
#include <string>
|
||||
static_assert(sizeof(std::string) != sizeof(void*), \"using libstdc++\");
|
||||
int main () {}" _conan_gnu_libstdcxx_is_cxx11_abi)
|
||||
|
||||
set(_conan_gnu_libstdcxx_suffix "")
|
||||
if(_conan_gnu_libstdcxx_is_cxx11_abi)
|
||||
set(_conan_gnu_libstdcxx_suffix "11")
|
||||
endif()
|
||||
unset (_conan_gnu_libstdcxx_is_cxx11_abi)
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(detect_libcxx)
|
||||
# _conan_is_libcxx true if LLVM libc++
|
||||
check_cxx_source_compiles("
|
||||
#include <cstddef>
|
||||
#if !defined(_LIBCPP_VERSION)
|
||||
static_assert(false);
|
||||
#endif
|
||||
int main(){}" _conan_is_libcxx)
|
||||
endmacro()
|
||||
|
||||
|
||||
function(detect_lib_cxx lib_cxx)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
message(STATUS "CMake-Conan: android_stl=${CMAKE_ANDROID_STL_TYPE}")
|
||||
set(${lib_cxx} ${CMAKE_ANDROID_STL_TYPE} PARENT_SCOPE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
include(CheckCXXSourceCompiles)
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||
detect_gnu_libstdcxx()
|
||||
set(${lib_cxx} "libstdc++${_conan_gnu_libstdcxx_suffix}" PARENT_SCOPE)
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang")
|
||||
set(${lib_cxx} "libc++" PARENT_SCOPE)
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
# Check for libc++
|
||||
detect_libcxx()
|
||||
if(_conan_is_libcxx)
|
||||
set(${lib_cxx} "libc++" PARENT_SCOPE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Check for libstdc++
|
||||
detect_gnu_libstdcxx()
|
||||
if(_conan_is_gnu_libstdcxx)
|
||||
set(${lib_cxx} "libstdc++${_conan_gnu_libstdcxx_suffix}" PARENT_SCOPE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# TODO: it would be an error if we reach this point
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
# Do nothing - compiler.runtime and compiler.runtime_type
|
||||
# should be handled separately: https://github.com/conan-io/cmake-conan/pull/516
|
||||
return()
|
||||
else()
|
||||
# TODO: unable to determine, ask user to provide a full profile file instead
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
||||
function(detect_compiler compiler compiler_version compiler_runtime compiler_runtime_type)
|
||||
if(DEFINED CMAKE_CXX_COMPILER_ID)
|
||||
set(_compiler ${CMAKE_CXX_COMPILER_ID})
|
||||
set(_compiler_version ${CMAKE_CXX_COMPILER_VERSION})
|
||||
else()
|
||||
if(NOT DEFINED CMAKE_C_COMPILER_ID)
|
||||
message(FATAL_ERROR "C or C++ compiler not defined")
|
||||
endif()
|
||||
set(_compiler ${CMAKE_C_COMPILER_ID})
|
||||
set(_compiler_version ${CMAKE_C_COMPILER_VERSION})
|
||||
endif()
|
||||
|
||||
message(STATUS "CMake-Conan: CMake compiler=${_compiler}")
|
||||
message(STATUS "CMake-Conan: CMake compiler version=${_compiler_version}")
|
||||
|
||||
if(_compiler MATCHES MSVC)
|
||||
set(_compiler "msvc")
|
||||
string(SUBSTRING ${MSVC_VERSION} 0 3 _compiler_version)
|
||||
# Configure compiler.runtime and compiler.runtime_type settings for MSVC
|
||||
if(CMAKE_MSVC_RUNTIME_LIBRARY)
|
||||
set(_msvc_runtime_library ${CMAKE_MSVC_RUNTIME_LIBRARY})
|
||||
else()
|
||||
set(_msvc_runtime_library MultiThreaded$<$<CONFIG:Debug>:Debug>DLL) # default value documented by CMake
|
||||
endif()
|
||||
|
||||
set(_KNOWN_MSVC_RUNTIME_VALUES "")
|
||||
list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded MultiThreadedDLL)
|
||||
list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreadedDebug MultiThreadedDebugDLL)
|
||||
list(APPEND _KNOWN_MSVC_RUNTIME_VALUES MultiThreaded$<$<CONFIG:Debug>:Debug> MultiThreaded$<$<CONFIG:Debug>:Debug>DLL)
|
||||
|
||||
# only accept the 6 possible values, otherwise we don't don't know to map this
|
||||
if(NOT _msvc_runtime_library IN_LIST _KNOWN_MSVC_RUNTIME_VALUES)
|
||||
message(FATAL_ERROR "CMake-Conan: unable to map MSVC runtime: ${_msvc_runtime_library} to Conan settings")
|
||||
endif()
|
||||
|
||||
# Runtime is "dynamic" in all cases if it ends in DLL
|
||||
if(_msvc_runtime_library MATCHES ".*DLL$")
|
||||
set(_compiler_runtime "dynamic")
|
||||
else()
|
||||
set(_compiler_runtime "static")
|
||||
endif()
|
||||
message(STATUS "CMake-Conan: CMake compiler.runtime=${_compiler_runtime}")
|
||||
|
||||
# Only define compiler.runtime_type when explicitly requested
|
||||
# If a generator expression is used, let Conan handle it conditional on build_type
|
||||
if(NOT _msvc_runtime_library MATCHES "<CONFIG:Debug>:Debug>")
|
||||
if(_msvc_runtime_library MATCHES "Debug")
|
||||
set(_compiler_runtime_type "Debug")
|
||||
else()
|
||||
set(_compiler_runtime_type "Release")
|
||||
endif()
|
||||
message(STATUS "CMake-Conan: CMake compiler.runtime_type=${_compiler_runtime_type}")
|
||||
endif()
|
||||
|
||||
unset(_KNOWN_MSVC_RUNTIME_VALUES)
|
||||
|
||||
elseif(_compiler MATCHES AppleClang)
|
||||
set(_compiler "apple-clang")
|
||||
string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION})
|
||||
list(GET VERSION_LIST 0 _compiler_version)
|
||||
elseif(_compiler MATCHES Clang)
|
||||
set(_compiler "clang")
|
||||
string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION})
|
||||
list(GET VERSION_LIST 0 _compiler_version)
|
||||
elseif(_compiler MATCHES GNU)
|
||||
set(_compiler "gcc")
|
||||
string(REPLACE "." ";" VERSION_LIST ${CMAKE_CXX_COMPILER_VERSION})
|
||||
list(GET VERSION_LIST 0 _compiler_version)
|
||||
endif()
|
||||
|
||||
message(STATUS "CMake-Conan: [settings] compiler=${_compiler}")
|
||||
message(STATUS "CMake-Conan: [settings] compiler.version=${_compiler_version}")
|
||||
if (_compiler_runtime)
|
||||
message(STATUS "CMake-Conan: [settings] compiler.runtime=${_compiler_runtime}")
|
||||
endif()
|
||||
if (_compiler_runtime_type)
|
||||
message(STATUS "CMake-Conan: [settings] compiler.runtime_type=${_compiler_runtime_type}")
|
||||
endif()
|
||||
|
||||
set(${compiler} ${_compiler} PARENT_SCOPE)
|
||||
set(${compiler_version} ${_compiler_version} PARENT_SCOPE)
|
||||
set(${compiler_runtime} ${_compiler_runtime} PARENT_SCOPE)
|
||||
set(${compiler_runtime_type} ${_compiler_runtime_type} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
function(detect_build_type build_type)
|
||||
get_property(multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||
if(NOT multiconfig_generator)
|
||||
# Only set when we know we are in a single-configuration generator
|
||||
# Note: we may want to fail early if `CMAKE_BUILD_TYPE` is not defined
|
||||
set(${build_type} ${CMAKE_BUILD_TYPE} PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
||||
macro(set_conan_compiler_if_appleclang lang command output_variable)
|
||||
if(CMAKE_${lang}_COMPILER_ID STREQUAL "AppleClang")
|
||||
execute_process(COMMAND xcrun --find ${command}
|
||||
OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
cmake_path(GET _xcrun_out PARENT_PATH _xcrun_toolchain_path)
|
||||
cmake_path(GET CMAKE_${lang}_COMPILER PARENT_PATH _compiler_parent_path)
|
||||
if ("${_xcrun_toolchain_path}" STREQUAL "${_compiler_parent_path}")
|
||||
set(${output_variable} "")
|
||||
endif()
|
||||
unset(_xcrun_out)
|
||||
unset(_xcrun_toolchain_path)
|
||||
unset(_compiler_parent_path)
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(append_compiler_executables_configuration)
|
||||
set(_conan_c_compiler "")
|
||||
set(_conan_cpp_compiler "")
|
||||
set(_conan_rc_compiler "")
|
||||
set(_conan_compilers_list "")
|
||||
if(CMAKE_C_COMPILER)
|
||||
set(_conan_c_compiler "\"c\":\"${CMAKE_C_COMPILER}\"")
|
||||
set_conan_compiler_if_appleclang(C cc _conan_c_compiler)
|
||||
list(APPEND _conan_compilers_list ${_conan_c_compiler})
|
||||
else()
|
||||
message(WARNING "CMake-Conan: The C compiler is not defined. "
|
||||
"Please define CMAKE_C_COMPILER or enable the C language.")
|
||||
endif()
|
||||
if(CMAKE_CXX_COMPILER)
|
||||
set(_conan_cpp_compiler "\"cpp\":\"${CMAKE_CXX_COMPILER}\"")
|
||||
set_conan_compiler_if_appleclang(CXX c++ _conan_cpp_compiler)
|
||||
list(APPEND _conan_compilers_list ${_conan_cpp_compiler})
|
||||
else()
|
||||
message(WARNING "CMake-Conan: The C++ compiler is not defined. "
|
||||
"Please define CMAKE_CXX_COMPILER or enable the C++ language.")
|
||||
endif()
|
||||
if(CMAKE_RC_COMPILER)
|
||||
set(_conan_rc_compiler "\"rc\":\"${CMAKE_RC_COMPILER}\"")
|
||||
list(APPEND _conan_compilers_list ${_conan_rc_compiler})
|
||||
# Not necessary to warn if RC not defined
|
||||
endif()
|
||||
if(NOT "x${_conan_compilers_list}" STREQUAL "x")
|
||||
string(REPLACE ";" "," _conan_compilers_list "${_conan_compilers_list}")
|
||||
string(APPEND profile "tools.build:compiler_executables={${_conan_compilers_list}}\n")
|
||||
endif()
|
||||
unset(_conan_c_compiler)
|
||||
unset(_conan_cpp_compiler)
|
||||
unset(_conan_rc_compiler)
|
||||
unset(_conan_compilers_list)
|
||||
endmacro()
|
||||
|
||||
|
||||
function(detect_host_profile output_file)
|
||||
detect_os(os os_api_level os_sdk os_subsystem os_version)
|
||||
detect_arch(arch)
|
||||
detect_compiler(compiler compiler_version compiler_runtime compiler_runtime_type)
|
||||
detect_cxx_standard(compiler_cppstd)
|
||||
detect_lib_cxx(compiler_libcxx)
|
||||
detect_build_type(build_type)
|
||||
|
||||
set(profile "")
|
||||
string(APPEND profile "[settings]\n")
|
||||
if(arch)
|
||||
string(APPEND profile arch=${arch} "\n")
|
||||
endif()
|
||||
if(os)
|
||||
string(APPEND profile os=${os} "\n")
|
||||
endif()
|
||||
if(os_api_level)
|
||||
string(APPEND profile os.api_level=${os_api_level} "\n")
|
||||
endif()
|
||||
if(os_version)
|
||||
string(APPEND profile os.version=${os_version} "\n")
|
||||
endif()
|
||||
if(os_sdk)
|
||||
string(APPEND profile os.sdk=${os_sdk} "\n")
|
||||
endif()
|
||||
if(os_subsystem)
|
||||
string(APPEND profile os.subsystem=${os_subsystem} "\n")
|
||||
endif()
|
||||
if(compiler)
|
||||
string(APPEND profile compiler=${compiler} "\n")
|
||||
endif()
|
||||
if(compiler_version)
|
||||
string(APPEND profile compiler.version=${compiler_version} "\n")
|
||||
endif()
|
||||
if(compiler_runtime)
|
||||
string(APPEND profile compiler.runtime=${compiler_runtime} "\n")
|
||||
endif()
|
||||
if(compiler_runtime_type)
|
||||
string(APPEND profile compiler.runtime_type=${compiler_runtime_type} "\n")
|
||||
endif()
|
||||
if(compiler_cppstd)
|
||||
string(APPEND profile compiler.cppstd=${compiler_cppstd} "\n")
|
||||
endif()
|
||||
if(compiler_libcxx)
|
||||
string(APPEND profile compiler.libcxx=${compiler_libcxx} "\n")
|
||||
endif()
|
||||
if(build_type)
|
||||
string(APPEND profile "build_type=${build_type}\n")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED output_file)
|
||||
set(file_name "${CMAKE_BINARY_DIR}/profile")
|
||||
else()
|
||||
set(file_name ${output_file})
|
||||
endif()
|
||||
|
||||
string(APPEND profile "[conf]\n")
|
||||
string(APPEND profile "tools.cmake.cmaketoolchain:generator=${CMAKE_GENERATOR}\n")
|
||||
|
||||
# propagate compilers via profile
|
||||
append_compiler_executables_configuration()
|
||||
|
||||
if(os STREQUAL "Android")
|
||||
string(APPEND profile "tools.android:ndk_path=${CMAKE_ANDROID_NDK}\n")
|
||||
endif()
|
||||
|
||||
message(STATUS "CMake-Conan: Creating profile ${file_name}")
|
||||
file(WRITE ${file_name} ${profile})
|
||||
message(STATUS "CMake-Conan: Profile: \n${profile}")
|
||||
endfunction()
|
||||
|
||||
|
||||
function(conan_profile_detect_default)
|
||||
message(STATUS "CMake-Conan: Checking if a default profile exists")
|
||||
execute_process(COMMAND ${CONAN_COMMAND} profile path default
|
||||
RESULT_VARIABLE return_code
|
||||
OUTPUT_VARIABLE conan_stdout
|
||||
ERROR_VARIABLE conan_stderr
|
||||
ECHO_ERROR_VARIABLE # show the text output regardless
|
||||
ECHO_OUTPUT_VARIABLE
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||
if(NOT ${return_code} EQUAL "0")
|
||||
message(STATUS "CMake-Conan: The default profile doesn't exist, detecting it.")
|
||||
execute_process(COMMAND ${CONAN_COMMAND} profile detect
|
||||
RESULT_VARIABLE return_code
|
||||
OUTPUT_VARIABLE conan_stdout
|
||||
ERROR_VARIABLE conan_stderr
|
||||
ECHO_ERROR_VARIABLE # show the text output regardless
|
||||
ECHO_OUTPUT_VARIABLE
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
||||
function(conan_install)
|
||||
cmake_parse_arguments(ARGS conan_args ${ARGN})
|
||||
set(conan_output_folder ${CMAKE_BINARY_DIR}/conan)
|
||||
# Invoke "conan install" with the provided arguments
|
||||
set(conan_args ${conan_args} -of=${conan_output_folder})
|
||||
message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${conan_args} ${ARGN}")
|
||||
|
||||
|
||||
# In case there was not a valid cmake executable in the PATH, we inject the
|
||||
# same we used to invoke the provider to the PATH
|
||||
if(DEFINED PATH_TO_CMAKE_BIN)
|
||||
set(old_path $ENV{PATH})
|
||||
set(ENV{PATH} "$ENV{PATH}:${PATH_TO_CMAKE_BIN}")
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND ${CONAN_COMMAND} install ${CMAKE_SOURCE_DIR} ${conan_args} ${ARGN} --format=json
|
||||
RESULT_VARIABLE return_code
|
||||
OUTPUT_VARIABLE conan_stdout
|
||||
ERROR_VARIABLE conan_stderr
|
||||
ECHO_ERROR_VARIABLE # show the text output regardless
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
if(DEFINED PATH_TO_CMAKE_BIN)
|
||||
set(ENV{PATH} "${old_path}")
|
||||
endif()
|
||||
|
||||
if(NOT "${return_code}" STREQUAL "0")
|
||||
message(FATAL_ERROR "Conan install failed='${return_code}'")
|
||||
endif()
|
||||
|
||||
# the files are generated in a folder that depends on the layout used, if
|
||||
# one is specified, but we don't know a priori where this is.
|
||||
# TODO: this can be made more robust if Conan can provide this in the json output
|
||||
string(JSON conan_generators_folder GET "${conan_stdout}" graph nodes 0 generators_folder)
|
||||
cmake_path(CONVERT ${conan_generators_folder} TO_CMAKE_PATH_LIST conan_generators_folder)
|
||||
|
||||
message(STATUS "CMake-Conan: CONAN_GENERATORS_FOLDER=${conan_generators_folder}")
|
||||
set_property(GLOBAL PROPERTY CONAN_GENERATORS_FOLDER "${conan_generators_folder}")
|
||||
# reconfigure on conanfile changes
|
||||
string(JSON conanfile GET "${conan_stdout}" graph nodes 0 label)
|
||||
message(STATUS "CMake-Conan: CONANFILE=${CMAKE_SOURCE_DIR}/${conanfile}")
|
||||
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/${conanfile}")
|
||||
# success
|
||||
set_property(GLOBAL PROPERTY CONAN_INSTALL_SUCCESS TRUE)
|
||||
|
||||
endfunction()
|
||||
|
||||
|
||||
function(conan_get_version conan_command conan_current_version)
|
||||
execute_process(
|
||||
COMMAND ${conan_command} --version
|
||||
OUTPUT_VARIABLE conan_output
|
||||
RESULT_VARIABLE conan_result
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(conan_result)
|
||||
message(FATAL_ERROR "CMake-Conan: Error when trying to run Conan")
|
||||
endif()
|
||||
|
||||
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" conan_version ${conan_output})
|
||||
set(${conan_current_version} ${conan_version} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
function(conan_version_check)
|
||||
set(options )
|
||||
set(one_value_args MINIMUM CURRENT)
|
||||
set(multi_value_args )
|
||||
cmake_parse_arguments(conan_version_check
|
||||
"${options}" "${one_value_args}" "${multi_value_args}" ${ARGN})
|
||||
|
||||
if(NOT conan_version_check_MINIMUM)
|
||||
message(FATAL_ERROR "CMake-Conan: Required parameter MINIMUM not set!")
|
||||
endif()
|
||||
if(NOT conan_version_check_CURRENT)
|
||||
message(FATAL_ERROR "CMake-Conan: Required parameter CURRENT not set!")
|
||||
endif()
|
||||
|
||||
if(conan_version_check_CURRENT VERSION_LESS conan_version_check_MINIMUM)
|
||||
message(FATAL_ERROR "CMake-Conan: Conan version must be ${conan_version_check_MINIMUM} or later")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
||||
macro(construct_profile_argument argument_variable profile_list)
|
||||
set(${argument_variable} "")
|
||||
if("${profile_list}" STREQUAL "CONAN_HOST_PROFILE")
|
||||
set(_arg_flag "--profile:host=")
|
||||
elseif("${profile_list}" STREQUAL "CONAN_BUILD_PROFILE")
|
||||
set(_arg_flag "--profile:build=")
|
||||
endif()
|
||||
|
||||
set(_profile_list "${${profile_list}}")
|
||||
list(TRANSFORM _profile_list REPLACE "auto-cmake" "${CMAKE_BINARY_DIR}/conan_host_profile")
|
||||
list(TRANSFORM _profile_list PREPEND ${_arg_flag})
|
||||
set(${argument_variable} ${_profile_list})
|
||||
|
||||
unset(_arg_flag)
|
||||
unset(_profile_list)
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(conan_provide_dependency method package_name)
|
||||
set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE)
|
||||
get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS)
|
||||
if(NOT _conan_install_success)
|
||||
find_program(CONAN_COMMAND "conan" REQUIRED)
|
||||
conan_get_version(${CONAN_COMMAND} CONAN_CURRENT_VERSION)
|
||||
conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION})
|
||||
message(STATUS "CMake-Conan: first find_package() found. Installing dependencies with Conan")
|
||||
if("default" IN_LIST CONAN_HOST_PROFILE OR "default" IN_LIST CONAN_BUILD_PROFILE)
|
||||
conan_profile_detect_default()
|
||||
endif()
|
||||
if("auto-cmake" IN_LIST CONAN_HOST_PROFILE)
|
||||
detect_host_profile(${CMAKE_BINARY_DIR}/conan_host_profile)
|
||||
endif()
|
||||
construct_profile_argument(_host_profile_flags CONAN_HOST_PROFILE)
|
||||
construct_profile_argument(_build_profile_flags CONAN_BUILD_PROFILE)
|
||||
if(EXISTS "${CMAKE_SOURCE_DIR}/conanfile.py")
|
||||
file(READ "${CMAKE_SOURCE_DIR}/conanfile.py" outfile)
|
||||
if(NOT "${outfile}" MATCHES ".*CMakeDeps.*")
|
||||
message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile")
|
||||
endif()
|
||||
set(generator "")
|
||||
elseif (EXISTS "${CMAKE_SOURCE_DIR}/conanfile.txt")
|
||||
file(READ "${CMAKE_SOURCE_DIR}/conanfile.txt" outfile)
|
||||
if(NOT "${outfile}" MATCHES ".*CMakeDeps.*")
|
||||
message(WARNING "Cmake-conan: CMakeDeps generator was not defined in the conanfile. "
|
||||
"Please define the generator as it will be mandatory in the future")
|
||||
endif()
|
||||
set(generator "-g;CMakeDeps")
|
||||
endif()
|
||||
get_property(_multiconfig_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||
if(NOT _multiconfig_generator)
|
||||
message(STATUS "CMake-Conan: Installing single configuration ${CMAKE_BUILD_TYPE}")
|
||||
conan_install(${_host_profile_flags} ${_build_profile_flags} ${CONAN_INSTALL_ARGS} ${generator})
|
||||
else()
|
||||
message(STATUS "CMake-Conan: Installing both Debug and Release")
|
||||
conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Release ${CONAN_INSTALL_ARGS} ${generator})
|
||||
conan_install(${_host_profile_flags} ${_build_profile_flags} -s build_type=Debug ${CONAN_INSTALL_ARGS} ${generator})
|
||||
endif()
|
||||
unset(_host_profile_flags)
|
||||
unset(_build_profile_flags)
|
||||
unset(_multiconfig_generator)
|
||||
unset(_conan_install_success)
|
||||
else()
|
||||
message(STATUS "CMake-Conan: find_package(${ARGV1}) found, 'conan install' already ran")
|
||||
unset(_conan_install_success)
|
||||
endif()
|
||||
|
||||
get_property(_conan_generators_folder GLOBAL PROPERTY CONAN_GENERATORS_FOLDER)
|
||||
|
||||
# Ensure that we consider Conan-provided packages ahead of any other,
|
||||
# irrespective of other settings that modify the search order or search paths
|
||||
# This follows the guidelines from the find_package documentation
|
||||
# (https://cmake.org/cmake/help/latest/command/find_package.html):
|
||||
# find_package (<PackageName> PATHS paths... NO_DEFAULT_PATH)
|
||||
# find_package (<PackageName>)
|
||||
|
||||
# Filter out `REQUIRED` from the argument list, as the first call may fail
|
||||
set(_find_args_${package_name} "${ARGN}")
|
||||
list(REMOVE_ITEM _find_args_${package_name} "REQUIRED")
|
||||
if(NOT "MODULE" IN_LIST _find_args_${package_name})
|
||||
find_package(${package_name} ${_find_args_${package_name}} BYPASS_PROVIDER PATHS "${_conan_generators_folder}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
|
||||
unset(_find_args_${package_name})
|
||||
endif()
|
||||
|
||||
# Invoke find_package a second time - if the first call succeeded,
|
||||
# this will simply reuse the result. If not, fall back to CMake default search
|
||||
# behaviour, also allowing modules to be searched.
|
||||
if(NOT ${package_name}_FOUND)
|
||||
list(FIND CMAKE_MODULE_PATH "${_conan_generators_folder}" _index)
|
||||
if(_index EQUAL -1)
|
||||
list(PREPEND CMAKE_MODULE_PATH "${_conan_generators_folder}")
|
||||
endif()
|
||||
unset(_index)
|
||||
find_package(${package_name} ${ARGN} BYPASS_PROVIDER)
|
||||
list(REMOVE_ITEM CMAKE_MODULE_PATH "${_conan_generators_folder}")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
cmake_language(
|
||||
SET_DEPENDENCY_PROVIDER conan_provide_dependency
|
||||
SUPPORTED_METHODS FIND_PACKAGE
|
||||
)
|
||||
|
||||
|
||||
macro(conan_provide_dependency_check)
|
||||
set(_conan_provide_dependency_invoked FALSE)
|
||||
get_property(_conan_provide_dependency_invoked GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED)
|
||||
if(NOT _conan_provide_dependency_invoked)
|
||||
message(WARNING "Conan is correctly configured as dependency provider, "
|
||||
"but Conan has not been invoked. Please add at least one "
|
||||
"call to `find_package()`.")
|
||||
if(DEFINED CONAN_COMMAND)
|
||||
# supress warning in case `CONAN_COMMAND` was specified but unused.
|
||||
set(_conan_command ${CONAN_COMMAND})
|
||||
unset(_conan_command)
|
||||
endif()
|
||||
endif()
|
||||
unset(_conan_provide_dependency_invoked)
|
||||
endmacro()
|
||||
|
||||
|
||||
# Add a deferred call at the end of processing the top-level directory
|
||||
# to check if the dependency provider was invoked at all.
|
||||
cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependency_check)
|
||||
|
||||
# Configurable variables for Conan profiles
|
||||
set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile")
|
||||
set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile")
|
||||
set(CONAN_INSTALL_ARGS "--build=missing" CACHE STRING "Command line arguments for conan install")
|
||||
|
||||
find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH)
|
||||
if(NOT _cmake_program)
|
||||
get_filename_component(PATH_TO_CMAKE_BIN "${CMAKE_COMMAND}" DIRECTORY)
|
||||
set(PATH_TO_CMAKE_BIN "${PATH_TO_CMAKE_BIN}" CACHE INTERNAL "Path where the CMake executable is")
|
||||
endif()
|
||||
|
||||
cmake_policy(POP)
|
57
conanfile.py
Normal file
57
conanfile.py
Normal file
@ -0,0 +1,57 @@
|
||||
from conan import ConanFile
|
||||
from conan.tools.cmake import cmake_layout
|
||||
import os
|
||||
|
||||
|
||||
class Pkg(ConanFile):
|
||||
settings = "os", "compiler", "build_type", "arch"
|
||||
generators = (
|
||||
"CMakeDeps",
|
||||
"CMakeToolchain",
|
||||
)
|
||||
default_options = {
|
||||
"llvm-core/*:targets": "X86",
|
||||
"boost/*:fPIC": "True",
|
||||
"boost/*:header_only": "False",
|
||||
"boost/*:without_contract": "True",
|
||||
"boost/*:without_fiber": "True",
|
||||
"boost/*:without_graph": "True",
|
||||
"boost/*:without_graph_parallel": "True",
|
||||
"boost/*:without_iostreams": "True",
|
||||
"boost/*:without_json": "True",
|
||||
"boost/*:without_locale": "True",
|
||||
"boost/*:without_log": "True",
|
||||
"boost/*:without_math": "True",
|
||||
"boost/*:without_mpi": "True",
|
||||
"boost/*:without_nowide": "True",
|
||||
"boost/*:without_python": "True",
|
||||
"boost/*:without_random": "True",
|
||||
"boost/*:without_regex": "True",
|
||||
"boost/*:without_stacktrace": "True",
|
||||
"boost/*:without_test": "True",
|
||||
"boost/*:without_timer": "True",
|
||||
"boost/*:without_type_erasure": "True",
|
||||
"boost/*:without_wave": "True",
|
||||
}
|
||||
|
||||
def requirements(self):
|
||||
self.requires("fmt/8.0.1")
|
||||
self.requires("spdlog/1.9.2")
|
||||
self.requires("boost/1.85.0")
|
||||
self.requires("abseil/20250127.0")
|
||||
self.requires("elfio/3.11")
|
||||
self.requires("lz4/1.9.3")
|
||||
self.requires("yaml-cpp/0.7.0")
|
||||
self.requires("jsoncpp/1.9.5")
|
||||
self.requires("zlib/1.2.12")
|
||||
self.requires("asmjit/cci.20240531")
|
||||
if "WITH_LLVM" in os.environ:
|
||||
self.requires("llvm-core/19.1.7")
|
||||
if os.path.isdir("dbt-rise-plugins"):
|
||||
self.requires("lua/5.4.3")
|
||||
|
||||
def build_requirements(self):
|
||||
pass
|
||||
|
||||
def layout(self):
|
||||
cmake_layout(self)
|
Submodule dbt-rise-core updated: 01d81b03fb...8950a5e8a3
Submodule dbt-rise-tgc updated: 502f3e8df9...047e2e12b0
@ -1 +1 @@
|
||||
conan==1.59
|
||||
conan
|
1
scc
1
scc
Submodule scc deleted from 7960982947
Reference in New Issue
Block a user