From a65c6e2f63486699d9a25b7902993037da4734c3 Mon Sep 17 00:00:00 2001 From: Bo-Yuan Huang Date: Wed, 8 May 2019 22:18:25 -0400 Subject: [PATCH 01/11] Upgrade to modern CMake (> 3.8) --- CMakeLists.txt | 169 ++++++++++++++++++++++++++++----- cmake/ConfigSafeGuards.cmake | 11 +++ cmake/cmake_uninstall.cmake.in | 23 +++++ cmake/config.cmake.in | 31 ++++++ src/CMakeLists.txt | 169 +++++++++++++++++++++------------ src/coreir-c/CMakeLists.txt | 64 ++++++------- src/libs/CMakeLists.txt | 63 ++++++------ src/simulator/CMakeLists.txt | 32 +++---- 8 files changed, 391 insertions(+), 171 deletions(-) create mode 100644 cmake/ConfigSafeGuards.cmake create mode 100644 cmake/cmake_uninstall.cmake.in create mode 100644 cmake/config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 63bed1a8c..c8d1646e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,40 +1,159 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.8) -project(coreir) -option(STATIC "Statically link everything" OFF) +if(${CMAKE_VERSION} VERSION_LESS 3.13) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +else() + cmake_policy(VERSION 3.13) +endif() -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - # require at least gcc 4.8 - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) - message(FATAL_ERROR "GCC version must be at least 4.9!") - endif() -else() - message(WARNING "You are using an untested compiler") +# ---------------------------------------------------------------------------- # +# PROJECT +# name version language +# ---------------------------------------------------------------------------- # +project(coreir VERSION 0.0.30 + LANGUAGES CXX +) + + +# ---------------------------------------------------------------------------- # +# OPTION +# build configuration +# ---------------------------------------------------------------------------- # +option(COREIR_STATIC "Statically link everything" OFF) + + +# ---------------------------------------------------------------------------- # +# VARARIABLE +# alias and configurations +# ---------------------------------------------------------------------------- # +set(COREIR_TARGET_NAME ${PROJECT_NAME}) +set(COREIR_CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}" CACHE INTERNAL "") +set(COREIR_INCLUDE_INSTALL_DIR "include") +set(COREIR_INCLUDE_BUILD_DIR "${PROJECT_SOURCE_DIR}/include") +set(COREIR_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") +set(COREIR_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") +set(COREIR_CMAKE_CONFIG_TEMPLATE "cmake/config.cmake.in") +set(COREIR_CMAKE_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}") +set(COREIR_CMAKE_PROJECT_TARGETS_FILE "${PROJECT_NAME}Targets.cmake") + +set(COREIR_CMAKE_VERSION_CONFIG_FILE + "${COREIR_CMAKE_CONFIG_DIR}/${PROJECT_NAME}ConfigVersion.cmake") + +set(COREIR_CMAKE_PROJECT_CONFIG_FILE + "${COREIR_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Config.cmake") + + +# ---------------------------------------------------------------------------- # +# External dependencies +# ---------------------------------------------------------------------------- # +## +## Make sure that custom modules can be found. +## +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) + + +# ---------------------------------------------------------------------------- # +# Misc +# ---------------------------------------------------------------------------- # +## +## Only tested with gcc (> 4.8) +## +if(${CMAKE_COMPILER_IS_GNUCXX}) + + # require at least gcc 4.8 + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) + message(FATAL_ERROR "GCC version must be at least 4.9!") + endif() + +else() + + message(WARNING "You are using an untested compiler") + endif() -if (STATIC) - if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - set(STATIC_FLAGS "-static-libgcc -static-libstdc++") - add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) - endif() +## +## RPATH for shared target +## +if(NOT ${COREIR_STATIC}) + set(CMAKE_INSTALL_RPATH ${COREIR_INSTALL_RPATH}) + set(CMAKE_MACOSX_RPATH TRUE) endif() -set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -fPIC -Werror ${STATIC_FLAGS}") +# ---------------------------------------------------------------------------- # +# TARGET +# library target +# ---------------------------------------------------------------------------- # +set(COREIR_LIB_NAME ${COREIR_TARGET_NAME}) +set(COREIR_EXE_NAME ${COREIR_TARGET_NAME}-bin) +set(COREIR_ITP_NAME ${COREIR_TARGET_NAME}-interpreter) +set(COREIR_SIM_NAME ${COREIR_TARGET_NAME}-simulator) +add_subdirectory(src) + + +# ---------------------------------------------------------------------------- # +# INSTALL +# project related +# ---------------------------------------------------------------------------- # +## +## forward version for find_package +## +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + ${COREIR_CMAKE_VERSION_CONFIG_FILE} + COMPATIBILITY SameMajorVersion # AnyNewVersion +) -set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) -set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) -set(INCLUDE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/include) +## +## cmake config +## +configure_file( + ${COREIR_CMAKE_CONFIG_TEMPLATE} + ${COREIR_CMAKE_PROJECT_CONFIG_FILE} + @ONLY +) -add_subdirectory(${CMAKE_SOURCE_DIR}/src) +install( + FILES ${COREIR_CMAKE_PROJECT_CONFIG_FILE} ${COREIR_CMAKE_VERSION_CONFIG_FILE} + DESTINATION ${COREIR_CONFIG_INSTALL_DIR} +) +## +## project export +## install( - DIRECTORY ${CMAKE_SOURCE_DIR}/include/ - DESTINATION include - FILES_MATCHING PATTERN "*.h" + EXPORT ${COREIR_TARGETS_EXPORT_NAME} + DESTINATION ${COREIR_CONFIG_INSTALL_DIR} + NAMESPACE ${PROJECT_NAME}:: + FILE ${COREIR_CMAKE_PROJECT_TARGETS_FILE} ) -add_custom_target(uninstall - "${CMAKE_COMMAND}" -P "${CMAKE_SOURCE_DIR}/tools/cmake/uninstall.cmake" +export( + TARGETS ${COREIR_LIB_NAME} + NAMESPACE ${PROJECT_NAME}:: + FILE ${COREIR_CMAKE_PROJECT_TARGETS_FILE} ) +if(${COREIR_EXPORT_PACKAGE}) + export(PACKAGE ${PROJECT_NAME}) +endif() + + +# ---------------------------------------------------------------------------- # +# UNINSTALL +# uninstall files listed in install_manifest.txt +# ---------------------------------------------------------------------------- # +if(NOT TARGET uninstall) + configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake" + IMMEDIATE @ONLY + ) + + add_custom_target(uninstall + COMMAND + ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake + ) + +endif() + diff --git a/cmake/ConfigSafeGuards.cmake b/cmake/ConfigSafeGuards.cmake new file mode 100644 index 000000000..dc735f1a6 --- /dev/null +++ b/cmake/ConfigSafeGuards.cmake @@ -0,0 +1,11 @@ + +# guard against in-source builds +if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) + message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there.") +endif() + +# guard against bad build-type strings +if(NOT ${CMAKE_BUILD_TYPE}) + set(CMAKE_BUILD_TYPE "Debug") +endif() + diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in new file mode 100644 index 000000000..a44ad4488 --- /dev/null +++ b/cmake/cmake_uninstall.cmake.in @@ -0,0 +1,23 @@ +# uninstall targets +if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") +endif(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") + +file(READ "@CMAKE_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach(file ${files}) + message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + endif(NOT "${rm_retval}" STREQUAL 0) + else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") +endforeach(file) + diff --git a/cmake/config.cmake.in b/cmake/config.cmake.in new file mode 100644 index 000000000..fb415952c --- /dev/null +++ b/cmake/config.cmake.in @@ -0,0 +1,31 @@ +# ---------------------------------------------------------------------------- # +# define dependencies +# ---------------------------------------------------------------------------- # +include(CMakeFindDependencyMacro) + +# ---------------------------------------------------------------------------- # +# define exports +# ---------------------------------------------------------------------------- # +include(FindPackageHandleStandardArgs) + +set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE}) + +find_package_handle_standard_args(@PROJECT_NAME@ CONFIG_MODE) + +if(NOT TARGET @PROJECT_NAME@::@COREIR_TARGET_NAME@) + include("${CMAKE_CURRENT_LIST_DIR}/@COREIR_TARGETS_EXPORT_NAME@.cmake") + + if((NOT TARGET @COREIR_TARGET_NAME@) AND + (NOT @PROJECT_NAME@_FIND_VERSION OR + @PROJECT_NAME@_FIND_VERSION VERSION_LESS 1.0.0)) + + add_library(@COREIR_TARGET_NAME@ INTERFACE IMPORTED) + + set_target_properties(@COREIR_TARGET_NAME@ PROPERTIES + INTERFACE_LINK_LIBRARIES @PROJECT_NAME@::@COREIR_TARGET_NAME@ + ) + + endif() + +endif() + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7fd967342..3f17c4cbb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,95 +1,144 @@ message(STATUS ${CMAKE_CURRENT_SOURCE_DIR}) + +# ---------------------------------------------------------------------------- # +# TARGET +# archive library +# ---------------------------------------------------------------------------- # +## +## source files +## file(GLOB SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/ir/[^_]*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/passes/analysis/[^_]*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/passes/transform/[^_]*.cpp ) -#Create libcoreir -set(CMAKE_MACOSX_RPATH 1) -set(CMAKE_INSTALL_RPATH "${LIBRARY_OUTPUT_PATH}") - -if (STATIC) - add_library(coreir STATIC ${SRC_FILES}) +## +## create lib +## +if(${COREIR_STATIC}) + add_library(${COREIR_LIB_NAME} STATIC ${SRC_FILES}) else() - add_library(coreir SHARED ${SRC_FILES}) + add_library(${COREIR_LIB_NAME} SHARED ${SRC_FILES}) endif() -target_include_directories(coreir PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include) -target_link_libraries(coreir dl) +add_library(${PROJECT_NAME}::${COREIR_LIB_NAME} ALIAS ${COREIR_LIB_NAME}) -#Install libcoreir -install( - TARGETS coreir - DESTINATION lib -) +## +## compile features/options +## +target_compile_features(${COREIR_LIB_NAME} PUBLIC cxx_std_11) -add_custom_command( - TARGET coreir - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib/" - COMMENT "Copying to lib/" +## +## include paths +## +target_include_directories(${COREIR_LIB_NAME} + PUBLIC + $ + $ ) -#Create coreir executable -add_executable(coreir-bin ${CMAKE_CURRENT_SOURCE_DIR}/binary/coreir.cpp) -target_link_libraries(coreir-bin PUBLIC coreir) -target_include_directories(coreir-bin PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include) -set_target_properties(coreir-bin - PROPERTIES OUTPUT_NAME coreir + +# ---------------------------------------------------------------------------- # +# LINK LIBRARIES +# external dependencies +# ---------------------------------------------------------------------------- # +target_link_libraries(${COREIR_LIB_NAME} PUBLIC dl) + + +# ---------------------------------------------------------------------------- # +# INSTALL +# install and export lib target +# ---------------------------------------------------------------------------- # +install( + TARGETS ${COREIR_LIB_NAME} + EXPORT ${COREIR_TARGETS_EXPORT_NAME} + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + RUNTIME DESTINATION bin + INCLUDES DESTINATION ${COREIR_INCLUDE_INSTALL_DIR} ) -add_custom_command( - TARGET coreir-bin - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/bin/" - COMMENT "Copying to bin/" + +## +## include directory +## +install( + DIRECTORY ${COREIR_INCLUDE_BUILD_DIR} + #DESTINATION ${COREIR_INCLUDE_INSTALL_DIR} + DESTINATION "." # XXX wrap the header in "coreir" to make this cleaner + FILES_MATCHING PATTERN "*.h" ) +# ---------------------------------------------------------------------------- # +# TARGET +# coreir executable +# ---------------------------------------------------------------------------- # +add_executable(${COREIR_EXE_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/binary/coreir.cpp) +target_link_libraries(${COREIR_EXE_NAME} PUBLIC ${COREIR_LIB_NAME}) +set_target_properties(${COREIR_EXE_NAME} PROPERTIES RUNTIME_OUTPUT_NAME coreir) + + +# ---------------------------------------------------------------------------- # +# INSTALL +# install coreir executable +# ---------------------------------------------------------------------------- # install( - TARGETS coreir-bin - DESTINATION bin + TARGETS ${COREIR_EXE_NAME} + RUNTIME DESTINATION bin ) + #Create the coreir libraries -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libs) +set(COREIR_SUBLIB_PREFIX ${COREIR_LIB_NAME}) +add_subdirectory(libs) #create simulator library -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/simulator) +set(COREIR_SIMLIB coreirsim) +add_subdirectory(simulator) #create coreir-c libraries -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/coreir-c) +set(COREIR_LIB_C "${COREIR_LIB_NAME}-c") +set(COREIR_SIMLIB_C "${COREIR_SIMLIB}-c") +add_subdirectory(coreir-c) -#create interpreter executable -add_executable(coreir-interpreter ${CMAKE_CURRENT_SOURCE_DIR}/binary/interpreter.cpp) -target_link_libraries(coreir-interpreter PUBLIC coreir) -target_link_libraries(coreir-interpreter PUBLIC coreirsim) -target_link_libraries(coreir-interpreter PUBLIC coreir-commonlib) -target_include_directories(coreir-interpreter PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include) +# ---------------------------------------------------------------------------- # +# TARGET +# interpreter executable +# ---------------------------------------------------------------------------- # +add_executable(${COREIR_ITP_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/binary/interpreter.cpp) +target_link_libraries(${COREIR_ITP_NAME} PUBLIC ${COREIR_LIB_NAME}) +target_link_libraries(${COREIR_ITP_NAME} PUBLIC coreirsim) +target_link_libraries(${COREIR_ITP_NAME} PUBLIC coreir-commonlib) -#create simulator executable -add_executable(coreir-simulator ${CMAKE_CURRENT_SOURCE_DIR}/binary/simulator.cpp) -target_link_libraries(coreir-simulator PUBLIC coreir) -target_link_libraries(coreir-simulator PUBLIC coreirsim) -target_link_libraries(coreir-simulator PUBLIC coreir-commonlib) -target_include_directories(coreir-simulator PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include) +# ---------------------------------------------------------------------------- # +# INSTALL +# install interpreter executable +# ---------------------------------------------------------------------------- # install( - TARGETS coreir-interpreter coreir-simulator - DESTINATION bin + TARGETS ${COREIR_ITP_NAME} + RUNTIME DESTINATION bin ) -add_custom_command( - TARGET coreir-interpreter - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/bin/" - COMMENT "Copying to bin/" -) -add_custom_command( - TARGET coreir-simulator - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/bin/" - COMMENT "Copying to bin/" +# ---------------------------------------------------------------------------- # +# TARGET +# simulator executable +# ---------------------------------------------------------------------------- # +add_executable(${COREIR_SIM_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/binary/simulator.cpp) +target_link_libraries(${COREIR_SIM_NAME} PUBLIC ${COREIR_LIB_NAME}) +target_link_libraries(${COREIR_SIM_NAME} PUBLIC coreirsim) +target_link_libraries(${COREIR_SIM_NAME} PUBLIC coreir-commonlib) + + +# ---------------------------------------------------------------------------- # +# INSTALL +# install simulator executable +# ---------------------------------------------------------------------------- # +install( + TARGETS ${COREIR_SIM_NAME} + RUNTIME DESTINATION bin ) + diff --git a/src/coreir-c/CMakeLists.txt b/src/coreir-c/CMakeLists.txt index 3c9947b02..02591d83c 100644 --- a/src/coreir-c/CMakeLists.txt +++ b/src/coreir-c/CMakeLists.txt @@ -1,42 +1,42 @@ -set(CMAKE_MACOSX_RPATH 1) -set(CMAKE_INSTALL_RPATH "${LIBRARY_OUTPUT_PATH}") - - -#Create libcoreir-c -project(coreir-c) +## +## libcoreir-c +## +project(${COREIR_LIB_C} LANGUAGES CXX) set(CSRC coreir-c.cpp types-c.cpp values-c.cpp) -add_library(coreir-c SHARED ${CSRC}) -target_include_directories(coreir-c PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../include) -target_link_libraries(coreir-c PUBLIC coreir) - -#Create libcoreirsim-c -project(coreirsim-c) -set(CSIMSRC simulator-c.cpp) +if(${COREIR_STATIC}) + add_library(${COREIR_LIB_C} STATIC ${CSRC}) +else() + add_library(${COREIR_LIB_C} SHARED ${CSRC}) +endif() -add_library(coreirsim-c SHARED ${CSIMSRC}) -target_include_directories(coreirsim-c PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../include) -target_link_libraries(coreirsim-c PUBLIC coreir) -target_link_libraries(coreirsim-c PUBLIC coreirsim) +target_link_libraries(${COREIR_LIB_C} PUBLIC ${COREIR_LIB_NAME}) -#Install libcoreir install( - TARGETS coreir-c coreirsim-c - DESTINATION lib -) -add_custom_command( - TARGET coreir-c - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib/" - COMMENT "Copying to lib/" + TARGETS ${COREIR_LIB_C} + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib ) -add_custom_command( - TARGET coreirsim-c - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib/" - COMMENT "Copying to lib/" -) +## +## libcoreirsim-c +## +project(${COREIR_SIMLIB_C} LANGUAGES CXX) +set(CSIMSRC simulator-c.cpp) + +if(${COREIR_STATIC}) + add_library(${COREIR_SIMLIB_C} STATIC ${CSIMSRC}) +else() + add_library(${COREIR_SIMLIB_C} SHARED ${CSIMSRC}) +endif() + +target_link_libraries(${COREIR_SIMLIB_C} PUBLIC ${COREIR_LIB_NAME}) +target_link_libraries(${COREIR_SIMLIB_C} PUBLIC ${COREIR_SIMLIB}) +install( + TARGETS ${COREIR_SIMLIB_C} + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +) diff --git a/src/libs/CMakeLists.txt b/src/libs/CMakeLists.txt index 02988a565..c6c9c8e0e 100644 --- a/src/libs/CMakeLists.txt +++ b/src/libs/CMakeLists.txt @@ -1,39 +1,32 @@ - - -#Common things for creating the libraries -#find_library(COREIR_LIB coreir) -#message(STATUS ${COREIR_LIB}) -set(CMAKE_MACOSX_RPATH 1) -set(CMAKE_INSTALL_RPATH "${LIBRARY_OUTPUT_PATH}") - -set(COREIRLIBS - "commonlib" - "rtlil" - "aetherlinglib" - "ice40" - "float" -) -foreach(CLIB ${COREIRLIBS}) - #message(STATUS ${COREIRLIB}) - set(COREIRLIB "coreir-${CLIB}") - project(${COREIRLIB}) - - set(SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${CLIB}.cpp") - - add_library(${COREIRLIB} SHARED ${SRC_FILES}) - target_include_directories(${COREIRLIB} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../include) - target_link_libraries(${COREIRLIB} PUBLIC coreir) - install( - TARGETS ${COREIRLIB} - DESTINATION lib - ) - add_custom_command( - TARGET ${COREIRLIB} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib/" - COMMENT "Copying to lib/" +## +## Macro for creating sub-units +## +macro(add_coreir_sub_lib CLIB) + set(COREIR_SUB_LIB "${COREIR_SUBLIB_PREFIX}-${CLIB}") + project(${COREIR_SUB_LIB} LANGUAGES CXX) + + set(SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${CLIB}.cpp") + + if(${COREIR_STATIC}) + add_library(${COREIR_SUB_LIB} STATIC ${SRC_FILES}) + else() + add_library(${COREIR_SUB_LIB} SHARED ${SRC_FILES}) + endif() + + target_link_libraries(${COREIR_SUB_LIB} PUBLIC ${COREIR_LIB_NAME}) + + install( + TARGETS ${COREIR_SUB_LIB} + #EXPORT + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib ) -endforeach() +endmacro() +add_coreir_sub_lib("commonlib") +add_coreir_sub_lib("rtlil") +add_coreir_sub_lib("aetherlinglib") +add_coreir_sub_lib("ice40") +add_coreir_sub_lib("float") diff --git a/src/simulator/CMakeLists.txt b/src/simulator/CMakeLists.txt index 11fbfa082..75e9bd7df 100644 --- a/src/simulator/CMakeLists.txt +++ b/src/simulator/CMakeLists.txt @@ -1,29 +1,23 @@ -project(coreirsim) +## +## libcoreirsim +## +project(${COREIR_SIMLIB} LANGUAGES CXX) file(GLOB SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/[^_]*.cpp ) -#Create libcoreir -set(CMAKE_MACOSX_RPATH 1) -set(CMAKE_INSTALL_RPATH "${LIBRARY_OUTPUT_PATH}") +if(${COREIR_STATIC}) + add_library(${COREIR_SIMLIB} STATIC ${SRC_FILES}) +else() + add_library(${COREIR_SIMLIB} SHARED ${SRC_FILES}) +endif() -add_library(coreirsim SHARED ${SRC_FILES}) -target_include_directories(coreirsim PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../include) -target_link_libraries(coreirsim PUBLIC coreir) +target_link_libraries(${COREIR_SIMLIB} PUBLIC ${COREIR_LIB_NAME}) install( - TARGETS coreirsim - DESTINATION lib + TARGETS ${COREIR_SIMLIB} + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib ) -add_custom_command( - TARGET coreirsim - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib/" - COMMENT "Copying to lib/" -) - - - - From 616d853868ebed30ff6218bb19ed66307ad93ba5 Mon Sep 17 00:00:00 2001 From: Bo-Yuan Huang Date: Wed, 8 May 2019 22:31:01 -0400 Subject: [PATCH 02/11] ignore editor (vim) buffer --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6e8f906d9..f085469e2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ **/_*.json **/_*.txt *.pyc +*.swp \#*\# tests/bindings/python/ice40_test.json GPATH From 57bf9228119517a0a15dc076e50e7816e274ca9b Mon Sep 17 00:00:00 2001 From: Bo-Yuan Huang Date: Thu, 9 May 2019 14:03:46 -0400 Subject: [PATCH 03/11] compiler option/feature for GNU CXX --- CMakeLists.txt | 24 +++++++++++++++++++----- src/CMakeLists.txt | 6 ++++++ src/coreir-c/CMakeLists.txt | 4 ++++ src/libs/CMakeLists.txt | 6 +++++- src/simulator/CMakeLists.txt | 2 ++ 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c8d1646e1..db684cbc6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,7 +57,7 @@ set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) # Misc # ---------------------------------------------------------------------------- # ## -## Only tested with gcc (> 4.8) +## Compiler options ## if(${CMAKE_COMPILER_IS_GNUCXX}) @@ -72,13 +72,27 @@ else() endif() +macro(coreir_set_compile_option IARG_TARGET_NAME) + + if(${CMAKE_COMPILER_IS_GUNCXX}) + target_compile_options(${IARG_TARGET_NAME} PRIVATE "-Wall") + target_compile_options(${IARG_TARGET_NAME} PRIVATE "-Werror") + endif() + + set_property( + TARGET ${IARG_TARGET_NAME} + PROPERTY POSITION_INDEPENDENT_CODE ON + ) + +endmacro() + + ## ## RPATH for shared target ## -if(NOT ${COREIR_STATIC}) - set(CMAKE_INSTALL_RPATH ${COREIR_INSTALL_RPATH}) - set(CMAKE_MACOSX_RPATH TRUE) -endif() +set(CMAKE_INSTALL_RPATH ${COREIR_INSTALL_RPATH}) +set(CMAKE_MACOSX_RPATH TRUE) + # ---------------------------------------------------------------------------- # # TARGET diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3f17c4cbb..26df27036 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -28,6 +28,7 @@ add_library(${PROJECT_NAME}::${COREIR_LIB_NAME} ALIAS ${COREIR_LIB_NAME}) ## compile features/options ## target_compile_features(${COREIR_LIB_NAME} PUBLIC cxx_std_11) +coreir_set_compile_option(${COREIR_LIB_NAME}) ## ## include paths @@ -78,6 +79,7 @@ add_executable(${COREIR_EXE_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/binary/coreir.cpp) target_link_libraries(${COREIR_EXE_NAME} PUBLIC ${COREIR_LIB_NAME}) set_target_properties(${COREIR_EXE_NAME} PROPERTIES RUNTIME_OUTPUT_NAME coreir) +coreir_set_compile_option(${COREIR_EXE_NAME}) # ---------------------------------------------------------------------------- # # INSTALL @@ -112,6 +114,8 @@ target_link_libraries(${COREIR_ITP_NAME} PUBLIC ${COREIR_LIB_NAME}) target_link_libraries(${COREIR_ITP_NAME} PUBLIC coreirsim) target_link_libraries(${COREIR_ITP_NAME} PUBLIC coreir-commonlib) +coreir_set_compile_option(${COREIR_ITP_NAME}) + # ---------------------------------------------------------------------------- # # INSTALL @@ -132,6 +136,8 @@ target_link_libraries(${COREIR_SIM_NAME} PUBLIC ${COREIR_LIB_NAME}) target_link_libraries(${COREIR_SIM_NAME} PUBLIC coreirsim) target_link_libraries(${COREIR_SIM_NAME} PUBLIC coreir-commonlib) +coreir_set_compile_option(${COREIR_SIM_NAME}) + # ---------------------------------------------------------------------------- # # INSTALL diff --git a/src/coreir-c/CMakeLists.txt b/src/coreir-c/CMakeLists.txt index 02591d83c..6508c94e0 100644 --- a/src/coreir-c/CMakeLists.txt +++ b/src/coreir-c/CMakeLists.txt @@ -12,6 +12,8 @@ endif() target_link_libraries(${COREIR_LIB_C} PUBLIC ${COREIR_LIB_NAME}) +coreir_set_compile_option(${COREIR_LIB_C}) + install( TARGETS ${COREIR_LIB_C} LIBRARY DESTINATION lib @@ -34,6 +36,8 @@ endif() target_link_libraries(${COREIR_SIMLIB_C} PUBLIC ${COREIR_LIB_NAME}) target_link_libraries(${COREIR_SIMLIB_C} PUBLIC ${COREIR_SIMLIB}) +coreir_set_compile_option(${COREIR_SIMLIB_C}) + install( TARGETS ${COREIR_SIMLIB_C} LIBRARY DESTINATION lib diff --git a/src/libs/CMakeLists.txt b/src/libs/CMakeLists.txt index c6c9c8e0e..a26e1791e 100644 --- a/src/libs/CMakeLists.txt +++ b/src/libs/CMakeLists.txt @@ -7,6 +7,7 @@ macro(add_coreir_sub_lib CLIB) set(SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${CLIB}.cpp") + # create lib if(${COREIR_STATIC}) add_library(${COREIR_SUB_LIB} STATIC ${SRC_FILES}) else() @@ -15,9 +16,12 @@ macro(add_coreir_sub_lib CLIB) target_link_libraries(${COREIR_SUB_LIB} PUBLIC ${COREIR_LIB_NAME}) + # compile features/options + coreir_set_compile_option(${COREIR_SUB_LIB}) + + # install lib install( TARGETS ${COREIR_SUB_LIB} - #EXPORT LIBRARY DESTINATION lib ARCHIVE DESTINATION lib ) diff --git a/src/simulator/CMakeLists.txt b/src/simulator/CMakeLists.txt index 75e9bd7df..571194cad 100644 --- a/src/simulator/CMakeLists.txt +++ b/src/simulator/CMakeLists.txt @@ -15,6 +15,8 @@ endif() target_link_libraries(${COREIR_SIMLIB} PUBLIC ${COREIR_LIB_NAME}) +coreir_set_compile_option(${COREIR_SIMLIB}) + install( TARGETS ${COREIR_SIMLIB} LIBRARY DESTINATION lib From 65ebb081b67a45bc9a4b711ad2f6d8f4421039d8 Mon Sep 17 00:00:00 2001 From: Bo-Yuan Huang Date: Thu, 9 May 2019 14:46:53 -0400 Subject: [PATCH 04/11] Install copies to source dir for test --- src/CMakeLists.txt | 40 +++++++++++++++++++++++++++++++++++- src/coreir-c/CMakeLists.txt | 14 +++++++++++++ src/libs/CMakeLists.txt | 8 ++++++++ src/simulator/CMakeLists.txt | 7 +++++++ 4 files changed, 68 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 26df27036..16dd2072d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -60,6 +60,16 @@ install( INCLUDES DESTINATION ${COREIR_INCLUDE_INSTALL_DIR} ) +## +## copy to source dir for tests (legacy) +## +add_custom_command( + TARGET ${COREIR_LIB_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib" + COMMENT "Copying to lib/" +) + ## ## include directory ## @@ -70,7 +80,6 @@ install( FILES_MATCHING PATTERN "*.h" ) - # ---------------------------------------------------------------------------- # # TARGET # coreir executable @@ -90,6 +99,15 @@ install( RUNTIME DESTINATION bin ) +## +## copy to source dir for tests (legacy) +## +add_custom_command( + TARGET ${COREIR_EXE_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/bin" + COMMENT "Copying to bin/" +) #Create the coreir libraries set(COREIR_SUBLIB_PREFIX ${COREIR_LIB_NAME}) @@ -126,6 +144,16 @@ install( RUNTIME DESTINATION bin ) +## +## copy to source dir for tests (legacy) +## +add_custom_command( + TARGET ${COREIR_ITP_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/bin" + COMMENT "Copying to bin/" +) + # ---------------------------------------------------------------------------- # # TARGET @@ -148,3 +176,13 @@ install( RUNTIME DESTINATION bin ) +## +## copy to source dir for tests (legacy) +## +add_custom_command( + TARGET ${COREIR_SIM_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/bin" + COMMENT "Copying to bin/" +) + diff --git a/src/coreir-c/CMakeLists.txt b/src/coreir-c/CMakeLists.txt index 6508c94e0..f99afb27a 100644 --- a/src/coreir-c/CMakeLists.txt +++ b/src/coreir-c/CMakeLists.txt @@ -20,6 +20,12 @@ install( ARCHIVE DESTINATION lib ) +add_custom_command( + TARGET ${COREIR_LIB_C} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib" + COMMENT "Copying to lib/" +) ## ## libcoreirsim-c @@ -44,3 +50,11 @@ install( ARCHIVE DESTINATION lib ) + +add_custom_command( + TARGET ${COREIR_SIMLIB_C} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib" + COMMENT "Copying to lib/" +) + diff --git a/src/libs/CMakeLists.txt b/src/libs/CMakeLists.txt index a26e1791e..55000b6ff 100644 --- a/src/libs/CMakeLists.txt +++ b/src/libs/CMakeLists.txt @@ -26,6 +26,14 @@ macro(add_coreir_sub_lib CLIB) ARCHIVE DESTINATION lib ) + # copy to source dir for tests (legacy) + add_custom_command( + TARGET ${COREIR_SUB_LIB} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib" + COMMENT "Copying to lib/" + ) + endmacro() add_coreir_sub_lib("commonlib") diff --git a/src/simulator/CMakeLists.txt b/src/simulator/CMakeLists.txt index 571194cad..c59b2bc67 100644 --- a/src/simulator/CMakeLists.txt +++ b/src/simulator/CMakeLists.txt @@ -23,3 +23,10 @@ install( ARCHIVE DESTINATION lib ) +add_custom_command( + TARGET ${COREIR_SIMLIB} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib" + COMMENT "Copying to lib/" +) + From f4a3ee3ef5b1f8179884524b5faf63408e5c983d Mon Sep 17 00:00:00 2001 From: Bo-Yuan Huang Date: Thu, 9 May 2019 15:01:31 -0400 Subject: [PATCH 05/11] Add package usage instruction (w/ CMake) --- INSTALL.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index dec126962..9429c3f6f 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -14,8 +14,17 @@ Option 2: Add `export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/lib` to your `~/.bashrc` or `~/.profile` If this does not work, you may have System Integrity Protection enabled on your Mac. -### If you are using linux: +#### If you are using linux: Add `export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib` to your `~/.bashrc` or `~/.profile` + +#### If you are using CMake: +Add the below lines in your `CMakeLists.txt`. (No `PATH` variable needs to be set.) + +``` cmake +find_package(coreir REQUIRED) + +target_link_libraries(MyTarget coreir::coreir) +``` # How to Install from source (OSX or Linux) From 619c0e8da9ff65ccdaa797ed9de922f6aa01b57c Mon Sep 17 00:00:00 2001 From: Bo-Yuan Huang Date: Thu, 9 May 2019 15:08:22 -0400 Subject: [PATCH 06/11] Instruction on non-standard install path --- INSTALL.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/INSTALL.md b/INSTALL.md index 9429c3f6f..93dd31ab2 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -21,10 +21,19 @@ Add `export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib` to yo Add the below lines in your `CMakeLists.txt`. (No `PATH` variable needs to be set.) ``` cmake +# CMakeLists.txt + find_package(coreir REQUIRED) target_link_libraries(MyTarget coreir::coreir) ``` + +For non-standard install path (`/usr` or `/usr/local`), set `CMAKE_PREFIX_PATH` to the customed install path. + +``` bash +# bash +cmake .. -DCMAKE_PREFIX_PATH= +``` # How to Install from source (OSX or Linux) From 00d2a26d77cc4020330a1a82bb072073399ef5ed Mon Sep 17 00:00:00 2001 From: Bo-Yuan Huang Date: Fri, 10 May 2019 01:22:17 -0400 Subject: [PATCH 07/11] restructure cmake script template --- CMakeLists.txt | 8 +++--- {cmake => tools/cmake}/ConfigSafeGuards.cmake | 0 .../cmake}/cmake_uninstall.cmake.in | 0 {cmake => tools/cmake}/config.cmake.in | 0 tools/cmake/uninstall.cmake | 27 ------------------- 5 files changed, 4 insertions(+), 31 deletions(-) rename {cmake => tools/cmake}/ConfigSafeGuards.cmake (100%) rename {cmake => tools/cmake}/cmake_uninstall.cmake.in (100%) rename {cmake => tools/cmake}/config.cmake.in (100%) delete mode 100644 tools/cmake/uninstall.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index db684cbc6..b9a3623dd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,7 +33,7 @@ set(COREIR_INCLUDE_INSTALL_DIR "include") set(COREIR_INCLUDE_BUILD_DIR "${PROJECT_SOURCE_DIR}/include") set(COREIR_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") set(COREIR_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") -set(COREIR_CMAKE_CONFIG_TEMPLATE "cmake/config.cmake.in") +set(COREIR_CMAKE_CONFIG_TEMPLATE "tools/cmake/config.cmake.in") set(COREIR_CMAKE_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}") set(COREIR_CMAKE_PROJECT_TARGETS_FILE "${PROJECT_NAME}Targets.cmake") @@ -50,7 +50,7 @@ set(COREIR_CMAKE_PROJECT_CONFIG_FILE ## ## Make sure that custom modules can be found. ## -set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/tools/cmake" ${CMAKE_MODULE_PATH}) # ---------------------------------------------------------------------------- # @@ -159,8 +159,8 @@ endif() # ---------------------------------------------------------------------------- # if(NOT TARGET uninstall) configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake" + "${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/tools/cmake/cmake_uninstall.cmake" IMMEDIATE @ONLY ) diff --git a/cmake/ConfigSafeGuards.cmake b/tools/cmake/ConfigSafeGuards.cmake similarity index 100% rename from cmake/ConfigSafeGuards.cmake rename to tools/cmake/ConfigSafeGuards.cmake diff --git a/cmake/cmake_uninstall.cmake.in b/tools/cmake/cmake_uninstall.cmake.in similarity index 100% rename from cmake/cmake_uninstall.cmake.in rename to tools/cmake/cmake_uninstall.cmake.in diff --git a/cmake/config.cmake.in b/tools/cmake/config.cmake.in similarity index 100% rename from cmake/config.cmake.in rename to tools/cmake/config.cmake.in diff --git a/tools/cmake/uninstall.cmake b/tools/cmake/uninstall.cmake deleted file mode 100644 index fe36912c0..000000000 --- a/tools/cmake/uninstall.cmake +++ /dev/null @@ -1,27 +0,0 @@ -set(MANIFEST "${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt") - -if(NOT EXISTS ${MANIFEST}) - message(FATAL_ERROR "Cannot find install manifest: '${MANIFEST}'") -endif() - -file(STRINGS ${MANIFEST} files) -foreach(file ${files}) - if(EXISTS ${file}) - message(STATUS "Removing file: '${file}'") - - exec_program( - ${CMAKE_COMMAND} ARGS "-E remove ${file}" - OUTPUT_VARIABLE stdout - RETURN_VALUE result - ) - - if(NOT "${result}" STREQUAL 0) - message(FATAL_ERROR "Failed to remove file: '${file}'.") - endif() - else() - MESSAGE(STATUS "File '${file}' does not exist.") - endif() -endforeach(file) - - - From 4c204ffdedef46954fee9ff97808dbad3e8bf155 Mon Sep 17 00:00:00 2001 From: Bo-Yuan Huang Date: Fri, 10 May 2019 09:06:39 -0400 Subject: [PATCH 08/11] Fix uninstall config path after restructuring --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b9a3623dd..010ea4d7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -166,7 +166,7 @@ if(NOT TARGET uninstall) add_custom_target(uninstall COMMAND - ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake + ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/tools/cmake/cmake_uninstall.cmake ) endif() From 74850173a88f1d03f8298d7c2c73b93d686712f7 Mon Sep 17 00:00:00 2001 From: Bo-Yuan Huang Date: Fri, 10 May 2019 10:37:01 -0400 Subject: [PATCH 09/11] clean up --- src/CMakeLists.txt | 46 +++++++++++++++++++++++++++--------- src/coreir-c/CMakeLists.txt | 10 ++++++-- src/libs/CMakeLists.txt | 5 +++- src/simulator/CMakeLists.txt | 5 +++- 4 files changed, 51 insertions(+), 15 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 16dd2072d..936b8bbad 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -66,7 +66,10 @@ install( add_custom_command( TARGET ${COREIR_LIB_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib" + COMMAND + ${CMAKE_COMMAND} -E copy + "$" + "${CMAKE_SOURCE_DIR}/lib" COMMENT "Copying to lib/" ) @@ -80,16 +83,21 @@ install( FILES_MATCHING PATTERN "*.h" ) + # ---------------------------------------------------------------------------- # # TARGET # coreir executable # ---------------------------------------------------------------------------- # -add_executable(${COREIR_EXE_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/binary/coreir.cpp) +add_executable( + ${COREIR_EXE_NAME} + ${CMAKE_CURRENT_SOURCE_DIR}/binary/coreir.cpp +) target_link_libraries(${COREIR_EXE_NAME} PUBLIC ${COREIR_LIB_NAME}) set_target_properties(${COREIR_EXE_NAME} PROPERTIES RUNTIME_OUTPUT_NAME coreir) coreir_set_compile_option(${COREIR_EXE_NAME}) + # ---------------------------------------------------------------------------- # # INSTALL # install coreir executable @@ -105,10 +113,14 @@ install( add_custom_command( TARGET ${COREIR_EXE_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/bin" + COMMAND + ${CMAKE_COMMAND} -E copy + "$" + "${CMAKE_SOURCE_DIR}/bin" COMMENT "Copying to bin/" ) + #Create the coreir libraries set(COREIR_SUBLIB_PREFIX ${COREIR_LIB_NAME}) add_subdirectory(libs) @@ -127,10 +139,13 @@ add_subdirectory(coreir-c) # TARGET # interpreter executable # ---------------------------------------------------------------------------- # -add_executable(${COREIR_ITP_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/binary/interpreter.cpp) +add_executable( + ${COREIR_ITP_NAME} + ${CMAKE_CURRENT_SOURCE_DIR}/binary/interpreter.cpp +) target_link_libraries(${COREIR_ITP_NAME} PUBLIC ${COREIR_LIB_NAME}) -target_link_libraries(${COREIR_ITP_NAME} PUBLIC coreirsim) -target_link_libraries(${COREIR_ITP_NAME} PUBLIC coreir-commonlib) +target_link_libraries(${COREIR_ITP_NAME} PUBLIC ${COREIR_SIMLIB}) +target_link_libraries(${COREIR_ITP_NAME} PUBLIC "${COREIR_SUBLIB_PREFIX}-commonlib") coreir_set_compile_option(${COREIR_ITP_NAME}) @@ -150,7 +165,10 @@ install( add_custom_command( TARGET ${COREIR_ITP_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/bin" + COMMAND + ${CMAKE_COMMAND} -E copy + "$" + "${CMAKE_SOURCE_DIR}/bin" COMMENT "Copying to bin/" ) @@ -159,10 +177,13 @@ add_custom_command( # TARGET # simulator executable # ---------------------------------------------------------------------------- # -add_executable(${COREIR_SIM_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/binary/simulator.cpp) +add_executable( + ${COREIR_SIM_NAME} + ${CMAKE_CURRENT_SOURCE_DIR}/binary/simulator.cpp +) target_link_libraries(${COREIR_SIM_NAME} PUBLIC ${COREIR_LIB_NAME}) -target_link_libraries(${COREIR_SIM_NAME} PUBLIC coreirsim) -target_link_libraries(${COREIR_SIM_NAME} PUBLIC coreir-commonlib) +target_link_libraries(${COREIR_SIM_NAME} PUBLIC ${COREIR_SIMLIB}) +target_link_libraries(${COREIR_SIM_NAME} PUBLIC "${COREIR_SUBLIB_PREFIX}-commonlib") coreir_set_compile_option(${COREIR_SIM_NAME}) @@ -182,7 +203,10 @@ install( add_custom_command( TARGET ${COREIR_SIM_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/bin" + COMMAND + ${CMAKE_COMMAND} -E copy + "$" + "${CMAKE_SOURCE_DIR}/bin" COMMENT "Copying to bin/" ) diff --git a/src/coreir-c/CMakeLists.txt b/src/coreir-c/CMakeLists.txt index f99afb27a..b1f308702 100644 --- a/src/coreir-c/CMakeLists.txt +++ b/src/coreir-c/CMakeLists.txt @@ -23,7 +23,10 @@ install( add_custom_command( TARGET ${COREIR_LIB_C} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib" + COMMAND + ${CMAKE_COMMAND} -E copy + "$" + "${CMAKE_SOURCE_DIR}/lib" COMMENT "Copying to lib/" ) @@ -54,7 +57,10 @@ install( add_custom_command( TARGET ${COREIR_SIMLIB_C} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib" + COMMAND + ${CMAKE_COMMAND} -E copy + "$" + "${CMAKE_SOURCE_DIR}/lib" COMMENT "Copying to lib/" ) diff --git a/src/libs/CMakeLists.txt b/src/libs/CMakeLists.txt index 55000b6ff..55fc06a26 100644 --- a/src/libs/CMakeLists.txt +++ b/src/libs/CMakeLists.txt @@ -30,7 +30,10 @@ macro(add_coreir_sub_lib CLIB) add_custom_command( TARGET ${COREIR_SUB_LIB} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib" + COMMAND + ${CMAKE_COMMAND} -E copy + "$" + "${CMAKE_SOURCE_DIR}/lib" COMMENT "Copying to lib/" ) diff --git a/src/simulator/CMakeLists.txt b/src/simulator/CMakeLists.txt index c59b2bc67..042b04eeb 100644 --- a/src/simulator/CMakeLists.txt +++ b/src/simulator/CMakeLists.txt @@ -26,7 +26,10 @@ install( add_custom_command( TARGET ${COREIR_SIMLIB} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "$" "${CMAKE_SOURCE_DIR}/lib" + COMMAND + ${CMAKE_COMMAND} -E copy + "$" + "${CMAKE_SOURCE_DIR}/lib" COMMENT "Copying to lib/" ) From b8869282f1eb2b227afc83f2ca2dfa467bfb32a1 Mon Sep 17 00:00:00 2001 From: Bo-Yuan Huang Date: Tue, 14 May 2019 10:40:02 -0400 Subject: [PATCH 10/11] Use build-in CMake variable for the dl library --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 936b8bbad..6a7c4518f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -44,7 +44,7 @@ target_include_directories(${COREIR_LIB_NAME} # LINK LIBRARIES # external dependencies # ---------------------------------------------------------------------------- # -target_link_libraries(${COREIR_LIB_NAME} PUBLIC dl) +target_link_libraries(${COREIR_LIB_NAME} PUBLIC ${CMAKE_DL_LIBS}) # ---------------------------------------------------------------------------- # From e12b74d659a479e4763de50afe70132d2d7100a9 Mon Sep 17 00:00:00 2001 From: Bo-Yuan Huang Date: Tue, 14 May 2019 20:49:53 -0400 Subject: [PATCH 11/11] Use build-in CMake option for building shared library --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 7 +------ src/coreir-c/CMakeLists.txt | 12 ++---------- src/libs/CMakeLists.txt | 6 +----- src/simulator/CMakeLists.txt | 6 +----- 5 files changed, 6 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 010ea4d7d..2c7879a91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ project(coreir VERSION 0.0.30 # OPTION # build configuration # ---------------------------------------------------------------------------- # -option(COREIR_STATIC "Statically link everything" OFF) +option(BUILD_SHARED_LIBS "To build shared librareis" ON) # ---------------------------------------------------------------------------- # diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6a7c4518f..b10f65dd0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,12 +16,7 @@ file(GLOB SRC_FILES ## ## create lib ## -if(${COREIR_STATIC}) - add_library(${COREIR_LIB_NAME} STATIC ${SRC_FILES}) -else() - add_library(${COREIR_LIB_NAME} SHARED ${SRC_FILES}) -endif() - +add_library(${COREIR_LIB_NAME} ${SRC_FILES}) add_library(${PROJECT_NAME}::${COREIR_LIB_NAME} ALIAS ${COREIR_LIB_NAME}) ## diff --git a/src/coreir-c/CMakeLists.txt b/src/coreir-c/CMakeLists.txt index b1f308702..e6a0d41f5 100644 --- a/src/coreir-c/CMakeLists.txt +++ b/src/coreir-c/CMakeLists.txt @@ -4,11 +4,7 @@ project(${COREIR_LIB_C} LANGUAGES CXX) set(CSRC coreir-c.cpp types-c.cpp values-c.cpp) -if(${COREIR_STATIC}) - add_library(${COREIR_LIB_C} STATIC ${CSRC}) -else() - add_library(${COREIR_LIB_C} SHARED ${CSRC}) -endif() +add_library(${COREIR_LIB_C} ${CSRC}) target_link_libraries(${COREIR_LIB_C} PUBLIC ${COREIR_LIB_NAME}) @@ -36,11 +32,7 @@ add_custom_command( project(${COREIR_SIMLIB_C} LANGUAGES CXX) set(CSIMSRC simulator-c.cpp) -if(${COREIR_STATIC}) - add_library(${COREIR_SIMLIB_C} STATIC ${CSIMSRC}) -else() - add_library(${COREIR_SIMLIB_C} SHARED ${CSIMSRC}) -endif() +add_library(${COREIR_SIMLIB_C} ${CSIMSRC}) target_link_libraries(${COREIR_SIMLIB_C} PUBLIC ${COREIR_LIB_NAME}) target_link_libraries(${COREIR_SIMLIB_C} PUBLIC ${COREIR_SIMLIB}) diff --git a/src/libs/CMakeLists.txt b/src/libs/CMakeLists.txt index 55fc06a26..df0941b7c 100644 --- a/src/libs/CMakeLists.txt +++ b/src/libs/CMakeLists.txt @@ -8,11 +8,7 @@ macro(add_coreir_sub_lib CLIB) set(SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/${CLIB}.cpp") # create lib - if(${COREIR_STATIC}) - add_library(${COREIR_SUB_LIB} STATIC ${SRC_FILES}) - else() - add_library(${COREIR_SUB_LIB} SHARED ${SRC_FILES}) - endif() + add_library(${COREIR_SUB_LIB} ${SRC_FILES}) target_link_libraries(${COREIR_SUB_LIB} PUBLIC ${COREIR_LIB_NAME}) diff --git a/src/simulator/CMakeLists.txt b/src/simulator/CMakeLists.txt index 042b04eeb..7eac677c3 100644 --- a/src/simulator/CMakeLists.txt +++ b/src/simulator/CMakeLists.txt @@ -7,11 +7,7 @@ file(GLOB SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/[^_]*.cpp ) -if(${COREIR_STATIC}) - add_library(${COREIR_SIMLIB} STATIC ${SRC_FILES}) -else() - add_library(${COREIR_SIMLIB} SHARED ${SRC_FILES}) -endif() +add_library(${COREIR_SIMLIB} ${SRC_FILES}) target_link_libraries(${COREIR_SIMLIB} PUBLIC ${COREIR_LIB_NAME})