Skip to content

Commit 963e1a3

Browse files
authored
Merge pull request #484 from yamacir-kit/release-candidate
Release candidate
2 parents df8df87 + a1ad2dc commit 963e1a3

File tree

158 files changed

+2782
-2664
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

158 files changed

+2782
-2664
lines changed

.github/workflows/build.yaml

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ jobs:
1414
matrix:
1515
compiler: [ g++, clang++ ]
1616
configuration: [ Debug, Release ]
17-
system: [ ubuntu-20.04, ubuntu-22.04 ]
17+
system: [ ubuntu-22.04, ubuntu-24.04, macos-14 ]
1818
steps:
1919
- uses: actions/checkout@v3
20-
- run: ./script/setup.sh --all
20+
- run: ./script/setup-${{ matrix.system }}.sh --all
2121
- run: cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.configuration }}
22-
- run: cmake --build build --target develop
22+
- run: cmake --build build --target continuous-integration
2323
- run: cmake -B example/build -S example -DCMAKE_BUILD_TYPE=${{ matrix.configuration }}
24-
- run: cmake --build example/build --target develop
24+
- run: cmake --build example/build --target continuous-integration

.github/workflows/release.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
steps:
1010
- uses: actions/checkout@v3
1111
- run: echo "VERSION=$(cat VERSION)" >> $GITHUB_ENV
12-
- run: ./script/setup.sh
12+
- run: ./script/setup-ubuntu.sh
1313
- run: cmake -B build -DCMAKE_BUILD_TYPE=Release
1414
- run: cmake --build build --target package
1515
- run: gh release create v${{ env.VERSION }} build/meevax_${{ env.VERSION }}_amd64.deb --title "Version ${{ env.VERSION }}"

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
.DS_Store
12
basis/src
23
build
34
document

CMakeLists.txt

+72-72
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
cmake_minimum_required(VERSION 3.16.3) # Ubuntu 20.04 LTS default
1+
cmake_minimum_required(VERSION 3.22.1) # Ubuntu 22.04 LTS default
22

33
execute_process(
4-
COMMAND head -c -1 ${CMAKE_CURRENT_SOURCE_DIR}/VERSION
4+
COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/VERSION
5+
COMMAND tr -d \n
56
OUTPUT_VARIABLE CURRENT_VERSION)
67

78
project(meevax
@@ -12,44 +13,42 @@ project(meevax
1213

1314
include(GNUInstallDirs)
1415

15-
string(JOIN " " ${PROJECT_NAME}_RELEASE_PLUS
16+
string(JOIN " " ${PROJECT_NAME}_UNSTABLE_OPTIONS
17+
# "-flto" # This optimization causes a problem in Apple Clang 15.0.0 where some static inline data members are no longer unique. It is unclear whether this is a code issue or a compiler issue.
1618
# "-fmerge-all-constants" # This optimization is very effective in reducing binary size, but non-standard to the C++ standard.
1719
# "-march=native" # This optimization causes "Illegal instruction" error (is Valgrind's bug) on CI.
1820
# "-mtune=native"
1921
)
2022

2123
set(CMAKE_CXX_EXTENSIONS OFF)
24+
set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -pipe")
2225
set(CMAKE_CXX_FLAGS_DEBUG "-Og -gdwarf-4") # NOTE: The `-gdwarf-4` option is set due to the following issues with Clang 14 and Valgrind versions below 3.20: https://bugzilla.mozilla.org/show_bug.cgi?id=1758782
2326
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
24-
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -flto -DNDEBUG ${${PROJECT_NAME}_RELEASE_PLUS}")
27+
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG ${${PROJECT_NAME}_UNSTABLE_OPTIONS}")
2528
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -gdwarf-4")
26-
set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -pipe")
27-
set(CMAKE_CXX_STANDARD 17)
29+
set(CMAKE_CXX_STANDARD 20)
2830
set(CMAKE_CXX_STANDARD_REQUIRED ON)
2931
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
3032
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
3133
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
3234
set(CMAKE_VERBOSE_MAKEFILE OFF)
3335

34-
# ---- Configure ---------------------------------------------------------------
35-
36-
include(TestBigEndian)
37-
38-
TEST_BIG_ENDIAN(IS_BIG_ENDIAN) # Use CMAKE_CXX_BYTE_ORDER if CMake >= 3.20
39-
40-
if(${IS_BIG_ENDIAN})
41-
set(${PROJECT_NAME}_BYTE_ORDER "big-endian")
42-
else()
43-
set(${PROJECT_NAME}_BYTE_ORDER "little-endian")
36+
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
37+
set(CMAKE_INSTALL_RPATH "@executable_path/../${CMAKE_INSTALL_LIBDIR}")
4438
endif()
4539

40+
# ---- CONFIGURE ---------------------------------------------------------------
41+
4642
execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/script/unicode.sh --digit-value OUTPUT_VARIABLE ${PROJECT_NAME}_UNICODE_DIGIT_VALUE)
4743
execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/script/unicode.sh --downcase OUTPUT_VARIABLE ${PROJECT_NAME}_UNICODE_DOWNCASE)
4844
execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/script/unicode.sh --property OUTPUT_VARIABLE ${PROJECT_NAME}_UNICODE_PROPERTY)
4945
execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/script/unicode.sh --upcase OUTPUT_VARIABLE ${PROJECT_NAME}_UNICODE_UPCASE)
5046

5147
execute_process(
52-
COMMAND head -c -1 ${CMAKE_CURRENT_SOURCE_DIR}/configure/help.txt
48+
COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/configure/help.txt
49+
COMMAND tr \n \r
50+
COMMAND sed s/\r$//
51+
COMMAND tr \r \n
5352
OUTPUT_VARIABLE ${PROJECT_NAME}_HELP)
5453

5554
file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME}/unicode/digit_value.hpp "${${PROJECT_NAME}_UNICODE_DIGIT_VALUE}")
@@ -63,7 +62,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure/Doxyfile ${CMAKE_CURRENT
6362
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure/README.md ${CMAKE_CURRENT_SOURCE_DIR}/README.md)
6463
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure/version.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/kernel/version.cpp)
6564

66-
# ---- Target basis ------------------------------------------------------------
65+
# ---- TARGET basis ------------------------------------------------------------
6766

6867
file(GLOB ${PROJECT_NAME}_BASIS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/basis/*.ss)
6968

@@ -90,7 +89,7 @@ set_target_properties(basis PROPERTIES
9089
SOVERSION ${PROJECT_VERSION_MAJOR}
9190
LINK_FLAGS_RELEASE -s)
9291

93-
# ---- Target kernel -----------------------------------------------------------
92+
# ---- TARGET kernel -----------------------------------------------------------
9493

9594
add_library(kernel SHARED)
9695

@@ -100,7 +99,11 @@ target_sources(kernel PRIVATE ${${PROJECT_NAME}_KERNEL_SOURCES})
10099

101100
target_include_directories(kernel
102101
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
103-
PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
102+
PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
103+
PUBLIC $<$<PLATFORM_ID:Darwin>:/opt/homebrew/include>)
104+
105+
target_link_directories(kernel
106+
PUBLIC $<$<PLATFORM_ID:Darwin>:/opt/homebrew/lib>)
104107

105108
target_link_libraries(kernel
106109
PRIVATE ${CMAKE_DL_LIBS}
@@ -112,7 +115,7 @@ set_target_properties(kernel PROPERTIES
112115
SOVERSION ${PROJECT_VERSION_MAJOR}
113116
LINK_FLAGS_RELEASE -s)
114117

115-
# ---- Target shell ------------------------------------------------------------
118+
# ---- TARGET shell ------------------------------------------------------------
116119

117120
add_executable(shell)
118121

@@ -124,16 +127,14 @@ set_target_properties(shell PROPERTIES
124127
OUTPUT_NAME ${PROJECT_NAME} # Rename shell => meevax
125128
LINK_FLAGS_RELEASE -s)
126129

127-
# ---- CMake Package -----------------------------------------------------------
130+
# ---- TARGET install ----------------------------------------------------------
128131

129132
include(CMakePackageConfigHelpers)
130133

131134
write_basic_package_version_file(
132135
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
133136
COMPATIBILITY SameMajorVersion)
134137

135-
# ---- Target install ----------------------------------------------------------
136-
137138
install( # /usr/lib/libmeevax
138139
TARGETS basis kernel
139140
EXPORT ${PROJECT_NAME}-config
@@ -159,74 +160,73 @@ install( # /usr/share/meevax/meevax-config-version.cmake
159160
FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
160161
DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
161162

162-
# ---- Target package ----------------------------------------------------------
163+
# ---- TARGET uninstall --------------------------------------------------------
163164

164-
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
165-
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Tatsuya Yamasaki")
166-
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
167-
set(CPACK_GENERATOR DEB)
168-
set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
169-
set(CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/README.md)
170-
set(CPACK_THREADS 0)
165+
add_custom_target(uninstall
166+
COMMAND sudo rm -rf ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${PROJECT_NAME}
167+
COMMAND sudo rm -rf ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
168+
COMMAND sudo rm -rf ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${PROJECT_NAME}*
169+
COMMAND sudo rm -rf ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
171170

172-
include(CPack)
171+
# ---- TARGET package ----------------------------------------------------------
173172

174-
# ---- Target test -------------------------------------------------------------
175-
176-
enable_testing()
173+
if(CMAKE_SYSTEM_NAME STREQUAL Linux)
174+
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
175+
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Tatsuya Yamasaki")
176+
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
177+
set(CPACK_GENERATOR DEB)
178+
set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
179+
set(CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/README.md)
180+
include(CPack)
181+
endif()
177182

178-
find_program(${PROJECT_NAME}_MEMORY_CHECK_COMMAND valgrind)
183+
# ---- TARGET test -------------------------------------------------------------
179184

180-
set(${PROJECT_NAME}_MEMORY_CHECK_OPTIONS
181-
--error-exitcode=1 # = EXIT_FAILURE)
182-
--leak-check=full
183-
--quiet
184-
--show-leak-kinds=all)
185+
enable_testing()
185186

186-
file(GLOB ${PROJECT_NAME}_TEST_SS ${CMAKE_CURRENT_SOURCE_DIR}/test/*.ss)
187+
find_program(${PROJECT_NAME}_VALGRIND valgrind)
187188

188-
foreach(EACH IN LISTS ${PROJECT_NAME}_TEST_SS)
189-
get_filename_component(FILENAME ${EACH} NAME_WE)
190-
add_test(
191-
NAME ${FILENAME}
192-
COMMAND ${${PROJECT_NAME}_MEMORY_CHECK_COMMAND}
193-
${${PROJECT_NAME}_MEMORY_CHECK_OPTIONS}
194-
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/meevax
195-
${EACH})
196-
endforeach()
189+
if(${PROJECT_NAME}_VALGRIND STREQUAL ${PROJECT_NAME}_VALGRIND-NOTFOUND)
190+
set(${PROJECT_NAME}_TEST "")
191+
else()
192+
set(${PROJECT_NAME}_TEST ${${PROJECT_NAME}_VALGRIND} --error-exitcode=1 --leak-check=full --quiet --show-leak-kinds=all)
193+
endif()
197194

198195
file(GLOB ${PROJECT_NAME}_TEST_CPP ${CMAKE_CURRENT_SOURCE_DIR}/test/*.cpp)
196+
file(GLOB ${PROJECT_NAME}_TEST_SH ${CMAKE_CURRENT_SOURCE_DIR}/test/*.sh)
197+
file(GLOB ${PROJECT_NAME}_TEST_SS ${CMAKE_CURRENT_SOURCE_DIR}/test/*.ss)
199198

200199
foreach(EACH IN LISTS ${PROJECT_NAME}_TEST_CPP)
201200
get_filename_component(FILENAME ${EACH} NAME_WE)
202201
add_executable(test_${FILENAME} ${EACH})
203202
target_link_libraries(test_${FILENAME} PRIVATE basis kernel)
204203
target_compile_options(test_${FILENAME} PUBLIC -Wno-deprecated-declarations)
205-
add_test(
206-
NAME test/${FILENAME}
207-
COMMAND ${${PROJECT_NAME}_MEMORY_CHECK_COMMAND}
208-
${${PROJECT_NAME}_MEMORY_CHECK_OPTIONS}
209-
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_${FILENAME})
204+
add_test(NAME test/${FILENAME} COMMAND ${${PROJECT_NAME}_TEST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_${FILENAME})
210205
endforeach()
211206

212-
file(GLOB ${PROJECT_NAME}_TEST_SH ${CMAKE_CURRENT_SOURCE_DIR}/test/*.sh)
213-
214207
foreach(EACH IN LISTS ${PROJECT_NAME}_TEST_SH)
215208
get_filename_component(FILENAME ${EACH} NAME_WE)
216-
add_test(
217-
NAME ${FILENAME}
218-
COMMAND ${${PROJECT_NAME}_MEMORY_CHECK_COMMAND}
219-
${${PROJECT_NAME}_MEMORY_CHECK_OPTIONS}
220-
${EACH}
221-
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/meevax)
209+
add_test(NAME ${FILENAME} COMMAND ${${PROJECT_NAME}_TEST} ${EACH} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/meevax)
222210
endforeach()
223211

224-
# ---- Additional Targets ------------------------------------------------------
212+
foreach(EACH IN LISTS ${PROJECT_NAME}_TEST_SS)
213+
get_filename_component(FILENAME ${EACH} NAME_WE)
214+
add_test(NAME ${FILENAME} COMMAND ${${PROJECT_NAME}_TEST} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/meevax ${EACH})
215+
endforeach()
225216

226-
execute_process(COMMAND nproc OUTPUT_VARIABLE ${PROJECT_NAME}_NPROC)
217+
# ---- TARGET continuous-integration -------------------------------------------
227218

228-
add_custom_target(develop
229-
COMMAND ${CMAKE_MAKE_PROGRAM} -j${${PROJECT_NAME}_NPROC}
230-
COMMAND ${CMAKE_MAKE_PROGRAM} test ARGS=-j${${PROJECT_NAME}_NPROC}
231-
COMMAND ${CMAKE_MAKE_PROGRAM} package
232-
COMMAND sudo dpkg -i ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_${PROJECT_VERSION}_amd64.deb)
219+
if(CMAKE_SYSTEM_NAME STREQUAL Linux)
220+
execute_process(COMMAND nproc OUTPUT_VARIABLE ${PROJECT_NAME}_NPROC)
221+
add_custom_target(continuous-integration
222+
COMMAND ${CMAKE_MAKE_PROGRAM} -j${${PROJECT_NAME}_NPROC}
223+
COMMAND ${CMAKE_MAKE_PROGRAM} test ARGS=-j${${PROJECT_NAME}_NPROC}
224+
COMMAND ${CMAKE_MAKE_PROGRAM} package
225+
COMMAND sudo dpkg -i ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_${PROJECT_VERSION}_amd64.deb)
226+
else()
227+
execute_process(COMMAND sysctl -n hw.ncpu OUTPUT_VARIABLE ${PROJECT_NAME}_NCPU)
228+
add_custom_target(continuous-integration
229+
COMMAND ${CMAKE_MAKE_PROGRAM} -j${${PROJECT_NAME}_NCPU}
230+
COMMAND ${CMAKE_MAKE_PROGRAM} test ARGS=-j${${PROJECT_NAME}_NCPU}
231+
COMMAND sudo ${CMAKE_MAKE_PROGRAM} install)
232+
endif()

0 commit comments

Comments
 (0)