############################################################ # The One Programming Language # # # # File: CMakeLists.txt # # _ _ # # / \ |\ | |_ Max Base # # \_/ | \| |_ Copyright 2021; One Language Contributors # # # ############################################################ # Project setup cmake_minimum_required(VERSION 3.19) set(CMAKE_C_STANDARD 11) project(One VERSION 0.1.0) # Setup Shell Variables set(CMAKE_C_COMPILER "gcc") set(CMAKE_CXX_COMPILER "g++") # Setup CPack, CTest, and enable testing set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) include(CPack) include(CTest) enable_testing() # Setup LLVM find_package(LLVM) message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") include_directories(/usr/include) link_directories(/usr/lib) llvm_map_components_to_libnames(core) add_definitions( -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS ) # Set builtins source and headers set(BUILTINS_SOURCE src/builtins/array.c src/builtins/error.c src/builtins/file.c src/builtins/string.c ) set(BUILTINS_HEADERS src/builtins/array.h src/builtins/error.h src/builtins/file.h src/builtins/string.h ) # Set lexer source and headers set(LEXER_SOURCE src/lexer/tokenizer/token.c src/lexer/tokenizer/tokenizer.c src/lexer/lexer.c ) set(LEXER_HEADERS src/lexer/tokenizer/token.h src/lexer/tokenizer/tokenizer.h src/lexer/lexer.h ) # Set AST source and headers set(AST_SOURCE src/ast/ast.c ) set(AST_HEADERS src/ast/ast.h ) # Set parser source and headers set(PARSER_SOURCE src/parser/parser_token.c src/parser/parser.c ) set(PARSER_HEADERS src/parser/parser_token.h src/parser/parser.h ) # Set Main executables for lexer, ast, and parser set(LEXER_MAIN src/lexer/main.c ) set(AST_MAIN src/ast/main.c ) set(PARSER_MAIN src/parser/main.c ) # Set Tests set(TESTS_HEADERS test/test.h ) set(LEXER_TEST test/lexer.test.c ) set(PARSER_TEST test/parser.test.c ) set(ARGUMENT_TEST test/argument.test.c ) # Create Executables for lexer, ast, and parser add_executable(lexer ${LEXER_MAIN} ${LEXER_SOURCE} ${LEXER_HEADERS} ${BUILTINS_SOURCE} ${BUILTINS_HEADERS} ${CFLAGS} ${LIBS}) add_executable(ast ${AST_MAIN} ${AST_SOURCE} ${AST_HEADERS} ${LEXER_SOURCE} ${LEXER_HEADERS} ${BUILTINS_SOURCE} ${BUILTINS_HEADERS} ${PARSER_SOURCE} ${PARSER_HEADERS} ${CFLAGS} ${LIBS}) add_executable(parser ${PARSER_MAIN} ${PARSER_SOURCE} ${PARSER_HEADERS} ${LEXER_SOURCE} ${LEXER_HEADERS} ${AST_SOURCE} ${AST_HEADERS} ${BUILTINS_SOURCE} ${BUILTINS_HEADERS} ${CFLAGS} ${LIBS}) # Create Executables for lexer test add_executable(lexer_test ${LEXER_TEST} ${TEST_HEADERS} ${PARSER_SOURCE} ${PARSER_HEADERS} ${LEXER_SOURCE} ${LEXER_HEADERS} ${AST_SOURCE} ${AST_HEADERS} ${BUILTINS_SOURCE} ${BUILTINS_HEADERS} ${CFLAGS} ${LIBS}) target_compile_options(lexer_test PUBLIC "-D_ONE_TEST_") add_test(lexer_test lexer_test) # Create Executables for parser test add_executable(parser_test ${PARSER_TEST} ${TEST_HEADERS}) add_test(NAME parser_test WORKING_DIRECTORY ../test COMMAND parser_test) # Create Executables for argument test add_executable(argument_test ${ARGUMENT_TEST} ${TEST_HEADERS}) add_test(NAME argument_test WORKING_DIRECTORY ../test COMMAND argument_test)