You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ravi/ravicomp/CMakeLists.txt

103 lines
2.8 KiB

cmake_minimum_required(VERSION 3.12)
project(RaviCompiler VERSION 0.0.1 LANGUAGES C)
option(ASAN "Controls whether address sanitizer should be enabled" OFF)
set(PUBLIC_HEADERS
include/ravi_compiler.h
include/ravi_api.h)
set(HEADERS
${PUBLIC_HEADERS}
src/allocate.h
src/ptrlist.h
src/fnv_hash.h
src/graph.h
src/hash_table.h
src/set.h
src/membuf.h
src/cfg.h
src/linearizer.h
src/common.h
src/optimizer.h
src/parser.h
src/codegen.h)
set(SRCS
src/allocate.c
src/ast_walker.c
src/ast_simplify.c
src/ptrlist.c
src/fnv_hash.c
src/graph.c
src/cfg.c
src/hash_table.c
src/set.c
src/lexer.c
src/parser.c
src/ast_printer.c
src/typechecker.c
src/linearizer.c
src/opt_unusedcode.c
src/membuf.c
src/codegen.c
src/ravi_binding.c
)
message("SOURCE dir is ${RaviCompiler_SOURCE_DIR}")
if ($ENV{CLION_IDE})
# CLion seems unable to handle include paths set on sources
include_directories("${RaviCompiler_SOURCE_DIR}/include")
endif ()
if (WIN32)
# disable warnings about C string functions
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
endif()
include(CheckCCompilerFlag)
if (NOT MSVC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wmissing-prototypes -Wstrict-prototypes -Werror=return-type")
if (ASAN)
set(CMAKE_REQUIRED_FLAGS "-fsanitize=address")
check_c_compiler_flag("-fsanitize=address" COMPILER_ASAN_SUPPORTED)
if (COMPILER_ASAN_SUPPORTED AND NOT CMAKE_C_FLAGS_DEBUG MATCHES "-fsanitize=address")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address")
endif ()
endif ()
endif()
include(GNUInstallDirs)
set(CMAKE_VISIBILITY_INLINES_HIDDEN YES)
if (NOT WIN32)
set(EXTRA_LIBRARIES m)
endif ()
if (WIN32)
set(LIBTYPE STATIC)
else()
set(LIBTYPE SHARED)
endif()
add_library(ravicomp ${LIBTYPE}
${HEADERS}
${SRCS})
target_include_directories(ravicomp
PUBLIC "${CMAKE_CURRENT_BINARY_DIR}"
PUBLIC "${RaviCompiler_SOURCE_DIR}/include"
PRIVATE "${RaviCompiler_SOURCE_DIR}/src")
target_link_libraries(ravicomp ${EXTRA_LIBRARIES})
include(GenerateExportHeader)
generate_export_header(ravicomp)
install(FILES ${PUBLIC_HEADERS}
DESTINATION include/ravicomp)
install(TARGETS ravicomp
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT RaviCompiler_Runtime
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT RaviCompiler_Development
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT RaviCompiler_Runtime)
install(FILES
${PROJECT_BINARY_DIR}/ravicomp_export.h DESTINATION include/ravicomp
)