Added toolchain file for sanitized builds
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				ci/woodpecker/push/workflow Pipeline failed
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	ci/woodpecker/push/workflow Pipeline failed
				
			This commit is contained in:
		@@ -8,7 +8,7 @@ steps:
 | 
			
		||||
    commands: # we probably shouldn't install cmake every time
 | 
			
		||||
      - apt update && apt install -y cmake
 | 
			
		||||
      - mkdir -p build/ && cd build
 | 
			
		||||
      - cmake ..
 | 
			
		||||
      - cmake .. --toolchain ../toolchain/sanitize.cmake
 | 
			
		||||
      - make
 | 
			
		||||
  - name: test
 | 
			
		||||
    image: ubuntu
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								README.md
									
									
									
									
									
								
							@@ -9,6 +9,11 @@ The end goal is to emit bytecode. The bytecode format is not decided yet.
 | 
			
		||||
 | 
			
		||||
## Build
 | 
			
		||||
 | 
			
		||||
All you need is:
 | 
			
		||||
 | 
			
		||||
- CMake
 | 
			
		||||
- An appropriate C++ compiler
 | 
			
		||||
 | 
			
		||||
I use cmake for the build system. I prefer to build out-of-tree,
 | 
			
		||||
here's how to build if you've never used cmake:
 | 
			
		||||
 | 
			
		||||
@@ -35,6 +40,23 @@ cp compile_commands.json ../
 | 
			
		||||
 | 
			
		||||
After this, clangd should not give you errors on every included header.
 | 
			
		||||
 | 
			
		||||
### Toolchain
 | 
			
		||||
 | 
			
		||||
C++ can be somewhat error-prone, so in order to reduce the possibility of
 | 
			
		||||
certain bugs, cmake toolchain options are provided that build the project
 | 
			
		||||
with the undefined behaviour sanitizer and the address sanitizer.
 | 
			
		||||
 | 
			
		||||
You can build a sanitized version like this:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
cd build
 | 
			
		||||
cmake .. --toolchain ../toolchain/sanitize.cmake
 | 
			
		||||
make
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Catch2 testing framework is used to maintain code correctness.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Progress
 | 
			
		||||
 | 
			
		||||
Woodpecker CI/CD system is integrated.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								toolchain/sanitize.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								toolchain/sanitize.cmake
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
# We're assuming clang or gcc as the compiler.
 | 
			
		||||
# feel free to change if you're using msvc or something else
 | 
			
		||||
set(SANITIZERS_FLAGS "-fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all -fno-omit-frame-pointer")
 | 
			
		||||
set(CMAKE_CXX_FLAGS_INIT "${SANITIZERS_FLAGS}")
 | 
			
		||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "${SANITIZERS_FLAGS}")
 | 
			
		||||
		Reference in New Issue
	
	Block a user