# Automatic configuration of the UCW Library
-# (c) 2005 Martin Mares <mj@ucw.cz>
+# (c) 2005--2007 Martin Mares <mj@ucw.cz>
# (c) 2006 Robert Spalek <robert@ucw.cz>
### OS ###
sub parse_cpuinfo() {
my @cpu;
- if (IsSet("CONFIG_EXACT_CPU")) {
- if (IsSet("CONFIG_LINUX")) {
- @cpu = parse_cpuinfo_linux();
- } elsif (IsSet("CONFIG_DARWIN")) {
- @cpu = parse_cpuinfo_darwin();
- }
+ if (IsSet("CONFIG_LINUX")) {
+ @cpu = parse_cpuinfo_linux();
+ } elsif (IsSet("CONFIG_DARWIN")) {
+ @cpu = parse_cpuinfo_darwin();
}
$cpu[0] = "" if !defined $cpu[0];
$cpu[1] = 0 if !defined $cpu[1];
UnSet("CPU_BIG_ENDIAN");
Set("CPU_ALLOW_UNALIGNED");
Set("CPU_STRUCT_ALIGN" => 4);
- if (my ($vendor, $family, $model) = parse_cpuinfo()) {
+ if (IsSet("CONFIG_EXACT_CPU")) {
+ my ($vendor, $family, $model) = parse_cpuinfo();
# Try to understand CPU vendor, family and model [inspired by MPlayer's configure script]
if ($vendor eq "AuthenticAMD") {
if ($family >= 6) {
}
}
Log (($arch ne "") ? "(using /proc/cpuinfo) " : "(don't understand /proc/cpuinfo) ");
+ return $arch;
+ } else {
+ return "default";
}
- return $arch;
} elsif ($mach eq "amd64") {
Set("CPU_AMD64");
Set("CPU_64BIT_POINTERS");
UnSet("CPU_BIG_ENDIAN");
Set("CPU_ALLOW_UNALIGNED");
Set("CPU_STRUCT_ALIGN" => 8);
- if (my ($vendor, $family, $model) = parse_cpuinfo()) {
+ if (IsSet("CONFIG_EXACT_CPU")) {
# In x86-64 world, the detection is somewhat easier so far...
+ my ($vendor, $family, $model) = parse_cpuinfo();
if ($vendor eq "AuthenticAMD") {
$arch = "athlon64";
} elsif ($vendor eq "GenuineIntel") {
$arch = "nocona";
}
Log (($arch ne "") ? "(using /proc/cpuinfo) " : "(don't understand /proc/cpuinfo) ");
+ return $arch;
+ } else {
+ return "default";
}
- return $arch;
} else {
- return "";
+ return "unknown";
}
});
+if (Get("CPU_ARCH") eq "unknown") {
+ Warn "CPU architecture not recognized, using defaults, keep fingers crossed.\n";
+}
+
### Compiler and its Options ###
# C flags: tell the compiler we're speaking C99, and disable common symbols
# C optimizations
Set("COPT" => '-O2');
-if (Get("CPU_ARCH") eq "") {
- Warn "CPU type not recognized, using defaults, keep fingers crossed.";
-} else {
+if (Get("CPU_ARCH") ne "unknown" && Get("CPU_ARCH") ne "default") {
Append("COPT", '-march=$(CPU_ARCH)');
}
# Extra flags for compiling and linking shared libraries
Set("CSHARED" => '-fPIC');
-Set("LSHARED" => '-shared -Wl,-soname,lib/$(@F)');
+if (IsSet("CONFIG_DARWIN")) {
+ Set("LSHARED" => '-dynamiclib -install_name lib/$(@F) -undefined dynamic_lookup');
+} else {
+ Set("LSHARED" => '-shared -Wl,-soname,lib/$(@F)');
+}
# Extra switches depending on GCC version:
if ($gccver == 3000) {
Append("LIBS" => "-L/sw/lib");
Append("COPT" => "-I/sw/include");
# Fill in some constants not found in the system header files
- Set("PAGE_SIZE" => `sysctl -n hw.pagesize`);
- Set("SOL_TCP" => 6); #missing in /usr/include/netinet/tcp.h
+ Set("SOL_TCP" => 6); # missing in /usr/include/netinet/tcp.h
}
+# Determine page size
+Test("CPU_PAGE_SIZE", "Determining page size", sub {
+ my $p;
+ if (IsSet("CONFIG_DARWIN")) {
+ $p = `sysctl -n hw.pagesize`;
+ defined $p or Fail "sysctl hw.pagesize failed";
+ } elsif (IsSet("CONFIG_LINUX")) {
+ $p = `getconf PAGE_SIZE`;
+ defined $p or Fail "getconf PAGE_SIZE failed";
+ }
+ chomp $p;
+ return $p;
+});
+
if (IsSet("CONFIG_LARGE_FILES") && IsSet("CONFIG_LINUX")) {
# Use 64-bit versions of file functions
Set("CONFIG_LFS");
# Decide how will lib/partmap.c work
Set("PARTMAP_IS_MMAP") if IsSet("CPU_64BIT_POINTERS");
+# Option for lib/mempool.c
+Set("POOL_IS_MMAP");
+
# If debugging memory allocations:
#LIBS+=-lefence
#CDEBUG+=-DDEBUG_DMALLOC