From d1a1fad361736c7054cc62999475ebc4f686a77b Mon Sep 17 00:00:00 2001 From: eyck Date: Sat, 30 May 2020 13:57:34 +0200 Subject: [PATCH] modernize build system and cleanup dependencies --- CMakeLists.txt | 34 ++++--------- dbt-core | 2 +- platform/CMakeLists.txt | 57 ---------------------- platform/src/CMakeLists.txt | 96 ++++++++++--------------------------- platform/src/sc_main.cpp | 4 ++ riscv | 2 +- 6 files changed, 39 insertions(+), 156 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fa7da2..5e3ff85 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,14 @@ cmake_minimum_required(VERSION 3.12) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_CURRENT_SOURCE_DIR}/scc/cmake) -project(RISCV-VP LANGUAGES CXX) +project(RISCV-VP VERSION 1.0.0 LANGUAGES CXX) set(ENABLE_SCV TRUE CACHE BOOL "Enable use of SCV") + set(ENABLE_SHARED TRUE CACHE BOOL "Build shared libraries") +set(WITH_LLVM FALSE CACHE BOOL "Build LLVM based backend") + include(GitFunctions) get_branch_from_git() # if we are not on master or develop set the submodules to develop @@ -42,11 +45,11 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) 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("${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() endif() if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") @@ -63,16 +66,6 @@ setup_conan(TARGETS) # This line finds the boost lib and headers. set(Boost_NO_BOOST_CMAKE ON) # Don't do a find_package in config mode before searching for a regular boost install. -if(DEFINED ENV{LLVM_HOME}) - find_path (LLVM_DIR LLVM-Config.cmake $ENV{LLVM_HOME}/lib/cmake/llvm) -endif(DEFINED ENV{LLVM_HOME}) -find_package(LLVM REQUIRED CONFIG) -message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") -message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") -llvm_map_components_to_libnames(llvm_libs support core mcjit x86codegen x86asmparser) - -set(BUILD_SHARED_LIBS 1) - find_package(Threads) find_package(Tcmalloc) find_package(ZLIB) @@ -90,7 +83,6 @@ if(SystemC_FOUND) endif() endif(SystemC_FOUND) -set(PROJECT_3PARTY_DIRS external) include(clang-format) set(ENABLE_CLANG_TIDY OFF CACHE BOOL "Add clang-tidy automatically to builds") @@ -107,16 +99,8 @@ if (ENABLE_CLANG_TIDY) endif() endif() -# Set the version number of your project here (format is MAJOR.MINOR.PATCHLEVEL - e.g. 1.0.0) -set(VERSION_MAJOR "1") -set(VERSION_MINOR "0") -set(VERSION_PATCH "0") -set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) - add_subdirectory(external) add_subdirectory(dbt-core) add_subdirectory(riscv) add_subdirectory(scc) add_subdirectory(platform) - -message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}") diff --git a/dbt-core b/dbt-core index 1ac3058..aacd45b 160000 --- a/dbt-core +++ b/dbt-core @@ -1 +1 @@ -Subproject commit 1ac3058673845b2cc653b6d4d4893ee6c49fecf9 +Subproject commit aacd45ba9ae91d37ceee04dd432383317c4c1529 diff --git a/platform/CMakeLists.txt b/platform/CMakeLists.txt index 9f7e56e..fe39a7e 100644 --- a/platform/CMakeLists.txt +++ b/platform/CMakeLists.txt @@ -1,60 +1,3 @@ cmake_minimum_required(VERSION 3.12) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/../cmake) # main (top) cmake dir -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) # project specific cmake dir - -# CMake useful variables -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib") - -# Set the name of your project here -project("platform") - -include(Common) - -find_package(Boost COMPONENTS program_options system thread filesystem REQUIRED) - -# check that we have averything we need -if(!SystemC_FOUND) - message( FATAL_ERROR "SystemC library not found." ) -endif() - -if(!CCI_FOUND) - message( FATAL_ERROR "SystemC CCI library not found." ) -endif() - -# This sets the include directory for the reference project. This is the -I flag in gcc. - -add_dependent_subproject(dbt-core) -add_dependent_subproject(scc) -add_dependent_subproject(riscv) - -include_directories( - ${PROJECT_SOURCE_DIR}/../external/elfio - ${PROJECT_SOURCE_DIR}/../external/libGIS - ${Boost_INCLUDE_DIRS} -) - -# Mac needed variables (adapt for your needs - http://www.cmake.org/Wiki/CMake_RPATH_handling#Mac_OS_X_and_the_RPATH) -set(CMAKE_MACOSX_RPATH ON) -set(CMAKE_SKIP_BUILD_RPATH FALSE) -set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) -set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - -## the following setting needs to be consistent with the library -#add_definitions(-DSC_DEFAULT_WRITER_POLICY=SC_MANY_WRITERS) add_subdirectory(src) - -# -# SYSTEM PACKAGING (RPM, TGZ, ...) -# _____________________________________________________________________________ - -#include(CPackConfig) - -# -# CMAKE PACKAGING (for other CMake projects to use this one easily) -# _____________________________________________________________________________ - -#include(PackageConfigurator) \ No newline at end of file diff --git a/platform/src/CMakeLists.txt b/platform/src/CMakeLists.txt index 6ae0877..18e0292 100644 --- a/platform/src/CMakeLists.txt +++ b/platform/src/CMakeLists.txt @@ -1,6 +1,14 @@ +cmake_minimum_required(VERSION 3.12) + +project(platform VERSION 1.0.0) + +include(GNUInstallDirs) + # library files FILE(GLOB RiscVSCHeaders ${PROJECT_SOURCE_DIR}/incl/sysc/*.h ${PROJECT_SOURCE_DIR}/incl/sysc/*/*.h) + set(LIB_HEADERS ${RiscVSCHeaders} ) + set(LIB_SOURCES sysc/aon.cpp sysc/BLDC.cpp @@ -21,86 +29,30 @@ set(LIB_SOURCES sysc/uart.cpp CLIParser.cpp ) -set(APP_SOURCES sc_main.cpp) - -# Define two variables in order not to repeat ourselves. -set(LIBRARY_NAME platform) - -## the following setting needs to be consistent with the library -#add_definitions(-DSC_DEFAULT_WRITER_POLICY=SC_MANY_WRITERS) - -# Define the library -add_library(${LIBRARY_NAME} ${LIB_SOURCES}) - -# Links the target exe against the libraries -target_link_libraries(${LIBRARY_NAME} riscv_sc) -target_link_libraries(${LIBRARY_NAME} dbt-core) -target_link_libraries(${LIBRARY_NAME} softfloat) -target_link_libraries(${LIBRARY_NAME} scc) -target_link_libraries(${LIBRARY_NAME} CONAN_PKG::Seasocks) -target_link_libraries(${LIBRARY_NAME} external) -target_link_libraries(${LIBRARY_NAME} ${llvm_libs}) -target_link_libraries(${LIBRARY_NAME} ${Boost_LIBRARIES} ) - -set_target_properties(${LIBRARY_NAME} PROPERTIES - VERSION ${VERSION} # ${VERSION} was defined in the main CMakeLists. +add_library(platform ${LIB_SOURCES}) +target_include_directories(platform PUBLIC ../incl) +target_link_libraries(platform PUBLIC riscv_sc CONAN_PKG::Seasocks external) +set_target_properties(platform PROPERTIES + VERSION ${PROJECT_VERSION} # ${VERSION} was defined in the main CMakeLists. FRAMEWORK FALSE PUBLIC_HEADER "${LIB_HEADERS}" # specify the public headers ) -# This is a make target, so you can do a "make riscv-sc" -set(APPLICATION_NAME riscv-vp) - -include_directories(${PROJECT_SOURCE_DIR}/incl) -include_directories(${CONAN_INCLUDE_DIRS_SEASOCKS}) -add_definitions(-DWITH_SYSTEMC) # or -DSC_NO_WRITE_CHECK -include_directories(${SystemC_INCLUDE_DIRS}) -include_directories(${CCI_INCLUDE_DIRS}) -if(SCV_FOUND) - add_definitions(-DWITH_SCV) - include_directories(${SCV_INCLUDE_DIRS}) -endif() - - -link_directories(${SystemC_LIBRARY_DIRS}) -link_directories(${CCI_LIBRARY_DIRS}) -link_directories(${CONAN_LIB_DIRS_SEASOCKS}) - -add_executable(${APPLICATION_NAME} ${APP_SOURCES}) +add_executable(riscv-vp sc_main.cpp) # include files for this application -target_include_directories(${APPLICATION_NAME} SYSTEM PRIVATE ${LLVM_INCLUDE_DIRS}) -# Links the target exe against the libraries -target_link_libraries(${APPLICATION_NAME} ${LIBRARY_NAME}) -target_link_libraries(${APPLICATION_NAME} riscv_sc) -target_link_libraries(${APPLICATION_NAME} dbt-core) -target_link_libraries(${APPLICATION_NAME} softfloat) -target_link_libraries(${APPLICATION_NAME} scc) -target_link_libraries(${APPLICATION_NAME} ${CONAN_LIBS_SEASOCKS}) -target_link_libraries(${APPLICATION_NAME} external) -target_link_libraries(${APPLICATION_NAME} ${llvm_libs}) -target_link_libraries(${APPLICATION_NAME} ${CCI_LIBRARIES} ) -target_link_libraries(${APPLICATION_NAME} ${SystemC_LIBRARIES} ) -if(SCV_FOUND) - link_directories(${SCV_LIBRARY_DIRS}) - target_link_libraries (${APPLICATION_NAME} ${SCV_LIBRARIES}) -endif() -target_link_libraries(${APPLICATION_NAME} ${Boost_LIBRARIES} ) +target_include_directories(riscv-vp SYSTEM PRIVATE ${LLVM_INCLUDE_DIRS}) +target_link_libraries(riscv-vp PUBLIC platform riscv_sc) if (Tcmalloc_FOUND) - target_link_libraries(${APPLICATION_NAME} ${Tcmalloc_LIBRARIES}) + target_link_libraries(riscv-vp PUBLIC ${Tcmalloc_LIBRARIES}) endif(Tcmalloc_FOUND) -# Says how and where to install software -# Targets: -# * /lib/ -# * header location after install: /include//*.h -# * headers can be included by C++ code `#/Bar.hpp>` -install(TARGETS ${LIBRARY_NAME} ${APPLICATION_NAME} +install(TARGETS platform riscv-vp EXPORT ${PROJECT_NAME}Targets # for downstream dependencies - ARCHIVE DESTINATION lib COMPONENT libs # static lib - RUNTIME DESTINATION bin COMPONENT libs # binaries - LIBRARY DESTINATION lib COMPONENT libs # shared lib - FRAMEWORK DESTINATION bin COMPONENT libs # for mac - PUBLIC_HEADER DESTINATION incl/${PROJECT_NAME} COMPONENT devel # headers for mac (note the different component -> different package) - INCLUDES DESTINATION incl # headers + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libs # static lib + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libs # binaries + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libs # shared lib + FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libs # for mac + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} COMPONENT devel # headers for mac (note the different component -> different package) + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} # headers ) diff --git a/platform/src/sc_main.cpp b/platform/src/sc_main.cpp index 89938e9..f278883 100644 --- a/platform/src/sc_main.cpp +++ b/platform/src/sc_main.cpp @@ -44,7 +44,9 @@ #include #include +#ifdef WITH_LLVM #include +#endif #include #include @@ -74,7 +76,9 @@ int sc_main(int argc, char *argv[]) { /////////////////////////////////////////////////////////////////////////// // set up infrastructure /////////////////////////////////////////////////////////////////////////// +#ifdef WITH_LLVM iss::init_jit_debug(argc, argv); +#endif /////////////////////////////////////////////////////////////////////////// // set up configuration /////////////////////////////////////////////////////////////////////////// diff --git a/riscv b/riscv index 0ff6ccf..10797a4 160000 --- a/riscv +++ b/riscv @@ -1 +1 @@ -Subproject commit 0ff6ccf9e263e25e4efa8269ee1d4008d09a432e +Subproject commit 10797a473d6193cefe5a0f4495d89d33fa0095a1