# # Copyright 2022 Camille "DrasLorus" Monière. # # This file is part of CORDIC_Rotate_APFX. # # This program is free software: you can redistribute it and/or modify it under the terms of the GNU # Lesser General Public License as published by the Free Software Foundation, either version 3 of # the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License along with this program. # If not, see . # cmake_minimum_required (VERSION 3.16.0 FATAL_ERROR) # setting this is required set (CMAKE_CXX_STANDARD 14) set (CMAKE_CXX_STANDARD_REQUIRED ON) set (CMAKE_CXX_EXTENSIONS OFF) set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib) set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib) set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin) set (CMAKE_EXPORT_COMPILE_COMMANDS true) project ( CordicAbs LANGUAGES CXX VERSION 0.1 ) # ################################################################################################## # Options # ################################################################################################## option (EXPORT_COMMANDS "export compile commands, for use with clangd for example." ON) option (ENABLE_XILINX "use Xilinx provided proprietary headers." OFF) option (ENABLE_TESTING "use Catch2 in conjunction with CTest as a test suite." ON) option (ENABLE_SOFTWARE "use C++ standard library types (like std::complex). Unsuitable for synthesis." ON ) option (PEDANTIC "use -Wall and -pedantic." ON) # ################################################################################################## if (PEDANTIC) add_compile_options (-Wall -pedantic) endif () if (EXPORT_COMMANDS) set (CMAKE_EXPORT_COMPILE_COMMANDS ON) endif () if (ENABLE_XILINX) set ( XILINX_HOME /opt/Xilinx CACHE PATH "path to Xilinx root folder." ) set ( XILINX_VER "2020.2" CACHE STRING "Xilinx software version to use." ) if (XILINX_VER VERSION_GREATER_EQUAL "2020.1") set (AP_INCLUDE_DIR ${XILINX_HOME}/Vitis_HLS/${XILINX_VER}/include) else () set (AP_INCLUDE_DIR ${XILINX_HOME}/Vivado/${XILINX_VER}/include) endif () message (STATUS "AP headers must lie under ${AP_INCLUDE_DIR}") else () set ( AP_TYPES_HINT /usr/include CACHE PATH "location of ap_types include directory." ) find_file ( AP_FIXED ap_fixed.h HINTS ${AP_TYPES_HINT} PATH_SUFFIXES ap_types hls_ap_types/include REQUIRED ) get_filename_component (AP_INCLUDE_DIR ${AP_FIXED} DIRECTORY) endif () if ((NOT EXISTS ${AP_INCLUDE_DIR}/ap_int.h) OR (NOT EXISTS ${AP_INCLUDE_DIR}/ap_fixed.h)) message (FATAL_ERROR "Arbitrary precision headers not found in ${AP_INCLUDE_DIR}.\n" "Please provide a suitable path to the headers." ) endif () if (ENABLE_SOFTWARE) add_compile_definitions (SOFTWARE=1) endif () # ################################################################################################## add_library(cordicabs sources/CCordicAbs/CCordicAbs.cpp) target_include_directories(cordicabs PUBLIC sources) target_include_directories(cordicabs SYSTEM PUBLIC ${AP_INCLUDE_DIR}) if (ENABLE_TESTING) find_package (Catch2 REQUIRED) add_library (catch_common OBJECT sources/tb/main_catch2.cpp) target_link_libraries (catch_common PUBLIC Catch2::Catch2) add_executable (cordicabs_tb sources/tb/cordicabs_tb.cpp) target_link_libraries (cordicabs_tb catch_common cordicabs) include (CTest) include (Catch) catch_discover_tests (cordicabs_tb) endif ()