Introducing 

Prezi AI.

Your new presentation assistant.

Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.

Loading content…
Loading…
Transcript

M4 Code

1 m4_divert(-1)

2

3 ### NOTE: essuming using --prefix-builtins (-P), to seperate from functions such as substr which are common to m4 and std.

4

5

6 ### --- log message structure - developer point of view ---

7 YAFL_LOG( <level>, "module", <params>... )

8

9 <level> - either: DEBUG, ERROR, WARNNG, INFO

10 e.g.: YAFL_LOG( DEBUG, "DFM", var1, "text1", "text2", var2, ... )

11

12 ### --- log message structure - compiler point of view (the result of the processing ---

13 yafl::log::Msg{ <file-id>, __LINE__, <debug-level>,std::this_thread::get_id(),<module>,...}

14 <file-id> - as defined when calling m4. currently: # m4 yaflpp.m4 -DCOMPILED_FILE=$(md5sum <file> head -c8) <file>

15 <debug-level> - see values in the definitions below for debug values

16 <module> - computed as any other string

17

18 0x269aab6c,__LINE__,0xcdcd0000,std::this_thread::get_id(),0xbeef000 ,var1,0xbeef0001,0xbeef0002,var2,var3,0xbeef0005,var4

23 ##### CONSTANTS #####

24

25 ### -- TRUE, FALSE --

26 m4_define(YAFL_TRUE, 1)

27 m4_define(YAFL_FALSE, 0)

28

29 ### -- log levels --

30 m4_define(YAFL_DEBUG, 0x00000000ababab00)

31 m4_define(YAFL_ERROR, 0x00000000ababab01)

32 m4_define(YAFL_WARNING, 0x00000000ababab02)

33 m4_define(YAFL_INFO, 0x00000000ababab03)

34

35 ### -- marks --

36 m4_define(END_OF_RECORD, 0xcdcdcdcdcdcdcdcd)

37

38

39 ### -- THE_HEX --

40 m4_define(THE_HEX,0)

41

42 ### -- area CODES --

43 m4_define( ORIG_AREA, 10)

44 m4_define( CODE_AREA, 10)

45 m4_define( MAPP_AREA, 20)

46 m4_define( NULL_AREA, -1)

47

101 ### -- _map1 --

102 ### map1 stand for: _map one_ pair

103 ### maps a number to a string.

104 ### outputs the map to the _mapp_area

105 ### and the number to the code_area

106 ### e.g.:

107 ### _map1( 0x4534, "my name is ran" )

108 ### => map-area: 0xbeef4534 - "my name is ran"

109 ### => code-area: 0xbeef4534

110

111 m4_define( _map1,

112 [*m4_ifelse(

113 m4_regexp($2,".*"), 0,

114 [*_map_area_dnl('_beef($1)':$2)*][*_map_comma*]

115 [*_code_area_dnl(_beef($1))*]

116 [*m4_define([*THE_HEX*],_next_hex($1))*],m4_dnl

117 [*_code_area_dnl($2)*]

118 )*]m4_dnl

119 )m4_dnl

120

add_custom_command(

OUTPUT ${generator_sh_file}

COMMAND

${CMAKE_COMMAND}

-DGENERATOR_IN_FILE=${YAFL_SOURCE_DIR}/m4/generate_code_and_map.sh.in

-DGENERATOR_OUT_FILE=${generator_sh_file}

-DSOURCE_FILE=${source_file}

-DTARGET_FILE=${target_file}

-DMAP_TARGET_FILE=${map_target_file}

-DYAFL_PREPROCESSOR_DIR=${YAFL_SOURCE_DIR}/m4/

-P ${YAFL_SOURCE_DIR}/custom.build/configure_generator.cmake

DEPENDS ${source_file}

)

add_custom_command(

OUTPUT ${target_file}

COMMAND ${generator_sh_file}

MAIN_DEPENDENCY ${generator_sh_file}

DEPENDS ${source_file}

)

[12:56]ran@ran-betalfa-2017/gcc>make logger_inc

Scanning dependencies of target generator-logger_inc-log.h

[ 33%] Generating log.h.gen.sh

[ 66%] Generating log.h

[ 66%] Built target generator-logger_inc-log.h

Scanning dependencies of target generator-logger_inc-m4log_defs.h

[100%] Generating m4log_defs.h.gen.sh

[100%] Generating m4log_defs.h

[100%] Built target generator-logger_inc-m4log_defs.h

Scanning dependencies of target logger_inc

[100%] Built target logger_inc

Cmake Code

#!/bin/bash

# expecting the following variables to be set by the caller to cmake-configure

# SOURCE_FILE == ${SOURCE_FILE}

# TARGET_FILE == ${TARGET_FILE}

# MAP_TARGET_FILE == ${MAP_TARGET_FILE}

# YAFL_PREPROCESSOR_DIR == ${YAFL_PREPROCESSOR_DIR}

fileId=$(md5sum ${SOURCE_FILE} head -c16)

echo -n "'0x$fileId':[\"${SOURCE_FILE}\",{" >${MAP_TARGET_FILE}

varForWait=$(\

/bin/m4 \

--prefix-builtins \

-DCOMPILED_FILE=$fileId \

${YAFL_PREPROCESSOR_DIR}/yaflpp.m4 \

${YAFL_PREPROCESSOR_DIR}/modules.m4 \

${SOURCE_FILE} \

\

1>/dev/null tee \

>(${YAFL_PREPROCESSOR_DIR}/code_area.sed >${TARGET_FILE}) \

>(${YAFL_PREPROCESSOR_DIR}/map_area.sed >>${MAP_TARGET_FILE}))

wait

echo "}]," >>${MAP_TARGET_FILE}

Learn more about creating dynamic, engaging presentations with Prezi