mirror of https://github.com/n64decomp/007.git
87 lines
6.7 KiB
Makefile
87 lines
6.7 KiB
Makefile
################################################################################
|
|
# CMD Builder
|
|
################################################################################
|
|
|
|
#CMD Builder tools
|
|
AI_CMD_BUILDER := $(TOOLS_DIR)/cmdbuilder.c
|
|
AI_CMD_LIST_DEFINITIONS := src/aicommands.def
|
|
AI_CMD_LIST_TEMP := $(BUILD_DIR)/aicommands.temp
|
|
AI_CMD_LIST_H2 := src/aicommands2.h
|
|
#Pre-Format encoding newlines and tags
|
|
AI_CMD_BUILDER_PRECONVERT := sed -E
|
|
AI_CMD_BUILDER_PRECONVERT += -e 's/\x27\\n\x27/\x27\/n\x27/g;' # encode '\n' as '/n' (TEXT PRINT command)
|
|
AI_CMD_BUILDER_PRECONVERT += -e '/^\s*\*/ s/\x27/\?\?x27/g;' # encode DocBlock(/**...**/) quotes '' as x27
|
|
AI_CMD_BUILDER_PRECONVERT += -e '/\/\*\*/ , /\*\// s/([^/])$$/\1 \\n\\/g;' # encode DocBlock(/**...**/) Newlines as \n\ .
|
|
#AI_CMD_BUILDER_PRECONVERT += -e '/^\s*\*/ s/([^\/])$$/\1 \\n\\/g;' # encode DocBlock(/**...**/) Newlines as \n\ .
|
|
AI_CMD_BUILDER_PRECONVERT += -e 's/[^/\*\S]\*$$/\\n\\/g; s/^(\s*)\*[^/\*]/\1 /g;' # remove DocBlock sides (causes problems with tooltips) fixed to check for ordinary comment
|
|
#AI_CMD_BUILDER_PRECONVERT += -e '/^_AI_CMD_POLYMORPH\(CMDNAME,\n(.|\n)*?\s{19}DESCRIPTION(\)| DESCRIPTION2\))/ s/[^,]\n/\\n\\/g;' # Newlines in POLYMORPHS
|
|
AI_CMD_BUILDER_PRECONVERT += -e 's/\/\*\*/\?\?\\\*\(\*\*/g;' # encode /** as ??\*(**
|
|
AI_CMD_BUILDER_PRECONVERT += -e 's/\*\*\//\*\*\)\*\?\?\\ /g;' # encode **/ as **)*??\
|
|
|
|
#Format Newlines and Comment tags
|
|
AI_CMD_BUILDER_CONVERT := sed -E
|
|
AI_CMD_BUILDER_CONVERT += -e 's/\\n/\n/g;' # add newlines
|
|
AI_CMD_BUILDER_CONVERT += -e 's/\?{2}\=/\#/g;' # replace ??= with hash for defines
|
|
AI_CMD_BUILDER_CONVERT += -e 's/\?{2}\\/\//g;' # replace ??\ with /
|
|
AI_CMD_BUILDER_CONVERT += -e 's/DEFINE([^D])/\#define\1/g;' # replace DEFINE with #define
|
|
AI_CMD_BUILDER_CONVERT += -e 's/\\.*/\\/g;' # replace \... with \ (line continuation)
|
|
AI_CMD_BUILDER_CONVERT += -e 's/\*\(\*/\*/g;' # replace *(* with *
|
|
AI_CMD_BUILDER_CONVERT += -e 's/\*\)\*/\*/g;' # replace *)* with *
|
|
AI_CMD_BUILDER_CONVERT += -e 's/MAKE_EXPAND\(([^\n]*)MAKE_EXPAND_END\)/\1/g;' # replace MAKE_EXPAND(CONTENTS) with CONTENTS
|
|
AI_CMD_BUILDER_CONVERT += -e 's/\?{2}x27/\x27/g;' # replace ??x27 with '
|
|
AI_CMD_BUILDER_CONVERT += -e 's/\x27\/n\x27/\x27\\n\x27/g;' # replace '/n' with '\n'
|
|
AI_CMD_BUILDER_CONVERT += -e 's/AI_EndList\s*,/AI_EndList/g;' # replace AI_EndList , with AI_EndList
|
|
AI_CMD_BUILDER_CONVERT += -e 's/ *(,|;) */\1 /g; ' # remove spaces
|
|
AI_CMD_BUILDER_CONVERT += -e '/define (AICMDSIZE)|(AI.*_LENGTH)/! s/define ([^ ]*) *\( *([^ ]*)/define \1(\2/g; ' # for each command, remove the space so macro is read as a function
|
|
AI_CMD_BUILDER_CONVERT += -e '/^typedef/ s/\}/\n\}/g; /^typedef/ s/(; |\{)/\1\n /g;' # for each typedef, break into ALLMAN
|
|
AI_CMD_BUILDER_CONVERT += -e '/^typedef/ s/(\{)/\n\1/g; /^\s*AI_/ s/,/,\\\n /g' # for each command, break into a list
|
|
AI_CMD_BUILDER_CONVERT += -e '/^ *$$/d; s/ *\n/\n/g;' # remove surplus newlines
|
|
|
|
AI_CMD_LIST_H2_HEADER := \
|
|
"/******************************************************************************\n\
|
|
* *\n\
|
|
* *\n\
|
|
* Do not edit this file. It was automatically generated by \"cmdbuilder\" *\n\
|
|
* from the file \"$(AI_CMD_LIST_DEFINITIONS)\". *\n\
|
|
* To Add/Remove/Modify AI Commands please edit \"$(AI_CMD_LIST_DEFINITIONS)\" *\n\
|
|
* and then run *\n\
|
|
* make cmdbuilder *\n\
|
|
* *\n\
|
|
* *\n\
|
|
*****************************************************************************/\n\n"
|
|
|
|
|
|
cmdbuilder:
|
|
@clear
|
|
@echo
|
|
@echo Building AI Command Macros...
|
|
@echo
|
|
@$(call SetupProgressBar)
|
|
@$(call DrawProgressBar,0)
|
|
@ # copy command definitions to temp
|
|
@cp $(AI_CMD_LIST_DEFINITIONS) $(AI_CMD_LIST_TEMP)
|
|
@$(call DrawProgressBar,5)
|
|
@ # Preformat Definitions for builder (encode documentation tags)
|
|
@$(call PRINT_STATUS,"Pre Formatting",$(AI_CMD_LIST_DEFINITIONS))
|
|
@$(AI_CMD_BUILDER_PRECONVERT) $(AI_CMD_LIST_TEMP) > $(AI_CMD_LIST_DEFINITIONS)
|
|
@$(call DrawProgressBar,10)
|
|
@ # Print Header
|
|
@echo $(AI_CMD_LIST_H2_HEADER) > $(AI_CMD_LIST_H2)
|
|
@$(call DrawProgressBar,11)
|
|
@ # Execute Builder and format (re-add newlines, documentation tags etc) -C keeps /**/ comments
|
|
@$(call PRINT_STATUS,"Processing",$(AI_CMD_LIST_DEFINITIONS))
|
|
@echo This might take some time...
|
|
@$(CC) -Xcpluscomm -c $(AI_CMD_BUILDER) $(INCLUDE) -w 581 -E | $(AI_CMD_BUILDER_CONVERT) >> $(AI_CMD_LIST_H2) || (cp $(AI_CMD_LIST_TEMP) $(AI_CMD_LIST_DEFINITIONS) ; echo Error with cmdbuilder ; false) & $(call IncrementProgressBarFromAtRate,12,0.5)
|
|
@$(call DrawProgressBar,98)
|
|
@ # restore command def from temp (no encoding)
|
|
@cp $(AI_CMD_LIST_TEMP) $(AI_CMD_LIST_DEFINITIONS)
|
|
@$(call DrawProgressBar,99)
|
|
@rm $(AI_CMD_LIST_TEMP)
|
|
@$(call DrawProgressBar,100)
|
|
@echo
|
|
@echo Done!
|
|
@echo
|
|
@echo Rebuild AI Command Macros whenever changing aicommands.def.
|
|
@echo "\n$(BELL)$(RESTORESCROLLREGION2)"
|
|
|