Changed the build system to treat nasm as a first-class citizen, making it produce...
[reactos.git] / reactos / rules.mak
1 #
2 # Important
3 #
4 .EXPORT_ALL_VARIABLES:
5
6 # Windows is default host environment
7 ifeq ($(HOST),)
8 HOST = mingw32-windows
9 endif
10
11 # Build map files which includes source and asm code
12 FULL_MAP = yes
13
14 # Default to no PCH support
15 ifeq ($(ROS_USE_PCH),)
16 ROS_USE_PCH = no
17 endif
18
19 # uncomment if you use bochs and it displays only 30 rows
20 # BOCHS_30ROWS = yes
21
22 #
23 # Choose various options
24 #
25 ifeq ($(HOST),mingw32-linux)
26 NASM_FORMAT = win32
27 PREFIX = mingw32-
28 EXE_POSTFIX :=
29 EXE_PREFIX := ./
30 DLLTOOL = $(PREFIX)dlltool --as=$(PREFIX)as
31 NASM = nasm
32 DOSCLI =
33 FLOPPY_DIR = /mnt/floppy
34 SEP := /
35 PIPE :=
36 endif
37
38 ifeq ($(HOST),mingw32-windows)
39 NASM_FORMAT = win32
40 PREFIX =
41 EXE_PREFIX :=
42 EXE_POSTFIX := .exe
43 DLLTOOL = $(PREFIX)dlltool --as=$(PREFIX)as
44 NASM = nasmw
45 DOSCLI = yes
46 FLOPPY_DIR = A:
47 SEP := \$(EMPTY_VAR)
48 PIPE := -pipe
49 endif
50
51 # TOPDIR is used by make bootcd but not defined anywhere. Usurp pointed out
52 # that it has the same meaning as PATH_TO_TOP.
53 TOPDIR = $(PATH_TO_TOP)
54
55 # Use environment var ROS_INSTALL to override default install dir
56 ifeq ($(ROS_INSTALL),)
57 ifeq ($(HOST),mingw32-windows)
58 INSTALL_DIR = C:/reactos
59 else
60 INSTALL_DIR = $(PATH_TO_TOP)/reactos
61 endif
62 else
63 INSTALL_DIR = $(ROS_INSTALL)
64 endif
65
66 # Directory to build a bootable CD image in
67 BOOTCD_DIR=$(TOPDIR)/../bootcd/disk
68
69 CC = $(PREFIX)gcc
70 CXX = $(PREFIX)g++
71 HOST_CC = gcc
72 HOST_CXX = g++
73 HOST_AR = ar
74 HOST_NM = nm
75 LD = $(PREFIX)ld
76 NM = $(PREFIX)nm
77 OBJCOPY = $(PREFIX)objcopy
78 STRIP = $(PREFIX)strip
79 AS = $(PREFIX)gcc -c -x assembler-with-cpp
80 CPP = $(PREFIX)cpp
81 AR = $(PREFIX)ar
82 RC = $(PREFIX)windres
83 WRC = $(WINE_TOP)/tools/wrc/wrc
84 OBJCOPY = $(PREFIX)objcopy
85 OBJDUMP =$(PREFIX)objdump
86 TOOLS_PATH = $(PATH_TO_TOP)/tools
87 W32API_PATH = $(PATH_TO_TOP)/w32api
88 CP = $(TOOLS_PATH)/rcopy
89 RM = $(TOOLS_PATH)/rdel
90 RLINE = $(TOOLS_PATH)/rline
91 RMDIR = $(TOOLS_PATH)/rrmdir
92 RMKDIR = $(TOOLS_PATH)/rmkdir
93 RSYM = $(TOOLS_PATH)/rsym
94 RTOUCH = $(TOOLS_PATH)/rtouch
95 REGTESTS = $(TOOLS_PATH)/regtests
96 MC = $(TOOLS_PATH)/wmc/wmc
97 CABMAN = $(TOOLS_PATH)/cabman/cabman
98 WINEBUILD = $(TOOLS_PATH)/winebuild/winebuild
99 WINE2ROS = $(TOOLS_PATH)/wine2ros/wine2ros
100 XSLTPROC = xsltproc
101
102 STD_CFLAGS = -I$(PATH_TO_TOP)/include -I$(W32API_PATH)/include -pipe -march=i386 -D_M_IX86
103 STD_CPPFLAGS = $(STD_CFLAGS)
104 STD_ASFLAGS = -I$(PATH_TO_TOP)/include -I$(W32API_PATH)/include -D__ASM__ -D_M_IX86
105 STD_RCFLAGS = --include-dir $(PATH_TO_TOP)/include --include-dir $(W32API_PATH)/include
106 STD_NFLAGS = -f win32
107
108 # Developer Kits
109 DK_PATH=$(PATH_TO_TOP)/dk
110 # Native and kernel mode
111 DDK_PATH=$(DK_PATH)/nkm
112 DDK_PATH_LIB=$(DDK_PATH)/lib
113 DDK_PATH_INC=$(PATH_TO_TOP)/include
114 # Win32
115 SDK_PATH=$(DK_PATH)/w32
116 SDK_PATH_LIB=$(SDK_PATH)/lib
117 SDK_PATH_INC=$(PATH_TO_TOP)/include
118 # POSIX+
119 XDK_PATH=$(DK_PATH)/psx
120 XDK_PATH_LIB=$(XDK_PATH)/lib
121 XDK_PATH_INC=$(XDK_PATH)/include
122
123 # Wine Integration
124 WINE_PATH=$(PATH_TO_TOP)/../wine
125 WINE_PATH_LIB=$(WINE_PATH)/lib
126 WINE_PATH_INC=$(WINE_PATH)/include
127
128 # Posix+ Integration
129 POSIX_PATH=$(PATH_TO_TOP)/../posix
130 POSIX_PATH_LIB=$(POSIX_PATH)/lib
131 POSIX_PATH_INC=$(POSIX_PATH)/include
132
133 # OS/2 Integration
134 OS2_PATH=$(PATH_TO_TOP)/../os2
135 OS2_PATH_LIB=$(OS2_PATH)/lib
136 OS2_PATH_INC=$(OS2_PATH)/include
137
138 # Other systems integration
139 ROOT_PATH=$(PATH_TO_TOP)/..
140 REGTESTS_PATH_INC=$(PATH_TO_TOP)/regtests/shared