Skip to content
This repository was archived by the owner on Oct 12, 2026. It is now read-only.

Commit a7e0dd8

Browse files
committed
Fix Windows Build.
1 parent c524759 commit a7e0dd8

11 files changed

Lines changed: 448 additions & 390 deletions

File tree

‎CMakeLists.txt‎

Lines changed: 91 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,147 @@
11
cmake_minimum_required(VERSION 3.20)
2-
project(lambda-discipline)
32

4-
set(CMAKE_CXX_STANDARD 23)
3+
project(lambda_discipline)
4+
5+
set(CMAKE_CXX_STANDARD 20)
56
set(CMAKE_CXX_STANDARD_REQUIRED ON)
67
set(CMAKE_CXX_EXTENSIONS OFF)
78

8-
find_package(PkgConfig REQUIRED)
9+
include(FetchContent)
10+
11+
FetchContent_Declare(
12+
fmt
13+
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
14+
GIT_TAG 11.2.0
15+
)
16+
17+
FetchContent_Declare(
18+
replxx
19+
GIT_REPOSITORY https://github.com/AmokHuginnsson/replxx.git
20+
GIT_TAG master
21+
)
22+
23+
FetchContent_MakeAvailable(fmt)
24+
FetchContent_MakeAvailable(replxx)
25+
26+
###### WARNINGS ######
27+
28+
add_library(lbdWarnings INTERFACE)
29+
30+
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
31+
target_compile_options(lbdWarnings INTERFACE
32+
-Wall
33+
-Wextra
34+
# -Wpedantic
35+
# -Wconversion
36+
# -Wshadow
37+
)
38+
endif ()
939

1040
###### SOURCE ######
41+
1142
file(GLOB_RECURSE SOURCE_SOURCE_FILES CONFIGURE_DEPENDS
1243
${PROJECT_SOURCE_DIR}/src/source/*.cpp
1344
)
14-
add_library(lbdSource STATIC)
15-
target_sources(lbdSource PRIVATE ${SOURCE_SOURCE_FILES})
16-
target_include_directories(lbdSource PUBLIC ${PROJECT_SOURCE_DIR}/include)
45+
46+
add_library(lbdSource STATIC
47+
${SOURCE_SOURCE_FILES}
48+
)
49+
50+
target_include_directories(lbdSource PUBLIC
51+
${PROJECT_SOURCE_DIR}/include
52+
)
53+
54+
target_link_libraries(lbdSource PUBLIC
55+
lbdWarnings
56+
)
1757

1858
###### DIAGNOSTICS ######
59+
1960
file(GLOB_RECURSE DIAGNOSTICS_SOURCE_FILES CONFIGURE_DEPENDS
2061
${PROJECT_SOURCE_DIR}/src/diagnostics/*.cpp
2162
)
22-
add_library(lbdDiagnostics STATIC)
23-
target_sources(lbdDiagnostics PRIVATE ${DIAGNOSTICS_SOURCE_FILES})
63+
64+
add_library(lbdDiagnostics STATIC
65+
${DIAGNOSTICS_SOURCE_FILES}
66+
)
67+
68+
target_include_directories(lbdDiagnostics PUBLIC
69+
${PROJECT_SOURCE_DIR}/include
70+
)
71+
2472
target_link_libraries(lbdDiagnostics PUBLIC
2573
lbdSource
74+
lbdWarnings
75+
fmt::fmt
2676
)
27-
target_include_directories(lbdDiagnostics PUBLIC ${PROJECT_SOURCE_DIR}/include)
2877

29-
# Fmt.
30-
pkg_check_modules(FMT REQUIRED fmt)
78+
###### FRONTEND ######
3179

32-
####### FRONTEND #######
3380
file(GLOB_RECURSE FRONTEND_SOURCE_FILES CONFIGURE_DEPENDS
3481
${PROJECT_SOURCE_DIR}/src/frontend/*.cpp
3582
)
36-
add_library(lbdFrontend STATIC)
37-
target_sources(lbdFrontend PRIVATE ${FRONTEND_SOURCE_FILES})
83+
84+
add_library(lbdFrontend STATIC
85+
${FRONTEND_SOURCE_FILES}
86+
)
87+
3888
target_include_directories(lbdFrontend PUBLIC
3989
${PROJECT_SOURCE_DIR}/include
40-
${FMT_INCLUDE_DIRS}
4190
)
42-
target_link_libraries(lbdFrontend PRIVATE
91+
92+
target_link_libraries(lbdFrontend PUBLIC
4393
lbdDiagnostics
44-
${FMT_LIBRARIES}
94+
lbdWarnings
4595
)
4696

47-
####### RUNTIME #######
97+
###### RUNTIME ######
98+
4899
file(GLOB_RECURSE RUNTIME_SOURCE_FILES CONFIGURE_DEPENDS
49100
${PROJECT_SOURCE_DIR}/src/runtime/*.cpp
50101
)
51-
add_library(lbdRuntime STATIC)
52-
target_sources(lbdRuntime PRIVATE ${RUNTIME_SOURCE_FILES})
102+
103+
add_library(lbdRuntime STATIC
104+
${RUNTIME_SOURCE_FILES}
105+
)
106+
53107
target_include_directories(lbdRuntime PUBLIC
54108
${PROJECT_SOURCE_DIR}/include
55-
${FMT_INCLUDE_DIRS}
56109
)
57-
target_link_libraries(lbdRuntime PRIVATE
110+
111+
target_link_libraries(lbdRuntime PUBLIC
58112
lbdDiagnostics
59-
${FMT_LIBRARIES}
113+
lbdWarnings
60114
)
61115

62116
###### MAIN EXECUTABLE ######
117+
63118
file(GLOB LBD_SOURCE_FILES CONFIGURE_DEPENDS
64119
${PROJECT_SOURCE_DIR}/src/*.cpp
65120
${PROJECT_SOURCE_DIR}/src/utils/terminal/*.cpp
66121
)
67-
add_executable(lbd)
68-
target_sources(lbd PRIVATE ${LBD_SOURCE_FILES})
122+
123+
add_executable(lbd
124+
${LBD_SOURCE_FILES}
125+
)
126+
127+
target_include_directories(lbd PRIVATE
128+
${PROJECT_SOURCE_DIR}/include
129+
)
130+
69131
target_link_libraries(lbd PRIVATE
132+
lbdWarnings
70133
lbdDiagnostics
71134
lbdFrontend
72135
lbdRuntime
136+
replxx
73137
)
74138

75-
# Readline.
76-
pkg_check_modules(READLINE REQUIRED readline)
77-
target_include_directories(lbd PRIVATE ${READLINE_INCLUDE_DIRS})
78-
target_link_libraries(lbd PRIVATE ${READLINE_LIBRARIES})
79-
80-
# Fully static build (platform dependent).
81-
option(LBD_STATIC_BUILD "Build fully static binary" OFF)
82-
if (LBD_STATIC_BUILD)
83-
target_link_options(lbd PRIVATE -static)
84-
# Readline depends upon ncurses.
85-
target_link_libraries(lbd PRIVATE ncurses tinfo)
86-
endif ()
139+
target_link_options(lbd PRIVATE -static-libstdc++)
87140

88-
# Warnings.
89-
target_compile_options(lbd PRIVATE -Wall -Wextra -Wpedantic)
141+
###### TESTS ######
90142

91-
# Tests.
92143
enable_testing()
93144

94-
# Example test
95145
# add_executable(lexer_test tests/lexer_test.cc)
96146
# target_link_libraries(lexer_test PRIVATE lbdFrontend)
97147
# add_test(NAME lexer_test COMMAND lexer_test)

‎include/lbd/diagnostics/DiagnosticEmitter.hpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ namespace lbd::diagnostics
2626
{
2727
fmt::dynamic_format_arg_store<fmt::format_context> store;
2828
(store.push_back(std::forward<Args>(args)), ...);
29-
emit(Severity::ERROR, id, range, store);
30-
std::unreachable();
29+
emit(Severity::ERR, id, range, store);
30+
unreachable_impl();
3131
}
3232

3333
template <typename... Args>

‎include/lbd/diagnostics/Severity.hpp‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
#include <iostream>
44
#include <string_view>
5-
#include <utility>
5+
#include <lbd/utils/Macros.hpp>
66
#include <lbd/utils/terminal/Colors.hpp>
77

88
namespace lbd::diagnostics
99
{
1010
enum class Severity
1111
{
12-
ERROR,
12+
ERR,
1313
WARNING,
1414
NOTE,
1515
};
@@ -18,22 +18,22 @@ namespace lbd::diagnostics
1818
{
1919
switch (severity)
2020
{
21-
case Severity::ERROR: return "ERROR";
21+
case Severity::ERR: return "ERROR";
2222
case Severity::WARNING: return "WARNING";
2323
case Severity::NOTE: return "NOTE";
2424
}
25-
std::unreachable();
25+
unreachable_impl();
2626
}
2727

2828
constexpr std::string_view getSeverityColor(const Severity severity, const utils::terminal::Colors& colors)
2929
{
3030
switch (severity)
3131
{
32-
case Severity::ERROR: return colors.red;
32+
case Severity::ERR: return colors.red;
3333
case Severity::WARNING: return colors.yellow;
3434
case Severity::NOTE: return colors.blue;
3535
}
36-
std::unreachable();
36+
unreachable_impl();
3737
}
3838

3939
std::ostream& operator<<(std::ostream& outputStream, const Severity& severity);
Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,43 @@
11
#pragma once
22

33
#include <string_view>
4-
#include <utility>
4+
#include <lbd/utils/Macros.hpp>
55

66
namespace lbd::frontend::token
77
{
8-
enum class TokenKind
9-
{
10-
IDENTIFIER,
11-
STRING,
12-
NUMBER,
13-
COLON,
14-
ASSIGNMENT, // =
15-
ARROW,
16-
BACKWARD_SLASH,
17-
DOT,
18-
OPEN_PARENTHESIS,
19-
CLOSE_PARENTHESIS,
20-
END_OF_FILE,
21-
UNKNOWN, // Used as a default TokenKind inside Lexer.
22-
};
8+
enum class TokenKind
9+
{
10+
IDENTIFIER,
11+
STRING,
12+
NUMBER,
13+
COLON,
14+
ASSIGNMENT, // =
15+
ARROW,
16+
BACKWARD_SLASH,
17+
DOT,
18+
OPEN_PARENTHESIS,
19+
CLOSE_PARENTHESIS,
20+
END_OF_FILE,
21+
UNKNOWN, // Used as a default TokenKind inside Lexer.
22+
};
2323

24-
constexpr std::string_view tokenKindToString(const TokenKind tokenKind)
24+
constexpr std::string_view tokenKindToString(const TokenKind tokenKind)
25+
{
26+
switch (tokenKind)
2527
{
26-
switch (tokenKind)
27-
{
28-
case TokenKind::IDENTIFIER: return "IDENTIFIER";
29-
case TokenKind::STRING: return "STRING";
30-
case TokenKind::NUMBER: return "NUMBER";
31-
case TokenKind::COLON: return "COLON";
32-
case TokenKind::ASSIGNMENT: return "ASSIGNMENT";
33-
case TokenKind::ARROW: return "ARROW";
34-
case TokenKind::BACKWARD_SLASH: return "BACKWARD_SLASH";
35-
case TokenKind::DOT: return "DOT";
36-
case TokenKind::OPEN_PARENTHESIS: return "OPEN_PARENTHESIS";
37-
case TokenKind::CLOSE_PARENTHESIS: return "CLOSE_PARENTHESIS";
38-
case TokenKind::END_OF_FILE: return "END_OF_FILE";
39-
case TokenKind::UNKNOWN: return "UNKNOWN";
40-
}
41-
std::unreachable();
28+
case TokenKind::IDENTIFIER: return "IDENTIFIER";
29+
case TokenKind::STRING: return "STRING";
30+
case TokenKind::NUMBER: return "NUMBER";
31+
case TokenKind::COLON: return "COLON";
32+
case TokenKind::ASSIGNMENT: return "ASSIGNMENT";
33+
case TokenKind::ARROW: return "ARROW";
34+
case TokenKind::BACKWARD_SLASH: return "BACKWARD_SLASH";
35+
case TokenKind::DOT: return "DOT";
36+
case TokenKind::OPEN_PARENTHESIS: return "OPEN_PARENTHESIS";
37+
case TokenKind::CLOSE_PARENTHESIS: return "CLOSE_PARENTHESIS";
38+
case TokenKind::END_OF_FILE: return "END_OF_FILE";
39+
case TokenKind::UNKNOWN: return "UNKNOWN";
4240
}
41+
unreachable_impl();
42+
}
4343
}

‎include/lbd/utils/Macros.hpp‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#pragma once
2+
3+
namespace lbd
4+
{
5+
[[noreturn]] inline void unreachable_impl()
6+
{
7+
#if defined(_MSC_VER) && !defined(__clang__)
8+
__assume(false);
9+
#else
10+
__builtin_unreachable();
11+
#endif
12+
}
13+
}

0 commit comments

Comments
 (0)