Compare commits

...

5 Commits

8 changed files with 264 additions and 25 deletions

View File

@ -164,7 +164,7 @@
<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="1741980051132" moduleId="de.marw.cmake4eclipse.mbs.settings">
<options/>
<defs>
<def name="CMAKE_BUILD_TYPE" type="STRING" val="RelWithDebInfo"/>
@ -172,6 +172,66 @@
<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"/>
<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="ENABLE_GPROF" type="BOOL" val="ON"/>
</defs>
</storageModule>
</cconfiguration>

View File

@ -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)
@ -11,11 +11,13 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
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)
option(WITH_ASMJIT "Build ASMJIT backend" ON)
option(PORTABLE "Build executable without platform specific optimizations" OFF)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
@ -24,12 +26,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,10 +39,16 @@ 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)
@ -95,7 +100,7 @@ if(CMAKE_PROJECT_NAME STREQUAL "TGC-ISS")
if(WITH_LLVM)
list(APPEND CONAN_PACKAGE_LIST llvm-core/${LLVM_VERSION})
list(APPEND CONAN_PACKAGE_OPTIONS libiconv:shared=True)
list(APPEND CONAN_PACKAGE_OPTIONS libiconv:shared=True llvm-code:targets=X85)
endif()
if(WITH_ASMJIT)
list(APPEND CONAN_PACKAGE_LIST asmjit/cci.20240531)
@ -169,7 +174,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 +230,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)

107
cmake/ConanInline.cmake Normal file
View 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()

View 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
View 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"
)

@ -1 +1 @@
Subproject commit 01d81b03fbe6d5d3ed7f4655b88655a1e124df1f
Subproject commit 678c8ac223892d444da6f4e38ac92b7641bb152d

@ -1 +1 @@
Subproject commit 502f3e8df9f4c44e79bb1b6fd8c2ec8e42c8de94
Subproject commit f7e3db11ad7b65b53d9bc2e82204a532aa9bcb0d

1
scc

@ -1 +0,0 @@
Subproject commit 7960982947592b1bd97b71c5615a5e2b82a920c0