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
 | 
					    commands: # we probably shouldn't install cmake every time
 | 
				
			||||||
      - apt update && apt install -y cmake
 | 
					      - apt update && apt install -y cmake
 | 
				
			||||||
      - mkdir -p build/ && cd build
 | 
					      - mkdir -p build/ && cd build
 | 
				
			||||||
      - cmake ..
 | 
					      - cmake .. --toolchain ../toolchain/sanitize.cmake
 | 
				
			||||||
      - make
 | 
					      - make
 | 
				
			||||||
  - name: test
 | 
					  - name: test
 | 
				
			||||||
    image: ubuntu
 | 
					    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
 | 
					## Build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					All you need is:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- CMake
 | 
				
			||||||
 | 
					- An appropriate C++ compiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I use cmake for the build system. I prefer to build out-of-tree,
 | 
					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:
 | 
					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.
 | 
					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
 | 
					## Progress
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Woodpecker CI/CD system is integrated.
 | 
					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