BuildSystem: Rework the whole cmake build system

Now files are installed using the install() command instead of manually
copying files to their destinations. This allows automatic recompilation
of headers that did not work previously
This commit is contained in:
2024-06-19 04:20:23 +03:00
parent 318ce5dec8
commit ad6d95ba52
90 changed files with 546 additions and 1074 deletions

View File

@@ -1,7 +1,3 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023 CXX)
set(AOC2023_PROJECTS
day1
day2
@@ -30,20 +26,21 @@ set(AOC2023_PROJECTS
full
)
set(BANAN_AOC2023_BIN ${BANAN_BIN}/aoc2023)
set(BANAN_AOC2023_BIN ${CMAKE_INSTALL_BINDIR}/aoc2023)
set(BANAN_AOC2023_INPUT ${BANAN_SHARE}/aoc2023)
set(CMAKE_INSTALL_BINDIR ${BANAN_AOC2023_BIN})
add_custom_target(aoc2023)
add_custom_target(aoc2023_always
COMMAND ${CMAKE_COMMAND} -E make_directory ${BANAN_AOC2023_BIN}
COMMAND ${CMAKE_COMMAND} -E make_directory ${BANAN_AOC2023_INPUT}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/input/* ${BANAN_AOC2023_INPUT}/
)
add_custom_target(aoc2023-install DEPENDS aoc2023 aoc2023_always)
file(GLOB_RECURSE input_files "input/*")
foreach(file ${input_files})
install(FILES ${file} DESTINATION ${BANAN_AOC2023_INPUT})
endforeach()
foreach(AOC2023_PROJECT ${AOC2023_PROJECTS})
add_subdirectory(${AOC2023_PROJECT})
add_dependencies(aoc2023 aoc2023_${AOC2023_PROJECT})
endforeach()
add_dependencies(userspace aoc2023)
add_dependencies(userspace-install aoc2023-install)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day-template CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day-template ${SOURCES})
target_compile_options(aoc2023_day-template PUBLIC -O2 -g)
target_link_libraries(aoc2023_day-template PUBLIC libc ban)
banan_include_headers(aoc2023_day-template ban)
banan_link_library(aoc2023_day-template libc)
add_dependencies(aoc2023_day-template libc-install ban-install)
add_custom_target(aoc2023_day-template-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day-template ${BANAN_AOC2023_BIN}/day-template
DEPENDS aoc2023_day-template
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day-template)
add_dependencies(aoc2023-install aoc2023_day-template-install)
install(TARGETS aoc2023_day-template)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day1 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day1 ${SOURCES})
target_compile_options(aoc2023_day1 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day1 PUBLIC libc)
banan_include_headers(aoc2023_day1 ban)
banan_link_library(aoc2023_day1 libc)
add_dependencies(aoc2023_day1 libc-install ban-install)
add_custom_target(aoc2023_day1-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day1 ${BANAN_AOC2023_BIN}/day1
DEPENDS aoc2023_day1
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day1)
add_dependencies(aoc2023-install aoc2023_day1-install)
install(TARGETS aoc2023_day1)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day10 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day10 ${SOURCES})
target_compile_options(aoc2023_day10 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day10 PUBLIC libc ban)
banan_include_headers(aoc2023_day10 ban)
banan_link_library(aoc2023_day10 libc)
add_dependencies(aoc2023_day10 libc-install ban-install)
add_custom_target(aoc2023_day10-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day10 ${BANAN_AOC2023_BIN}/day10
DEPENDS aoc2023_day10
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day10)
add_dependencies(aoc2023-install aoc2023_day10-install)
install(TARGETS aoc2023_day10)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day11 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day11 ${SOURCES})
target_compile_options(aoc2023_day11 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day11 PUBLIC libc ban)
banan_include_headers(aoc2023_day11 ban)
banan_link_library(aoc2023_day11 libc)
add_dependencies(aoc2023_day11 libc-install ban-install)
add_custom_target(aoc2023_day11-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day11 ${BANAN_AOC2023_BIN}/day11
DEPENDS aoc2023_day11
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day11)
add_dependencies(aoc2023-install aoc2023_day11-install)
install(TARGETS aoc2023_day11)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day12 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day12 ${SOURCES})
target_compile_options(aoc2023_day12 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day12 PUBLIC libc ban)
banan_link_library(aoc2023_day12 ban)
banan_link_library(aoc2023_day12 libc)
add_dependencies(aoc2023_day12 libc-install ban-install)
add_custom_target(aoc2023_day12-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day12 ${BANAN_AOC2023_BIN}/day12
DEPENDS aoc2023_day12
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day12)
add_dependencies(aoc2023-install aoc2023_day12-install)
install(TARGETS aoc2023_day12)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day13 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day13 ${SOURCES})
target_compile_options(aoc2023_day13 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day13 PUBLIC libc ban)
banan_include_headers(aoc2023_day13 ban)
banan_link_library(aoc2023_day13 libc)
add_dependencies(aoc2023_day13 libc-install ban-install)
add_custom_target(aoc2023_day13-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day13 ${BANAN_AOC2023_BIN}/day13
DEPENDS aoc2023_day13
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day13)
add_dependencies(aoc2023-install aoc2023_day13-install)
install(TARGETS aoc2023_day13)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day14 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day14 ${SOURCES})
target_compile_options(aoc2023_day14 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day14 PUBLIC libc ban)
banan_include_headers(aoc2023_day14 ban)
banan_link_library(aoc2023_day14 libc)
add_dependencies(aoc2023_day14 libc-install ban-install)
add_custom_target(aoc2023_day14-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day14 ${BANAN_AOC2023_BIN}/day14
DEPENDS aoc2023_day14
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day14)
add_dependencies(aoc2023-install aoc2023_day14-install)
install(TARGETS aoc2023_day14)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day15 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day15 ${SOURCES})
target_compile_options(aoc2023_day15 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day15 PUBLIC libc ban)
banan_include_headers(aoc2023_day15 ban)
banan_link_library(aoc2023_day15 libc)
add_dependencies(aoc2023_day15 libc-install ban-install)
add_custom_target(aoc2023_day15-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day15 ${BANAN_AOC2023_BIN}/day15
DEPENDS aoc2023_day15
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day15)
add_dependencies(aoc2023-install aoc2023_day15-install)
install(TARGETS aoc2023_day15)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day16 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day16 ${SOURCES})
target_compile_options(aoc2023_day16 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day16 PUBLIC libc ban)
banan_include_headers(aoc2023_day16 ban)
banan_link_library(aoc2023_day16 libc)
add_dependencies(aoc2023_day16 libc-install ban-install)
add_custom_target(aoc2023_day16-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day16 ${BANAN_AOC2023_BIN}/day16
DEPENDS aoc2023_day16
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day16)
add_dependencies(aoc2023-install aoc2023_day16-install)
install(TARGETS aoc2023_day16)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day17 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day17 ${SOURCES})
target_compile_options(aoc2023_day17 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day17 PUBLIC libc ban)
banan_include_headers(aoc2023_day17 ban)
banan_link_library(aoc2023_day17 libc)
add_dependencies(aoc2023_day17 libc-install ban-install)
add_custom_target(aoc2023_day17-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day17 ${BANAN_AOC2023_BIN}/day17
DEPENDS aoc2023_day17
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day17)
add_dependencies(aoc2023-install aoc2023_day17-install)
install(TARGETS aoc2023_day17)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day18 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day18 ${SOURCES})
target_compile_options(aoc2023_day18 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day18 PUBLIC libc ban)
banan_include_headers(aoc2023_day18 ban)
banan_link_library(aoc2023_day18 libc)
add_dependencies(aoc2023_day18 libc-install ban-install)
add_custom_target(aoc2023_day18-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day18 ${BANAN_AOC2023_BIN}/day18
DEPENDS aoc2023_day18
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day18)
add_dependencies(aoc2023-install aoc2023_day18-install)
install(TARGETS aoc2023_day18)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day19 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day19 ${SOURCES})
target_compile_options(aoc2023_day19 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day19 PUBLIC libc ban)
banan_include_headers(aoc2023_day19 ban)
banan_link_library(aoc2023_day19 libc)
add_dependencies(aoc2023_day19 libc-install ban-install)
add_custom_target(aoc2023_day19-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day19 ${BANAN_AOC2023_BIN}/day19
DEPENDS aoc2023_day19
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day19)
add_dependencies(aoc2023-install aoc2023_day19-install)
install(TARGETS aoc2023_day19)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day2 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day2 ${SOURCES})
target_compile_options(aoc2023_day2 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day2 PUBLIC libc)
banan_include_headers(aoc2023_day2 ban)
banan_link_library(aoc2023_day2 libc)
add_dependencies(aoc2023_day2 libc-install ban-install)
add_custom_target(aoc2023_day2-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day2 ${BANAN_AOC2023_BIN}/day2
DEPENDS aoc2023_day2
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day2)
add_dependencies(aoc2023-install aoc2023_day2-install)
install(TARGETS aoc2023_day2)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day20 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day20 ${SOURCES})
target_compile_options(aoc2023_day20 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day20 PUBLIC libc ban)
banan_link_library(aoc2023_day20 ban)
banan_link_library(aoc2023_day20 libc)
add_dependencies(aoc2023_day20 libc-install ban-install)
add_custom_target(aoc2023_day20-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day20 ${BANAN_AOC2023_BIN}/day20
DEPENDS aoc2023_day20
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day20)
add_dependencies(aoc2023-install aoc2023_day20-install)
install(TARGETS aoc2023_day20)

View File

@@ -30,6 +30,8 @@ struct Module
BAN::String name;
BAN::Vector<BAN::String> targets;
virtual ~Module() {}
virtual void handle_signal(const Signal& signal, BAN::Queue<Signal>& signal_queue) = 0;
};

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day21 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day21 ${SOURCES})
target_compile_options(aoc2023_day21 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day21 PUBLIC libc ban)
banan_include_headers(aoc2023_day21 ban)
banan_link_library(aoc2023_day21 libc)
add_dependencies(aoc2023_day21 libc-install ban-install)
add_custom_target(aoc2023_day21-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day21 ${BANAN_AOC2023_BIN}/day21
DEPENDS aoc2023_day21
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day21)
add_dependencies(aoc2023-install aoc2023_day21-install)
install(TARGETS aoc2023_day21)

View File

@@ -0,0 +1,9 @@
set(SOURCES
main.cpp
)
add_executable(aoc2023_day22 ${SOURCES})
banan_include_headers(aoc2023_day22 ban)
banan_link_library(aoc2023_day22 libc)
install(TARGETS aoc2023_day22)

View File

@@ -0,0 +1,191 @@
#include <BAN/HashSet.h>
#include <BAN/Sort.h>
#include <BAN/Vector.h>
#include <ctype.h>
#include <inttypes.h>
#include <stdio.h>
using i8 = int8_t;
using i16 = int16_t;
using i32 = int32_t;
using i64 = int64_t;
using u8 = uint8_t;
using u16 = uint16_t;
using u32 = uint32_t;
using u64 = uint64_t;
struct Position
{
i64 x, y, z;
bool operator==(const Position& other) const
{
return x == other.x && y == other.y && z == other.z;
}
};
static constexpr bool rectangle_contains(const Position& c1, const Position& c2, const Position& p)
{
ASSERT(c1.x <= c2.x);
ASSERT(c1.y <= c2.y);
return (c1.x <= p.x && p.x <= c2.x) && (c1.y <= p.y && p.y <= c2.y);
}
struct Brick
{
Position corners[2];
BAN::HashSet<Brick*> supporting;
BAN::HashSet<Brick*> supported_by;
bool supports(const Brick& other) const
{
if (corners[1].z + 1 != other.corners[0].z)
return false;
for (i32 i = 0; i < 4; i++)
if (rectangle_contains(corners[0], corners[1], { other.corners[i / 2].x, other.corners[i % 2].y, 0 }))
return true;
for (i32 i = 0; i < 4; i++)
if (rectangle_contains(other.corners[0], other.corners[1], { corners[i / 2].x, corners[i % 2].y, 0 }))
return true;
return false;
}
};
i64 parse_i64(BAN::StringView str)
{
i64 result = 0;
for (char c : str)
{
ASSERT(isdigit(c));
result = (result * 10) + (c - '0');
}
return result;
}
BAN::Vector<Brick> parse_bricks(FILE* fp)
{
BAN::Vector<Brick> bricks;
char buffer[64];
while (fgets(buffer, sizeof(buffer), fp))
{
BAN::StringView line(buffer);
ASSERT(line.back() == '\n');
line = line.substring(0, line.size() - 1);
if (line.empty())
break;
auto corner_strs = MUST(line.split('~'));
ASSERT(corner_strs.size() == 2);
Brick brick;
for (i32 i = 0; i < 2; i++)
{
auto coords = MUST(corner_strs[i].split(','));
ASSERT(coords.size() == 3);
brick.corners[i].x = parse_i64(coords[0]);
brick.corners[i].y = parse_i64(coords[1]);
brick.corners[i].z = parse_i64(coords[2]);
}
ASSERT(brick.corners[0].x <= brick.corners[1].x);
ASSERT(brick.corners[0].y <= brick.corners[1].y);
ASSERT(brick.corners[0].z <= brick.corners[1].z);
MUST(bricks.push_back(brick));
}
return bricks;
}
i64 puzzle1(FILE* fp)
{
auto brick_comp = [](const Brick& b1, const Brick& b2) { return b1.corners[0].z < b2.corners[0].z; };
auto bricks = parse_bricks(fp);
BAN::sort::sort(bricks.begin(), bricks.end(), brick_comp);
// Simulate brick falling
for (size_t i = 0; i < bricks.size();)
{
bool can_fall = bricks[i].corners[0].z > 1;
for (size_t j = 0; j < i && can_fall; j++)
if (bricks[j].supports(bricks[i]))
can_fall = false;
if (!can_fall)
i++;
else
{
bricks[i].corners[0].z--;
bricks[i].corners[1].z--;
for (; i > 0; i--)
{
if (brick_comp(bricks[i - 1], bricks[i]))
break;
BAN::swap(bricks[i - 1], bricks[i]);
}
}
}
// Store brick supporting structures
for (size_t i = 0; i < bricks.size(); i++)
{
for (size_t j = 0; j < bricks.size(); j++)
{
if (i == j)
continue;
if (bricks[i].supports(bricks[j]))
{
MUST(bricks[i].supporting.insert(&bricks[j]));
MUST(bricks[j].supported_by.insert(&bricks[i]));
}
}
}
i64 result = 0;
for (const auto& brick : bricks)
{
bool disintegratable = true;
for (const auto* support : brick.supporting)
if (support->supported_by.size() <= 1)
disintegratable = false;
result += disintegratable;
}
// OFF BY 7
return result;
}
i64 puzzle2(FILE* fp)
{
(void)fp;
return -1;
}
int main(int argc, char** argv)
{
const char* file_path = "/usr/share/aoc2023/day22_input.txt";
if (argc >= 2)
file_path = argv[1];
FILE* fp = fopen(file_path, "r");
if (fp == nullptr)
{
perror("fopen");
return 1;
}
printf("puzzle1: %" PRId64 "\n", puzzle1(fp));
fseek(fp, 0, SEEK_SET);
printf("puzzle2: %" PRId64 "\n", puzzle2(fp));
fclose(fp);
}

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day23 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day23 ${SOURCES})
target_compile_options(aoc2023_day23 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day23 PUBLIC libc ban)
banan_include_headers(aoc2023_day23 ban)
banan_link_library(aoc2023_day23 libc)
add_dependencies(aoc2023_day23 libc-install ban-install)
add_custom_target(aoc2023_day23-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day23 ${BANAN_AOC2023_BIN}/day23
DEPENDS aoc2023_day23
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day23)
add_dependencies(aoc2023-install aoc2023_day23-install)
install(TARGETS aoc2023_day23)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day24 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day24 ${SOURCES})
target_compile_options(aoc2023_day24 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day24 PUBLIC libc ban)
banan_include_headers(aoc2023_day24 ban)
banan_link_library(aoc2023_day24 libc)
add_dependencies(aoc2023_day24 libc-install ban-install)
add_custom_target(aoc2023_day24-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day24 ${BANAN_AOC2023_BIN}/day24
DEPENDS aoc2023_day24
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day24)
add_dependencies(aoc2023-install aoc2023_day24-install)
install(TARGETS aoc2023_day24)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day25 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day25 ${SOURCES})
target_compile_options(aoc2023_day25 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day25 PUBLIC libc ban)
banan_link_library(aoc2023_day25 ban)
banan_link_library(aoc2023_day25 libc)
add_dependencies(aoc2023_day25 libc-install ban-install)
add_custom_target(aoc2023_day25-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day25 ${BANAN_AOC2023_BIN}/day25
DEPENDS aoc2023_day25
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day25)
add_dependencies(aoc2023-install aoc2023_day25-install)
install(TARGETS aoc2023_day25)

View File

@@ -21,6 +21,9 @@ using u64 = uint64_t;
struct Component
{
Component(BAN::String name)
: name(BAN::move(name))
{}
BAN::String name;
BAN::Vector<BAN::String> connections;
};

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day3 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day3 ${SOURCES})
target_compile_options(aoc2023_day3 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day3 PUBLIC libc ban)
banan_include_headers(aoc2023_day3 ban)
banan_link_library(aoc2023_day3 libc)
add_dependencies(aoc2023_day3 libc-install ban-install)
add_custom_target(aoc2023_day3-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day3 ${BANAN_AOC2023_BIN}/day3
DEPENDS aoc2023_day3
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day3)
add_dependencies(aoc2023-install aoc2023_day3-install)
install(TARGETS aoc2023_day3)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day4 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day4 ${SOURCES})
target_compile_options(aoc2023_day4 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day4 PUBLIC libc ban)
banan_link_library(aoc2023_day4 ban)
banan_link_library(aoc2023_day4 libc)
add_dependencies(aoc2023_day4 libc-install ban-install)
add_custom_target(aoc2023_day4-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day4 ${BANAN_AOC2023_BIN}/day4
DEPENDS aoc2023_day4
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day4)
add_dependencies(aoc2023-install aoc2023_day4-install)
install(TARGETS aoc2023_day4)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day5 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day5 ${SOURCES})
target_compile_options(aoc2023_day5 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day5 PUBLIC libc ban)
banan_include_headers(aoc2023_day5 ban)
banan_link_library(aoc2023_day5 libc)
add_dependencies(aoc2023_day5 libc-install ban-install)
add_custom_target(aoc2023_day5-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day5 ${BANAN_AOC2023_BIN}/day5
DEPENDS aoc2023_day5
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day5)
add_dependencies(aoc2023-install aoc2023_day5-install)
install(TARGETS aoc2023_day5)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day6 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day6 ${SOURCES})
target_compile_options(aoc2023_day6 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day6 PUBLIC libc ban)
banan_include_headers(aoc2023_day6 ban)
banan_link_library(aoc2023_day6 libc)
add_dependencies(aoc2023_day6 libc-install ban-install)
add_custom_target(aoc2023_day6-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day6 ${BANAN_AOC2023_BIN}/day6
DEPENDS aoc2023_day6
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day6)
add_dependencies(aoc2023-install aoc2023_day6-install)
install(TARGETS aoc2023_day6)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day7 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day7 ${SOURCES})
target_compile_options(aoc2023_day7 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day7 PUBLIC libc ban)
banan_include_headers(aoc2023_day7 ban)
banan_link_library(aoc2023_day7 libc)
add_dependencies(aoc2023_day7 libc-install ban-install)
add_custom_target(aoc2023_day7-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day7 ${BANAN_AOC2023_BIN}/day7
DEPENDS aoc2023_day7
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day7)
add_dependencies(aoc2023-install aoc2023_day7-install)
install(TARGETS aoc2023_day7)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day8 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day8 ${SOURCES})
target_compile_options(aoc2023_day8 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day8 PUBLIC libc ban)
banan_include_headers(aoc2023_day8 ban)
banan_link_library(aoc2023_day8 libc)
add_dependencies(aoc2023_day8 libc-install ban-install)
add_custom_target(aoc2023_day8-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day8 ${BANAN_AOC2023_BIN}/day8
DEPENDS aoc2023_day8
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day8)
add_dependencies(aoc2023-install aoc2023_day8-install)
install(TARGETS aoc2023_day8)

View File

@@ -1,22 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023_day9 CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023_day9 ${SOURCES})
target_compile_options(aoc2023_day9 PUBLIC -O2 -g)
target_link_libraries(aoc2023_day9 PUBLIC libc ban)
banan_include_headers(aoc2023_day9 ban)
banan_link_library(aoc2023_day9 libc)
add_dependencies(aoc2023_day9 libc-install ban-install)
add_custom_target(aoc2023_day9-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023_day9 ${BANAN_AOC2023_BIN}/day9
DEPENDS aoc2023_day9
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023_day9)
add_dependencies(aoc2023-install aoc2023_day9-install)
install(TARGETS aoc2023_day9)

View File

@@ -1,20 +1,9 @@
cmake_minimum_required(VERSION 3.26)
project(aoc2023-full CXX)
set(SOURCES
main.cpp
)
add_executable(aoc2023-full ${SOURCES})
target_compile_options(aoc2023-full PUBLIC -O2 -g)
target_link_libraries(aoc2023-full PUBLIC libc)
add_executable(aoc2023_full ${SOURCES})
banan_include_headers(aoc2023_full ban)
banan_link_library(aoc2023_full libc)
add_custom_target(aoc2023-full-install
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/aoc2023-full ${BANAN_AOC2023_BIN}/full
DEPENDS aoc2023-full
DEPENDS aoc2023_always
)
add_dependencies(aoc2023 aoc2023-full)
add_dependencies(aoc2023-install aoc2023-full-install)
install(TARGETS aoc2023_full)