I have used for some time 3790.1830 and would like to migrate to 6000. There are some build errors:
errors in directory c:\dis_3.4.1\src\common\dis_irm_lib
NMAKE : U1234: ‘SXS_BUILD’ (c:\winddk\6000\bin\makefile.def) Must specify SXS_ASSEMBLY_LANGUAGE or SXS_ASSEMBLY_LANGUAGE
_INDEPENDENT.
NMAKE : warning U4004: too many rules for target ‘c:\dis_3.4.1\src\common\dis_irm_lib\objfre_wnet_amd64\amd64_objects.mac’
I can spend some time to fix this stuff, but I’m looking for a quick fix. Perhaps this is a bug of some kind, because I don’t see SXS_ASSEMBLY_LANGUAGE documented on MSDN. The fix should not require modifying the sources file. I have plenty of them.
Let me know if any of you had this problem.
Can you post your SOURCES and MAKEFILE.INC?
Do you have any ‘exotic’ operations or build rules defined in either SOURCES
or MAKEFILE.INC?
Do you have any files in your sources dir which have the same basename as a
.c/.cpp/.rc file *and* happen to have an inference rule from . to .obj
or .res in makefile.def which might be confusing NMAKE into trying to infer
the wrong dependency? Take a look in objfre_wnet_amd64\amd64_objects.mac
and see what BUILD thinks it is trying to create.
You might try removing all of the files listed in your SOURCES= macro and
add back one at a time until the error appears.
For problems like this, I generally dive in and read MAKEFILE.NEW
(MAKEFILE.DEF) until my head hurts. It is usually the only way.
Good Luck,
-dave
-----Original Message-----
From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Calin Iaru
Sent: Monday, August 25, 2008 5:43 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] build error on Win64 with new 6000 WDK
I have used for some time 3790.1830 and would like to migrate to 6000. There
are some build errors:
errors in directory c:\dis_3.4.1\src\common\dis_irm_lib
NMAKE : U1234: ‘SXS_BUILD’ (c:\winddk\6000\bin\makefile.def) Must specify
SXS_ASSEMBLY_LANGUAGE or SXS_ASSEMBLY_LANGUAGE
_INDEPENDENT.
NMAKE : warning U4004: too many rules for target
‘c:\dis_3.4.1\src\common\dis_irm_lib\objfre_wnet_amd64\amd64_objects.mac’
I can spend some time to fix this stuff, but I’m looking for a quick fix.
Perhaps this is a bug of some kind, because I don’t see
SXS_ASSEMBLY_LANGUAGE documented on MSDN. The fix should not require
modifying the sources file. I have plenty of them.
Let me know if any of you had this problem.
—
NTDEV is sponsored by OSR
For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars
To unsubscribe, visit the List Server section of OSR Online at
http://www.osronline.com/page.cfm?name=ListServer
Could this be a header versioning issue? We did go to header versioning between 3790 and 6000.
Dave's already given the best answer, unfortunately - starting digging in makefile.new. Although I count my almost perfect lack of
knowledge about SXS & MANIFEST among my blessings, I've spent plenty of time in makefile.new for other reasons, and I saw this a
couple of weeks ago in the comments, essentially some sort of documentation for using SXS with BUILD, I guess:
My best guess is to try adding SXS_ASSEMBLY_LANGUAGE=0409 (or 0000) to your sources file,
and then see what else it wants. It sounds like you'll need:
SXS_APPLICATION_MANIFEST=
SXS_MANIFEST required
This is the source file that contains your manifest.
It must end in .manifest.
It is always preprocessed. Available macros include:
SXS_ASSEMBLY_NAME
SXS_ASSEMBLY_VERSION
SXS_ASSEMBLY_LANGUAGE
SXS_PROCESSOR_ARCHITECTURE
SXS_ASSEMBLY_NAME=
SXS_ASSEMBLY_NAME and/or SXS_SHORT_ASSEMBLY_NAME required
One can be generated from the other.
SXS_SHORT_ASSEMBLY_NAME is used where 8.3 limits apply, like on the product CD.
Both of these macros can be hierarchical, using dot, dash, or underscore to seperate
elements. SXS_SHORT_ASSEMBLY_NAME should actually only contain 8 character elements.
SXS_ASSEMBLY_LANGUAGE=
SXS_ASSEMBLY_LANGUAGE or SXS_ASSEMBLY_LANGUAGE_INDEPENDENT required
SXS_ASSEMBLY_LANGUAGE_INDEPENDENT is defined or not.
SXS_ASSEMBLY_LANGUAGE is four digits like
0409 for English US
0009 for English
0000 for language independent
We should make this easier as is done for resources (LANGUAGE => RCCODEPAGE), but for now we don't.
Just to reiterate, I haven't any idea of what SXS really even is, so this is just a guess, but it would appear that this is as close
to documentation as you're going to get for this. I don't have the 3790.1830 DDK installed to compare it to.
Good luck,
mm
SideBySide (SXS) Build
Step by Step instructions
For building a monolithic application, foo.ext (where .ext is usually .exe but for example .scr).
For building an application that hosts arbitrary (3rd party) code.
For building a single file component like comctl32.dll.
For building a multiple file component.
Reference
An assembly contains a manifest and one or more files, usually .dlls.
The manifest can be in a resource in one of the files, or it can be in a seperate
.manifest file. For purposes of fitting on an 8.3 CD, .man is allowed.
Build.exe is generally limited to building one .dll per directory, so
you can be building files for an assembly without building a manifest.
To build/binplace a manifest:
SXS_MANIFEST required
This is the source file that contains your manifest.
It must end in .manifest.
It is always preprocessed. Available macros include:
SXS_ASSEMBLY_NAME
SXS_ASSEMBLY_VERSION
SXS_ASSEMBLY_LANGUAGE
SXS_PROCESSOR_ARCHITECTURE
SXS_MANIFEST_IN_RESOURCES optional
This is defined or not, so you just say
SXS_MANIFEST_IN_RESOURCES=
or don't say anything.
SXS_ASSEMBLY_NAME and/or SXS_SHORT_ASSEMBLY_NAME required
One can be generated from the other.
SXS_SHORT_ASSEMBLY_NAME is used where 8.3 limits apply, like on the product CD.
Both of these macros can be hierarchical, using dot, dash, or underscore to seperate
elements. SXS_SHORT_ASSEMBLY_NAME should actually only contain 8 character elements.
SXS_ASSEMBLY_VERSION optional, defaults to 5.1.
SXS_ASSEMBLY_LANGUAGE or SXS_ASSEMBLY_LANGUAGE_INDEPENDENT required
SXS_ASSEMBLY_LANGUAGE_INDEPENDENT is defined or not.
SXS_ASSEMBLY_LANGUAGE is four digits like
0409 for English US
0009 for English
0000 for language independent
We should make this easier as is done for resources (LANGUAGE => RCCODEPAGE), but for now we don't.
To build/binplace a file into an assembly, a subset of the information
needed for manifests is needed:
SXS_ASSEMBLY_NAME and/or SXS_SHORT_ASSEMBLY_NAME
SXS_ASSEMBLY_VERSION
SXS_ASSEMBLY_LANGUAGE or SXS_ASSEMBLY_LANGUAGE_INDEPENDENT
There are restrictions on the values of these macros and not all restrictions
are currently enforced by the build. Enforcement is in verify.src.
!if "$(ALT_PROJECT)" == "WOW6432" || "$(ALT_PROJECT_TARGET)" == "WOW6432"
SXS_PDB_WOW6432_W_PREFIX=w
SXS_LOG_WOWBINS_W_ASMS_PREFIX=w
SXS_LOG_BINPLACE_WOW6432_PREFIX=wow6432^\
SXS_WOW6432=1
!endif
There's two meta-modes of operation in SXS - Application manifest mode and component manifest mode.
Depending on what you have defined in your sources file, you can simplify all of the build process
down to a very minimal set of commands in your sources files and still get Fusionization goodness.
Example:
SXS_APPLICATION_MANIFEST=MyAppManifest.manifest
(or)
SXS_COMPONENT_MANIFEST=MyComponentManifest.manifest
See the code below for what gets defined based on each - it's more or less the defaults, but
explicitly spelled out.
xxxxx@microsoft.com wrote:
Could this be a header versioning issue? We did go to header versioning between 3790 and 6000.
When we compile with 3790.1830, we use a makefile that is a pivot to all the projects. The command line is “build -c -nmake /f -nmake c:\makefile”. From what I can see, 6000 needs the makefile in the same directory.
----- Original Message ----
From: Calin Iaru
To: Windows System Software Devs Interest List
Sent: Monday, August 25, 2008 11:42:38 AM
Subject: [ntdev] build error on Win64 with new 6000 WDK
I have used for some time 3790.1830 and would like to migrate to 6000. There are some build errors:
errors in directory c:\dis_3.4.1\src\common\dis_irm_lib
NMAKE : U1234: ‘SXS_BUILD’ (c:\winddk\6000\bin\makefile.def) Must specify SXS_ASSEMBLY_LANGUAGE or SXS_ASSEMBLY_LANGUAGE
_INDEPENDENT.
NMAKE : warning U4004: too many rules for target ‘c:\dis_3.4.1\src\common\dis_irm_lib\objfre_wnet_amd64\amd64_objects.mac’
I can spend some time to fix this stuff, but I’m looking for a quick fix. Perhaps this is a bug of some kind, because I don’t see SXS_ASSEMBLY_LANGUAGE documented on MSDN. The fix should not require modifying the sources file. I have plenty of them.
Let me know if any of you had this problem.
—
NTDEV is sponsored by OSR
For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars
To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer
I don’t know why this didn’t cause a problem on 3790.1830, but it’s not the strangest thing ever that a command line like the one
below fails. Try replacing:
-nmake /f -nmake c:\makefile
with:
-name “-f c:\makefile”
Given that you are not using BUILD in the standard fashion, I’m not sure that anything I said in an earlier post about adding things
to sources to handle SXS applies.
Why are you doing this (/f c:\makefile)? Have you looked at the ‘BUILD Utility Files’ section in the WDK docs? There are a number
of ways to cause BUILD to include some sort of ‘makefile’ at a number of different points in the BUILD process. I’m not sure
exactly which technique you should use, but I would start by reading the ‘makefile0’ entry under ‘BUILD Utility Files.’ Otherwise,
here are some names that I know are associated with the somewhat black art of getting BUILD to process a makefile in a manner that
might be compatible with what any sane person who knows that BUILD uses NMAKE, knows NMAKE, and has seen a SOURCES file would expect:
FILES:
makefile0
makefile.inc
MACROS:
NTTARGETFILE0
NTTARGETFILE1
NTTARGETFILE2
NTTARGETFILES
The documentation totally blows. It’s much worse than the usual cryptic and vague; it is largely incorrect in places, because it
implies that BUILD files (SOURCES, et. c.) work like an NMAKE makefile by providing links to NMAKE documentation, which is not
always correct for BUILD.
Good luck,
mm
Calin Iaru wrote:
When we compile with 3790.1830, we use a makefile that is a pivot to all the projects. The command line is “build -c -nmake /f -nmake c:\makefile”. From what I can see, 6000 needs the makefile in the same directory.
----- Original Message ----
From: Calin Iaru
> To: Windows System Software Devs Interest List
> Sent: Monday, August 25, 2008 11:42:38 AM
> Subject: [ntdev] build error on Win64 with new 6000 WDK
>
> I have used for some time 3790.1830 and would like to migrate to 6000. There are some build errors:
>
> errors in directory c:\dis_3.4.1\src\common\dis_irm_lib
> NMAKE : U1234: ‘SXS_BUILD’ (c:\winddk\6000\bin\makefile.def) Must specify SXS_ASSEMBLY_LANGUAGE or SXS_ASSEMBLY_LANGUAGE
> _INDEPENDENT.
> NMAKE : warning U4004: too many rules for target ‘c:\dis_3.4.1\src\common\dis_irm_lib\objfre_wnet_amd64\amd64_objects.mac’
>
>
> I can spend some time to fix this stuff, but I’m looking for a quick fix. Perhaps this is a bug of some kind, because I don’t see SXS_ASSEMBLY_LANGUAGE documented on MSDN. The fix should not require modifying the sources file. I have plenty of them.
> Let me know if any of you had this problem.
>
>
>
>
> —
> NTDEV is sponsored by OSR
>
> For our schedule of WDF, WDM, debugging and other seminars visit:
> http://www.osr.com/seminars
>
> To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer
>
>
>
>
>