Add userspace config.h handling to build script (#2640)
* Add userspace 'config.h' file * Add more robust docs * Remove config.h code from drashna userspace * Spelling error * Include links to Config Options page * Remove config.h documentation from userspace doc, as it's no longer needed
This commit is contained in:
		
							parent
							
								
									cc323df9ba
								
							
						
					
					
						commit
						162a67cbc5
					
				
					 4 changed files with 27 additions and 34 deletions
				
			
		| 
						 | 
				
			
			@ -3,33 +3,6 @@ Overview
 | 
			
		|||
 | 
			
		||||
This is my personal userspace file.  Most of my code exists here, as it's heavily shared. 
 | 
			
		||||
 | 
			
		||||
Userspace Config.h
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
By default, the userspace feature doesn't include a `config.h` file the way that that keyboards, revisions, keymaps and layouts handle them.  This means that if you want global configurations via userspace, it's very difficult to implement.  
 | 
			
		||||
 | 
			
		||||
The reason for using seperate files here is that the `drashna.h` file doesn't get called in such a way that will actually define QMK settings.  Additionally, attempting to add it to the `config.h` files has issues. Namely, the `drashna.h` file requires the `quantum.h` file... but including this to the `config.h` attemps to redefines a bunch of settings and breaks the firmare.  Removing the `quantum.h` include means that a number of data structures no longer get added, and the `SAFE_RANGE` value is no longer defined, as well.  So we need both a `config.h` for global config, and we need a seperate h file for local settings. 
 | 
			
		||||
 | 
			
		||||
However, the `rules.mk` file is included when building the firmware.  So we can hijack that process to "manually" add a `config.h`. To do so, you would need to add the following to the `rules.mk` in your userspace:
 | 
			
		||||
 | 
			
		||||
```c
 | 
			
		||||
ifneq ("$(wildcard users/$(KEYMAP)/config.h)","")
 | 
			
		||||
    CONFIG_H += users/$(KEYMAP)/config.h
 | 
			
		||||
endif
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can replace `$(KEYMAP)` with your name, but it's not necessary. This checks for the existence of `/users/<name>/config.h`, and if it exists, includes it like every other `config.h` file, allowing you to make global `config.h` settings. 
 | 
			
		||||
 | 
			
		||||
As for the `config.h` file, you want to make sure that it has an "ifdef" in it to make sure it's only used once.  So you want something like this: 
 | 
			
		||||
 | 
			
		||||
```c
 | 
			
		||||
#ifndef USERSPACE_CONFIG_H
 | 
			
		||||
#define USERSPACE_CONFIG_H
 | 
			
		||||
 | 
			
		||||
// put stuff here 
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Custom userspace handlers
 | 
			
		||||
-------------------------
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,10 +2,4 @@
 | 
			
		|||
SRC += drashna.c
 | 
			
		||||
EXTRAFLAGS        += -flto
 | 
			
		||||
 | 
			
		||||
ifneq ("$(wildcard users/$(KEYMAP)/config.h)","")
 | 
			
		||||
    CONFIG_H += users/$(KEYMAP)/config.h
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(strip $(NO_SECRETS)), yes)
 | 
			
		||||
    OPT_DEFS += -DNO_SECRETS
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue