@@ -2,22 +2,57 @@ cmake_minimum_required(VERSION 3.20)
22project (lambda-discipline)
33
44set (CMAKE_CXX_STANDARD 20)
5+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
6+ set (CMAKE_CXX_EXTENSIONS OFF )
57
6- include_directories (
8+ ####### FRONTEND #######
9+ file (GLOB_RECURSE FRONTEND_SOURCE_FILES CONFIGURE_DEPENDS
10+ ${PROJECT_SOURCE_DIR } /src/frontend/*.cpp
11+ )
12+ add_library (lbdFrontend STATIC )
13+ target_sources (lbdFrontend PRIVATE ${FRONTEND_SOURCE_FILES} )
14+ target_include_directories (lbdFrontend PUBLIC
715 ${PROJECT_SOURCE_DIR } /include
816)
917
10- file (GLOB_RECURSE FRONTEND_SOURCE_FILES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR } /src/frontend/*.cpp )
11- add_library (frontend STATIC ${FRONTEND_SOURCE_FILES} )
18+ ####### RUNTIME #######
19+ file (GLOB_RECURSE RUNTIME_SOURCE_FILES CONFIGURE_DEPENDS
20+ ${PROJECT_SOURCE_DIR } /src/runtime/*.cpp
21+ )
22+ add_library (lbdRuntime STATIC )
23+ target_sources (lbdRuntime PRIVATE ${RUNTIME_SOURCE_FILES} )
24+ target_include_directories (lbdRuntime PUBLIC
25+ ${PROJECT_SOURCE_DIR } /include
26+ )
27+
28+ ###### MAIN EXECUTABLE ######
29+ file (GLOB LBD_SOURCE_FILES CONFIGURE_DEPENDS
30+ ${PROJECT_SOURCE_DIR } /src/*.cpp
31+ )
32+ add_executable (lbd )
33+ target_sources (lbd PRIVATE ${LBD_SOURCE_FILES} )
34+ target_link_libraries (lbd PRIVATE
35+ lbdFrontend
36+ lbdRuntime
37+ )
1238
13- file (GLOB_RECURSE RUNTIME_SOURCE_FILES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR } /src/runtime/*.cpp )
14- add_library (runtime STATIC ${RUNTIME_SOURCE_FILES} )
39+ # Fully static build (platform dependent).
40+ option (LBD_STATIC_BUILD "Build fully static binary" OFF )
41+ if (LBD_STATIC_BUILD)
42+ target_link_options (lbd PRIVATE -static )
43+ endif ()
1544
16- file (GLOB LBD_SOURCE_FILES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR } /src/*.cpp )
17- add_executable (lbd ${LBD_SOURCE_FILES} )
45+ # Warnings.
46+ if (MSVC )
47+ target_compile_options (lbd PRIVATE /W4 )
48+ else ()
49+ target_compile_options (lbd PRIVATE -Wall -Wextra -Wpedantic )
50+ endif ()
1851
19- target_link_libraries (lbd PRIVATE frontend runtime -static )
52+ # Tests.
53+ enable_testing ()
2054
21- # TODO: Add build tests
22- # EXAMPLE: add_executable(lexer_test ../tests/lexer_test.cc)
23- # target_link_libraries(lexer_test PRIVATE frontend)
55+ # Example test
56+ # add_executable(lexer_test tests/lexer_test.cc)
57+ # target_link_libraries(lexer_test PRIVATE lbdFrontend)
58+ # add_test(NAME lexer_test COMMAND lexer_test)
0 commit comments