Skip to content

Commit

Permalink
build: switch to CMake
Browse files Browse the repository at this point in the history
  • Loading branch information
dtcxzyw committed Mar 10, 2023
1 parent 892ddf6 commit f22cfe7
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 6 deletions.
9 changes: 6 additions & 3 deletions .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,16 @@ jobs:
lfs: true

- name: Env
run: sudo apt install spim
run: sudo apt install spim ninja-build

- name: Format
run: make format-check

- name: Build
run: make -j2
run: |
mkdir build && cd build
cmake .. -G Ninja
cmake --build . -j
- name: Test
run: make test
run: cd build && ctest --verbose
59 changes: 59 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
cmake_minimum_required(VERSION 3.12)
enable_testing()

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

project(cmmc)

if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Supported build types: Debug Release" FORCE)
endif()

if(${CMAKE_BUILD_TYPE} MATCHES Debug)
add_compile_options(-fsanitize=address,undefined -fsanitize-recover=address -fno-omit-frame-pointer -ggdb -g)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION FALSE)
else()
add_compile_options(-s -march=native -funroll-loops -ffp-contract=on)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()
add_compile_options(-Wextra -Wall -Werror)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/)

find_package(BISON REQUIRED)
find_package(FLEX REQUIRED)

function(add_frontend frontend)
message(STATUS "Add frontend: ${frontend}")
set(GENERATED_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/${frontend})
FLEX_TARGET(${frontend}Scanner cmmc/Frontend/Scanner${frontend}.ll ${GENERATED_DIR}/ScannerImpl.hpp
COMPILE_FLAGS "-P ${frontend}"
DEFINES_FILE ${GENERATED_DIR}/ScannerDecl.hpp
)
BISON_TARGET(${frontend}Parser cmmc/Frontend/Parser${frontend}.yy ${GENERATED_DIR}/ParserImpl.hpp
COMPILE_FLAGS --language=c++
DEFINES_FILE ${GENERATED_DIR}/ParserDecl.hpp
)
ADD_FLEX_BISON_DEPENDENCY(${frontend}Scanner ${frontend}Parser)
add_custom_target(${frontend}_generated DEPENDS ${BISON_${frontend}Parser_OUTPUTS} ${FLEX_${frontend}Scanner_OUTPUTS})
endfunction()

add_frontend(Spl)
add_frontend(SysY)

file(GLOB CMMC_SRC cmmc/**/*.cpp cmmc/Transforms/**/*.cpp cmmc/Target/**/*.cpp)
file(GLOB CMMC_SRC_FRONTEND cmmc/Frontend/Support/*.cpp)
add_executable(cmmc ${CMMC_SRC} ${CMMC_SRC_FRONTEND})
add_dependencies(cmmc Spl_generated SysY_generated)
set_source_files_properties(${CMMC_SRC} PROPERTIES COMPILE_FLAGS "-Wconversion -Wshadow -Wno-format-security -Wno-psabi")
target_include_directories(cmmc PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/generated ${CMAKE_CURRENT_LIST_DIR})

find_package(Python3 REQUIRED)

add_test(NAME cmmc_test COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/tests/test_driver.py $<TARGET_FILE:cmmc> ${CMAKE_CURRENT_LIST_DIR}/tests)
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ bear3: clean # make clangd happy
debug: $(BIN)
gdb $(BIN)
cmmc: $(BIN)
.PHONY: splc_project1 splc_project2 splc_project3 splc
.PHONY: splc_project1 splc_project2 splc_project3 splc_project4
splc_project1: $(BIN) # Project 1
echo "\$$(dirname \$$0)/cmmc --strict -a -o /dev/stdout \$$1" > $(SPLC_SHELL)
chmod +x $(SPLC_SHELL)
Expand Down Expand Up @@ -111,6 +111,6 @@ format-check:
format:
clang-format -style=file -i $(ALLSRCS)
lint: cmmc
clang-tidy --config-file=.clang-tidy -p ./build -header-filter=.*cmmc.* $(ALLSRCS) >./build/clang_tidy_result.log
clang-tidy --config-file=.clang-tidy -p $(DIR_BUILD) -header-filter=.*cmmc.* $(ALLSRCS) >$(DIR_BUILD)/clang_tidy_result.log
iwyu: cmmc
iwyu_tool -j 16 -p ./build
iwyu_tool -j 16 -p $(DIR_BUILD)

0 comments on commit f22cfe7

Please sign in to comment.