Skip to content

Commit c14bdf8

Browse files
authored
Merge pull request #10 from DragonRuby/alexdenisov/version
Add proper version handling
2 parents 5178784 + 9faf8bc commit c14bdf8

File tree

10 files changed

+98
-10
lines changed

10 files changed

+98
-10
lines changed

CMakeLists.txt

+9-3
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,22 @@ set(CMAKE_CXX_STANDARD 20)
55
set(CMAKE_CXX_STANDARD_REQUIRED ON)
66
set(CMAKE_CXX_EXTENSIONS OFF)
77

8-
include(GNUInstallDirs)
8+
set(PROJECT_VERSION 0.1.0)
99

10-
include(cmake/mruby.cmake)
11-
include(cmake/lightstorm.cmake)
10+
set(PROJECT_DESCRIPTION "Minimalistic ahead-of-time Ruby compiler")
11+
set(PROJECT_HOMEPAGE_URL "https://github.com/dragonruby/lightstorm")
12+
13+
include(GNUInstallDirs)
1214

1315
find_package(LLVM CONFIG REQUIRED)
1416
message("Using LLVM_CONFIG: ${LLVM_CONFIG}")
1517
find_package(MLIR CONFIG REQUIRED)
1618
message("Using MLIR_CONFIG: ${MLIR_CONFIG}")
1719

20+
include(cmake/mruby.cmake)
21+
include(cmake/version.cmake)
22+
include(cmake/lightstorm.cmake)
23+
1824
list(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}")
1925
list(APPEND CMAKE_MODULE_PATH "${MLIR_DIR}")
2026
include(AddLLVM)

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Simplified version of [Firestorm](https://www.youtube.com/watch?v=NfMX-dFMSr0) t
44

55
## Development Setup
66

7-
You can either use a codespace or a [devcontainer](https://code.visualstudio.com/docs/devcontainers/containers). For a local setup, follow the steps below.
7+
You can either use a [codespace](https://docs.github.com/en/codespaces/getting-started/quickstart) or a [devcontainer](https://code.visualstudio.com/docs/devcontainers/containers). For a local setup, follow the steps below.
88

99
### Install Dependencies
1010

cmake/mruby.cmake

+9
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ set(MRUBY_BINARY "${MRUBY_DIR}/bin/mruby")
44
set(MRBC_BINARY "${MRUBY_DIR}/bin/mrbc")
55
set(MRUBY_STATIC "${MRUBY_DIR}/build/host/lib/libmruby.a")
66

7+
file(READ ${MRUBY_DIR}/include/mruby/version.h mruby_version_h)
8+
9+
string(REGEX MATCH "MRUBY_RELEASE_MAJOR ([0-9]*)" _ ${mruby_version_h})
10+
set(MRUBY_RELEASE_MAJOR ${CMAKE_MATCH_1})
11+
string(REGEX MATCH "MRUBY_RELEASE_MINOR ([0-9]*)" _ ${mruby_version_h})
12+
set(MRUBY_RELEASE_MINOR ${CMAKE_MATCH_1})
13+
string(REGEX MATCH "MRUBY_RELEASE_TEENY ([0-9]*)" _ ${mruby_version_h})
14+
set(MRUBY_RELEASE_TEENY ${CMAKE_MATCH_1})
15+
716
ExternalProject_Add(
817
mruby
918
SOURCE_DIR ${MRUBY_DIR}

cmake/version.cmake

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
execute_process(
2+
COMMAND git log -1 --format=%h
3+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
4+
OUTPUT_VARIABLE GIT_COMMIT
5+
OUTPUT_STRIP_TRAILING_WHITESPACE)
6+
7+
execute_process(
8+
COMMAND date "+%d %b %Y"
9+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
10+
OUTPUT_VARIABLE BUILD_DATE
11+
OUTPUT_STRIP_TRAILING_WHITESPACE)
12+
13+
set(MRUBY_VERSION
14+
${MRUBY_RELEASE_MAJOR}.${MRUBY_RELEASE_MINOR}.${MRUBY_RELEASE_TEENY})
15+
16+
configure_file(${CMAKE_SOURCE_DIR}/lib/version.cpp
17+
${CMAKE_BINARY_DIR}/lib/version.cpp @ONLY)
18+
19+
add_library(lightstorm_version ${CMAKE_BINARY_DIR}/lib/version.cpp)
20+
target_include_directories(lightstorm_version
21+
PRIVATE ${CMAKE_SOURCE_DIR}/include)
22+
target_include_directories(lightstorm_version SYSTEM
23+
PRIVATE ${LLVM_INCLUDE_DIRS})

include/lightstorm/version.h

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#pragma once
2+
3+
namespace llvm {
4+
class raw_ostream;
5+
}
6+
7+
namespace lightstorm {
8+
void print_version_information(llvm::raw_ostream &out);
9+
} // namespace lightstorm

lib/version.cpp

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include "lightstorm/version.h"
2+
3+
#include <llvm/Support/raw_ostream.h>
4+
5+
namespace lightstorm {
6+
7+
static const char *version_string() {
8+
return "@PROJECT_VERSION@";
9+
}
10+
static const char *commit_string() {
11+
return "@GIT_COMMIT@";
12+
}
13+
static const char *build_date_string() {
14+
return "@BUILD_DATE@";
15+
}
16+
static const char *description_string() {
17+
return "@PROJECT_DESCRIPTION@";
18+
}
19+
static const char *homepage_string() {
20+
return "@PROJECT_HOMEPAGE_URL@";
21+
}
22+
static const char *llvm_version_string() {
23+
return "@LLVM_VERSION@";
24+
}
25+
static const char *mruby_version_string() {
26+
return "@MRUBY_VERSION@";
27+
}
28+
29+
void print_version_information(llvm::raw_ostream &out) {
30+
out << "Lightstorm: " << description_string() << "\n";
31+
out << "Home: " << homepage_string() << "\n";
32+
out << "Version: " << version_string() << " (LLVM " << llvm_version_string() << ", mruby "
33+
<< mruby_version_string() << ")" << "\n";
34+
out << "Commit: " << commit_string() << "\n";
35+
out << "Date: " << build_date_string() << "\n";
36+
}
37+
38+
} // namespace lightstorm

tests/end2end/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ function(add_end2end_test dir)
22
set(host_ruby ${CMAKE_CURRENT_LIST_DIR}/${dir}/host.rb)
33
set(lightstorm_ruby ${CMAKE_CURRENT_LIST_DIR}/${dir}/lightstorm.rb)
44
set(host_c ${CMAKE_CURRENT_BINARY_DIR}/${dir}/host.c)
5-
set(lightstorm_c ${CMAKE_CURRENT_BINARY_DIR}/${dir}/lighstorm.c)
5+
set(lightstorm_c ${CMAKE_CURRENT_BINARY_DIR}/${dir}/lightstorm.c)
66
set(target_name end2end_test_${dir}.exe)
77
add_custom_command(
88
OUTPUT ${lightstorm_c}
@@ -11,7 +11,7 @@ function(add_end2end_test dir)
1111
DEPENDS ${lightstorm_ruby} lightstorm)
1212
add_custom_command(
1313
OUTPUT ${host_c}
14-
COMMAND $<TARGET_FILE:mrbc_binary> -Blighstorm_host -o ${host_c}
14+
COMMAND $<TARGET_FILE:mrbc_binary> -Blightstorm_host -o ${host_c}
1515
${host_ruby}
1616
DEPENDS ${host_ruby})
1717
add_executable(${target_name} end2end_test_main.c ${host_c} ${lightstorm_c})

tests/end2end/end2end_test_main.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include <mruby/proc.h>
44

55
mrb_value lightstorm_top(mrb_state *mrb, mrb_value self);
6-
extern const uint8_t lighstorm_host[];
6+
extern const uint8_t lightstorm_host[];
77

88
int main() {
99
mrb_state *mrb = mrb_open();
@@ -13,7 +13,7 @@ int main() {
1313
mrb_value self = mrb_top_self(mrb);
1414
mrb->c->ci->stack[0] = self;
1515
lightstorm_top(mrb, self);
16-
mrb_load_irep(mrb, lighstorm_host);
16+
mrb_load_irep(mrb, lightstorm_host);
1717
mrb_close(mrb);
1818
return 0;
1919
}

tools/lightstorm/CMakeLists.txt

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
add_executable(lightstorm lightstorm.cpp)
22
target_link_libraries(
3-
lightstorm PRIVATE lightstorm_compiler lightstorm_conversion
4-
lightstorm_optimizations rite_dialect LLVMOption)
3+
lightstorm
4+
PRIVATE lightstorm_compiler lightstorm_conversion lightstorm_optimizations
5+
rite_dialect LLVMOption lightstorm_version)
56
target_compile_options(lightstorm PRIVATE -fno-rtti -fno-exceptions)
67
target_include_directories(
78
lightstorm PRIVATE ${CMAKE_SOURCE_DIR}/include ${LLVM_INCLUDE_DIRS}

tools/lightstorm/lightstorm.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "lightstorm/conversion/conversion.h"
1414
#include "lightstorm/dialect/rite.h"
1515
#include "lightstorm/optimizations/optimizations.h"
16+
#include "lightstorm/version.h"
1617

1718
llvm::cl::OptionCategory LightstormCategory("lightstorm");
1819

@@ -41,6 +42,7 @@ llvm::cl::opt<bool> NoOpt("no-opt", llvm::cl::Optional, llvm::cl::desc("Disable
4142
int main(int argc, char **argv) {
4243
llvm::llvm_shutdown_obj shutdownGuard;
4344

45+
llvm::cl::SetVersionPrinter(lightstorm::print_version_information);
4446
llvm::cl::HideUnrelatedOptions(LightstormCategory);
4547
llvm::cl::ParseCommandLineOptions(argc, argv);
4648

0 commit comments

Comments
 (0)