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.
103 lines
2.8 KiB
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
|
|
) |