Subversion Repositories filter_foundry

Rev

Rev 440 | Rev 526 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
60 peter 1
 
198 daniel-mar 2
Building FilterFoundry with OpenWatcom
3
======================================
60 peter 4
 
437 daniel-mar 5
Tested with OpenWatcom 1.9 and OpenWatcom 2.0 together with Adobe Photoshop SDK 2021.
60 peter 6
 
107 dmarschall 7
 
192 daniel-mar 8
Prerequisites
9
-------------
107 dmarschall 10
 
11
1) Flex and Bison
192 daniel-mar 12
   Available here:
13
   https://sourceforge.net/projects/winflexbison/
107 dmarschall 14
 
15
2) Adobe Photoshop SDK
192 daniel-mar 16
   Available on some Photoshop CDs, or can be downloaded at
17
   https://www.adobe.com/devnet/photoshop/sdk.html
107 dmarschall 18
 
61 peter 19
3) Watcom 1.6beta RC1 or later
192 daniel-mar 20
   Available here:
21
   http://www.openwatcom.org/
22
   After installing, do a reboot, or set the environment manually.
60 peter 23
 
24
 
193 daniel-mar 25
Build setup
26
-----------
107 dmarschall 27
 
193 daniel-mar 28
There is no special build setup required.
437 daniel-mar 29
Just open **wpj\filterfoundry.wpj** in Watcom's IDE and click "Make target".
60 peter 30
 
437 daniel-mar 31
Alternatively, run **wpj\make_watcom.bat** which should do the same.
32
 
192 daniel-mar 33
IMPORTANT: Your path must not contain whitespaces!
34
For example, you must not use "C:\Users\John Doe\SVN\Filter Foundry\".
107 dmarschall 35
 
60 peter 36
 
192 daniel-mar 37
Troubleshooting
38
---------------
107 dmarschall 39
 
192 daniel-mar 40
- Please make sure that you must not have whitespaces in the pathname.
107 dmarschall 41
 
204 daniel-mar 42
- Missing **sdkddkver.h**:
43
  * In OpenWatcom 1.9:
44
    If you get the error message "Fatal Error! 62:  Unable to open 'sdkddkver.h'", please open 
45
    pluginsdk\photoshopapi\photoshop\PITypes.h in your Adobe Photoshop SDK and
46
    comment out the line "#include <sdkddkver.h> // for WINVER".
384 daniel-mar 47
    Alternatively, you can create an empty sdkddkver.h file in your wpj folder.
440 daniel-mar 48
  * Take care that the directory "." is added to the include path of the C-compiler
49
    and the RC-compiler!
107 dmarschall 50
 
51
- It is important that the correct calling convention is used.
52
  The calling convention needs to be set in
53
  Options -> C Compiler Switches -> Memory Model and Processor Switches.
54
  There, select "Pentium Pro stack-based calling" (default is "Pentium Pro register based calling").
55
  The wpj project should already have this setting applied.
56
 
57
- If you receive the error message "lex.yy.c(580): Error! E1009: Expecting ';' but found '1'",
58
  check if the compiler directive "YY_SKIP_YYWRAP" is set.
192 daniel-mar 59
  Go to Options -> C Compiler Switches -> Source switches, and add YY_SKIP_YYWRAP=1 .
107 dmarschall 60
  The wpj project should already have this setting applied.
61
 
192 daniel-mar 62
- The path to the Photoshop SDK and to Win Flex/Bison (PreBuild event)
63
  is already set in the project file. Please note that changing these
437 daniel-mar 64
  paths is a bit complicated. There are several bugs in older versions of OpenWatcom
192 daniel-mar 65
  where you can only make the pre-build-events shorter, but not longer).
66
  You have to edit the WPJ file with a text editor.
67
  Remember how many characters you have added or deleted,
437 daniel-mar 68
  and subtract or add them to the number written above the before-instructions.
69
  This is the number of bytes of the commands.
107 dmarschall 70
 
198 daniel-mar 71
- In the code, it is important that all variables are declared at the
72
  top of the scope (curly brackets) and that there is no executable code or
73
  assignments in between.
192 daniel-mar 74
 
437 daniel-mar 75
Wrong:
198 daniel-mar 76
 
437 daniel-mar 77
    int a;
78
    int b = GetXYZ();
79
    int c;
80
 
81
Correct:
82
 
83
    int a;
84
    int b;
85
    int c;
86
    b = GetXYZ();
87
 
88
 
452 daniel-mar 89
Performance
90
-----------
404 daniel-mar 91
 
452 daniel-mar 92
### In Comparison to Filter Factory, the WPJ build without "-s" (Disable stack depth checking) is super slow!
404 daniel-mar 93
 
452 daniel-mar 94
Example:
404 daniel-mar 95
 
452 daniel-mar 96
Picture 5412x3962 pixels RGBA without transparency
404 daniel-mar 97
 
452 daniel-mar 98
    R: put(rnd(i,255),0),get(0)>255-i+val(0,-128,128)?255:0
99
    G: get(0)>255-i+val(0,-128,128)?255:0
100
    B: get(0)>255-i+val(0,-128,128)?255:0
101
    A: a
102
 
103
Approximate measurements:
104
 
105
    Filter Factory:          1,8 seconds
106
    Foundry VC++ Debug:      20 seconds
107
    Foundry WPJ Optimized:   18 seconds
108
    Foundry WPJ "-s" opt.:   3,2 seconds
109
    Foundry Vc++ Release:    2,8 seconds
110
    Foundry WingW Release:   2,8 seconds
111
 
112
### What does "Fastest possible code (-otexan)" mean?
113
 
404 daniel-mar 114
"otexan" contains "s" (because "ox" is equal to "obmiler" and "s").
115
 
116
So, "-otexan" means:
117
 
118
- Branch prediction (-ob)
119
- Loop optimizations (-ol)
120
- In-line intrinsic functions (-oi)
121
- Instruction scheduling (-or)
122
- Math optimizations (-om)
123
- Expand function in-line (-oe)
124
- Disable stack depth checking (-s)
125
 
452 daniel-mar 126
### Attention! Some optimizations break the code:
404 daniel-mar 127
 
452 daniel-mar 128
As soon as "Disable stack depth checking" is enabled, the code crashes
129
on some combinations of machines and Photoshop versions.
404 daniel-mar 130
 
452 daniel-mar 131
Win98 VM + Photoshop 3.0.x: Clicking any button (Make, Load, Cancel) will cause SegFault.
132
Win98 VM + Photoshop 7.0 : No problem
133
Win10 PC + Photoshop 3.0.x: No problem.
404 daniel-mar 134
 
135
I haven't been able to detect why/where the stack is overloaded.
136
If anyone has an idea, please contact me.
137
Maybe the initial stack size is just too small?
138
Because the code should be OK - Application Verifier has not detected anything wrong.
139
 
140
https://open-watcom.github.io/open-watcom-v2-wikidocs/c_readme.html
141
http://www.azillionmonkeys.com/qed/watfaq.shtml (Q19)
142
 
452 daniel-mar 143
However, if we add `-sg` (generate calls to grow the stack), it seems to work.
404 daniel-mar 144
 
452 daniel-mar 145
 
60 peter 146
Remarks
192 daniel-mar 147
-------
60 peter 148
 
192 daniel-mar 149
flex and bison are currently invoked as a batch process.
60 peter 150
This is defined in the menu File->Before.
192 daniel-mar 151
The IDE fails to build the project when filenames contain more than one dot.
61 peter 152
Therefore the output files of bison and lex are renamed.
60 peter 153
There is no error checking done.
154
Probably it would be better to write a small wmake file for this purpose.
452 daniel-mar 155
 
156
C-switches which are not recognized by the OpenWatcom IDE:
157
 
158
    -aq  turn off qualifier mismatch warning for const/volatile
159
    -sg  generate calls to grow the stack