From 162a67cbc567c11c507bfc153d155f5db2dd19bf Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 31 Mar 2018 21:02:40 -0700 Subject: [PATCH] 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 --- build_keyboard.mk | 4 ++++ docs/feature_userspace.md | 24 +++++++++++++++++++++++- users/drashna/readme.md | 27 --------------------------- users/drashna/rules.mk | 6 ------ 4 files changed, 27 insertions(+), 34 deletions(-) diff --git a/build_keyboard.mk b/build_keyboard.mk index 921159a5dd..5a82abd315 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -204,6 +204,10 @@ endif # User space stuff USER_PATH := users/$(KEYMAP) -include $(USER_PATH)/rules.mk +ifneq ("$(wildcard users/$(KEYMAP)/config.h)","") + CONFIG_H += users/$(KEYMAP)/config.h +endif + # Object files directory # To put object files in current directory, use a dot (.), do NOT make diff --git a/docs/feature_userspace.md b/docs/feature_userspace.md index 950377423b..454481cb2c 100644 --- a/docs/feature_userspace.md +++ b/docs/feature_userspace.md @@ -3,10 +3,11 @@ If you use more than one keyboard with a similar keymap, you might see the benefit in being able to share code between them. Create your own folder in `users/` named the same as your keymap (ideally your github username, ``) with the following structure: * `/users//` (added to the path automatically) - * `readme.md` + * `readme.md` (optional, recommended) * `rules.mk` (included automatically) * `.h` (optional) * `.c` (optional) + * `config.h` (optional) `.c` will need to be added to the SRC in `rules.mk` like this: @@ -24,10 +25,31 @@ For example, Will include the `/users/jack/` folder in the path, along with `/users/jack/rules.mk`. +Additionally, `config.h` here will be processed like the same file in your keymap folder. This is handled separately from the `.h` file. + +The reason for this, is that `.h` won't be added in time to add settings (such as `#define TAPPING_TERM 100`), and including the `` file in any `config.h` files will result in compile issues. + +So you should use the `config.h` for QMK settings, and the `.h` file for user or keymap specific settings. + ## Readme Please include authorship (your name, github username, email), and optionally [a license that's GPL compatible](https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses). +## `Config.h` + +If you do add a `config,h` file, you want to make sure that it only gets processed once. So you may want to start off with something like this: + +```c +#ifndef USERSPACE_CONFIG_H +#define USERSPACE_CONFIG_H + +// Put normal config.h settings here: + +#endif // !USERSPACE_CONFIG_H +``` + +You can use any option hre that you could use in your keymap's `config.h` file. You can find a list of vales [here](config_options.md). + ## Example For a brief example, checkout `/users/_example/` , or for a more detailed examples check out [`template.h`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.h) and [`template.c`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.c) in `/users/drashna/` . diff --git a/users/drashna/readme.md b/users/drashna/readme.md index e3e5d399d8..c4e305e15b 100644 --- a/users/drashna/readme.md +++ b/users/drashna/readme.md @@ -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//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 ------------------------- diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk index 53e5da43db..062ecd3c49 100644 --- a/users/drashna/rules.mk +++ b/users/drashna/rules.mk @@ -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